diff --git a/_lib/collections/ItsLayerCollection.js b/_lib/collections/ItsLayerCollection.js
deleted file mode 100644
index f82d63ac42233ec3ff5f706136587bdfa5283d83..0000000000000000000000000000000000000000
--- a/_lib/collections/ItsLayerCollection.js
+++ /dev/null
@@ -1,154 +0,0 @@
-'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 ? "symbol" : typeof 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; }; }(); /**
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Created by gavorhes on 12/14/2015.
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      */
-
-var _LayerItsInventory = require('../layers/LayerItsInventory');
-
-var _LayerItsInventory2 = _interopRequireDefault(_LayerItsInventory);
-
-var _colors = require('../util/colors');
-
-var colors = _interopRequireWildcard(_colors);
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-var nm = (0, _provide2.default)('collections');
-
-var itsConfig = [{
-    name: 'Camera',
-    itsType: 'cctv',
-    minZoom: 11,
-    itsIconConfig: {
-        prop: 'owner',
-        defaultName: 'WisDOT',
-        defaultIcon: 'cctv.png',
-        iconArray: [['City of Madison', 'Madison', 'cctv-mad.png']]
-    }
-}, {
-    name: 'Message Signs',
-    itsType: 'DMS',
-    minZoom: 11,
-    itsIconConfig: {
-        prop: 'dmsType',
-        defaultName: 'DMS',
-        defaultIcon: 'dms.png',
-        iconArray: [['pcms', 'PCMS', 'pcms.png']]
-    }
-}, { name: 'ATR', itsType: 'atr', minZoom: 8, itsIcon: 'atr.png', visible: false }, { name: 'Lighting', itsType: 'light', minZoom: 16, itsIcon: 'streetlight.png', visible: false, onDemand: true }, { name: 'Bluetooth', itsType: 'blue', minZoom: 10, itsIcon: 'bluetooth.png', visible: false }, { name: 'Cabinets', itsType: 'cabinet', minZoom: 10, itsIcon: 'cabinet.png', visible: false }, { name: 'Hut', itsType: 'hut', minZoom: 10, itsIcon: 'hut.png', visible: false }, { name: 'Vault', itsType: 'vault', minZoom: 13, itsIcon: 'vault.png', visible: false }, { name: 'Advisory Radio', itsType: 'har', minZoom: 10, itsIcon: 'har.png', visible: false }, {
-    name: 'Loop Detectors',
-    itsType: 'loop',
-    legendCollapse: true,
-    minZoom: 14,
-    visible: false,
-    itsIconConfig: {
-        prop: 'dtctrType',
-        defaultName: 'Other',
-        defaultIcon: 'loopdetectorother.png',
-        iconArray: [['detector', 'Detector', 'loopdetector.png'], ['long', 'Long', 'loopdetectorlong.png'], ['zone', 'Zone', 'loopdetectorzone.png']]
-    },
-    onDemand: true
-}, { name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false }, { name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true }, { name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false }, { name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false }, { name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false }, { name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true }, { name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false }, {
-    name: 'Trench',
-    itsType: 'trench',
-    onDemand: true,
-    visible: false,
-    onDemandDelay: 500,
-    minZoom: 15,
-    legendCollapse: true,
-    itsLineConfig: {
-        prop: 'owner',
-        //defaultName: 'Other',
-        //defaultWidth: 7,
-        defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),
-        lineArray: [['WisDOT', 'WisDOT', colors.hexAlphaToRgbOrRgba('#FF032F', 0.7)], ['WIN', 'WIN', colors.hexAlphaToRgbOrRgba('#FFC632', 0.7)], ['USXchange', 'USXchange', colors.hexAlphaToRgbOrRgba('#2DFF46', 0.7)], ['AT&T', 'AT&T', colors.hexAlphaToRgbOrRgba('#ff2be5', 0.7)], ['Touch America', 'Touch America', colors.hexAlphaToRgbOrRgba('#52f3ff', 0.7)], ['Qwest', 'Qwest', colors.hexAlphaToRgbOrRgba('#9278ff', 0.7)], ['McLeodUSA', 'McLeodUSA', colors.hexAlphaToRgbOrRgba('#2926FF', 0.7)], ['CINC', 'CINC', colors.hexAlphaToRgbOrRgba('#CB00FF', 0.7)], ['City of Madison', 'Madison', colors.hexAlphaToRgbOrRgba('#000380', 0.7)]]
-    }
-}];
-
-var ItsLayerCollection = function () {
-
-    /**
-     * Create a collection of all ITS layers
-     * @param {ol.Map} theMap the openlayers map
-     * @param {Array} [exclude=[]] array of Its layer identifiers to exclude
-     *
-     * BLUE Bluetooth Detector - Bluetooth Detector
-     * CABINET Cabinets - The cabinets
-     * CCTV Camera - Traffic Cameras
-     * HUT Communication Hut - Communication Hut
-     * VAULT Communication Vault - The communication vaults
-     * HAR Highway Advisory Radio - Advisory Radios
-     * LIGHT Lighting - Lighting
-     * LOOP Loop Detectors - Loop Detectors
-     * DMS Message Board - Message Boards and Signs
-     * MICROWAVE Microwave Detector - Microwave Detectors
-     * PULL Pull Box - A pull box
-     * RWIS RWIS - Road weather information system
-     * GATE Ramp Gate - The ramp Gates
-     * METER Ramp Meter - The ramp meters
-     * SIGNAL Signal - Traffic Signal
-     * TOWER Tower - The towers
-     * TRENCH
-     */
-
-    function ItsLayerCollection(theMap, exclude) {
-        _classCallCheck(this, ItsLayerCollection);
-
-        this.map = theMap;
-        this._layers = [];
-
-        exclude = (typeof exclude === 'undefined' ? 'undefined' : _typeof(exclude)) == 'object' ? exclude : [];
-
-        for (var i = 0; i < itsConfig.length; i++) {
-            var lyrConfig = itsConfig[i];
-            var addLayer = true;
-
-            for (var j = 0; j < exclude.length; j++) {
-                if (exclude[j] == lyrConfig.itsType) {
-                    addLayer = false;
-                    break;
-                }
-            }
-
-            if (addLayer) {
-                var inventLyr = new _LayerItsInventory2.default(lyrConfig);
-                this['map'].addLayer(inventLyr.olLayer);
-                this._layers.push(inventLyr);
-            }
-        }
-    }
-
-    /**
-     * Return the array of layers in this collection
-     * @returns {Array<LayerItsInventory>} an array of layers
-     */
-
-
-    _createClass(ItsLayerCollection, [{
-        key: 'layers',
-        get: function get() {
-            return this._layers;
-        }
-    }]);
-
-    return ItsLayerCollection;
-}();
-
-nm.ItsLayerCollection = ItsLayerCollection;
-exports.default = ItsLayerCollection;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/collections/LayerLegend.js b/_lib/collections/LayerLegend.js
deleted file mode 100644
index 1e7ba3e16063e48dc3c4466e090ea29fb53ae475..0000000000000000000000000000000000000000
--- a/_lib/collections/LayerLegend.js
+++ /dev/null
@@ -1,445 +0,0 @@
-'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; }; }(); /**
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Created by gavorhes on 12/16/2015.
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      */
-
-
-var _jquery = require('../jquery/jquery');
-
-var _jquery2 = _interopRequireDefault(_jquery);
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-var _makeGuid = require('../util/makeGuid');
-
-var _makeGuid2 = _interopRequireDefault(_makeGuid);
-
-var _mapMove = require('../olHelpers/mapMove');
-
-var _mapMove2 = _interopRequireDefault(_mapMove);
-
-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"); } }
-
-var nm = (0, _provide2.default)('collections');
-
-var LayerGroup = function () {
-
-    /**
-     *
-     * @param {object} [groupConfig={}] - group configuration object
-     * @param {string} groupConfig.groupName - the group name
-     * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially
-     * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers
-     * @param {LayerGroup} [parent=undefined] - the parent group
-     */
-
-    function LayerGroup(groupConfig, parent) {
-        _classCallCheck(this, LayerGroup);
-
-        this.groupLayers = [];
-        this.groupLayersLookup = {};
-        this.groupGroups = [];
-        this.groupGroupsLookup = {};
-        this.itemIdArray = [];
-
-        if (typeof groupConfig == 'undefined') {
-            this.parent = null;
-            this.groupId = 'root';
-            this.groupName = 'root';
-            this.allGroupLookup = { root: this };
-            this.allGroupArray = [this];
-            this.allLayerArray = [];
-            this.allLayerLookup = {};
-            this.layerParentLookup = {};
-            this.collapse = false;
-            this.addCheck = false;
-        } else {
-            this.groupId = (0, _makeGuid2.default)();
-            this.parent = parent;
-            this.groupName = groupConfig.groupName;
-            this.collapse = typeof groupConfig.collapse == 'boolean' ? groupConfig.collapse : false;
-            this.addCheck = typeof groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true;
-        }
-    }
-
-    /**
-     *
-     * @param {object} groupConfig - configuration object
-     * @param {string} groupConfig.groupName - the group name
-     * @param {boolean} groupConfig.collapse if the group should be collapsed initially
-     * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers
-     * @param {Array<LayerGroup>} parents parent groups
-     * @returns {LayerGroup} the layer group just added
-     */
-
-
-    _createClass(LayerGroup, [{
-        key: 'addGroup',
-        value: function addGroup(groupConfig, parents) {
-            var parent = void 0;
-            if (parents.length > 0) {
-                parent = parents[parents.length - 1];
-            } else {
-                parent = 'root';
-            }
-
-            /**
-             * @type {LayerGroup}
-             */
-            var parentGroup = this.allGroupLookup[parent];
-            var newGroup = new LayerGroup(groupConfig, parentGroup);
-            this.allGroupLookup[newGroup.groupId] = newGroup;
-            this.allGroupArray.push(newGroup);
-
-            parentGroup.groupGroups.push(newGroup);
-            parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;
-
-            if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) {
-                console.log(newGroup.groupId);
-                throw 'layer and group ids must be unique';
-            }
-            parentGroup.itemIdArray.push(newGroup.groupId);
-
-            return newGroup;
-        }
-
-        /**
-         *
-         * @param {LayerBase} newLayer the layer to be added
-         * @param {Array} parents array
-         */
-
-    }, {
-        key: 'addLegendLayer',
-        value: function addLegendLayer(newLayer, parents) {
-            var parent = void 0;
-            if (parents.length > 0) {
-                parent = parents[parents.length - 1];
-            } else {
-                parent = 'root';
-            }
-
-            this.allLayerLookup[newLayer.id] = newLayer;
-            this.allLayerArray.push(newLayer);
-
-            /**
-             * @type {LayerGroup}
-             */
-            var parentGroup = this.allGroupLookup[parent];
-
-            parentGroup.groupLayers.push(newLayer);
-            parentGroup.groupLayersLookup[newLayer.id] = newLayer;
-            if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) {
-                console.log(newLayer.id);
-                throw 'layer and group ids must be unique';
-            }
-            parentGroup.itemIdArray.push(newLayer.id);
-
-            this.layerParentLookup[newLayer.id] = parentGroup;
-        }
-    }, {
-        key: 'getLegendHtml',
-        value: function getLegendHtml(legendId, options) {
-
-            var legendHtml = '<ul id="' + legendId + '" class="legend-container">';
-
-            legendHtml += '<li>' + options.legendTitle + '<input type="checkbox" checked id="suppress-by-extent-' + legendId + '" class="suppress-by-extent">' + ('<label title="Suppress layers not visible at this zoom level" for="suppress-by-extent-' + legendId + '">') + '<span></span>' + '</label></li>';
-
-            legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';
-
-            return legendHtml;
-        }
-
-        /**
-         * @param {Array} itemIds the items to process
-         * @param {LayerGroup} theGroup new group
-         * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs
-         * @static
-         * @returns {string} html string
-         */
-
-    }, {
-        key: '_buildLegend',
-        value: function _buildLegend(itemIds, theGroup, layerDivClasses) {
-
-            if (itemIds.length == 0) {
-                return '';
-            }
-
-            var theHml = '';
-
-            var itemId = itemIds[0];
-
-            if (theGroup.groupLayersLookup[itemId]) {
-
-                /**
-                 * @type {LayerBase}
-                 */
-                var lyr = theGroup.groupLayersLookup[itemId];
-                theHml += '<li id="' + lyr.id + '-layer-li" class="legend-layer-li ' + layerDivClasses.join(' ') + '">' + lyr.getLegendDiv() + '</li>';
-            } else if (theGroup.groupGroupsLookup[itemId]) {
-                /**
-                 * type {LayerGroup}
-                 */
-                var otherGroup = theGroup.groupGroupsLookup[itemId];
-
-                theHml += '<li>';
-                theHml += '<div id="' + otherGroup.groupId + '-legend-layer-div" ' + ('class="legend-layer-group  ' + layerDivClasses.join(' ') + '">');
-
-                if (otherGroup.addCheck) {
-                    theHml += '<input type="checkbox" checked id="' + otherGroup.groupId + '-group-chck">' + ('<label for="' + otherGroup.groupId + '-group-chck" title="Click arrow to expand or collapse">' + otherGroup.groupName + '</label>');
-                } else {
-                    theHml += '<label title="Click arrow to expand or collapse">' + otherGroup.groupName + '</label>';
-                }
-
-                theHml += '<span title="Expand/Collapse" class="layer-group-expander';
-                theHml += (otherGroup.collapse ? ' legend-layer-group-initial-collapse' : '') + '">';
-                theHml += otherGroup.collapse ? '&#9654;' : '&#9660;';
-                theHml += '</span>';
-
-                //parents.push(groupId);
-                theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>';
-                theHml += '</div>';
-                theHml += '</li>';
-            }
-
-            return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);
-        }
-    }]);
-
-    return LayerGroup;
-}();
-
-/**
- * a wrapper to make a legend
- */
-
-
-var LayerLegend = function () {
-
-    /**
-     *
-     * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}
-     * @param {string} divId the div where the legend should be added
-     * @param {object} options for legend
-     * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling
-     * @param {string} [options.legendTitle=Legend] the legend title
-     * @param {bool} [options.scaleDependent=true] if legend display is scale dependent
-     */
-
-    function LayerLegend(legendItems, divId, options) {
-        _classCallCheck(this, LayerLegend);
-
-        var _iteratorNormalCompletion = true;
-        var _didIteratorError = false;
-        var _iteratorError = undefined;
-
-        try {
-            for (var _iterator = legendItems[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
-                var i = _step.value;
-
-                if (typeof i == 'undefined') {
-                    throw 'undefined item passed in array to legend constructor';
-                }
-            }
-        } catch (err) {
-            _didIteratorError = true;
-            _iteratorError = err;
-        } finally {
-            try {
-                if (!_iteratorNormalCompletion && _iterator.return) {
-                    _iterator.return();
-                }
-            } finally {
-                if (_didIteratorError) {
-                    throw _iteratorError;
-                }
-            }
-        }
-
-        options = options || {};
-
-        options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend';
-        options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true;
-        options.layerDivClasses = options.layerDivClasses || [];
-
-        // if legend display is scale dependent, make sure the mapMove object is initialized first
-        if (options.scaleDependent) {
-            _mapMove2.default.checkInit();
-        }
-
-        this.$divElement = (0, _jquery2.default)('#' + divId);
-
-        this._legendItems = legendItems;
-
-        this.layerGroup = new LayerGroup();
-
-        this._buildTree(legendItems);
-
-        this.legendId = (0, _makeGuid2.default)();
-
-        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));
-
-        var _iteratorNormalCompletion2 = true;
-        var _didIteratorError2 = false;
-        var _iteratorError2 = undefined;
-
-        try {
-            for (var _iterator2 = this.layerGroup.allLayerArray[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
-                var l = _step2.value;
-
-                l.applyCollapse();
-            }
-        } catch (err) {
-            _didIteratorError2 = true;
-            _iteratorError2 = err;
-        } finally {
-            try {
-                if (!_iteratorNormalCompletion2 && _iterator2.return) {
-                    _iterator2.return();
-                }
-            } finally {
-                if (_didIteratorError2) {
-                    throw _iteratorError2;
-                }
-            }
-        }
-
-        var _this = this;
-
-        //// if legend display is scale dependent, make sure the mapMove object is initialized first
-        if (options.scaleDependent) {
-            _mapMove2.default.checkInit();
-
-            _mapMove2.default.addCallback(function (ext, zoom, evt) {
-                if (typeof evt == 'undefined' || evt == 'change:resolution') {
-                    var _iteratorNormalCompletion3 = true;
-                    var _didIteratorError3 = false;
-                    var _iteratorError3 = undefined;
-
-                    try {
-                        for (var _iterator3 = this.layerGroup.allLayerArray[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
-                            var lyr = _step3.value;
-
-                            var $lyrLi = (0, _jquery2.default)('#' + lyr.id + '-layer-li');
-                            if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {
-                                $lyrLi.addClass('layer-not-visible');
-                            } else {
-                                $lyrLi.removeClass('layer-not-visible');
-                            }
-                        }
-                    } catch (err) {
-                        _didIteratorError3 = true;
-                        _iteratorError3 = err;
-                    } finally {
-                        try {
-                            if (!_iteratorNormalCompletion3 && _iterator3.return) {
-                                _iterator3.return();
-                            }
-                        } finally {
-                            if (_didIteratorError3) {
-                                throw _iteratorError3;
-                            }
-                        }
-                    }
-                }
-            }, this, 100, true, 'legend1');
-        }
-
-        // <editor-fold desc="add event listeners">
-
-        this.$divElement.find(".suppress-by-extent").change(function () {
-            var legendLayerLis = (0, _jquery2.default)('.legend-layer-li');
-            if (this.checked) {
-                legendLayerLis.removeClass('layer-force-show');
-            } else {
-                legendLayerLis.addClass('layer-force-show');
-            }
-        });
-
-        this.$divElement.find('.legend-check').change(function () {
-            var lyrId = this.id.replace('-legend-layer-check', '');
-            _this.layerGroup.allLayerLookup[lyrId].visible = this.checked;
-        });
-
-        this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () {
-            (0, _jquery2.default)(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change');
-        });
-
-        this.$divElement.find('.layer-group-expander').click(function () {
-            var $this = (0, _jquery2.default)(this);
-            $this.removeClass('legend-layer-group-initial-collapse');
-
-            $this.siblings('ul').slideToggle();
-
-            if ($this.hasClass('legend-layer-group-collapsed')) {
-                $this.removeClass('legend-layer-group-collapsed');
-                $this.html('&#9660;');
-            } else {
-                $this.addClass('legend-layer-group-collapsed');
-                $this.html('&#9654;');
-            }
-        });
-
-        this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click');
-        // </editor-fold>
-    }
-
-    /**
-     * @param {Array} [legendItems=this._layerConfig] the legend items
-     * @param {Array} [parents=[]] the ordered list of groups in which this item is a member
-     * @private
-     */
-
-
-    _createClass(LayerLegend, [{
-        key: '_buildTree',
-        value: function _buildTree(legendItems, parents) {
-
-            if (legendItems.length == 0) {
-                return;
-            }
-
-            var oneItem = legendItems[0];
-
-            //reset the parent if the item is in the base array
-            if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') {
-                parents = [];
-            }
-
-            if (typeof oneItem['groupName'] !== 'undefined') {
-                var groupItem = legendItems[0];
-                var newGroup = this.layerGroup.addGroup(groupItem, parents);
-                parents.push(newGroup.groupId);
-                this._buildTree(groupItem.items, parents);
-            } else {
-                /**
-                 * @type {LayerBase}
-                 */
-                var layerItem = legendItems[0];
-
-                this.layerGroup.addLegendLayer(layerItem, parents);
-            }
-
-            this._buildTree(legendItems.slice(1), parents);
-        }
-    }, {
-        key: 'showAll',
-        set: function set(val) {}
-    }]);
-
-    return LayerLegend;
-}();
-
-nm.LayerLegend = LayerLegend;
-exports.default = LayerLegend;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/collections/Sliders.js b/_lib/collections/Sliders.js
deleted file mode 100644
index 3677a73b984867713aab5cb7347c1d6b06ffeabe..0000000000000000000000000000000000000000
--- a/_lib/collections/Sliders.js
+++ /dev/null
@@ -1,605 +0,0 @@
-'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; }; }(); /**
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Created by gavorhes on 12/10/2015.
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      */
-
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-var _jquery = require('../jquery/jquery');
-
-var _jquery2 = _interopRequireDefault(_jquery);
-
-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"); } }
-
-var nm = (0, _provide2.default)('collections');
-
-var _Slider = function () {
-
-    /**
-     * Slider constructor
-     * @param {string} name - the slider name
-     * @param {Array} selections - the selection
-     * @param {number} wgt - weight
-     * @param {boolean} selected - if selected
-     */
-
-    function _Slider(name, selections, wgt, selected) {
-        _classCallCheck(this, _Slider);
-
-        //let _this = this;
-        this.name = name;
-        this.domId = name.toLowerCase().replace(/ /g, '-');
-        this._weight = wgt;
-        this._weightDefault = this._weight;
-
-        this.selectedParam = null;
-        this.selectedParamDefault = null;
-
-        this._locked = false;
-
-        this._min = 0.0;
-        this._max = 100;
-
-        this.labelLow = null;
-        this.labelHigh = null;
-        this.labelVal = null;
-        this.slider = null;
-        this.chk = null;
-
-        this.atMin = this._weight == this._min;
-        this.atMax = this._weight == this._max;
-
-        var sel = '<select class="' + (selections.length == 1 ? 'hidden-select' : 'show-select') + '" id="' + this.domId + '_chg">';
-        for (var i = 0; i < selections.length; i++) {
-            var itm = selections[i][0];
-            var itmSelected = itm === selected;
-
-            sel += '<option value="' + itm + '" ' + (itmSelected ? ' selected="selected"' : '') + '>' + selections[i][1] + '</option>';
-            if (itmSelected) {
-                this.selectedParam = itm;
-            }
-        }
-        sel += '</select>';
-
-        this.selectedParamDefault = this.selectedParam;
-
-        this.html = '<div class="slider-div">' + ('<label for="' + this.domId + '_chk" class="slider-label">' + this.name + '</label>') + sel + '<br>' + ('<input id="' + this.domId + '_chk" type="checkbox" title="Lock/Unlock Slider">') + ('<label id="' + this.domId + '_low" class="low-high">' + this._min.toFixed(1) + '</label>') + ('<input id="' + this.domId + '" type="range" value="' + this._weight.toFixed(1) + '" min="0" max="100" step="0.1">') + ('<label id="' + this.domId + '_high" class="low-high">' + this._max.toFixed(1) + '</label>') + ('<label id="' + this.domId + '_lbl" for="' + this.domId + '" class="percent-label">' + this._weight.toFixed(1) + '%</label></div>');
-    }
-
-    /**
-     * add html to dom
-     * @param {jQuery} $container - container element
-     */
-
-
-    _createClass(_Slider, [{
-        key: 'addToDom',
-        value: function addToDom($container) {
-            $container.append(this.html);
-            this.labelLow = (0, _jquery2.default)('#' + this.domId + '_low');
-            this.labelHigh = (0, _jquery2.default)('#' + this.domId + '_high');
-            this.labelVal = (0, _jquery2.default)('#' + this.domId + '_lbl');
-            this.slider = (0, _jquery2.default)('#' + this.domId);
-            this.selectionBox = (0, _jquery2.default)('#' + this.domId + '_chg');
-            this.chk = (0, _jquery2.default)('#' + this.domId + '_chk');
-        }
-
-        /**
-         * increment the slider
-         * @param {number} delta change delta
-         * @returns {number} the remainder not able to be allocated to this slider
-         */
-
-    }, {
-        key: 'increment',
-        value: function increment(delta) {
-            var remainder = 0;
-            delta = Number(delta.toFixed(1));
-
-            this._weight += delta;
-            if (this._weight < this._min) {
-                remainder = this._min - this._weight;
-                this._weight = this._min;
-                this.atMin = true;
-            } else if (this._weight > this._max) {
-                remainder = this._max - this._weight;
-                this._weight = this._max;
-                this.atMax = true;
-            } else {
-                this.atMin = false;
-                this.atMax = false;
-            }
-
-            this.slider.val(this._weight.toFixed(1));
-            this.labelVal.html(this._weight.toFixed(1) + '%');
-
-            return remainder;
-        }
-
-        /**
-         * reset to the original values
-         */
-
-    }, {
-        key: 'reset',
-        value: function reset() {
-            this.weight = this._weightDefault;
-            this.slider.val(this._weightDefault.toFixed(1));
-            this.selectionBox.val(this.selectedParamDefault);
-            this.chk.attr('checked', false);
-            //let event = new CustomEvent('change');
-            //this.chk[0].dispatchEvent(event);
-        }
-
-        /**
-         * set the value and drop down
-         * @param {number} newVal the new value
-         * @param {string} selectedParam the selected parameter
-         */
-
-    }, {
-        key: 'setValAndDropDown',
-        value: function setValAndDropDown(newVal, selectedParam) {
-            this.weight = newVal;
-            this.min = 0;
-            this.max = 100;
-            this.slider.val(newVal.toFixed(1));
-            this.selectionBox.val(selectedParam);
-            this.selectedParam = selectedParam;
-            this.locked = true;
-        }
-
-        /**
-         *
-         * @returns {boolean} if locked
-         */
-
-    }, {
-        key: 'locked',
-        get: function get() {
-            return this._locked;
-        }
-
-        /**
-         *
-         * @param {boolean} val if locked
-         */
-        ,
-        set: function set(val) {
-            this._locked = val;
-            this.slider.prop('disabled', this._locked);
-            this.selectionBox.prop('disabled', this._locked);
-            this.chk.prop('checked', !this._locked);
-        }
-
-        /**
-         *
-         * @returns {number} the minimum
-         */
-
-    }, {
-        key: 'min',
-        get: function get() {
-            return this._min;
-        }
-
-        /**
-         *
-         * @param {number} newVal new minimum
-         */
-        ,
-        set: function set(newVal) {
-            this._min = Number(newVal.toFixed(1));
-            if (this._min < 0) {
-                this._min = 0;
-            }
-            this.labelLow.html(this._min.toFixed(1));
-            this.slider.attr('min', this._min.toFixed(1));
-            this.atMin = this._weight == this._min;
-        }
-
-        /**
-         *
-         * @returns {number} the maximum
-         */
-
-    }, {
-        key: 'max',
-        get: function get() {
-            return this._max;
-        }
-
-        /**
-         *
-         * @param {number} newVal the maximum
-         */
-        ,
-        set: function set(newVal) {
-            this._max = Number(newVal.toFixed(1));
-            if (this._max > 100) {
-                this._max = 100.0;
-            }
-            this.labelHigh.html(this._max.toFixed(1));
-            this.slider.attr('max', this._max.toFixed(1));
-            this.atMax = this._weight == this._max;
-        }
-
-        /**
-         *
-         * @returns {number} the weight
-         */
-
-    }, {
-        key: 'weight',
-        get: function get() {
-            return this._weight;
-        }
-
-        /**
-         *
-         * @param {number} newVal the weight
-         */
-        ,
-        set: function set(newVal) {
-            this._weight = Number(newVal.toFixed(1));
-            this.labelVal.html(this._weight.toFixed(1) + '%');
-            if (this._weight <= this._min) {
-                this.atMin = true;
-                this.atMax = false;
-            } else if (this._weight >= this._max) {
-                this.atMin = false;
-                this.atMax = true;
-            } else {
-                this.atMin = false;
-                this.atMax = false;
-            }
-        }
-    }]);
-
-    return _Slider;
-}();
-
-nm._Slider = _Slider;
-
-/**
- * class to make a slider group
- */
-
-var Sliders = function () {
-    /**
-     *
-     * @param {Array} paramList list of parameters
-     * @param {string} divId the div id
-     */
-
-    function Sliders(paramList, divId) {
-        _classCallCheck(this, Sliders);
-
-        this.resetting = false;
-        this._slideFinishedFunctions = [];
-        this.reservedPercent = 0.0;
-        this.$container = (0, _jquery2.default)('#' + divId);
-        this.$container.addClass('slider-container');
-
-        this.sliderList = [];
-        this.sliderLookup = {};
-
-        this.total = 0;
-
-        for (var i = 0; i < paramList.length; i++) {
-            var p = paramList[i];
-
-            var sld = new _Slider(p[0], p[1], p[2], p[3]);
-            this.sliderList.push(sld);
-            this.sliderLookup[sld.domId] = sld;
-            sld.addToDom(this.$container);
-            this.total += sld._weight;
-        }
-
-        if (this.total != 100) {
-            alert('total not equal to 100');
-        }
-
-        this.lockedList = [];
-        this.inRangeList = [];
-        this.atMinList = [];
-        this.atMaxList = [];
-
-        this.lockedCount = 0;
-        this.notLockedCount = 0;
-
-        this._splitSliderArray();
-        this._addEventListeners();
-    }
-
-    _createClass(Sliders, [{
-        key: 'addSlideFinishedFunction',
-        value: function addSlideFinishedFunction(finishedFunction) {
-            this._slideFinishedFunctions.push(finishedFunction);
-        }
-
-        /**
-         * split array into subarrays holding the sliders
-         * @private
-         */
-
-    }, {
-        key: '_splitSliderArray',
-        value: function _splitSliderArray() {
-            this.lockedList = [];
-            this.inRangeList = [];
-            this.atMinList = [];
-            this.atMaxList = [];
-
-            for (var i = 0; i < this.sliderList.length; i++) {
-                var sld = this.sliderList[i];
-
-                if (sld.locked) {
-                    this.lockedList.push(sld);
-                } else if (sld.atMin) {
-                    this.atMinList.push(sld);
-                } else if (sld.atMax) {
-                    this.atMaxList.push(sld);
-                } else {
-                    this.inRangeList.push(sld);
-                }
-            }
-            this.lockedCount = this.lockedList.length;
-            this.notLockedCount = this.sliderList.length - this.lockedCount;
-        }
-
-        /**
-         * handle remainder, recursive to take care of min max overshoots
-         * @param {number} remain the remainder
-         * @param {string} skipDomId - this dom id
-         * @private
-         */
-
-    }, {
-        key: '_handleRemainder',
-        value: function _handleRemainder(remain, skipDomId) {
-
-            remain = Number(remain.toFixed(1));
-            if (remain == 0) {
-                return;
-            }
-
-            this._splitSliderArray();
-
-            var canChangeArray = [];
-            for (var i = 0; i < this.inRangeList.length; i++) {
-                var sld = this.inRangeList[i];
-                if (sld.domId == skipDomId) {
-                    continue;
-                }
-                canChangeArray.push(sld);
-            }
-
-            if (remain > 0) {
-                for (var _i = 0; _i < this.atMaxList.length; _i++) {
-                    var _sld = this.atMaxList[_i];
-                    if (_sld.domId == skipDomId) {
-                        continue;
-                    }
-                    canChangeArray.push(_sld);
-                }
-            } else {
-                for (var _i2 = 0; _i2 < this.atMinList.length; _i2++) {
-                    var _sld2 = this.atMinList[_i2];
-                    if (_sld2.domId == skipDomId) {
-                        continue;
-                    }
-                    canChangeArray.push(_sld2);
-                }
-            }
-
-            if (canChangeArray.length == 0) {
-                return;
-            }
-
-            var inc = -1 * Number((remain / canChangeArray.length).toFixed(1));
-
-            var newRemainder = 0;
-            for (var _i3 = 0; _i3 < canChangeArray.length; _i3++) {
-                newRemainder += canChangeArray[_i3].increment(inc);
-            }
-
-            this._handleRemainder(newRemainder, skipDomId);
-        }
-
-        /**
-         * reset all
-         */
-
-    }, {
-        key: 'reset',
-        value: function reset() {
-            this.resetting = true;
-            for (var i = 0; i < this.sliderList.length; i++) {
-                var sld = this.sliderList[i];
-                sld.reset();
-            }
-            this.resetting = false;
-
-            if (this._slideFinishedFunctions != null) {
-                this._slideFinishedFunctions();
-            }
-        }
-
-        /**
-         *
-         * @param {object} keyValList key and value list
-         */
-
-    }, {
-        key: 'setValues',
-        value: function setValues(keyValList) {
-            this.resetting = true;
-            for (var k in keyValList) {
-                if (keyValList.hasOwnProperty(k)) {
-                    this.sliderLookup[k].setValAndDropDown(keyValList[k][0], keyValList[k][1]);
-                }
-            }
-            this.resetting = false;
-        }
-
-        /**
-         * get the weight sum
-         * @returns {number} the weight sum
-         */
-
-    }, {
-        key: 'getSum',
-        value: function getSum() {
-            var total = 0;
-            for (var i = 0; i < this.sliderList.length; i++) {
-                var sld = this.sliderList[i];
-                total += Number(sld.weight.toFixed(1));
-            }
-
-            return total;
-        }
-
-        /**
-         * get the parameter weights
-         * @returns {object} lookup with parameter weights
-         */
-
-    }, {
-        key: 'getParams',
-        value: function getParams() {
-            var paramWeights = {};
-            for (var i = 0; i < this.sliderList.length; i++) {
-                var sld = this.sliderList[i];
-                paramWeights[sld.selectedParam] = Number(sld.weight.toFixed(1));
-            }
-
-            return paramWeights;
-        }
-    }, {
-        key: '_addEventListeners',
-        value: function _addEventListeners() {
-            var _this = this;
-
-            //change function
-            this.$container.find('input[type="range"]').change(function () {
-                if (_this.resetting) {
-                    return;
-                }
-
-                var $this = (0, _jquery2.default)(this);
-                var domId = this['id'];
-                var sldr = _this.sliderLookup[domId];
-
-                var newValue = parseFloat($this.val());
-
-                var oldValue = sldr.weight;
-                var diff = newValue - oldValue;
-                diff = Number(diff.toFixed(1));
-
-                sldr.weight = Number(newValue.toFixed(1));
-
-                _this._handleRemainder(diff, domId);
-
-                //cleanup, make sure the sum is still 100
-                var sum = Number(_this.getSum().toFixed(1));
-
-                if (sum > 100) {
-                    loop1: while (true) {
-                        for (var i = 0; i < _this.sliderList.length; i++) {
-                            var sld = _this.sliderList[i];
-                            if (sld.domId == domId || sld.locked || sld.atMin) {
-                                continue;
-                            }
-                            sld.increment(-0.1);
-                            sum -= 0.1;
-                            if (sum.toFixed(1) == '100.0') {
-                                break loop1;
-                            }
-                        }
-                    }
-                } else if (sum < 100) {
-                    loop1: while (true) {
-                        for (var _i4 = 0; _i4 < _this.sliderList.length; _i4++) {
-                            var _sld3 = _this.sliderList[_i4];
-                            if (_sld3.domId == domId || _sld3.locked || _sld3.atMax) {
-                                continue;
-                            }
-                            _sld3.increment(0.1);
-                            sum += 0.1;
-                            if (sum.toFixed(1) == '100.0') {
-                                break loop1;
-                            }
-                        }
-                    }
-                }
-
-                for (var _i5 = 0; _i5 < _this._slideFinishedFunctions.length; _i5++) {
-                    _this._slideFinishedFunctions[_i5]();
-                }
-            });
-
-            //update the selected parameter when the selection is changed
-            (0, _jquery2.default)('.show-select').change(function () {
-                if (_this.resetting) {
-                    return;
-                }
-                _this.sliderLookup[this['id'].replace('_chg', '')].selectedParam = (0, _jquery2.default)(this).val();
-            });
-
-            //lock the slider and update the reserved percent
-            this.$container.find('input[type="checkbox"]').change(function () {
-                var domEl = this;
-
-                _this.sliderLookup[domEl.id.replace('_chk', '')].locked = !domEl.checked;
-                _this.reservedPercent = 0.0;
-                _this.notLockedCount = 0;
-
-                var notLockedSliders = [];
-
-                for (var i = 0; i < _this.sliderList.length; i++) {
-                    var sld = _this.sliderList[i];
-                    if (sld.locked) {
-                        _this.reservedPercent += sld.weight;
-                        continue;
-                    }
-                    notLockedSliders.push(sld);
-                    _this.notLockedCount++;
-                }
-
-                for (var _i6 = 0; _i6 < _this.sliderList.length; _i6++) {
-                    var _sld4 = _this.sliderList[_i6];
-                    if (_sld4.locked) {
-                        continue;
-                    }
-                    _sld4.max = 100 - _this.reservedPercent;
-                }
-
-                if (notLockedSliders.length == 1) {
-                    notLockedSliders[0].min = notLockedSliders[0].weight;
-                } else {
-                    for (var _i7 = 0; _i7 < notLockedSliders.length; _i7++) {
-                        notLockedSliders[_i7].min = 0;
-                    }
-                }
-            });
-        }
-    }]);
-
-    return Sliders;
-}();
-
-nm.Sliders = Sliders;
-window.gv['collections'].Sliders = Sliders;
-exports.default = Sliders;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/domUtil/SelectBoxBase.js b/_lib/domUtil/SelectBoxBase.js
deleted file mode 100644
index 55bede694a3e2f87a462d4f5981f16c00cbdfae6..0000000000000000000000000000000000000000
--- a/_lib/domUtil/SelectBoxBase.js
+++ /dev/null
@@ -1,183 +0,0 @@
-'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; }; }(); /**
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Created by gavorhes on 5/13/2016.
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      */
-/**
- * Created by gavorhes on 5/12/2016.
- */
-
-
-var _makeGuid = require('webmapsjs/src/util/makeGuid');
-
-var _makeGuid2 = _interopRequireDefault(_makeGuid);
-
-var _provide = require('webmapsjs/src/util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-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"); } }
-
-var nm = (0, _provide2.default)('ssa.select');
-
-var SelectBoxBase = function () {
-
-    /**
-     *
-     * @param {jQuery} parent - parent container
-     * @param {string} labelContent
-     * @param {contentGenFunc} [contentGen=undefined] 
-     */
-
-    function SelectBoxBase(parent, labelContent, contentGen) {
-        var _this = this;
-
-        _classCallCheck(this, SelectBoxBase);
-
-        var guidTop = (0, _makeGuid2.default)();
-        var guid = (0, _makeGuid2.default)();
-
-        var htmlString = '<div id="' + guidTop + '">';
-        htmlString += '<label for="' + guid + '">' + labelContent + '</label>';
-
-        if (contentGen) {
-            htmlString += contentGen(guid);
-        } else {
-            htmlString += '<select id="' + guid + '"></select>';
-        }
-        htmlString += '</div>';
-
-        parent.append(htmlString);
-
-        this._$container = parent.find('#' + guidTop);
-
-        this.$label = this._$container.find('label');
-
-        /**
-         *
-         * @type {Array<changeListener>}
-         * @private
-         */
-        this._changeListeners = [];
-
-        /**
-         * reference to the selector box
-         * @protected
-         * @type {jQuery}
-         */
-        this._box = parent.find('#' + guid);
-
-        if (!this._box) {
-            throw 'the select box was not found';
-        }
-
-        this._box.change(function () {
-            _this.changed();
-        });
-    }
-
-    /**
-     * 
-     * @returns {jQuery}
-     */
-
-
-    _createClass(SelectBoxBase, [{
-        key: 'changed',
-        value: function changed() {
-            var v = this._box.val();
-
-            var _iteratorNormalCompletion = true;
-            var _didIteratorError = false;
-            var _iteratorError = undefined;
-
-            try {
-                for (var _iterator = this._changeListeners[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
-                    var f = _step.value;
-
-                    f(v);
-                }
-            } catch (err) {
-                _didIteratorError = true;
-                _iteratorError = err;
-            } finally {
-                try {
-                    if (!_iteratorNormalCompletion && _iterator.return) {
-                        _iterator.return();
-                    }
-                } finally {
-                    if (_didIteratorError) {
-                        throw _iteratorError;
-                    }
-                }
-            }
-        }
-
-        /**
-         *
-         * @param {changeListener} func
-         */
-
-    }, {
-        key: 'addChangeListener',
-        value: function addChangeListener(func) {
-            this._changeListeners.push(func);
-        }
-
-        /**
-         *
-         * @returns {string|number}
-         */
-
-    }, {
-        key: 'box',
-        get: function get() {
-            return this._box;
-        }
-    }, {
-        key: 'selectedValue',
-        get: function get() {
-            var theVal = this.box.val();
-
-            if (theVal == null || typeof theVal == 'undefined') {
-                return null;
-            } else if (isNaN(theVal)) {
-                return theVal;
-            } else {
-                if (theVal.indexOf('.') > -1) {
-                    return parseFloat(theVal);
-                } else {
-                    return parseInt(theVal);
-                }
-            }
-        }
-
-        /**
-         *
-         * @param {string|number} v
-         * @protected
-         */
-        ,
-        set: function set(v) {
-            this.box.val(v);
-        }
-    }, {
-        key: 'selectedText',
-        get: function get() {
-            return this.box.find('option:selected').text();
-        }
-    }]);
-
-    return SelectBoxBase;
-}();
-
-nm.SelectBoxBase = SelectBoxBase;
-
-exports.default = SelectBoxBase;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/gulp-helpers.js b/_lib/gulp-helpers.js
deleted file mode 100644
index a17ace6faac5db667b42a1d7e714426c3beb0064..0000000000000000000000000000000000000000
--- a/_lib/gulp-helpers.js
+++ /dev/null
@@ -1,182 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-    value: true
-});
-exports.bundleEs2015 = bundleEs2015;
-exports.processLessFile = processLessFile;
-exports.bundleEs2015Multiple = bundleEs2015Multiple;
-/**
- * Created by gavorhes on 5/10/2016.
- * Helpers functions for gulp tasks
- */
-
-var gulp = require('gulp');
-var babel = require('gulp-babel');
-var babelify = require('babelify');
-var browserify = require('browserify');
-var buffer = require('vinyl-buffer');
-var source = require('vinyl-source-stream');
-var sourcemaps = require('gulp-sourcemaps');
-var minify = require('gulp-minify');
-var less = require('gulp-less');
-var cssmin = require('gulp-cssmin');
-var rename = require('gulp-rename');
-var glob = require('glob');
-var watchify = require('watchify');
-var gulpUtil = require('gulp-util');
-
-/**
- * @typedef {object} dirNameFilePath
- * @property {string} dirName - directory name
- * @property {string} fileName - file name
- */
-
-/**
- * get directory and file name from output path
- * @param {string} outputFile - output file path
- * @returns {dirNameFilePath} file directory and path
- * @private
- */
-function _processOutDir(outputFile) {
-    "use strict";
-
-    var pathParts = outputFile.split('/');
-    var outFileName = pathParts[pathParts.length - 1];
-    pathParts.splice(pathParts.length - 1, 1);
-    var outDir = pathParts.length === 0 ? '.' : pathParts.join('/');
-
-    return { dirName: outDir, fileName: outFileName };
-}
-
-/**
- *
- * @param {string} inputFile - input file set to null to bundle everything in 'test' directory
- * @param {dirNameFilePath|string} outFile - output file as string or path object
- * @param {boolean} [production=false] if production, minify and don't watch
- * @returns {*} the stream
- * @private
- */
-function bundleEs2015(inputFile, outFile, production) {
-    "use strict";
-
-    if (typeof outFile == 'string') {
-        outFile = _processOutDir(outFile);
-    }
-
-    production = typeof production == 'boolean' ? production : false;
-
-    if (inputFile.indexOf('*') > -1) {
-        inputFile = glob.sync(inputFile);
-    }
-
-    var bundler = browserify({
-        entries: inputFile,
-        cache: {},
-        packageCache: {},
-        debug: true
-    });
-
-    bundler.transform(babelify.configure({
-        presets: ["es2015"],
-        ignore: /ol\-build\.js|jquery\.min/
-        // ignore: /ol\-build\.js|jquery\.min|\/node_modules\/(?!webmapsjs\/)|\/node_modules\/webmapsjs\/(?!lib\/)/
-    }));
-
-    if (!production) {
-        bundler = watchify(bundler);
-    }
-
-    function runBundle() {
-        console.log(inputFile);
-        var stream = bundler.bundle().on('error', function (err) {
-            console.error(err);
-        }).pipe(source(outFile.fileName)).pipe(buffer()).pipe(sourcemaps.init({ loadMaps: true }));
-
-        if (production) {
-            stream = stream.pipe(minify({
-                ext: {
-                    src: '-debug.js',
-                    min: '.js'
-                },
-                exclude: ['tasks'],
-                ignoreFiles: ['.combo.js', '-min.js']
-            }));
-        }
-
-        return stream.pipe(sourcemaps.write('./')).pipe(gulp.dest(outFile.dirName));
-    }
-
-    if (!production) {
-        bundler.on('update', runBundle);
-        bundler.on('log', gulpUtil.log);
-    }
-
-    return runBundle();
-}
-
-/**
- * convert less file
- * @param {string} inputFile - input less file
- * @param {string} outputFile - output css file
- * @returns {*} stream
- */
-function processLessFile(inputFile, outputFile) {
-    "use strict";
-
-    var pathParts = outputFile.split('/');
-    var outFileName = pathParts[pathParts.length - 1];
-    pathParts.splice(pathParts.length - 1, 1);
-    var outDir = pathParts.length === 0 ? '.' : pathParts.join('/');
-
-    var fileNameParts = outFileName.split('.');
-
-    return gulp.src(inputFile).pipe(less().on('error', function (err) {
-        console.log(err);
-    })).pipe(cssmin().on('error', function (err) {
-        console.log(err);
-    })).pipe(rename({
-        basename: fileNameParts[0],
-        extname: '.' + fileNameParts[1],
-        suffix: '.min'
-    })).pipe(gulp.dest(outDir));
-}
-
-/**
- * make multiple bundles
- * @param {Array<Array<string>>} fileArray - array with elements [input file, output file]
- * @param {boolean} production - if is production
- * @returns {*} output stream
- */
-function bundleEs2015Multiple(fileArray, production) {
-    "use strict";
-
-    var outStream = undefined;
-
-    var _iteratorNormalCompletion = true;
-    var _didIteratorError = false;
-    var _iteratorError = undefined;
-
-    try {
-        for (var _iterator = fileArray[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
-            var f = _step.value;
-
-            outStream = bundleEs2015(f[0], f[1], production);
-        }
-    } catch (err) {
-        _didIteratorError = true;
-        _iteratorError = err;
-    } finally {
-        try {
-            if (!_iteratorNormalCompletion && _iterator.return) {
-                _iterator.return();
-            }
-        } finally {
-            if (_didIteratorError) {
-                throw _iteratorError;
-            }
-        }
-    }
-
-    return outStream;
-}
\ No newline at end of file
diff --git a/_lib/jquery-plugin/animate-buttons.js b/_lib/jquery-plugin/animate-buttons.js
deleted file mode 100644
index a1becc217f1875675cd03e5444d847ffc3f9ad1e..0000000000000000000000000000000000000000
--- a/_lib/jquery-plugin/animate-buttons.js
+++ /dev/null
@@ -1,253 +0,0 @@
-'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; }; }();
-
-/**
- * Created by gavorhes on 11/2/2015.
- */
-
-var _jquery = require('../jquery/jquery');
-
-var _jquery2 = _interopRequireDefault(_jquery);
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-require('./range-change');
-
-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"); } }
-
-var nm = (0, _provide2.default)('jQueryPlugin');
-
-/**
- * @callback mediaCallback
- * @param {number} tm
- */
-
-function timeToLocalDateString(tm) {
-    "use strict";
-
-    var d = new Date(tm);
-    var p1 = d.toLocaleTimeString().split(' ');
-    var p2 = p1[0].split(':');
-    p2 = p2.slice(0, 2);
-
-    return d.toLocaleDateString() + '<br>' + p2.join(':') + ' ' + p1[1];
-}
-
-var MediaControl = function () {
-    function MediaControl(jQueryElement, min, max, val, step, func, playInterval, dateFormat) {
-        _classCallCheck(this, MediaControl);
-
-        this._container = jQueryElement;
-        this._playInterval = playInterval;
-        this._interval = undefined;
-        this._func = func;
-
-        this._dateFormat = dateFormat;
-
-        this._currentValue = undefined;
-        this._min = undefined;
-        this._max = undefined;
-        this._step = undefined;
-        this._playing = false;
-
-        var htmlStr = '<span class="media-player-button media-back"></span>' + '<span class="media-player-button media-play"></span>' + '<span class="media-player-button media-pause media-disabled"></span>' + '<span class="media-player-button media-stop media-disabled" ></span>' + '<span class="media-player-button media-ahead"></span>' + '<input type="range">' + '<div class="media-control-value-label-container">' + '<span class="media-control-value-label-min"></span>' + '<span class="media-control-value-label-val"></span>' + '<span class="media-control-value-label-max"></span>' + '</div>';
-
-        this._container.append(htmlStr);
-
-        var btnPause = this._container.find('.media-pause');
-        var btnPlay = this._container.find('.media-play');
-        this._$btnStop = this._container.find('.media-stop');
-        var btnAhead = this._container.find('.media-ahead');
-        var btnBack = this._container.find('.media-back');
-        this._$slider = this._container.find('input[type=range]');
-
-        this._$valLabelMin = this._container.find('.media-control-value-label-min');
-        this._$valLabelVal = this._container.find('.media-control-value-label-val');
-        this._$valLabelMax = this._container.find('.media-control-value-label-max');
-
-        this.setMinMaxValueStep(min, max, val, step);
-
-        var _this = this;
-
-        this._$slider.rangeChange(function (newVal, ratio, evt) {
-            _this.currentValue = newVal;
-        }, 100);
-
-        btnPlay.click(function () {
-            var $this = (0, _jquery2.default)(this);
-            $this.addClass('media-disabled');
-            _this._$btnStop.removeClass('media-disabled');
-            btnAhead.addClass('media-locked');
-            btnBack.addClass('media-locked');
-            _this._$slider.prop('disabled', true);
-            _this._playing = true;
-
-            _this._interval = setInterval(function () {
-                _this.currentValue += _this._step;
-            }, _this._playInterval);
-        });
-
-        this._$btnStop.click(function () {
-            clearInterval(_this._interval);
-            var $this = (0, _jquery2.default)(this);
-            $this.addClass('media-disabled');
-            btnPlay.removeClass('media-disabled');
-            btnAhead.removeClass('media-locked');
-            btnBack.removeClass('media-locked');
-            _this._$slider.prop('disabled', false);
-            _this._playing = false;
-        });
-
-        btnAhead.click(function () {
-            _this.currentValue = _this.currentValue + _this._step;
-        });
-
-        btnBack.click(function () {
-            _this.currentValue = _this.currentValue - _this._step;
-        });
-    }
-
-    _createClass(MediaControl, [{
-        key: 'stopPlaying',
-        value: function stopPlaying() {
-            if (this._playing) {
-                this._$btnStop.trigger('click');
-            }
-        }
-    }, {
-        key: 'setMinMaxValueStep',
-
-
-        /**
-         * set min and max value with step
-         * @param {number} newMin the new min
-         * @param {number} newMax the new mas
-         * @param {number} [newValue=newMin] the value to set
-         * @param {number} [newStep=(newMax-newMin)/20] step value
-         */
-        value: function setMinMaxValueStep(newMin, newMax, newValue, newStep) {
-            this._min = newMin;
-            this._max = newMax;
-
-            newValue = typeof newValue == 'number' ? newValue : newMin;
-            newStep = typeof newStep == 'number' ? newStep : (newMax - newMin) / 20;
-
-            this._currentValue = newValue;
-            this._step = newStep;
-
-            this._$slider.prop('min', this.min.toString());
-            this._$slider.prop('max', this.max.toString());
-            this._$slider.prop('step', this.step.toString());
-            this._$slider.val(this.currentValue.toString());
-
-            if (this._dateFormat) {
-                this._$valLabelMin.html(timeToLocalDateString(this._min));
-                this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
-                this._$valLabelMax.html(timeToLocalDateString(this._max));
-            } else {
-                this._$valLabelMin.html(this._min.toString());
-                this._$valLabelVal.html(this.currentValue.toString());
-                this._$valLabelMax.html(this._max.toString());
-            }
-        }
-
-        /**
-         *
-         * @param {mediaCallback} newFunc the callback on change
-         */
-
-    }, {
-        key: 'playing',
-        get: function get() {
-            return this._playing;
-        }
-    }, {
-        key: 'min',
-        get: function get() {
-            return this._min;
-        }
-    }, {
-        key: 'max',
-        get: function get() {
-            return this._max;
-        }
-    }, {
-        key: 'step',
-        get: function get() {
-            return this._step;
-        }
-    }, {
-        key: 'currentValue',
-        get: function get() {
-            return this._currentValue;
-        },
-        set: function set(newValue) {
-            if (newValue > this._max) {
-                newValue = this._min;
-            } else if (newValue < this._min) {
-                newValue = this._max;
-            }
-            this._currentValue = newValue;
-            this._$slider.val(this._currentValue.toFixed(2));
-
-            if (this._dateFormat) {
-                this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
-            } else {
-                this._$valLabelVal.html(this.currentValue.toString());
-            }
-
-            this._func(newValue);
-        }
-    }, {
-        key: 'changeFunction',
-        set: function set(newFunc) {
-            this._func = newFunc;
-        }
-    }]);
-
-    return MediaControl;
-}();
-
-nm.MediaControl = MediaControl;
-
-/**
- * Adds a media control to a container
- * @param {number} [min=0] the min
- * @param {number} [max=100] the max
- * @param {number} [val=0] the val
- * @param {number} [step=1] the step
- * @param {mediaCallback} [func=function (n) {console.log('default function', n);}] media change callback function
- * @param {number} [playInterval=500] play interval
- * @param {boolean} [dateFormat=false] date format
- * @this {jQuery}
- * @returns {MediaControl} the Media control object
- */
-_jquery2.default.fn.mediaControl = function (min, max, val, step, func, playInterval, dateFormat) {
-
-    min = typeof min == 'number' ? min : 0;
-    max = typeof max == 'number' ? max : 100;
-    val = typeof val == 'number' ? val : 0;
-    step = typeof step == 'number' ? step : 1;
-    func = typeof func == 'function' ? func : function (n) {
-        console.log('default function', n);
-    };
-
-    playInterval = typeof playInterval == 'number' ? playInterval : 500;
-    dateFormat = typeof dateFormat == 'boolean' ? dateFormat : false;
-
-    this.addClass('media-control-container');
-
-    return new MediaControl(this, min, max, val, step, func, playInterval, dateFormat);
-};
-
-exports.default = undefined;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/jquery-plugin/day-range.js b/_lib/jquery-plugin/day-range.js
deleted file mode 100644
index 067f049be425c677ec0bac742542d27dacdd65fe..0000000000000000000000000000000000000000
--- a/_lib/jquery-plugin/day-range.js
+++ /dev/null
@@ -1,122 +0,0 @@
-'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 _jquery = require('../jquery/jquery');
-
-var _jquery2 = _interopRequireDefault(_jquery);
-
-require('../jquery/jquery-ui');
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-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"); } }
-
-var nm = (0, _provide2.default)('jQueryPlugin');
-
-var DayRange = function () {
-
-    /**
-     * constructor for the date range
-     * @param {number} dayRange number of days
-     * @param {jQuery} jQueryRef reference to the jquery element
-     */
-
-    function DayRange(dayRange, jQueryRef) {
-        _classCallCheck(this, DayRange);
-
-        this._workingDayRange = dayRange - 1;
-
-        var pickerHtml = '<label for="start-date" style="width: 78px; display: inline-block; margin:5px;">Start Date</label>' + '<input type="text" readonly id="start-date" class="date-pick"  style="width: 90px;">' + '<br><label for="end-date" style="width: 78px; display: inline-block;  margin:5px;">End Date</label>' + '<input type="text" readonly id="end-date" class="date-pick" style="width: 90px;">';
-
-        jQueryRef.append(pickerHtml);
-
-        this._$startDate = (0, _jquery2.default)('#start-date');
-        this._$endDate = (0, _jquery2.default)('#end-date');
-
-        this._$startDate.datepicker();
-        this._$endDate.datepicker();
-
-        this._startDate = null;
-        this._endDate = null;
-
-        var dte1 = new Date();
-        dte1.setHours(0, 0, 0, 0);
-        var dte2 = new Date(dte1.getTime());
-        dte2.setDate(dte2.getDate() + dayRange);
-        dte2.setHours(23, 59, 59, 0);
-        this._maxDateRange = dte2 - dte1;
-
-        var _this = this;
-
-        //add event listeners
-        this._$startDate.change(function () {
-            _this.startDate = this.value;
-        });
-
-        this._$endDate.change(function () {
-            _this.endDate = this.value;
-        });
-
-        // initialize
-        this.endDate = new Date().getTime();
-    }
-
-    _createClass(DayRange, [{
-        key: 'startDate',
-        get: function get() {
-            return this._startDate;
-        },
-        set: function set(val) {
-            this._startDate = new Date(val);
-            this._startDate.setHours(0, 0, 0, 0);
-            this._$startDate.val(this._startDate.toLocaleDateString());
-
-            if (this.endDate == null || this._endDate - this._startDate > this._maxDateRange || this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {
-                var tmpDate = new Date(this._startDate.getTime());
-                tmpDate.setDate(tmpDate.getDate() + this._workingDayRange);
-                this.endDate = tmpDate.getTime();
-            }
-        }
-    }, {
-        key: 'endDate',
-        get: function get() {
-            return this._endDate;
-        },
-        set: function set(val) {
-            this._endDate = new Date(val);
-            this._endDate.setHours(23, 59, 59, 0);
-            this._$endDate.val(this._endDate.toLocaleDateString());
-            if (this._startDate == null || this._endDate - this.startDate > this._maxDateRange || this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {
-                var tmpDate = new Date(this._endDate.getTime());
-                tmpDate.setDate(tmpDate.getDate() - this._workingDayRange);
-                this.startDate = tmpDate.getTime();
-            }
-        }
-    }]);
-
-    return DayRange;
-}();
-
-nm.DayRange = DayRange;
-var jQuery = _jquery2.default;
-
-/**
- * Adds day range control
- * @param {number} dayRange the number of days
- * @returns {DayRange} the day range object
- */
-jQuery.fn.dayRange = function (dayRange) {
-    return new DayRange(dayRange, this);
-};
-
-exports.default = DayRange;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/jquery-plugin/range-change.js b/_lib/jquery-plugin/range-change.js
deleted file mode 100644
index 21941453ad9f9be6ccce6477aae804d72ac20c55..0000000000000000000000000000000000000000
--- a/_lib/jquery-plugin/range-change.js
+++ /dev/null
@@ -1,134 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-    value: true
-});
-
-var _jquery = require('../jquery/jquery');
-
-var _jquery2 = _interopRequireDefault(_jquery);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var mouseIn = false;
-var mouseDown = false;
-var timeout = null;
-var dragged = false;
-var lastVal = void 0;
-
-/**
- * Created by gavorhes on 11/2/2015.
- */
-
-function triggerCallback(callback, evt) {
-    "use strict";
-
-    var val = parseFloat(this.value);
-    var min = parseFloat(this.min);
-    var max = parseFloat(this.max);
-    var step = parseFloat(this.step);
-
-    if (max - val < step) {
-        val = max;
-    }
-
-    var percent = (val - min) / (max - min);
-
-    if (typeof lastVal == 'number' && val == lastVal) {
-        return;
-    }
-    lastVal = val;
-    callback(val, percent, evt);
-}
-
-/**
- * callback on range change interaction, context of this is the firing dom element
- * @callback rangeChangeCallback
- * @param {number} newValue
- * @param {number} ratio value from 0 to 1 relative of the value to the min and max
- * @param {object} evt
- */
-
-/**
- * Add a variety of listeners for range inputs applied to a common callback
- * @param {rangeChangeCallback} callback - the callback
- * @param {number} [changeTimeout=75] before the callback is called
- * @this {jQuery}
- * @returns {jQuery} the jQuery object
- */
-_jquery2.default.fn.rangeChange = function (callback, changeTimeout) {
-
-    changeTimeout = typeof changeTimeout == 'number' ? changeTimeout : 75;
-
-    this.mouseenter(function () {
-        mouseIn = true;
-    });
-
-    this.mouseleave(function () {
-        mouseIn = false;
-        mouseDown = false;
-    });
-
-    this.mousedown(function () {
-        mouseDown = true;
-    });
-
-    this.mouseup(function () {
-        mouseDown = false;
-    });
-
-    this.mousemove(
-    /**
-     *
-     * @param {object} evt - event properties
-     * @this {HTMLElement}
-     */
-    function (evt) {
-        if (!(mouseIn && mouseDown)) {
-            return;
-        }
-
-        dragged = true;
-
-        if (lastVal == this['value']) {
-            return;
-        }
-        lastVal = this['value'];
-
-        if (timeout != null) {
-            clearTimeout(timeout);
-        }
-
-        var _this = this;
-
-        timeout = setTimeout(function () {
-            triggerCallback.call(_this, callback, evt);
-            timeout = null;
-        }, changeTimeout);
-    });
-
-    this.keyup(
-    /**
-     *
-     * @param {object} evt - event properties
-     */
-    function (evt) {
-        if (evt.keyCode == 37 || evt.keyCode == 39) {
-            triggerCallback.call(this, callback, evt);
-        }
-    });
-
-    this.change(function (evt) {
-        if (dragged) {
-            dragged = false;
-
-            return;
-        }
-        triggerCallback.call(this, callback, evt);
-    });
-
-    return this;
-};
-
-exports.default = undefined;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/jquery/floatthead.js b/_lib/jquery/floatthead.js
deleted file mode 100644
index 3ffbd7944ce1c72fc6d1ab0ca6428fea62a6f835..0000000000000000000000000000000000000000
--- a/_lib/jquery/floatthead.js
+++ /dev/null
@@ -1,64 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-    value: true
-});
-exports.windowScroll = windowScroll;
-exports.overflowScroll = overflowScroll;
-exports.responsiveScroll = responsiveScroll;
-/**
- * Created by gavorhes on 6/22/2016.
- */
-var $ = require('jquery');
-global.jQuery = $;
-
-require('floatthead');
-
-/**
- * implement the default window scroll
- * @param {jQuery} $table - jquery reference to table
- * @param {object} [options={}] float options
- */
-function windowScroll($table, options) {
-    "use strict";
-
-    options = options || {};
-
-    $table.floatThead(options);
-}
-
-/**
- *
- * @param {jQuery} $table - jquery reference to table
- * @param {jQuery} $tableContainer - jquery reference to table
- * @param {object} [options={}] float options
- */
-function overflowScroll($table, $tableContainer, options) {
-    "use strict";
-
-    options = options || {};
-
-    options.scrollContainer = function (t) {
-        return $tableContainer;
-    };
-
-    $table.floatThead(options);
-}
-
-/**
- *
- * @param {jQuery} $table - jquery reference to table
- * @param {jQuery} $responsiveContainer - jquery reference to table
- * @param {object} [options={}] float options
- */
-function responsiveScroll($table, $responsiveContainer, options) {
-    "use strict";
-
-    options = options || {};
-
-    options.responsiveContainer = function (t) {
-        return $responsiveContainer;
-    };
-
-    $table.floatThead(options);
-}
\ No newline at end of file
diff --git a/_lib/jquery/jquery-layout.js b/_lib/jquery/jquery-layout.js
deleted file mode 100644
index e9cb852063e43bafc3028035b82daa6ad6b2f0e2..0000000000000000000000000000000000000000
--- a/_lib/jquery/jquery-layout.js
+++ /dev/null
@@ -1,13 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-/**
- * Created by gavorhes on 5/23/2016.
- */
-
-require('jquery-layout');
-
-exports.default = undefined;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/jquery/jquery-ui.js b/_lib/jquery/jquery-ui.js
deleted file mode 100644
index 0f9b3bd578f02a86f979abf2703250c538792e01..0000000000000000000000000000000000000000
--- a/_lib/jquery/jquery-ui.js
+++ /dev/null
@@ -1,13 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-/**
- * Created by gavorhes on 5/23/2016.
- */
-
-require('jquery-ui');
-
-exports.default = undefined;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/jquery/jquery.js b/_lib/jquery/jquery.js
deleted file mode 100644
index bb3205b1ded7a66da7bc3d9f8b2e613afc7d9023..0000000000000000000000000000000000000000
--- a/_lib/jquery/jquery.js
+++ /dev/null
@@ -1,9 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-var jQuery = require('jquery');
-
-exports.default = jQuery;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/layers/LayerBase.js b/_lib/layers/LayerBase.js
deleted file mode 100644
index a50e9f433080a9f8641b4ea39bf8604068e0e04e..0000000000000000000000000000000000000000
--- a/_lib/layers/LayerBase.js
+++ /dev/null
@@ -1,468 +0,0 @@
-'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 ? "symbol" : typeof 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 _jquery = require('../jquery/jquery');
-
-var _jquery2 = _interopRequireDefault(_jquery);
-
-var _makeGuid = require('../util/makeGuid');
-
-var _makeGuid2 = _interopRequireDefault(_makeGuid);
-
-var _zoomResolutionConvert = require('../olHelpers/zoomResolutionConvert');
-
-var zoomResolutionConvert = _interopRequireWildcard(_zoomResolutionConvert);
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-var nm = (0, _provide2.default)('layers');
-
-/**
- * The base layer class
- * @abstract
- */
-
-var LayerBase = function () {
-    /**
-     * The base layer for all others
-     * @param {string} url - url for source
-     * @param {object} options - config
-     * @param {string} [options.id=makeGuid()] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] - the z index for the layer
-     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend
-     */
-
-    function LayerBase(url, options) {
-        _classCallCheck(this, LayerBase);
-
-        options = options || {};
-
-        if (typeof url !== 'string') {
-            throw 'Invalid URL';
-        }
-        this._url = url;
-
-        this._params = _typeof(options.params) == 'object' ? options.params : {};
-        this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;
-        this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;
-
-        this.id = options.id || (0, _makeGuid2.default)();
-        this._name = options.name || 'Unnamed Layer';
-        this.animate = false;
-        this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;
-
-        if (this._opacity > 1) {
-            this._opacity = 1;
-        } else if (this._opacity < 0) {
-            this._opacity = 0;
-        }
-
-        this._visible = typeof options.visible === 'boolean' ? options.visible : true;
-
-        this._source = undefined;
-
-        /**
-         * 
-         * @protected
-         */
-        this._olLayer = undefined;
-        this._loaded = false;
-
-        this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);
-        if (typeof this._maxResolution !== 'undefined') {
-            this._maxResolution += 0.00001;
-        }
-        this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);
-
-        this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;
-        this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;
-        this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;
-
-        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {};
-
-        this._legendContent = '';
-
-        if (this._legendCheckbox) {
-            this._legendContent += '<input type="checkbox" ' + (this.visible ? 'checked' : '') + ' ' + ('class="legend-check" id="' + this.id + '-legend-layer-check"><span></span>');
-            this._legendContent += '<label for="' + this.id + '-legend-layer-check" class="legend-layer-name">' + this.name + '</label>';
-        } else {
-            this._legendContent += '<label class="legend-layer-name">' + this.name + '</label>';
-        }
-
-        this._$legendDiv = null;
-        this._applyCollapseCalled = false;
-        this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);
-    }
-
-    /**
-     * base load function, sets _loaded = true if it is not already
-     * @protected
-     * @returns {boolean} if already loaded
-     */
-
-
-    _createClass(LayerBase, [{
-        key: '_load',
-        value: function _load() {
-            if (this.loaded == true) {
-                return true;
-            } else {
-                this._loaded = true;
-
-                return false;
-            }
-        }
-
-        /**
-         * Get the legend html, be sure to only add to the DOM once
-         * @returns {string} html for layer wrapped in a div
-         */
-
-    }, {
-        key: 'getLegendDiv',
-        value: function getLegendDiv() {
-            return '<div class="legend-layer-div" id="' + this.id + '-legend-layer-div">' + this._legendContent + '</div>';
-        }
-
-        /**
-         *
-         * @param {string|undefined} additionalContent - additional content to add to legend
-         * @private
-         */
-
-    }, {
-        key: '_addLegendContent',
-        value: function _addLegendContent(additionalContent) {
-            additionalContent = typeof additionalContent == 'string' ? additionalContent : '';
-
-            var addCollapse = additionalContent.indexOf('<ul>') > -1;
-
-            if (addCollapse) {
-                additionalContent = '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>' + additionalContent;
-            }
-
-            this._legendContent += additionalContent;
-
-            this._$legendDiv = (0, _jquery2.default)('#' + this.id + '-legend-layer-div');
-
-            if (this._$legendDiv.length > 0) {
-                this._$legendDiv.append(additionalContent);
-                this.applyCollapse();
-            }
-        }
-
-        /**
-         * add additional content to the legend
-         * @param {string} [additionalContent=] - additonal content to add
-         */
-
-    }, {
-        key: 'addLegendContent',
-        value: function addLegendContent(additionalContent) {
-            this._addLegendContent(additionalContent);
-        }
-    }, {
-        key: 'applyCollapse',
-        value: function applyCollapse() {
-            if (this._applyCollapseCalled) {
-                console.log('collapse already applied');
-
-                return undefined;
-            }
-
-            this._$legendDiv = (0, _jquery2.default)('#' + this.id + '-legend-layer-div');
-
-            if (this._$legendDiv.length > 0) {
-
-                var $expander = this._$legendDiv.find('.legend-items-expander');
-
-                if ($expander.length > 0) {
-                    this._applyCollapseCalled = true;
-
-                    $expander.click(function () {
-                        var $this = (0, _jquery2.default)(this);
-
-                        $this.siblings('ul').slideToggle();
-
-                        if ($this.hasClass('legend-layer-group-collapsed')) {
-                            $this.removeClass('legend-layer-group-collapsed');
-                            $this.html('&#9660;');
-                        } else {
-                            $this.addClass('legend-layer-group-collapsed');
-                            $this.html('&#9654;');
-                        }
-                    });
-
-                    if (this._legendCollapse) {
-                        $expander.trigger('click');
-                    }
-                }
-            }
-        }
-
-        /**
-         * trick to refresh the layer
-         */
-
-    }, {
-        key: 'refresh',
-        value: function refresh() {
-            if (this.source) {
-                this.source.refresh();
-                //let src = this.source;
-                //this.olLayer.setSource(undefined);
-                //this.olLayer.setSource(src);
-            }
-        }
-
-        /**
-         * get the legend content
-         * @type {string}
-         */
-
-    }, {
-        key: 'legendContent',
-        get: function get() {
-            return this._legendContent;
-        }
-
-        /**
-         * set the legend content directly
-         * @param {string} newVal - new content
-         * @protected
-         */
-        ,
-        set: function set(newVal) {
-            this._legendContent = newVal;
-        }
-
-        /**
-         * get the map get params
-         * @type {object}
-         */
-
-    }, {
-        key: 'params',
-        get: function get() {
-            return this._params;
-        }
-
-        /**
-         * set the map get params
-         * @param {object} newParams - new get params
-         * @protected
-         */
-        ,
-        set: function set(newParams) {
-            this._params = newParams;
-        }
-
-        /**
-         * get the minimum resolution
-         * @type {number|*}
-         */
-
-    }, {
-        key: 'minResolution',
-        get: function get() {
-            return this._minResolution;
-        }
-
-        /**
-         * get the maximum resolution
-         * @type {number|*}
-         */
-
-    }, {
-        key: 'maxResolution',
-        get: function get() {
-            return this._maxResolution;
-        }
-
-        /**
-         * get min zoom
-         * @type {number|*}
-         */
-
-    }, {
-        key: 'minZoom',
-        get: function get() {
-            return this._minZoom;
-        }
-
-        /**
-         * get max zoom
-         * @type {number|*}
-         */
-
-    }, {
-        key: 'maxZoom',
-        get: function get() {
-            return this._maxZoom;
-        }
-
-        /**
-         * get the url
-         * @type {string}
-         */
-
-    }, {
-        key: 'url',
-        get: function get() {
-            return this._url;
-        }
-
-        /**
-         * Get the layer visibility
-         * @type {boolean}
-         */
-
-    }, {
-        key: 'visible',
-        get: function get() {
-            return this._visible;
-        }
-
-        /**
-         * Set the layer visibility
-         * @param {boolean} visibility - layer visibility
-         */
-        ,
-        set: function set(visibility) {
-            this._visible = visibility;
-            if (this.olLayer) {
-                this.olLayer.setVisible(this._visible);
-                if (visibility && !this._loaded) {
-                    this._load();
-                }
-            }
-        }
-
-        /**
-         * Get the layer opacity
-         * @type {number}
-         */
-
-    }, {
-        key: 'opacity',
-        get: function get() {
-            return this._opacity;
-        }
-
-        /**
-         * Set the layer opacity
-         * @param {number} opacity - layer opacity
-         */
-        ,
-        set: function set(opacity) {
-            this._opacity = opacity;
-            if (this.olLayer) {
-                this.olLayer.setOpacity(this._opacity);
-            }
-        }
-
-        /**
-         * Get the layer name
-         * @type {string}
-         */
-
-    }, {
-        key: 'name',
-        get: function get() {
-            return this._name;
-        }
-
-        /**
-         * set the layer name
-         * @param {string} newName - the new name
-         */
-        ,
-        set: function set(newName) {
-            this._name = newName;
-        }
-
-        /**
-         * Check if the layer is loaded
-         * @type {boolean}
-         */
-
-    }, {
-        key: 'loaded',
-        get: function get() {
-            return this._loaded;
-        }
-
-        /**
-         * get the layer source
-         * @type {*}
-         */
-
-    }, {
-        key: 'source',
-        get: function get() {
-            return this._source;
-        }
-
-        /**
-         * get the z index
-         * @type {number}
-         */
-
-    }, {
-        key: 'zIndex',
-        get: function get() {
-            return this._zIndex;
-        }
-
-        /**
-         * set the z index
-         * @param {number} newZ - new Z index
-         */
-        ,
-        set: function set(newZ) {
-            this._zIndex = newZ;
-            this.olLayer.setZIndex(this.zIndex);
-        }
-
-        /**
-         * 
-         * @returns {ol.layer.Base|undefined} the ol layer
-         */
-
-    }, {
-        key: 'olLayer',
-        get: function get() {
-            return this._olLayer;
-        }
-    }]);
-
-    return LayerBase;
-}();
-
-nm.LayerBase = LayerBase;
-exports.default = LayerBase;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/layers/LayerBaseVector.js b/_lib/layers/LayerBaseVector.js
deleted file mode 100644
index dd8dd7f39a12f171bc0c01e6a55cc66704c82246..0000000000000000000000000000000000000000
--- a/_lib/layers/LayerBaseVector.js
+++ /dev/null
@@ -1,372 +0,0 @@
-'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 _set = function set(object, property, value, receiver) { var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent !== null) { set(parent, property, value, receiver); } } else if ("value" in desc && desc.writable) { desc.value = value; } else { var setter = desc.set; if (setter !== undefined) { setter.call(receiver, value); } } return value; };
-
-var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
-
-var _jquery = require('../jquery/jquery');
-
-var _jquery2 = _interopRequireDefault(_jquery);
-
-var _LayerBase2 = require('./LayerBase');
-
-var _LayerBase3 = _interopRequireDefault(_LayerBase2);
-
-var _mapMove = require('../olHelpers/mapMove');
-
-var _mapMove2 = _interopRequireDefault(_mapMove);
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-var _ol = require('../ol/ol');
-
-var _ol2 = _interopRequireDefault(_ol);
-
-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 nm = (0, _provide2.default)('layers');
-
-/**
- * The make mapMoveGetParams function takes the extent and the zoom level
- * context is 'this' object, probably want to do something with this.mapMoveParams
- * @callback mapMoveMakeGetParams
- * @param {LayerBaseVector} lyr
- * @param {object} extent
- * @param {number} extent.minX
- * @param {number} extent.minY
- * @param {number} extent.maxX
- * @param {number} extent.maxY
- * @param {number} zoomLevel
- */
-
-/**
- * The Vector layer base
- * @augments LayerBase
- * @abstract
- */
-
-var LayerBaseVector = function (_LayerBase) {
-    _inherits(LayerBaseVector, _LayerBase);
-
-    /**
-     * The base vector layer
-     * @param {string} url - pass an empty string to prevent default load and add from a json source
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
-     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
-     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
-     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
-     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
-     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
-     *
-     */
-
-    function LayerBaseVector(url, options) {
-        _classCallCheck(this, LayerBaseVector);
-
-        //prevent regular load if no url has been provided
-
-        var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(LayerBaseVector).call(this, url, options));
-
-        if (_this.url.trim() == '') {
-            _this._loaded = true;
-        }
-
-        _this._style = typeof options.style == 'undefined' ? undefined : options.style;
-
-        if (_this.visible) {
-            _this._autoLoad = true;
-        } else {
-            _this._autoLoad = typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false;
-        }
-
-        _this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;
-        _this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;
-
-        if (options.mapMoveObj) {
-            _this._mapMove = options.mapMoveObj;
-        } else {
-            _this._mapMove = _this._onDemand ? _mapMove2.default : undefined;
-        }
-
-        _this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams : function (lyr, extent, zoomLevel) {
-            return {};
-        };
-
-        if (_this._onDemand) {
-            _this._loaded = true;
-            _this._mapMoveParams = {};
-            _this._mapMove.checkInit();
-            _this._mapMove.addVectorLayer(_this);
-        }
-
-        _this._source = new _ol2.default.source.Vector();
-
-        /**
-         *
-         * @type {ol.layer.Vector|ol.layer.Base}
-         */
-        _this._olLayer = new _ol2.default.layer.Vector({
-            source: _this._source,
-            visible: _this.visible,
-            style: _this.style,
-            minResolution: _this._minResolution,
-            maxResolution: _this._maxResolution,
-            zIndex: _this._zIndex
-        });
-        return _this;
-    }
-
-    /**
-     * dummy to be overridden
-     * @param {object} featureCollection - geojson or esrijson object
-     */
-
-
-    _createClass(LayerBaseVector, [{
-        key: 'addFeatures',
-        value: function addFeatures(featureCollection) {
-            console.log('Layer vector base addFeatures is a placeholder and does nothing');
-        }
-
-        /**
-         * Before call to map move callback, can prevent call by returning false
-         * @param {number} zoom - zoom level
-         * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
-         * @returns {boolean} if the call should proceed
-         */
-
-    }, {
-        key: 'mapMoveBefore',
-        value: function mapMoveBefore(zoom, evtType) {
-            if (this.minZoom !== undefined) {
-                if (zoom < this.minZoom) {
-                    return false;
-                }
-            }
-
-            if (this.maxZoom !== undefined) {
-                if (zoom > this.maxZoom) {
-                    return false;
-                }
-            }
-
-            return this.visible;
-        }
-
-        /**
-         * callback to generate the parameters passed in the get request
-         * @param {object} extent - extent object
-         * @param {number} extent.minX - minX
-         * @param {number} extent.minY - minY
-         * @param {number} extent.maxX - maxX
-         * @param {number} extent.maxY - maxY
-         * @param {number} zoomLevel - zoom level
-         */
-
-    }, {
-        key: 'mapMoveMakeGetParams',
-        value: function mapMoveMakeGetParams(extent, zoomLevel) {
-            this._mapMoveParams = {};
-            _jquery2.default.extend(this._mapMoveParams, this.params);
-            _jquery2.default.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));
-        }
-
-        /**
-         * callback function on map move
-         * @param {object} d - the json response
-         */
-
-    }, {
-        key: 'mapMoveCallback',
-        value: function mapMoveCallback(d) {
-            if (this.source) {
-                this._source.clear();
-            }
-        }
-
-        /**
-         * clear features in the layer
-         */
-
-    }, {
-        key: 'clear',
-        value: function clear() {
-            if (this._source) {
-                this._source.clear();
-            }
-        }
-
-        /**
-         * get on demand delay in miliseconds
-         * @type {number|*}
-         */
-
-    }, {
-        key: 'onDemandDelay',
-        get: function get() {
-            return this._onDemandDelay;
-        }
-
-        /**
-         * get if the layer is autoloaded
-         * @type {boolean}
-         */
-
-    }, {
-        key: 'autoLoad',
-        get: function get() {
-            return this._autoLoad;
-        }
-
-        /**
-         * get the style definition
-         * @type {ol.Style|styleFunc}
-         */
-
-    }, {
-        key: 'style',
-        get: function get() {
-            return this._style;
-        }
-
-        /**
-         * set the style
-         * @param {ol.Style|styleFunc} style - the style or function
-         */
-        ,
-        set: function set(style) {
-            this._style = style;
-            this.olLayer.setStyle(this._style);
-        }
-
-        /**
-         * get the map CRS if it is defined by the map move object
-         * @type {string|*}
-         */
-
-    }, {
-        key: 'mapCrs',
-        get: function get() {
-            if (this._mapMove) {
-                return this._mapMove.map.getView().getProjection().getCode();
-            } else {
-                return undefined;
-            }
-        }
-
-        /**
-         * get the map move object
-         * @type {MapMoveCls|*}
-         */
-
-    }, {
-        key: 'mapMove',
-        get: function get() {
-            return this._mapMove;
-        }
-
-        /**
-         * map move params
-         * @type {object}
-         */
-
-    }, {
-        key: 'mapMoveParams',
-        get: function get() {
-            return this._mapMoveParams;
-        }
-
-        /**
-        * Get the layer visibility
-        * @type {boolean}
-        */
-
-    }, {
-        key: 'visible',
-        get: function get() {
-            return _get(Object.getPrototypeOf(LayerBaseVector.prototype), 'visible', this);
-        }
-
-        /**
-         * Set the layer visibility
-         * @type {boolean}
-         * @override
-         */
-        ,
-        set: function set(visibility) {
-            _set(Object.getPrototypeOf(LayerBaseVector.prototype), 'visible', visibility, this);
-
-            if (this._onDemand) {
-                this.mapMove.triggerLyrLoad(this);
-            }
-        }
-
-        /**
-         * get the layer vector source
-         * @override
-         * @type {ol.source.Vector}
-         */
-
-    }, {
-        key: 'source',
-        get: function get() {
-            return _get(Object.getPrototypeOf(LayerBaseVector.prototype), 'source', this);
-        }
-
-        /**
-         * array of ol features
-         * @type {Array.<ol.Feature>}
-         */
-
-    }, {
-        key: 'features',
-        get: function get() {
-            return this.source.getFeatures();
-        }
-
-        /**
-         * 
-         * @returns {ol.layer|Vector|ol.layer.Base|undefined} the ol layer
-         */
-
-    }, {
-        key: 'olLayer',
-        get: function get() {
-            return _get(Object.getPrototypeOf(LayerBaseVector.prototype), 'olLayer', this);
-        }
-    }]);
-
-    return LayerBaseVector;
-}(_LayerBase3.default);
-
-nm.LayerBaseVector = LayerBaseVector;
-exports.default = LayerBaseVector;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/layers/LayerBaseVectorEsri.js b/_lib/layers/LayerBaseVectorEsri.js
deleted file mode 100644
index 51e2e10a3622108d55741bd71592bf21a7b2a65b..0000000000000000000000000000000000000000
--- a/_lib/layers/LayerBaseVectorEsri.js
+++ /dev/null
@@ -1,247 +0,0 @@
-'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 ? "symbol" : typeof 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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
-
-var _jquery = require('../jquery/jquery');
-
-var _jquery2 = _interopRequireDefault(_jquery);
-
-var _LayerBaseVector2 = require('./LayerBaseVector');
-
-var _LayerBaseVector3 = _interopRequireDefault(_LayerBaseVector2);
-
-var _esriToOlStyle = require('../olHelpers/esriToOlStyle');
-
-var esriToOl = _interopRequireWildcard(_esriToOlStyle);
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-var _ol = require('../ol/ol');
-
-var _ol2 = _interopRequireDefault(_ol);
-
-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 _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; } /**
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Created by gavorhes on 11/2/2015.
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
-
-var nm = (0, _provide2.default)('layers');
-
-/**
- * Base layer for esri vector layers
- * @augments LayerBaseVector
- */
-
-var LayerBaseVectorEsri = function (_LayerBaseVector) {
-    _inherits(LayerBaseVectorEsri, _LayerBaseVector);
-
-    /**
-     * The base vector layer
-     * @param {string} url - url for source
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
-     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
-     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
-     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
-     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
-     *
-     * @param {string} [options.where=1=1] the layer filter clause
-     * @param {string} [options.outFields=*] comma separated list of output fields, defaults to all
-     * @param {string} [options.format=pjson] the format the retrieve the data
-     * @param {number} [options.outSR=3857] the output spatial reference, defaults to web mercator
-     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used
-     * @param {boolean} [options.collapseLegend=false] if the legend should be initially collapsed
-     * @param {number} [options.mapMoveMakeGetParams=function(extent, zoomLevel){}] function to create additional map move params
-     */
-
-    function LayerBaseVectorEsri(url, options) {
-        _classCallCheck(this, LayerBaseVectorEsri);
-
-        if (_typeof(options.params) != 'object') {
-            options.params = {};
-        }
-        options.params['where'] = options.where || '1=1';
-        options.params['outFields'] = options.outFields || '*';
-        options.params['f'] = options.format || 'pjson';
-        options.params['outSR'] = options.outSR || 3857;
-
-        var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(LayerBaseVectorEsri).call(this, url, options));
-
-        _this._outSR = _this.params['outSR'];
-        _this._esriFormat = new _ol2.default.format.EsriJSON();
-
-        if (_this._url[_this._url.length - 1] !== '/') {
-            _this._url += '/';
-        }
-
-        _this._urlCopy = _this.url;
-        _this._url += 'query?callback=?';
-
-        if (_this.autoLoad || _this.visible) {
-            _this._load();
-        }
-
-        _this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;
-
-        if (_this._useEsriStyle) {
-            _this.addLegendContent();
-        }
-        return _this;
-    }
-
-    /**
-     * add additional content to the legend
-     * @param {string} [additionalContent=''] additional content to add to legend
-     */
-
-
-    _createClass(LayerBaseVectorEsri, [{
-        key: 'addLegendContent',
-        value: function addLegendContent(additionalContent) {
-            var _this2 = this;
-
-            if (!this._useEsriStyle) {
-                _get(Object.getPrototypeOf(LayerBaseVectorEsri.prototype), 'addLegendContent', this).call(this, additionalContent);
-            } else {
-                _jquery2.default.get(this._urlCopy + '?f=pjson&callback=?', {}, function (d) {
-                    if (d['subLayers'].length > 0) {
-                        alert('should only use single feature layers, not groups');
-
-                        return;
-                    }
-
-                    var newStyleAndLegend = esriToOl.makeFeatureServiceLegendAndSymbol(d);
-                    _this2.style = newStyleAndLegend.style;
-                    _get(Object.getPrototypeOf(LayerBaseVectorEsri.prototype), 'addLegendContent', _this2).call(_this2, newStyleAndLegend.legend);
-                }, 'json');
-            }
-        }
-
-        /**
-         * add feature collection
-         * @param {object} featureCollection - features as esrijson
-         */
-
-    }, {
-        key: 'addFeatures',
-        value: function addFeatures(featureCollection) {
-            var feats = this._esriFormat.readFeatures(featureCollection);
-            this.source.addFeatures(feats);
-        }
-
-        /**
-         * trigger load features
-         * @protected
-         * @returns {boolean} if already loaded
-         */
-
-    }, {
-        key: '_load',
-        value: function _load() {
-            var _this3 = this;
-
-            if (_get(Object.getPrototypeOf(LayerBaseVectorEsri.prototype), '_load', this).call(this)) {
-                return true;
-            }
-            _jquery2.default.get(this._url, this.params, function (d) {
-                _this3.addFeatures(d);
-                _this3.loadCallback(_this3);
-            }, 'json').fail(function () {
-                _this3._loaded = false;
-            });
-
-            return false;
-        }
-
-        /**
-         * callback to generate the parameters passed in the get request
-         * @param {object} extent - extent object
-         * @param {number} extent.minX - minX
-         * @param {number} extent.minY - minY
-         * @param {number} extent.maxX - maxX
-         * @param {number} extent.maxY - maxY
-         * @param {number} zoomLevel - zoom level
-         */
-
-    }, {
-        key: 'mapMoveMakeGetParams',
-        value: function mapMoveMakeGetParams(extent, zoomLevel) {
-            _get(Object.getPrototypeOf(LayerBaseVectorEsri.prototype), 'mapMoveMakeGetParams', this).call(this, extent, zoomLevel);
-            this.mapMoveParams['geometry'] = extent.minX + ',' + extent.minY + ',' + extent.maxX + ',' + extent.maxY;
-            this.mapMoveParams['geometryType'] = 'esriGeometryEnvelope';
-            this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';
-            this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';
-            this.mapMoveParams['inSR'] = 3857;
-            if (this._outSR == 3857) {
-                this.mapMoveParams['geometryPrecision'] = 1;
-            }
-        }
-
-        /**
-         * Before call to map move callback, can prevent call by returning false
-         * @param {number} zoom - zoom level
-         * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
-         * @returns {boolean} if the call should proceed
-         */
-
-    }, {
-        key: 'mapMoveBefore',
-        value: function mapMoveBefore(zoom, evtType) {
-            return _get(Object.getPrototypeOf(LayerBaseVectorEsri.prototype), 'mapMoveBefore', this).call(this, zoom, evtType);
-            //if (super.mapMoveBefore(zoom, evtType)){
-            //    //place holder for additional processing
-            //    return true;
-            //} else {
-            //    return false;
-            //}
-        }
-
-        /**
-         * callback function on map move
-         * @param {object} d - the json response
-         */
-
-    }, {
-        key: 'mapMoveCallback',
-        value: function mapMoveCallback(d) {
-            _get(Object.getPrototypeOf(LayerBaseVectorEsri.prototype), 'mapMoveCallback', this).call(this, d);
-            this.source.addFeatures(this._esriFormat.readFeatures(d));
-        }
-    }]);
-
-    return LayerBaseVectorEsri;
-}(_LayerBaseVector3.default);
-
-nm.LayerBaseVectorEsri = LayerBaseVectorEsri;
-exports.default = LayerBaseVectorEsri;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/layers/LayerBaseVectorGeoJson.js b/_lib/layers/LayerBaseVectorGeoJson.js
deleted file mode 100644
index 95f28992cc0b1ef6c39700487cd3e3ea268dc528..0000000000000000000000000000000000000000
--- a/_lib/layers/LayerBaseVectorGeoJson.js
+++ /dev/null
@@ -1,154 +0,0 @@
-'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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
-
-var _jquery = require('../jquery/jquery');
-
-var _jquery2 = _interopRequireDefault(_jquery);
-
-var _LayerBaseVector2 = require('./LayerBaseVector');
-
-var _LayerBaseVector3 = _interopRequireDefault(_LayerBaseVector2);
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-var _ol = require('../ol/ol');
-
-var _ol2 = _interopRequireDefault(_ol);
-
-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; } /**
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Created by gavorhes on 11/2/2015.
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
-
-var nm = (0, _provide2.default)('layers');
-
-/**
- * The Vector GeoJson Layer
- * @augments LayerBaseVector
- */
-
-var LayerBaseVectorGeoJson = function (_LayerBaseVector) {
-    _inherits(LayerBaseVectorGeoJson, _LayerBaseVector);
-
-    /**
-     * @param {string|undefined|null} url - resource url, set to '' to make blank layer
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
-     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
-     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
-     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
-     *
-     * @param {object} [options.transform={}] SR transform, set as false for no transform
-     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS
-     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS
-     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
-     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
-     */
-
-    function LayerBaseVectorGeoJson(url, options) {
-        _classCallCheck(this, LayerBaseVectorGeoJson);
-
-        url = typeof url == 'string' ? url : '';
-
-        var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(LayerBaseVectorGeoJson).call(this, url, options));
-
-        _this._geoJsonFormat = new _ol2.default.format.GeoJSON();
-
-        _this._transform = options.transform || {};
-        _this._transform.dataProjection = _this._transform.dataProjection || "EPSG:4326";
-        _this._transform.featureProjection = _this._transform.featureProjection || "EPSG:3857";
-
-        if (_this.autoLoad || _this.visible) {
-            _this._load();
-        }
-        return _this;
-    }
-
-    /**
-     * add feature collection
-     * @param {object} featureCollection - as geojson object
-     */
-
-
-    _createClass(LayerBaseVectorGeoJson, [{
-        key: 'addFeatures',
-        value: function addFeatures(featureCollection) {
-            if (this._transform.dataProjection == 'EPSG:3857' && this._transform.featureProjection == 'EPSG:3857') {
-                this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection));
-            } else {
-                this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection, this._transform));
-            }
-        }
-
-        /**
-         * trigger load features
-         * @protected
-         * @returns {boolean} if already loaded
-         */
-
-    }, {
-        key: '_load',
-        value: function _load() {
-            var _this2 = this;
-
-            if (_get(Object.getPrototypeOf(LayerBaseVectorGeoJson.prototype), '_load', this).call(this)) {
-                return true;
-            }
-
-            _jquery2.default.get(this._url, this._params, function (d) {
-                _this2.addFeatures(d);
-                _this2.loadCallback(_this2);
-            }, 'json').fail(function () {
-                this._loaded = false;
-            });
-
-            return false;
-        }
-
-        /**
-         * callback function on map move
-         * @param {object} d the json response
-         * @override
-         */
-
-    }, {
-        key: 'mapMoveCallback',
-        value: function mapMoveCallback(d) {
-            _get(Object.getPrototypeOf(LayerBaseVectorGeoJson.prototype), 'mapMoveCallback', this).call(this, d);
-            this._source.addFeatures(this._geoJsonFormat.readFeatures(d, this._transform));
-        }
-    }]);
-
-    return LayerBaseVectorGeoJson;
-}(_LayerBaseVector3.default);
-
-nm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;
-exports.default = LayerBaseVectorGeoJson;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/layers/LayerBaseXyzTile.js b/_lib/layers/LayerBaseXyzTile.js
deleted file mode 100644
index 72f53ec4b3cc3a3efffdef008cfb81c8d9f568eb..0000000000000000000000000000000000000000
--- a/_lib/layers/LayerBaseXyzTile.js
+++ /dev/null
@@ -1,171 +0,0 @@
-'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 ? "symbol" : typeof 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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
-
-var _jquery = require('../jquery/jquery');
-
-var _jquery2 = _interopRequireDefault(_jquery);
-
-var _LayerBase2 = require('./LayerBase');
-
-var _LayerBase3 = _interopRequireDefault(_LayerBase2);
-
-var _esriToOlStyle = require('../olHelpers/esriToOlStyle');
-
-var esriToOl = _interopRequireWildcard(_esriToOlStyle);
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-var _ol = require('../ol/ol');
-
-var _ol2 = _interopRequireDefault(_ol);
-
-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 _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; } /**
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Created by gavorhes on 12/4/2015.
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
-
-
-var nm = (0, _provide2.default)('layers');
-
-/**
- * XYZ tile
- * @augments LayerBase
- */
-
-var LayerBaseXyzTile = function (_LayerBase) {
-    _inherits(LayerBaseXyzTile, _LayerBase);
-
-    /**
-     * The XYZ tile layer
-     * @param {string} url - url for source
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used
-     */
-
-    function LayerBaseXyzTile(url, options) {
-        _classCallCheck(this, LayerBaseXyzTile);
-
-        var _this2 = _possibleConstructorReturn(this, Object.getPrototypeOf(LayerBaseXyzTile).call(this, url, options));
-
-        _this2._source = new _ol2.default.source.XYZ({ url: _this2.url == '' ? undefined : _this2.url });
-        _this2._olLayer = new _ol2.default.layer.Tile({
-            source: _this2._source,
-            visible: _this2.visible,
-            opacity: _this2.opacity,
-            minResolution: _this2._minResolution,
-            maxResolution: _this2._maxResolution,
-            zIndex: _this2._zIndex
-        });
-
-        _this2._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;
-
-        if (_this2._useEsriStyle) {
-            _this2.addLegendContent();
-        }
-        return _this2;
-    }
-
-    /**
-     * add additional content to the legend
-     * @param {string} [additionalContent=''] additional content for legend
-     */
-
-
-    _createClass(LayerBaseXyzTile, [{
-        key: 'addLegendContent',
-        value: function addLegendContent(additionalContent) {
-            var _this3 = this;
-
-            if (!this._useEsriStyle) {
-                _get(Object.getPrototypeOf(LayerBaseXyzTile.prototype), 'addLegendContent', this).call(this, additionalContent);
-            } else {
-                var _ret = function () {
-                    var urlCopy = _this3.url;
-
-                    var mapServerIndex = urlCopy.toLowerCase().indexOf('mapserver');
-                    if (mapServerIndex > -1) {
-                        urlCopy = urlCopy.slice(0, mapServerIndex + 9);
-                    } else {
-                        return {
-                            v: void 0
-                        };
-                    }
-
-                    if (urlCopy[urlCopy.length - 1] !== '/') {
-                        urlCopy += '/';
-                    }
-
-                    urlCopy += 'legend?f=pjson&callback=?';
-
-                    var _this = _this3;
-                    var superAddLegend = _get(Object.getPrototypeOf(LayerBaseXyzTile.prototype), 'addLegendContent', _this3);
-
-                    _jquery2.default.get(urlCopy, {}, function (d) {
-                        var newHtml = esriToOl.makeMapServiceLegend(d);
-                        superAddLegend.call(_this, newHtml);
-                    }, 'json');
-                }();
-
-                if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
-            }
-        }
-
-        /**
-         *
-         * @returns {ol.source.XYZ} the vector source
-         */
-
-    }, {
-        key: 'source',
-        get: function get() {
-            return _get(Object.getPrototypeOf(LayerBaseXyzTile.prototype), 'source', this);
-        }
-
-        /**
-         *
-         * @returns {ol.layer.Tile|ol.layer.Base|undefined} the ol layer
-         */
-
-    }, {
-        key: 'olLayer',
-        get: function get() {
-            return _get(Object.getPrototypeOf(LayerBaseXyzTile.prototype), 'olLayer', this);
-        }
-    }]);
-
-    return LayerBaseXyzTile;
-}(_LayerBase3.default);
-
-nm.LayerBaseXyzTile = LayerBaseXyzTile;
-exports.default = LayerBaseXyzTile;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/layers/LayerEsriMapServer.js b/_lib/layers/LayerEsriMapServer.js
deleted file mode 100644
index 9e2bb5158c7a97d87d0c995b5c74429111fe84fb..0000000000000000000000000000000000000000
--- a/_lib/layers/LayerEsriMapServer.js
+++ /dev/null
@@ -1,245 +0,0 @@
-'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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
-
-var _jquery = require('../jquery/jquery');
-
-var _jquery2 = _interopRequireDefault(_jquery);
-
-var _LayerBase2 = require('./LayerBase');
-
-var _LayerBase3 = _interopRequireDefault(_LayerBase2);
-
-var _esriToOlStyle = require('../olHelpers/esriToOlStyle');
-
-var esriToOl = _interopRequireWildcard(_esriToOlStyle);
-
-var _mapPopup = require('../olHelpers/mapPopup');
-
-var _mapPopup2 = _interopRequireDefault(_mapPopup);
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-var _ol = require('../ol/ol');
-
-var _ol2 = _interopRequireDefault(_ol);
-
-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 _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; } /**
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Created by gavorhes on 12/7/2015.
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
-
-
-var nm = (0, _provide2.default)('layers');
-
-/**
- * esri mapserver layer
- * @augments LayerBase
- */
-
-var LayerEsriMapServer = function (_LayerBase) {
-    _inherits(LayerEsriMapServer, _LayerBase);
-
-    /**
-     * The base layer for all others
-     * @param {string} url - resource url
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     * @param {boolean} [options.addPopup=false] if a popup should be added
-     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added
-     */
-
-    function LayerEsriMapServer(url, options) {
-        _classCallCheck(this, LayerEsriMapServer);
-
-        var _this2 = _possibleConstructorReturn(this, Object.getPrototypeOf(LayerEsriMapServer).call(this, url, options));
-
-        _this2._source = new _ol2.default.source.TileArcGISRest({
-            url: _this2.url == '' ? undefined : _this2.url,
-            params: typeof options.showLayers == 'undefined' ? undefined : { layers: 'show:' + options.showLayers.join(',') }
-        });
-
-        _this2._olLayer = new _ol2.default.layer.Tile({
-            source: _this2._source,
-            visible: _this2.visible,
-            opacity: _this2.opacity,
-            minResolution: _this2._minResolution,
-            maxResolution: _this2._maxResolution,
-            zIndex: _this2._zIndex
-        });
-
-        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;
-
-        _this2._esriFormat = new _ol2.default.format.EsriJSON();
-        _this2._popupRequest = null;
-
-        _this2.addLegendContent();
-
-        if (options.addPopup) {
-            _mapPopup2.default.addMapServicePopup(_this2);
-        }
-        return _this2;
-    }
-
-    /**
-     * add additional content to the legend
-     * @param {string} [additionalContent=''] additional content for legend
-     */
-
-
-    _createClass(LayerEsriMapServer, [{
-        key: 'addLegendContent',
-        value: function addLegendContent(additionalContent) {
-            var urlCopy = this.url;
-
-            if (urlCopy[urlCopy.length - 1] !== '/') {
-                urlCopy += '/';
-            }
-
-            urlCopy += 'legend?f=pjson&callback=?';
-
-            var _this = this;
-            var superAddLegend = _get(Object.getPrototypeOf(LayerEsriMapServer.prototype), 'addLegendContent', this);
-
-            _jquery2.default.get(urlCopy, {}, function (d) {
-                var newHtml = esriToOl.makeMapServiceLegend(d);
-                superAddLegend.call(_this, newHtml);
-            }, 'json');
-        }
-    }, {
-        key: 'getPopupInfo',
-        value: function getPopupInfo(queryParams) {
-            if (!this.visible) {
-                return;
-            }
-
-            var urlCopy = this.url;
-
-            if (urlCopy[urlCopy.length - 1] != '/') {
-                urlCopy += '/';
-            }
-
-            urlCopy += 'identify?callback=?';
-
-            var _this = this;
-
-            if (this._popupRequest != null) {
-                this._popupRequest.abort();
-            }
-
-            this._popupRequest = _jquery2.default.get(urlCopy, queryParams, function (d) {
-                var _iteratorNormalCompletion = true;
-                var _didIteratorError = false;
-                var _iteratorError = undefined;
-
-                try {
-                    for (var _iterator = d['results'][Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
-                        var r = _step.value;
-
-
-                        var popupHtml = '<table class="esri-popup-table">';
-
-                        for (var a in r['attributes']) {
-                            if (r['attributes'].hasOwnProperty(a)) {
-                                var attrVal = r['attributes'][a];
-
-                                if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {
-                                    continue;
-                                }
-
-                                var attr = a;
-                                if (attr.length > 14) {
-                                    attr = attr.slice(0, 11) + '...';
-                                }
-
-                                popupHtml += '<tr><td>' + attr + '</td><td>' + attrVal + '</td></tr>';
-                            }
-                        }
-
-                        popupHtml += '</table>';
-
-                        _mapPopup2.default.addMapServicePopupContent(_this._esriFormat.readFeature(r), _this, popupHtml, r['layerName']);
-                    }
-                } catch (err) {
-                    _didIteratorError = true;
-                    _iteratorError = err;
-                } finally {
-                    try {
-                        if (!_iteratorNormalCompletion && _iterator.return) {
-                            _iterator.return();
-                        }
-                    } finally {
-                        if (_didIteratorError) {
-                            throw _iteratorError;
-                        }
-                    }
-                }
-            }, 'json').always(function () {
-                _this._popupRequest = null;
-            });
-        }
-
-        /**
-         * overwrite the base load
-         * @protected
-         */
-
-    }, {
-        key: '_load',
-        value: function _load() {}
-
-        /**
-         *
-         * @returns {ol.source.TileArcGISRest} the vector source
-         */
-
-    }, {
-        key: 'source',
-        get: function get() {
-            return _get(Object.getPrototypeOf(LayerEsriMapServer.prototype), 'source', this);
-        }
-
-        /**
-         *
-         * @returns {ol.layer.Tile|ol.layer.Base|undefined} the ol layer
-         */
-
-    }, {
-        key: 'olLayer',
-        get: function get() {
-            return _get(Object.getPrototypeOf(LayerEsriMapServer.prototype), 'olLayer', this);
-        }
-    }]);
-
-    return LayerEsriMapServer;
-}(_LayerBase3.default);
-
-nm.LayerEsriMapServer = LayerEsriMapServer;
-exports.default = LayerEsriMapServer;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/layers/LayerEsriTile.js b/_lib/layers/LayerEsriTile.js
deleted file mode 100644
index 8fcf73591eeeafd608a7d94dcda6ca2a74bcb68c..0000000000000000000000000000000000000000
--- a/_lib/layers/LayerEsriTile.js
+++ /dev/null
@@ -1,71 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-var _LayerBaseXyzTile2 = require('./LayerBaseXyzTile');
-
-var _LayerBaseXyzTile3 = _interopRequireDefault(_LayerBaseXyzTile2);
-
-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; } /**
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Created by gavorhes on 12/4/2015.
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
-
-
-var nm = (0, _provide2.default)('layers');
-
-/**
- * Esri tile
- * @augments LayerBaseXyzTile
- */
-
-var LayerEsriTile = function (_LayerBaseXyzTile) {
-  _inherits(LayerEsriTile, _LayerBaseXyzTile);
-
-  /**
-   * The Esri tile layer
-   * @param {string} url - url for source
-   * @param {object} options - config
-   * @param {string} [options.id] - layer id
-   * @param {string} [options.name=Unnamed Layer] - layer name
-   * @param {number} [options.opacity=1] - opacity
-   * @param {boolean} [options.visible=true] - default visible
-   * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-   * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-   * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-   * @param {number} [options.zIndex=0] the z index for the layer
-   * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-   * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-   * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-   * @param {boolean} [options.legendContent] additional content to add to the legend
-   * @param {boolean} [options.useEsriStyle=false] if the map service style should be used
-   */
-
-  function LayerEsriTile(url, options) {
-    _classCallCheck(this, LayerEsriTile);
-
-    if (url.search(/\/$/) == -1) {
-      url += '/';
-    }
-    url += 'tile/{z}/{y}/{x}';
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(LayerEsriTile).call(this, url, options));
-  }
-
-  return LayerEsriTile;
-}(_LayerBaseXyzTile3.default);
-
-nm.LayerBaseXyzTile = LayerEsriTile;
-exports.default = LayerEsriTile;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/layers/LayerItsInventory.js b/_lib/layers/LayerItsInventory.js
deleted file mode 100644
index 90a8c5f52fceefd70bce39b326807d8f22679941..0000000000000000000000000000000000000000
--- a/_lib/layers/LayerItsInventory.js
+++ /dev/null
@@ -1,416 +0,0 @@
-'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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
-
-var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; /**
-                                                                                                                                                                                                                                                   * Created by gavorhes on 12/8/2015.
-                                                                                                                                                                                                                                                   */
-
-var _jquery = require('../jquery/jquery');
-
-var _jquery2 = _interopRequireDefault(_jquery);
-
-var _LayerBaseVectorGeoJson = require('./LayerBaseVectorGeoJson');
-
-var _LayerBaseVectorGeoJson2 = _interopRequireDefault(_LayerBaseVectorGeoJson);
-
-var _mapPopup = require('../olHelpers/mapPopup');
-
-var _mapPopup2 = _interopRequireDefault(_mapPopup);
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-var _ol = require('../ol/ol');
-
-var _ol2 = _interopRequireDefault(_ol);
-
-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 nm = (0, _provide2.default)('layers');
-
-function checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
-    "use strict";
-
-    //make sure one and only one configuration is defined;
-
-    var configCount = 0;
-    if (typeof itsIcon == 'string') {
-        configCount++;
-    }
-
-    if ((typeof itsLineStyle === 'undefined' ? 'undefined' : _typeof(itsLineStyle)) == 'object') {
-        itsLineStyle.width = typeof itsLineStyle.width == 'number' ? itsLineStyle.width : 5;
-        itsLineStyle.color = typeof itsLineStyle.color == 'string' ? itsLineStyle.color : 'red';
-        configCount++;
-    }
-
-    if ((typeof itsIconConfig === 'undefined' ? 'undefined' : _typeof(itsIconConfig)) == 'object') {
-        itsIconConfig.defaultName = itsIconConfig.defaultName || 'Other';
-
-        if (typeof itsIconConfig.iconArray == 'undefined') {
-            itsIconConfig.iconArray = [];
-        }
-
-        configCount++;
-    }
-
-    if ((typeof itsLineConfig === 'undefined' ? 'undefined' : _typeof(itsLineConfig)) == 'object') {
-        itsLineConfig.defaultName = itsLineConfig.defaultName || 'Other';
-        itsLineConfig.defaultWidth = itsLineConfig.defaultWidth || 5;
-        itsLineConfig.defaultColor = itsLineConfig.defaultColor || 'red';
-
-        if (typeof itsLineConfig.lineArray == 'undefined') {
-            itsLineConfig.lineArray = [];
-        }
-
-        // set the width if not defined
-        for (var i = 0; i < itsLineConfig.lineArray.length; i++) {
-            if (itsLineConfig.lineArray[i].length == 3) {
-                itsLineConfig.lineArray[i].push(5);
-            }
-        }
-
-        configCount++;
-    }
-
-    if (configCount > 1) {
-        throw 'Only one style config can be defined';
-    }
-}
-
-/**
- *
- * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/
- *
- * @param {object} [itsLineStyle=undefined] A single line style
- * @param {string} itsLineStyle.color the line color as rgb or hex
- * @param {number} [itsLineStyle.width=5] the line width
- *
- * @param {object} [itsIconConfig=undefined] The icon subtype configuration
- * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization
- * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found
- * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches
- * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]
- *
- * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization
- * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization
- * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found
- * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches
- * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches
- * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]
- * @returns {*} undefined, style, or style function
- */
-function defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
-    "use strict";
-
-    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);
-
-    var _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';
-
-    if (itsIcon) {
-        return new _ol2.default.style.Style({
-            image: new _ol2.default.style.Icon({
-                src: _iconUrlRoot + itsIcon,
-                crossOrigin: 'anonymous'
-            })
-        });
-    } else if (itsLineStyle) {
-        return new _ol2.default.style.Style({
-            stroke: new _ol2.default.style.Stroke({
-                color: itsLineStyle.color,
-                width: itsLineStyle.width
-            })
-        });
-    } else if (itsIconConfig) {
-        return function (feature) {
-            var symbolProp = feature.getProperties()[itsIconConfig.prop];
-            var iconUrl = _iconUrlRoot + itsIconConfig.defaultIcon;
-
-            for (var i = 0; i < itsIconConfig.iconArray.length; i++) {
-                var thisProp = itsIconConfig.iconArray[i];
-
-                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {
-                    iconUrl = _iconUrlRoot + thisProp[2];
-                    break;
-                }
-            }
-
-            return [new _ol2.default.style.Style({
-                image: new _ol2.default.style.Icon({
-                    src: iconUrl,
-                    crossOrigin: 'anonymous'
-                })
-            })];
-        };
-    } else if (itsLineConfig) {
-        return function (feature) {
-            var symbolProp = feature.getProperties()[itsLineConfig.prop];
-            var colr = itsLineConfig.defaultColor || 'red';
-            var width = itsLineConfig.defaultWidth || 5;
-
-            for (var i = 0; i < itsLineConfig.lineArray.length; i++) {
-                var thisProp = itsLineConfig.lineArray[i];
-
-                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {
-                    colr = thisProp[2];
-                    width = thisProp[3];
-                    break;
-                }
-            }
-
-            return [new _ol2.default.style.Style({
-                stroke: new _ol2.default.style.Stroke({
-                    color: colr,
-                    width: width
-                })
-            })];
-        };
-    } else {
-        return undefined;
-    }
-}
-
-/**
- *
- * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/
- *
- * @param {object} [itsLineStyle=undefined] A single line style
- * @param {string} itsLineStyle.color the line color as rgb or hex
- * @param {number} [itsLineStyle.width=5] the line width
- *
- * @param {object} [itsIconConfig=undefined] The icon subtype configuration
- * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization
- * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found
- * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches
- * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]
- *
- * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization
- * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization
- * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found
- * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches
- * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches
- * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]
- * @returns {string} html to be added to the legend
- */
-function defineLegend(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
-    "use strict";
-
-    var iconHeight = 17;
-
-    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);
-
-    var _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';
-
-    if (itsIcon) {
-        return '<img src="' + (_iconUrlRoot + itsIcon) + '" class="legend-layer-icon" height="' + iconHeight + '">';
-    } else if (itsLineStyle) {
-        return '<hr style="height: ' + itsLineStyle.width + 'px; background-color: ' + itsLineStyle.color + '">';
-    } else if (itsIconConfig) {
-        var outHtml = '';
-        outHtml += '<ul>';
-
-        var _iteratorNormalCompletion = true;
-        var _didIteratorError = false;
-        var _iteratorError = undefined;
-
-        try {
-            for (var _iterator = itsIconConfig.iconArray[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
-                var a = _step.value;
-
-                outHtml += '<li><span class="legend-layer-subitem">' + a[1] + '</span><img src="' + (_iconUrlRoot + a[2]) + '" class="legend-layer-icon" height="' + iconHeight + '">';
-            }
-        } catch (err) {
-            _didIteratorError = true;
-            _iteratorError = err;
-        } finally {
-            try {
-                if (!_iteratorNormalCompletion && _iterator.return) {
-                    _iterator.return();
-                }
-            } finally {
-                if (_didIteratorError) {
-                    throw _iteratorError;
-                }
-            }
-        }
-
-        outHtml += '<li><span class="legend-layer-subitem">' + itsIconConfig.defaultName + '</span>' + ('<img src="' + (_iconUrlRoot + itsIconConfig.defaultIcon) + '" class="legend-layer-icon" height="' + iconHeight + '"></li>');
-        outHtml += '</ul>';
-
-        return outHtml;
-    } else if (itsLineConfig) {
-        var _outHtml = '';
-        _outHtml += '<ul>';
-        var _iteratorNormalCompletion2 = true;
-        var _didIteratorError2 = false;
-        var _iteratorError2 = undefined;
-
-        try {
-            for (var _iterator2 = itsLineConfig.lineArray[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
-                var ls = _step2.value;
-
-                _outHtml += '<li><span class="legend-layer-subitem">' + ls[1] + '</span>' + ('<hr style="height: ' + ls[3] + 'px; background-color: ' + ls[2] + '">');
-            }
-        } catch (err) {
-            _didIteratorError2 = true;
-            _iteratorError2 = err;
-        } finally {
-            try {
-                if (!_iteratorNormalCompletion2 && _iterator2.return) {
-                    _iterator2.return();
-                }
-            } finally {
-                if (_didIteratorError2) {
-                    throw _iteratorError2;
-                }
-            }
-        }
-
-        _outHtml += '<li><span class="legend-layer-subitem">' + itsLineConfig.defaultName + '</span>' + ('<hr style="height: ' + itsLineConfig.defaultWidth + 'px; background-color: ' + itsLineConfig.defaultColor + '"></li>');
-        _outHtml += '</ul>';
-
-        return _outHtml;
-    } else {
-        return '';
-    }
-}
-
-/**
- * Its Layer class
- * @augments LayerBaseVectorGeoJson
- */
-
-var LayerItsInventory = function (_LayerBaseVectorGeoJs) {
-    _inherits(LayerItsInventory, _LayerBaseVectorGeoJs);
-
-    /**
-     * ITS device layer, types available at http://transportal.cee.wisc.edu/its/inventory/
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
-     * @param {object|*} [options.style=undefined] the layer style, use openlayers default style if not defined
-     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
-     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
-     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
-     *
-     * @param {string} options.itsType the ITS device type, use the url flag at http://transportal.cee.wisc.edu/its/inventory/
-     * @param {boolean} [options.addPopup=true] if the popup should be added automatically
-     *
-     * @param {string} [options.itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/
-     *
-     * @param {object} [options.itsLineStyle=undefined] A single line style
-     * @param {string} options.itsLineStyle.color the line color as rgb or hex
-     * @param {number} [options.itsLineStyle.width=5] the line width
-     *
-     * @param {object} [options.itsIconConfig=undefined] The icon subtype configuration
-     * @param {string} options.itsIconConfig.prop The property used to define icon attribute symbolization
-     * @param {string} options.itsIconConfig.defaultName The default name to be used if no other match is found
-     * @param {string} options.itsIconConfig.defaultIcon The default icon to be used for no other matches
-     * @param {object} [options.itsIconConfig.iconArray=[]] an array, items with format [property, name, img]
-     *
-     * @param {object} [options.itsLineConfig=undefined] The property used to define icon attribute symbolization
-     * @param {string} options.itsLineConfig.prop The property used to define icon attribute symbolization
-     * @param {string} [options.itsLineConfig.defaultName=Other] The default name to be used if no other match is found
-     * @param {string} [options.itsLineConfig.defaultColor=red] The default line color to be used for no other matches
-     * @param {number} [options.itsLineConfig.defaultWidth] The default line width to be used for no other matches
-     * @param {object} [options.itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width = 5]
-     */
-
-    function LayerItsInventory(options) {
-        _classCallCheck(this, LayerItsInventory);
-
-        if (typeof options.itsType !== 'string') {
-            throw 'its type must be defined';
-        }
-
-        var addToLegend = '';
-
-        // define a style with the helper function if it is not explicitly defined
-        if (typeof options.style == 'undefined') {
-            options.style = defineStyle(options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig);
-            addToLegend = defineLegend(options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig);
-        }
-
-        options.params = _typeof(options.params) == 'object' ? options.params : {};
-        _jquery2.default.extend(options.params, { format: 'JSON', resource: options.itsType });
-
-        //add any additional content to the legend
-
-        var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(LayerItsInventory).call(this, 'http://transportal.cee.wisc.edu/its/inventory/', options));
-
-        _this.addLegendContent(addToLegend);
-
-        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : true;
-
-        if (options.addPopup) {
-            _mapPopup2.default.addVectorPopup(_this, function (props) {
-                return '<iframe src="http://transportal.cee.wisc.edu/its/inventory/?feature=' + props['featureGuid'] + '" ' + 'height="250" width="350"></iframe>';
-            });
-        }
-        return _this;
-    }
-
-    /**
-     * callback to generate the parameters passed in the get request
-     * @callback makeGetParams
-     * @param {object} extent - extent object
-     * @param {number} extent.minX - minX
-     * @param {number} extent.minY - minY
-     * @param {number} extent.maxX - maxX
-     * @param {number} extent.maxY - maxY
-     * @param {number} zoomLevel - zoom level
-     */
-
-
-    _createClass(LayerItsInventory, [{
-        key: 'mapMoveMakeGetParams',
-        value: function mapMoveMakeGetParams(extent, zoomLevel) {
-            _get(Object.getPrototypeOf(LayerItsInventory.prototype), 'mapMoveMakeGetParams', this).call(this, extent, zoomLevel);
-            var lowerLeft = new _ol2.default.geom.Point([extent.minX, extent.minY]);
-            lowerLeft.transform(this.mapCrs, "EPSG:4326");
-            var lowerLeftCoordinates = lowerLeft.getCoordinates();
-            var upperRight = new _ol2.default.geom.Point([extent.maxX, extent.maxY]);
-            upperRight.transform(this.mapCrs, "EPSG:4326");
-            var upperRightCoordinates = upperRight.getCoordinates();
-
-            _jquery2.default.extend(this.mapMoveParams, {
-                L: lowerLeftCoordinates[0],
-                R: upperRightCoordinates[0],
-                B: lowerLeftCoordinates[1],
-                T: upperRightCoordinates[1]
-            });
-        }
-    }]);
-
-    return LayerItsInventory;
-}(_LayerBaseVectorGeoJson2.default);
-
-nm.LayerItsInventory = LayerItsInventory;
-exports.default = LayerItsInventory;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/layers/LayerRealEarthTile.js b/_lib/layers/LayerRealEarthTile.js
deleted file mode 100644
index 2e6ce7f8727723e49fe5b7b6c9b37360fb2bf7c5..0000000000000000000000000000000000000000
--- a/_lib/layers/LayerRealEarthTile.js
+++ /dev/null
@@ -1,91 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-    value: true
-});
-
-var _jquery = require('../jquery/jquery');
-
-var _jquery2 = _interopRequireDefault(_jquery);
-
-var _LayerBaseXyzTile2 = require('./LayerBaseXyzTile');
-
-var _LayerBaseXyzTile3 = _interopRequireDefault(_LayerBaseXyzTile2);
-
-var _RealEarthAnimateTile = require('../mixin/RealEarthAnimateTile');
-
-var _RealEarthAnimateTile2 = _interopRequireDefault(_RealEarthAnimateTile);
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-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; } /**
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Created by gavorhes on 11/4/2015.
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
-
-var mixIns = require('es6-mixins');
-var nm = (0, _provide2.default)('layers');
-
-/**
- * Real earth tile
- * @augments LayerBaseXyzTile
- */
-
-var LayerRealEarthTile = function (_LayerBaseXyzTile) {
-    _inherits(LayerRealEarthTile, _LayerBaseXyzTile);
-
-    /**
-     * The base layer for all others
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {string} options.products - the products to request
-     * @param {boolean} [options.hasTimes=false] If the layer is time dependent, fixed set of dates
-     * @param {boolean} [options.animate=false] if the layer should be animated
-     */
-
-    function LayerRealEarthTile(options) {
-        _classCallCheck(this, LayerRealEarthTile);
-
-        options.animate = typeof options.animate == 'boolean' ? options.animate : false;
-        if (!options.animate) {
-            var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(LayerRealEarthTile).call(this, 'http://realearth.ssec.wisc.edu/api/image?products=' + options.products + '&x={x}&y={y}&z={z}', options));
-
-            _this._products = options.products;
-        } else {
-            var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(LayerRealEarthTile).call(this, '', options));
-
-            _this._products = options.products;
-
-            if (!_this.timeInit) {
-                mixIns([_RealEarthAnimateTile2.default], _this);
-            }
-            _this.timeInit();
-        }
-        return _possibleConstructorReturn(_this);
-    }
-
-    return LayerRealEarthTile;
-}(_LayerBaseXyzTile3.default);
-
-nm.LayerRealEarthTile = LayerRealEarthTile;
-exports.default = LayerRealEarthTile;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/layers/LayerRealEarthVector.js b/_lib/layers/LayerRealEarthVector.js
deleted file mode 100644
index 5648279153066f44563f52cced4794f57b79a5dd..0000000000000000000000000000000000000000
--- a/_lib/layers/LayerRealEarthVector.js
+++ /dev/null
@@ -1,97 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-    value: true
-});
-
-var _LayerBaseVectorGeoJson = require('./LayerBaseVectorGeoJson');
-
-var _LayerBaseVectorGeoJson2 = _interopRequireDefault(_LayerBaseVectorGeoJson);
-
-var _RealEarthAnimateVector = require('../mixin/RealEarthAnimateVector');
-
-var _RealEarthAnimateVector2 = _interopRequireDefault(_RealEarthAnimateVector);
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-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; } /**
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Created by gavorhes on 11/13/2015.
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
-
-var mixIns = require('es6-mixins');
-var nm = (0, _provide2.default)('layers');
-
-/**
- * Vector real earth vector
- * @augments LayerBaseVectorGeoJson
- */
-
-var LayerVectorRealEarth = function (_LayerBaseVectorGeoJs) {
-    _inherits(LayerVectorRealEarth, _LayerBaseVectorGeoJs);
-
-    /**
-     * Real Earth vector layer
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
-     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
-     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
-     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
-     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
-     *
-     * @param {object} [options.transform={}] SR transform, set as false for no transform
-     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS
-     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS
-     *
-     * @param {string} options.products real earth products identifier
-     * @param {boolean} [options.animate=false] if the layer should be animated
-     */
-
-    function LayerVectorRealEarth(options) {
-        _classCallCheck(this, LayerVectorRealEarth);
-
-        options.animate = typeof options.animate == 'boolean' ? options.animate : false;
-        if (!options.animate) {
-            options.params = { products: options.products };
-
-            var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(LayerVectorRealEarth).call(this, 'http://realearth.ssec.wisc.edu/api/shapes', options));
-        } else {
-            options.autoLoad = false;
-
-            var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(LayerVectorRealEarth).call(this, '', options));
-
-            _this._products = options.products;
-            if (!_this.timeInit) {
-                mixIns([_RealEarthAnimateVector2.default], _this);
-            }
-            _this.timeInit();
-        }
-        return _possibleConstructorReturn(_this);
-    }
-
-    return LayerVectorRealEarth;
-}(_LayerBaseVectorGeoJson2.default);
-
-nm.LayerVectorRealEarth = LayerVectorRealEarth;
-exports.default = LayerVectorRealEarth;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/mixin/RealEarthAnimate.js b/_lib/mixin/RealEarthAnimate.js
deleted file mode 100644
index 76f05a3a10ea99766fba4248f44c543c95b343f7..0000000000000000000000000000000000000000
--- a/_lib/mixin/RealEarthAnimate.js
+++ /dev/null
@@ -1,196 +0,0 @@
-'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; }; }(); /**
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Created by gavorhes on 12/4/2015.
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      */
-
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-var _mapPopup = require('../olHelpers/mapPopup');
-
-var _mapPopup2 = _interopRequireDefault(_mapPopup);
-
-var _jquery = require('../jquery/jquery');
-
-var _jquery2 = _interopRequireDefault(_jquery);
-
-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"); } }
-
-var nm = (0, _provide2.default)('mixin');
-
-/**
- * The GMT offset time in minutes
- * @type {number}
- */
-var offsetMinutes = new Date().getTimezoneOffset();
-
-/**
- * Mixin to get the product times
- * Be sure to call getTimeInit after the mixin has been applied
- */
-
-var RealEarthAnimate = function () {
-    function RealEarthAnimate() {
-        _classCallCheck(this, RealEarthAnimate);
-    }
-
-    _createClass(RealEarthAnimate, [{
-        key: 'load',
-
-
-        /**
-         * override base layer load
-         */
-        value: function load() {}
-    }, {
-        key: 'timeInit',
-
-
-        /**
-         * Call this after the mixin has been applied
-         */
-        value: function timeInit() {
-            if (!this._products) {
-                throw 'this mixin must be applied to one of the RealEarth layer objects with this.products defined';
-            }
-
-            this._rawDateStrings = [];
-            this._localDates = [];
-            this.localTimes = [];
-            this._animateEnabled = true;
-            this._loaded = true;
-            this._currentTime = undefined;
-            this._currentIndex = undefined;
-
-            var _this = this;
-
-            _jquery2.default.get('http://realearth.ssec.wisc.edu/api/products', { products: this._products }, function (d) {
-                if (d.length == 0) {
-                    console.log(this._products + ' layer not available or does not have times');
-
-                    return;
-                }
-                d = d[0];
-                for (var i = 0; i < d['times'].length; i++) {
-                    _this._loadDates.call(_this, d['times'][i]);
-                }
-                _this.loadCallback.call(_this);
-                _this._loadLatest.call(_this);
-            }, 'json');
-        }
-
-        /**
-         *
-         * @returns {boolean} if animation enabled
-         */
-
-    }, {
-        key: '_loadDates',
-
-
-        /**
-         * Given the raw time string, add to the arrays to keep track of dates and cache
-         * @param {string} inString - input string to parse
-         * @returns {string} the converted string
-         * @protected
-         */
-        value: function _loadDates(inString) {
-            var yr = inString.slice(0, 4);
-            var month = inString.slice(4, 6);
-            var d = inString.slice(6, 8);
-            var hr = inString.slice(9, 11);
-            var mn = inString.slice(11, 13);
-            var sec = inString.slice(13, 15);
-
-            var rawDateStr = inString.replace('.', '_');
-            this._rawDateStrings.push(rawDateStr);
-
-            var dteStr = month + '/' + d + '/' + yr + ' ' + hr + ':' + mn + ':' + sec;
-            var newDte = new Date(dteStr);
-            newDte.setMinutes(newDte.getMinutes() - offsetMinutes);
-            this._localDates.push(newDte);
-            this.localTimes.push(newDte.getTime());
-
-            return rawDateStr;
-        }
-
-        /**
-         *
-         * @protected
-         * @returns {boolean} if should continue
-         */
-
-    }, {
-        key: '_loadLatest',
-        value: function _loadLatest() {
-            _mapPopup2.default.closePopup();
-            if (this.localTimes.length > 0) {
-                this._currentIndex = this.localTimes.length - 1;
-
-                return true;
-            } else {
-                return false;
-            }
-        }
-
-        /**
-         *
-         * @param {number} theTime - the time
-         * @returns {boolean} true if new index, false if the same or below lowest value
-         */
-
-    }, {
-        key: 'setLayerTime',
-        value: function setLayerTime(theTime) {
-            if (!this.visible) {
-                return false;
-            }
-
-            this._currentTime = theTime;
-
-            var newIndex = void 0;
-
-            if (theTime < this.localTimes[0]) {
-                return false;
-            } else if (theTime > this.localTimes[this.localTimes.length - 1]) {
-                newIndex = this.localTimes.length - 1;
-            }
-
-            for (var i = 0; i < this.localTimes.length; i++) {
-                if (this.localTimes[i] >= theTime) {
-                    newIndex = i;
-                    break;
-                }
-            }
-
-            if (newIndex == this._currentIndex) {
-                return false;
-            } else {
-                this._currentIndex = newIndex;
-                _mapPopup2.default.closePopup();
-
-                return true;
-            }
-        }
-    }, {
-        key: 'animationEnabled',
-        get: function get() {
-            return this._animateEnabled;
-        }
-    }]);
-
-    return RealEarthAnimate;
-}();
-
-nm.RealEarthAnimate = RealEarthAnimate;
-exports.default = RealEarthAnimate;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/mixin/RealEarthAnimateTile.js b/_lib/mixin/RealEarthAnimateTile.js
deleted file mode 100644
index be92929fbd7ab0c002a5a32eaaabbee6f6786a4c..0000000000000000000000000000000000000000
--- a/_lib/mixin/RealEarthAnimateTile.js
+++ /dev/null
@@ -1,100 +0,0 @@
-'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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
-
-var _RealEarthAnimate2 = require('./RealEarthAnimate');
-
-var _RealEarthAnimate3 = _interopRequireDefault(_RealEarthAnimate2);
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-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; } /**
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Created by gavorhes on 12/4/2015.
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
-
-
-var nm = (0, _provide2.default)('mixin');
-
-/**
- * Animate real earth tile
- * @augments RealEarthAnimate
- */
-
-var RealEarthAnimateTile = function (_RealEarthAnimate) {
-    _inherits(RealEarthAnimateTile, _RealEarthAnimate);
-
-    function RealEarthAnimateTile() {
-        _classCallCheck(this, RealEarthAnimateTile);
-
-        return _possibleConstructorReturn(this, Object.getPrototypeOf(RealEarthAnimateTile).apply(this, arguments));
-    }
-
-    _createClass(RealEarthAnimateTile, [{
-        key: 'load',
-
-
-        /**
-         * override base layer load
-         */
-        value: function load() {
-            _get(Object.getPrototypeOf(RealEarthAnimateTile.prototype), 'load', this).call(this);
-        }
-    }, {
-        key: 'timeInit',
-        value: function timeInit() {
-            _get(Object.getPrototypeOf(RealEarthAnimateTile.prototype), 'timeInit', this).call(this);
-            this._sourceUrls = [];
-        }
-    }, {
-        key: '_loadDates',
-        value: function _loadDates(inString) {
-            var rawDte = _get(Object.getPrototypeOf(RealEarthAnimateTile.prototype), '_loadDates', this).call(this, inString);
-            var dteProductUrl = 'http://realearth.ssec.wisc.edu/api/image?products=' + this._products + '_' + rawDte + '&x={x}&y={y}&z={z}';
-            this._sourceUrls.push(dteProductUrl);
-        }
-
-        /**
-         * @protected
-         */
-
-    }, {
-        key: '_loadLatest',
-        value: function _loadLatest() {
-            if (_get(Object.getPrototypeOf(RealEarthAnimateTile.prototype), '_loadLatest', this).call(this)) {
-                this._source.setUrl(this._sourceUrls[this._sourceUrls.length - 1]);
-            }
-        }
-    }, {
-        key: 'setLayerTime',
-        value: function setLayerTime(theTime) {
-            if (_get(Object.getPrototypeOf(RealEarthAnimateTile.prototype), 'setLayerTime', this).call(this, theTime)) {
-                if (this.olLayer.getZIndex() < 0) {
-                    this.olLayer.setZIndex(0);
-                }
-                this._source.setUrl(this._sourceUrls[this._currentIndex]);
-            } else {
-                this.olLayer.setZIndex(-1);
-            }
-        }
-    }]);
-
-    return RealEarthAnimateTile;
-}(_RealEarthAnimate3.default);
-
-nm.RealEarthAnimateTile = RealEarthAnimateTile;
-exports.default = RealEarthAnimateTile;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/mixin/RealEarthAnimateVector.js b/_lib/mixin/RealEarthAnimateVector.js
deleted file mode 100644
index 9faf973cbad2720a9c5ef20a6e44d1cb7b3bb707..0000000000000000000000000000000000000000
--- a/_lib/mixin/RealEarthAnimateVector.js
+++ /dev/null
@@ -1,159 +0,0 @@
-'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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
-
-var _RealEarthAnimate2 = require('./RealEarthAnimate');
-
-var _RealEarthAnimate3 = _interopRequireDefault(_RealEarthAnimate2);
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-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; } /**
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Created by gavorhes on 12/4/2015.
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
-
-
-var nm = (0, _provide2.default)('mixin');
-var $ = require('jquery');
-
-/**
- * class mixin to animate RealEarth vector layers
- * @augments RealEarthAnimate
- */
-
-var RealEarthAnimateVector = function (_RealEarthAnimate) {
-    _inherits(RealEarthAnimateVector, _RealEarthAnimate);
-
-    function RealEarthAnimateVector() {
-        _classCallCheck(this, RealEarthAnimateVector);
-
-        return _possibleConstructorReturn(this, Object.getPrototypeOf(RealEarthAnimateVector).apply(this, arguments));
-    }
-
-    _createClass(RealEarthAnimateVector, [{
-        key: 'load',
-
-
-        /**
-         * override base layer load
-         */
-        value: function load() {
-            _get(Object.getPrototypeOf(RealEarthAnimateVector.prototype), 'load', this).call(this);
-        }
-    }, {
-        key: 'timeInit',
-
-
-        /**
-         * Call this after the mixin has been applied
-         */
-        value: function timeInit() {
-            _get(Object.getPrototypeOf(RealEarthAnimateVector.prototype), 'timeInit', this).call(this);
-            this._rawTimesLookup = {};
-            this._dataCache = [];
-        }
-
-        /**
-         * Given the raw time string, add to the arrays to keep track of dates and cache
-         * @param {string} inString - input date string
-         * @protected
-         */
-
-    }, {
-        key: '_loadDates',
-        value: function _loadDates(inString) {
-            var rawDte = _get(Object.getPrototypeOf(RealEarthAnimateVector.prototype), '_loadDates', this).call(this, inString);
-            this._dataCache.push(null);
-            this._rawTimesLookup[rawDte] = null;
-        }
-
-        /**
-         * @protected
-         */
-
-    }, {
-        key: '_loadLatest',
-        value: function _loadLatest() {
-            if (_get(Object.getPrototypeOf(RealEarthAnimateVector.prototype), '_loadLatest', this).call(this)) {
-                this._loadAtTimeIndex.call(this, this._currentIndex);
-            }
-        }
-        //
-        //http://realearth.ssec.wisc.edu/api/image?products=nexrhres_20160108_212500&x=1&y=5&z=4
-        //
-        //    20160108.205500
-        //    http://realearth.ssec.wisc.edu/api/image?products=nexrhres_20160108_205500&x=34&y=46&z=7
-
-        /**
-         * Load the features at the date index specified
-         * @param {number} i the index of the features to be loaded by date
-         * @param {boolean} [setAsSource=true] set to false to trigger cache load only
-         * @private
-         */
-
-    }, {
-        key: '_loadAtTimeIndex',
-        value: function _loadAtTimeIndex(i, setAsSource) {
-            var _this3 = this;
-
-            setAsSource = typeof setAsSource == 'boolean' ? setAsSource : true;
-            if (this._dataCache[i] != null) {
-                this.source.clear();
-                this._loadFeatures(this._dataCache[i]);
-            } else {
-                (function () {
-                    var _this = _this3;
-                    $.get('http://realearth.ssec.wisc.edu:80/api/shapes', { products: _this3._products + '_' + _this3._rawDateStrings[i] }, function (d) {
-                        _this._dataCache[i] = d;
-                        _this._rawTimesLookup[_this._rawDateStrings[i]] = d;
-                        if (setAsSource) {
-                            _this.source.clear();
-                            _this._loadFeatures.call(_this, _this._dataCache[i]);
-                        }
-                    }, 'json');
-                })();
-            }
-        }
-
-        /**
-         * helper to load the features at the index specified
-         * @param {object} geojObj - the geojson object
-         * @private
-         */
-
-    }, {
-        key: '_loadFeatures',
-        value: function _loadFeatures(geojObj) {
-            this.source.addFeatures(this._geoJsonFormat.readFeatures(geojObj, this._transform));
-        }
-    }, {
-        key: 'setLayerTime',
-        value: function setLayerTime(theTime) {
-            if (_get(Object.getPrototypeOf(RealEarthAnimateVector.prototype), 'setLayerTime', this).call(this, theTime)) {
-                this._loadAtTimeIndex(this._currentIndex);
-            } else {
-                this.source.clear();
-            }
-        }
-    }]);
-
-    return RealEarthAnimateVector;
-}(_RealEarthAnimate3.default);
-
-nm.RealEarthAnimateVector = RealEarthAnimateVector;
-exports.default = RealEarthAnimateVector;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/ol/ol-build.js b/_lib/ol/ol-build.js
deleted file mode 100644
index a7280d86053c612d07ede905dc79b1760667a729..0000000000000000000000000000000000000000
--- a/_lib/ol/ol-build.js
+++ /dev/null
@@ -1,408 +0,0 @@
-// OpenLayers 3. See http://openlayers.org/
-// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md
-(function (root, factory) {
-  if (typeof exports === "object") {
-    module.exports = factory();
-  } else if (typeof define === "function" && define.amd) {
-    define([], factory);
-  } else {
-    root.ol = factory();
-  }
-}(this, function () {
-  var OPENLAYERS = {};
-  var n,x=this;function E(b,c,d){b=b.split(".");d=d||x;b[0]in d||!d.execScript||d.execScript("var "+b[0]);for(var e;b.length&&(e=b.shift());)b.length||void 0===c?d[e]?d=d[e]:d=d[e]={}:d[e]=c}function aa(b){b.qa=function(){return b.rc?b.rc:b.rc=new b}}
-function ba(b){var c=typeof b;if("object"==c)if(b){if(b instanceof Array)return"array";if(b instanceof Object)return c;var d=Object.prototype.toString.call(b);if("[object Window]"==d)return"object";if("[object Array]"==d||"number"==typeof b.length&&"undefined"!=typeof b.splice&&"undefined"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable("splice"))return"array";if("[object Function]"==d||"undefined"!=typeof b.call&&"undefined"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable("call"))return"function"}else return"null";
-else if("function"==c&&"undefined"==typeof b.call)return"object";return c}function ca(b){var c=ba(b);return"array"==c||"object"==c&&"number"==typeof b.length}function da(b){return"string"==typeof b}function ea(b){return"number"==typeof b}function ga(b){return"function"==ba(b)}function ha(b){var c=typeof b;return"object"==c&&null!=b||"function"==c}function I(b){return b[ia]||(b[ia]=++ja)}var ia="closure_uid_"+(1E9*Math.random()>>>0),ja=0;function ka(b,c,d){return b.call.apply(b.bind,arguments)}
-function la(b,c,d){if(!b)throw Error();if(2<arguments.length){var e=Array.prototype.slice.call(arguments,2);return function(){var d=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(d,e);return b.apply(c,d)}}return function(){return b.apply(c,arguments)}}function ma(b,c,d){ma=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ka:la;return ma.apply(null,arguments)}
-function na(b,c){var d=Array.prototype.slice.call(arguments,1);return function(){var c=d.slice();c.push.apply(c,arguments);return b.apply(this,c)}}function M(b,c){function d(){}d.prototype=c.prototype;b.Y=c.prototype;b.prototype=new d;b.prototype.constructor=b;b.Me=function(b,d,g){for(var h=Array(arguments.length-2),k=2;k<arguments.length;k++)h[k-2]=arguments[k];return c.prototype[d].apply(b,h)}};var oa;function N(){};var pa;var qa=String.prototype.trim?function(b){return b.trim()}:function(b){return b.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};function sa(b){if(!ta.test(b))return b;-1!=b.indexOf("&")&&(b=b.replace(ua,"&amp;"));-1!=b.indexOf("<")&&(b=b.replace(va,"&lt;"));-1!=b.indexOf(">")&&(b=b.replace(wa,"&gt;"));-1!=b.indexOf('"')&&(b=b.replace(xa,"&quot;"));-1!=b.indexOf("'")&&(b=b.replace(ya,"&#39;"));-1!=b.indexOf("\x00")&&(b=b.replace(za,"&#0;"));return b}var ua=/&/g,va=/</g,wa=/>/g,xa=/"/g,ya=/'/g,za=/\x00/g,ta=/[\x00&<>"']/;
-function Aa(b,c){return b<c?-1:b>c?1:0};function Ba(b,c,d){return Math.min(Math.max(b,c),d)}var Ca=function(){var b;"cosh"in Math?b=Math.cosh:b=function(b){b=Math.exp(b);return(b+1/b)/2};return b}();function Da(b,c){var d=b%c;return 0>d*c?d+c:d};function Ea(b){return function(c){if(c)return[Ba(c[0],b[0],b[2]),Ba(c[1],b[1],b[3])]}}function Fa(b){return b};function Ga(b,c){return b>c?1:b<c?-1:0}function Ha(b,c,d){var e=b.length;if(b[0]<=c)return 0;if(!(c<=b[e-1]))if(0<d)for(d=1;d<e;++d){if(b[d]<c)return d-1}else if(0>d)for(d=1;d<e;++d){if(b[d]<=c)return d}else for(d=1;d<e;++d){if(b[d]==c)return d;if(b[d]<c)return b[d-1]-c<c-b[d]?d-1:d}return e-1}function Ia(b){return b.reduce(function(b,d){return Array.isArray(d)?b.concat(Ia(d)):b.concat(d)},[])}function Ja(b,c){var d,e=ca(c)?c:[c],f=e.length;for(d=0;d<f;d++)b[b.length]=e[d]}
-function Ka(b,c){var d=b.indexOf(c),e=-1<d;e&&b.splice(d,1);return e}function La(b,c){var d=b.length;if(d!==c.length)return!1;for(var e=0;e<d;e++)if(b[e]!==c[e])return!1;return!0}function Ma(b){var c=Na,d=b.length,e=Array(b.length),f;for(f=0;f<d;f++)e[f]={index:f,value:b[f]};e.sort(function(b,d){return c(b.value,d.value)||b.index-d.index});for(f=0;f<b.length;f++)b[f]=e[f].value};function Oa(b){return function(c,d,e){if(void 0!==c)return c=Ha(b,c,e),c=Ba(c+d,0,b.length-1),b[c]}}function Pa(b,c,d){return function(e,f,g){if(void 0!==e)return e=Math.max(Math.floor(Math.log(c/e)/Math.log(b)+(0<g?0:0>g?1:.5))+f,0),void 0!==d&&(e=Math.min(e,d)),c/Math.pow(b,e)}};function Qa(b){if(void 0!==b)return 0}function Ra(b,c){if(void 0!==b)return b+c}function Sa(b){var c=2*Math.PI/b;return function(b,e){if(void 0!==b)return b=Math.floor((b+e)/c+.5)*c}}function Ta(){var b=5*Math.PI/180;return function(c,d){if(void 0!==c)return Math.abs(c+d)<=b?0:c+d}};function Ua(b,c,d){this.center=b;this.resolution=c;this.rotation=d};var Va="function"===typeof Object.assign?Object.assign:function(b,c){if(void 0===b||null===b)throw new TypeError("Cannot convert undefined or null to object");for(var d=Object(b),e=1,f=arguments.length;e<f;++e){var g=arguments[e];if(void 0!==g&&null!==g)for(var h in g)g.hasOwnProperty(h)&&(d[h]=g[h])}return d};function Wa(b){for(var c in b)delete b[c]}function Xa(b){var c=[],d;for(d in b)c.push(b[d]);return c}function Za(b){for(var c in b)return!1;return!c};var $a="olm_"+(1E4*Math.random()|0);function ab(b){function c(c){var e=b.listener,f=b.bc||b.target;b.ec&&P(b);return e.call(f,c)}return b.cc=c}function bb(b,c,d,e){for(var f,g=0,h=b.length;g<h;++g)if(f=b[g],f.listener===c&&f.bc===d)return e&&(f.deleteIndex=g),f}function cb(b,c){var d=b[$a];return d?d[c]:void 0}function db(b){var c=b[$a];c||(c=b[$a]={});return c}
-function eb(b,c){var d=cb(b,c);if(d){for(var e=0,f=d.length;e<f;++e)b.removeEventListener(c,d[e].cc),Wa(d[e]);d.length=0;if(d=b[$a])delete d[c],0===Object.keys(d).length&&delete b[$a]}}function R(b,c,d,e,f){var g=db(b),h=g[c];h||(h=g[c]=[]);(g=bb(h,d,e,!1))?f||(g.ec=!1):(g={bc:e,ec:!!f,listener:d,target:b,type:c},b.addEventListener(c,ab(g)),h.push(g));return g}function fb(b,c,d,e){(b=cb(b,c))&&(d=bb(b,d,e,!0))&&P(d)}
-function P(b){if(b&&b.target){b.target.removeEventListener(b.type,b.cc);var c=cb(b.target,b.type);if(c){var d="deleteIndex"in b?b.deleteIndex:c.indexOf(b);-1!==d&&c.splice(d,1);0===c.length&&eb(b.target,b.type)}Wa(b)}}function gb(b){var c=db(b),d;for(d in c)eb(b,d)};function hb(){}hb.prototype.ha=!1;function ib(b){b.ha||(b.ha=!0,b.K())}hb.prototype.K=N;function S(b,c){this.type=b;this.target=c||null}S.prototype.preventDefault=S.prototype.stopPropagation=function(){this.me=!0};function jb(b){b.stopPropagation()}function kb(b){b.preventDefault()};function lb(){this.H={};this.B={}}M(lb,hb);lb.prototype.addEventListener=function(b,c){var d=this.B[b];d||(d=this.B[b]=[]);-1===d.indexOf(c)&&d.push(c)};function T(b,c){var d="string"===typeof c?new S(c):c,e=d.type;d.target=b;var f=b.B[e],g;if(f){e in b.H||(b.H[e]=0);for(var h=0,k=f.length;h<k;++h)if(!1===f[h].call(b,d)||d.me){g=!1;break}d=b.H[e];for(delete b.H[e];d--;)b.removeEventListener(e,N);return g}}lb.prototype.K=function(){gb(this)};
-function mb(b,c){return c?c in b.B:0<Object.keys(b.B).length}lb.prototype.removeEventListener=function(b,c){var d=this.B[b];if(d){var e=d.indexOf(c);b in this.H?(d[e]=N,++this.H[b]):(d.splice(e,1),0===d.length&&delete this.B[b])}};function nb(){lb.call(this);this.f=0}M(nb,lb);nb.prototype.w=function(){++this.f;T(this,"change")};nb.prototype.V=function(b,c,d){if(Array.isArray(b)){for(var e=b.length,f=Array(e),g=0;g<e;++g)f[g]=R(this,b[g],c,d);return f}return R(this,b,c,d)};nb.prototype.Rc=function(b,c,d){if(Array.isArray(b)){for(var e=b.length,f=Array(e),g=0;g<e;++g)f[g]=R(this,b[g],c,d,!0);return f}return R(this,b,c,d,!0)};function ob(b,c,d){S.call(this,b);this.key=c;this.oldValue=d}M(ob,S);function U(b){nb.call(this);I(this);this.I={};void 0!==b&&this.l(b)}M(U,nb);var pb={};function qb(b){return pb.hasOwnProperty(b)?pb[b]:pb[b]="change:"+b}U.prototype.get=function(b){var c;this.I.hasOwnProperty(b)&&(c=this.I[b]);return c};U.prototype.ua=function(){return Va({},this.I)};U.prototype.set=function(b,c,d){d?this.I[b]=c:(d=this.I[b],this.I[b]=c,d!==c&&(c=qb(b),T(this,new ob(c,b,d)),T(this,new ob("propertychange",b,d))))};
-U.prototype.l=function(b,c){for(var d in b)this.set(d,b[d],c)};function rb(b,c,d){void 0===d&&(d=[0,0]);d[0]=b[0]*c+.5|0;d[1]=b[1]*c+.5|0;return d}function sb(b,c){if(Array.isArray(b))return b;void 0===c?c=[b,b]:(c[0]=b,c[1]=b);return c};function tb(b,c){b[0]+=c[0];b[1]+=c[1]}function ub(b,c){var d=Math.cos(c),e=Math.sin(c),f=b[1]*d+b[0]*e;b[0]=b[0]*d-b[1]*e;b[1]=f};function vb(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}vb.prototype.BYTES_PER_ELEMENT=4;vb.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};vb.prototype.toString=Array.prototype.join;"undefined"==typeof Float32Array&&(vb.BYTES_PER_ELEMENT=4,vb.prototype.BYTES_PER_ELEMENT=vb.prototype.BYTES_PER_ELEMENT,vb.prototype.set=vb.prototype.set,vb.prototype.toString=vb.prototype.toString,E("Float32Array",vb,void 0));function wb(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}wb.prototype.BYTES_PER_ELEMENT=8;wb.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};wb.prototype.toString=Array.prototype.join;if("undefined"==typeof Float64Array){try{wb.BYTES_PER_ELEMENT=8}catch(b){}wb.prototype.BYTES_PER_ELEMENT=wb.prototype.BYTES_PER_ELEMENT;wb.prototype.set=wb.prototype.set;wb.prototype.toString=wb.prototype.toString;E("Float64Array",wb,void 0)};function xb(b,c,d,e,f){b[0]=c;b[1]=d;b[2]=e;b[3]=f};function yb(){var b=Array(16);zb(b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);return b}function Ab(){var b=Array(16);zb(b,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return b}function zb(b,c,d,e,f,g,h,k,l,m,p,q,r,u,w,y,z){b[0]=c;b[1]=d;b[2]=e;b[3]=f;b[4]=g;b[5]=h;b[6]=k;b[7]=l;b[8]=m;b[9]=p;b[10]=q;b[11]=r;b[12]=u;b[13]=w;b[14]=y;b[15]=z}
-function Bb(b,c){b[0]=c[0];b[1]=c[1];b[2]=c[2];b[3]=c[3];b[4]=c[4];b[5]=c[5];b[6]=c[6];b[7]=c[7];b[8]=c[8];b[9]=c[9];b[10]=c[10];b[11]=c[11];b[12]=c[12];b[13]=c[13];b[14]=c[14];b[15]=c[15]}function Cb(b){b[0]=1;b[1]=0;b[2]=0;b[3]=0;b[4]=0;b[5]=1;b[6]=0;b[7]=0;b[8]=0;b[9]=0;b[10]=1;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1}
-function Db(b,c){var d=b[0],e=b[1],f=b[2],g=b[3],h=b[4],k=b[5],l=b[6],m=b[7],p=b[8],q=b[9],r=b[10],u=b[11],w=b[12],y=b[13],z=b[14],D=b[15],t=d*k-e*h,v=d*l-f*h,B=d*m-g*h,F=e*l-f*k,C=e*m-g*k,G=f*m-g*l,J=p*y-q*w,A=p*z-r*w,H=p*D-u*w,O=q*z-r*y,Q=q*D-u*y,L=r*D-u*z,K=t*L-v*Q+B*O+F*H-C*A+G*J;0!=K&&(K=1/K,c[0]=(k*L-l*Q+m*O)*K,c[1]=(-e*L+f*Q-g*O)*K,c[2]=(y*G-z*C+D*F)*K,c[3]=(-q*G+r*C-u*F)*K,c[4]=(-h*L+l*H-m*A)*K,c[5]=(d*L-f*H+g*A)*K,c[6]=(-w*G+z*B-D*v)*K,c[7]=(p*G-r*B+u*v)*K,c[8]=(h*Q-k*H+m*J)*K,c[9]=(-d*Q+
-e*H-g*J)*K,c[10]=(w*C-y*B+D*t)*K,c[11]=(-p*C+q*B-u*t)*K,c[12]=(-h*O+k*A-l*J)*K,c[13]=(d*O-e*A+f*J)*K,c[14]=(-w*F+y*v-z*t)*K,c[15]=(p*F-q*v+r*t)*K)}function Eb(b,c,d){var e=b[1]*c+b[5]*d+0*b[9]+b[13],f=b[2]*c+b[6]*d+0*b[10]+b[14],g=b[3]*c+b[7]*d+0*b[11]+b[15];b[12]=b[0]*c+b[4]*d+0*b[8]+b[12];b[13]=e;b[14]=f;b[15]=g}function Fb(b,c,d){zb(b,b[0]*c,b[1]*c,b[2]*c,b[3]*c,b[4]*d,b[5]*d,b[6]*d,b[7]*d,1*b[8],1*b[9],1*b[10],1*b[11],b[12],b[13],b[14],b[15])}
-function Gb(b,c){var d=b[0],e=b[1],f=b[2],g=b[3],h=b[4],k=b[5],l=b[6],m=b[7],p=Math.cos(c),q=Math.sin(c);b[0]=d*p+h*q;b[1]=e*p+k*q;b[2]=f*p+l*q;b[3]=g*p+m*q;b[4]=d*-q+h*p;b[5]=e*-q+k*p;b[6]=f*-q+l*p;b[7]=g*-q+m*p}new Float64Array(3);new Float64Array(3);new Float64Array(4);new Float64Array(4);new Float64Array(4);new Float64Array(16);function Hb(b){for(var c=Ib(),d=0,e=b.length;d<e;++d)Jb(c,b[d]);return c}function Kb(b,c,d){return d?(d[0]=b[0]-c,d[1]=b[1]-c,d[2]=b[2]+c,d[3]=b[3]+c,d):[b[0]-c,b[1]-c,b[2]+c,b[3]+c]}function Lb(b,c){return c?(c[0]=b[0],c[1]=b[1],c[2]=b[2],c[3]=b[3],c):b.slice()}function Mb(b,c){return b[0]<=c[0]&&c[2]<=b[2]&&b[1]<=c[1]&&c[3]<=b[3]}function Ib(){return[Infinity,Infinity,-Infinity,-Infinity]}function Nb(b,c,d,e,f){return f?(f[0]=b,f[1]=c,f[2]=d,f[3]=e,f):[b,c,d,e]}
-function Ob(b){return Nb(Infinity,Infinity,-Infinity,-Infinity,b)}function Pb(b,c){var d=b[0],e=b[1];return Nb(d,e,d,e,c)}function Qb(b,c){return b[0]==c[0]&&b[2]==c[2]&&b[1]==c[1]&&b[3]==c[3]}function Rb(b,c){c[0]<b[0]&&(b[0]=c[0]);c[2]>b[2]&&(b[2]=c[2]);c[1]<b[1]&&(b[1]=c[1]);c[3]>b[3]&&(b[3]=c[3])}function Jb(b,c){c[0]<b[0]&&(b[0]=c[0]);c[0]>b[2]&&(b[2]=c[0]);c[1]<b[1]&&(b[1]=c[1]);c[1]>b[3]&&(b[3]=c[1])}
-function Sb(b,c,d,e,f){for(;d<e;d+=f){var g=b,h=c[d],k=c[d+1];g[0]=Math.min(g[0],h);g[1]=Math.min(g[1],k);g[2]=Math.max(g[2],h);g[3]=Math.max(g[3],k)}return b}function Tb(b){var c=0;b[2]<b[0]||b[3]<b[1]||(c=Ub(b)*Vb(b));return c}function Wb(b){return[b[0],b[1]]}function Xb(b){return[(b[0]+b[2])/2,(b[1]+b[3])/2]}
-function Yb(b,c,d,e){var f=c*e[0]/2;e=c*e[1]/2;c=Math.cos(d);var g=Math.sin(d);d=f*c;f*=g;c*=e;var h=e*g,k=b[0],l=b[1];b=k-d+h;e=k-d-h;g=k+d-h;d=k+d+h;var h=l-f-c,k=l-f+c,m=l+f+c,f=l+f-c;return Nb(Math.min(b,e,g,d),Math.min(h,k,m,f),Math.max(b,e,g,d),Math.max(h,k,m,f),void 0)}function Vb(b){return b[3]-b[1]}function Zb(b,c){var d=Ib();$b(b,c)&&(d[0]=b[0]>c[0]?b[0]:c[0],d[1]=b[1]>c[1]?b[1]:c[1],d[2]=b[2]<c[2]?b[2]:c[2],d[3]=b[3]<c[3]?b[3]:c[3]);return d}function ac(b){return[b[0],b[3]]}
-function Ub(b){return b[2]-b[0]}function $b(b,c){return b[0]<=c[2]&&b[2]>=c[0]&&b[1]<=c[3]&&b[3]>=c[1]};function bc(){return!0}function cc(){return!1};/*
-
- Latitude/longitude spherical geodesy formulae taken from
- http://www.movable-type.co.uk/scripts/latlong.html
- Licensed under CC-BY-3.0.
-*/
-function dc(b){this.radius=b}function ec(b,c){var d=b[1]*Math.PI/180,e=c[1]*Math.PI/180,f=(e-d)/2,g=(c[0]-b[0])*Math.PI/180/2,d=Math.sin(f)*Math.sin(f)+Math.sin(g)*Math.sin(g)*Math.cos(d)*Math.cos(e);return 2*fc.radius*Math.atan2(Math.sqrt(d),Math.sqrt(1-d))}
-dc.prototype.offset=function(b,c,d){var e=b[1]*Math.PI/180;c/=this.radius;var f=Math.asin(Math.sin(e)*Math.cos(c)+Math.cos(e)*Math.sin(c)*Math.cos(d));return[180*(b[0]*Math.PI/180+Math.atan2(Math.sin(d)*Math.sin(c)*Math.cos(e),Math.cos(c)-Math.sin(e)*Math.sin(f)))/Math.PI,180*f/Math.PI]};var fc=new dc(6370997);var gc={};gc.degrees=2*Math.PI*fc.radius/360;gc.ft=.3048;gc.m=1;gc["us-ft"]=1200/3937;
-function hc(b){this.na=b.code;this.b=b.units;this.h=void 0!==b.extent?b.extent:null;this.f=void 0!==b.global?b.global:!1;this.a=!(!this.f||!this.h);this.i=void 0!==b.getPointResolution?b.getPointResolution:this.j;this.c=null;this.g=b.metersPerUnit;var c=ic,d=b.code,e=jc||x.proj4;if("function"==typeof e&&void 0===c[d]){var f=e.defs(d);if(void 0!==f){void 0===b.metersPerUnit&&(this.g=f.to_meter);void 0===b.units&&(this.b=f.units);var g,h;for(g in c)if(b=e.defs(g),void 0!==b)if(c=kc(g),b===f)lc([c,this]);
-else{h=e(g,d);b=h.forward;h=h.inverse;var c=kc(c),k=kc(this);mc(c,k,nc(b));mc(k,c,nc(h))}}}}hc.prototype.l=function(){return this.na};hc.prototype.C=function(){return this.h};function oc(b){return b.g||gc[b.b]}hc.prototype.j=function(b,c){if("degrees"==this.b)return b;var d=pc(this,kc("EPSG:4326")),e=[c[0]-b/2,c[1],c[0]+b/2,c[1],c[0],c[1]-b/2,c[0],c[1]+b/2],e=d(e,e,2),d=(ec(e.slice(0,2),e.slice(2,4))+ec(e.slice(4,6),e.slice(6,8)))/2,e=oc(this);void 0!==e&&(d/=e);return d};
-hc.prototype.getPointResolution=function(b,c){return this.i(b,c)};var ic={},qc={},jc=null;function lc(b){rc(b);b.forEach(function(c){b.forEach(function(b){c!==b&&mc(c,b,sc)})})}function tc(b){ic[b.na]=b;mc(b,b,sc)}function rc(b){var c=[];b.forEach(function(b){c.push(tc(b))})}function uc(b){return b?"string"===typeof b?kc(b):b:kc("EPSG:3857")}function mc(b,c,d){b=b.na;c=c.na;b in qc||(qc[b]={});qc[b][c]=d}
-function nc(b){return function(c,d,e){var f=c.length;e=void 0!==e?e:2;d=void 0!==d?d:Array(f);var g,h;for(h=0;h<f;h+=e)for(g=b([c[h],c[h+1]]),d[h]=g[0],d[h+1]=g[1],g=e-1;2<=g;--g)d[h+g]=c[h+g];return d}}function kc(b){var c;if(b instanceof hc)c=b;else if("string"===typeof b){c=ic[b];var d=jc||x.proj4;void 0===c&&"function"==typeof d&&void 0!==d.defs(b)&&(c=new hc({code:b}),tc(c))}else c=null;return c}function vc(b,c){if(b===c)return!0;var d=b.b===c.b;return b.na===c.na?d:pc(b,c)===sc&&d}
-function wc(b,c){var d=kc(b),e=kc(c);return pc(d,e)}function pc(b,c){var d=b.na,e=c.na,f;d in qc&&e in qc[d]&&(f=qc[d][e]);void 0===f&&(f=xc);return f}function xc(b,c){if(void 0!==c&&b!==c){for(var d=0,e=b.length;d<e;++d)c[d]=b[d];b=c}return b}function sc(b,c){var d;if(void 0!==c){d=0;for(var e=b.length;d<e;++d)c[d]=b[d];d=c}else d=b.slice();return d};function yc(){U.call(this);this.u=Ib();this.v=-1;this.h={};this.s=this.i=0}M(yc,U);yc.prototype.C=function(b){this.v!=this.f&&(this.u=this.ab(this.u),this.v=this.f);var c=this.u;b?(b[0]=c[0],b[1]=c[1],b[2]=c[2],b[3]=c[3]):b=c;return b};yc.prototype.o=function(b,c){this.wb(wc(b,c));return this};function zc(b,c,d,e,f,g){var h=f[0],k=f[1],l=f[4],m=f[5],p=f[12];f=f[13];for(var q=g?g:[],r=0;c<d;c+=e){var u=b[c],w=b[c+1];q[r++]=h*u+l*w+p;q[r++]=k*u+m*w+f}g&&q.length!=r&&(q.length=r);return q};function Ac(){yc.call(this);this.g="XY";this.b=2;this.a=null}M(Ac,yc);function Bc(b){if("XY"==b)return 2;if("XYZ"==b||"XYM"==b)return 3;if("XYZM"==b)return 4}n=Ac.prototype;n.ab=function(b){var c=this.a,d=this.a.length,e=this.b;b=Ob(b);return Sb(b,c,0,d,e)};
-n.Hb=function(b){this.s!=this.f&&(Wa(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<=this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=this.Ea(b);if(d.a.length<this.a.length)return this.h[c]=d;this.i=b;return this};n.Ea=function(){return this};function V(b,c,d){b.b=Bc(c);b.g=c;b.a=d}function Cc(b,c,d,e){if(c)d=Bc(c);else{for(c=0;c<e;++c){if(0===d.length){b.g="XY";b.b=2;return}d=d[0]}d=d.length;c=2==d?"XY":3==d?"XYZ":4==d?"XYZM":void 0}b.g=c;b.b=d}
-n.wb=function(b){this.a&&(b(this.a,this.a,this.b),this.w())};n.rotate=function(b,c){var d=this.a;if(d){for(var e=d.length,f=this.b,g=d?d:[],h=Math.cos(b),k=Math.sin(b),l=c[0],m=c[1],p=0,q=0;q<e;q+=f){var r=d[q]-l,u=d[q+1]-m;g[p++]=l+r*h-u*k;g[p++]=m+r*k+u*h;for(r=q+2;r<q+f;++r)g[p++]=d[r]}d&&g.length!=p&&(g.length=p);this.w()}};function Dc(b,c){var d=0,e,f;e=0;for(f=c.length;e<f;++e)b[d++]=c[e];return d}function Ec(b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k;for(k=0;k<e;++k)b[c++]=h[k]}return c}function Fc(b,c,d,e,f){f=f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h)c=Ec(b,c,d[h],e),f[g++]=c;f.length=g;return f};function Gc(b,c,d,e,f){f=void 0!==f?f:[];for(var g=0;c<d;c+=e)f[g++]=b.slice(c,c+e);f.length=g;return f}function Hc(b,c,d,e,f){f=void 0!==f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h){var l=d[h];f[g++]=Gc(b,c,l,e,f[g]);c=l}f.length=g;return f};function Ic(b,c,d,e,f,g,h){var k=(d-c)/e;if(3>k){for(;c<d;c+=e)g[h++]=b[c],g[h++]=b[c+1];return h}var l=Array(k);l[0]=1;l[k-1]=1;d=[c,d-e];for(var m=0,p;0<d.length;){var q=d.pop(),r=d.pop(),u=0,w=b[r],y=b[r+1],z=b[q],D=b[q+1];for(p=r+e;p<q;p+=e){var t,v=b[p];t=b[p+1];var B=w,F=y,C=z-B,G=D-F;if(0!==C||0!==G){var J=((v-B)*C+(t-F)*G)/(C*C+G*G);1<J?(B=z,F=D):0<J&&(B+=C*J,F+=G*J)}v=B-v;t=F-t;t=v*v+t*t;t>u&&(m=p,u=t)}u>f&&(l[(m-c)/e]=1,r+e<m&&d.push(r,m),m+e<q&&d.push(m,q))}for(p=0;p<k;++p)l[p]&&(g[h++]=
-b[c+p*e],g[h++]=b[c+p*e+1]);return h}
-function Jc(b,c,d,e,f,g,h,k){var l,m;l=0;for(m=d.length;l<m;++l){var p=d[l];a:{var q=b,r=p,u=e,w=f,y=g;if(c!=r){var z=w*Math.round(q[c]/w),D=w*Math.round(q[c+1]/w);c+=u;y[h++]=z;y[h++]=D;var t=void 0,v=void 0;do if(t=w*Math.round(q[c]/w),v=w*Math.round(q[c+1]/w),c+=u,c==r){y[h++]=t;y[h++]=v;break a}while(t==z&&v==D);for(;c<r;){var B,F;B=w*Math.round(q[c]/w);F=w*Math.round(q[c+1]/w);c+=u;if(B!=t||F!=v){var C=t-z,G=v-D,J=B-z,A=F-D;C*A==G*J&&(0>C&&J<C||C==J||0<C&&J>C)&&(0>G&&A<G||G==A||0<G&&A>G)||(y[h++]=
-t,y[h++]=v,z=t,D=v);t=B;v=F}}y[h++]=t;y[h++]=v}}k.push(h);c=p}return h};function Kc(b,c){Ac.call(this);this.X(b,c)}M(Kc,Ac);n=Kc.prototype;n.clone=function(){var b=new Kc(null);V(b,this.g,this.a.slice());b.w();return b};n.oa=function(){return Gc(this.a,0,this.a.length,this.b)};n.Ea=function(b){var c=[];c.length=Ic(this.a,0,this.a.length,this.b,b,c,0);b=new Kc(null);V(b,"XY",c);b.w();return b};n.U=function(){return"LinearRing"};n.X=function(b,c){b?(Cc(this,c,b,1),this.a||(this.a=[]),this.a.length=Ec(this.a,0,b,this.b)):V(this,"XY",null);this.w()};function Lc(b,c){Ac.call(this);this.X(b,c)}M(Lc,Ac);n=Lc.prototype;n.clone=function(){var b=new Lc(null);V(b,this.g,this.a.slice());b.w();return b};n.oa=function(){return this.a?this.a.slice():[]};n.ab=function(b){return Pb(this.a,b)};n.U=function(){return"Point"};n.X=function(b,c){b?(Cc(this,c,b,0),this.a||(this.a=[]),this.a.length=Dc(this.a,b)):V(this,"XY",null);this.w()};function Mc(b,c,d,e,f,g){for(var h=!1,k=b[d-e],l=b[d-e+1];c<d;c+=e){var m=b[c],p=b[c+1];l>g!=p>g&&f<(m-k)*(g-l)/(p-l)+k&&(h=!h);k=m;l=p}return h};function Nc(b,c,d,e,f,g,h){var k,l,m,p,q,r=f[g+1],u=[],w=d[0];m=b[w-e];q=b[w-e+1];for(k=c;k<w;k+=e){p=b[k];l=b[k+1];if(r<=q&&l<=r||q<=r&&r<=l)m=(r-q)/(l-q)*(p-m)+m,u.push(m);m=p;q=l}w=NaN;q=-Infinity;u.sort(Ga);m=u[0];k=1;for(l=u.length;k<l;++k){p=u[k];var y=Math.abs(p-m);if(y>q){m=(m+p)/2;var z;a:if(0!==d.length&&Mc(b,c,d[0],e,m,r)){var D=z=void 0;z=1;for(D=d.length;z<D;++z)if(Mc(b,d[z-1],d[z],e,m,r)){z=!1;break a}z=!0}else z=!1;z&&(w=m,q=y)}m=p}isNaN(w)&&(w=f[g]);return h?(h.push(w,r),h):[w,r]}
-;function Oc(b,c,d,e){for(var f=0,g=b[d-e],h=b[d-e+1];c<d;c+=e)var k=b[c],l=b[c+1],f=f+(k-g)*(l+h),g=k,h=l;return 0<f}function Pc(b,c,d,e){var f=0;e=void 0!==e?e:!1;var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g],f=Oc(b,f,k,d);if(0===g){if(e&&f||!e&&!f)return!1}else if(e&&!f||!e&&f)return!1;f=k}return!0}
-function Qc(b,c,d,e,f){f=void 0!==f?f:!1;var g,h;g=0;for(h=d.length;g<h;++g){var k=d[g],l=Oc(b,c,k,e);if(0===g?f&&l||!f&&!l:f&&!l||!f&&l)for(var l=b,m=k,p=e;c<m-p;){var q;for(q=0;q<p;++q){var r=l[c+q];l[c+q]=l[m-p+q];l[m-p+q]=r}c+=p;m-=p}c=k}return c}function Rc(b,c,d,e){var f=0,g,h;g=0;for(h=c.length;g<h;++g)f=Qc(b,f,c[g],d,e);return f};function Sc(b,c){Ac.call(this);this.c=[];this.A=-1;this.D=null;this.G=-1;this.j=null;this.X(b,c)}M(Sc,Ac);n=Sc.prototype;n.clone=function(){var b=new Sc(null);Tc(b,this.g,this.a.slice(),this.c.slice());return b};n.oa=function(b){var c;void 0!==b?(c=Uc(this).slice(),Qc(c,0,this.c,this.b,b)):c=this.a;return Hc(c,0,this.c,this.b)};n.Ta=function(){return this.c};function Vc(b){if(b.A!=b.f){var c=Xb(b.C());b.D=Nc(Uc(b),0,b.c,b.b,c,0);b.A=b.f}return b.D}
-function Uc(b){if(b.G!=b.f){var c=b.a;Pc(c,b.c,b.b)?b.j=c:(b.j=c.slice(),b.j.length=Qc(b.j,0,b.c,b.b));b.G=b.f}return b.j}n.Ea=function(b){var c=[],d=[];c.length=Jc(this.a,0,this.c,this.b,Math.sqrt(b),c,0,d);b=new Sc(null);Tc(b,"XY",c,d);return b};n.U=function(){return"Polygon"};n.X=function(b,c){if(b){Cc(this,c,b,2);this.a||(this.a=[]);var d=Fc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1];this.w()}else Tc(this,"XY",null,this.c)};function Tc(b,c,d,e){V(b,c,d);b.c=e;b.w()};function Wc(b){U.call(this);b=b||{};this.g=[0,0];var c={};c.center=void 0!==b.center?b.center:null;this.h=uc(b.projection);var d,e,f,g=void 0!==b.minZoom?b.minZoom:0;d=void 0!==b.maxZoom?b.maxZoom:28;var h=void 0!==b.zoomFactor?b.zoomFactor:2;if(void 0!==b.resolutions)d=b.resolutions,e=d[0],f=d[d.length-1],d=Oa(d);else{e=uc(b.projection);f=e.C();var k=(f?Math.max(Ub(f),Vb(f)):360*gc.degrees/oc(e))/256/Math.pow(2,0),l=k/Math.pow(2,28);e=b.maxResolution;void 0!==e?g=0:e=k/Math.pow(h,g);f=b.minResolution;
-void 0===f&&(f=void 0!==b.maxZoom?void 0!==b.maxResolution?e/Math.pow(h,d):k/Math.pow(h,d):l);d=g+Math.floor(Math.log(e/f)/Math.log(h));f=e/Math.pow(h,d-g);d=Pa(h,e,d-g)}this.b=e;this.i=f;this.c=g;g=void 0!==b.extent?Ea(b.extent):Fa;(void 0!==b.enableRotation?b.enableRotation:1)?(e=b.constrainRotation,e=void 0===e||!0===e?Ta():!1===e?Ra:ea(e)?Sa(e):Ra):e=Qa;this.a=new Ua(g,d,e);void 0!==b.resolution?c.resolution=b.resolution:void 0!==b.zoom&&(c.resolution=this.constrainResolution(this.b,b.zoom-this.c));
-c.rotation=void 0!==b.rotation?b.rotation:0;this.l(c)}M(Wc,U);n=Wc.prototype;n.constrainResolution=function(b,c,d){return this.a.resolution(b,c||0,d||0)};n.constrainRotation=function(b,c){return this.a.rotation(b,c||0)};n.ga=function(){return this.get("center")};n.dc=function(b){var c=this.ga(),d=this.J(),e=Xc(this);return Yb(c,d,e,b)};n.ae=function(){return this.h};n.J=function(){return this.get("resolution")};function Yc(b,c){return Math.max(Ub(b)/c[0],Vb(b)/c[1])}
-function Xc(b){return b.get("rotation")}n.N=function(){var b=this.ga(),c=this.h,d=this.J(),e=Xc(this);return{center:[Math.round(b[0]/d)*d,Math.round(b[1]/d)*d],projection:void 0!==c?c:null,resolution:d,rotation:e}};n.kd=function(){var b,c=this.J();if(void 0!==c){var d,e=0;do{d=this.constrainResolution(this.b,e);if(d==c){b=e;break}++e}while(d>this.i)}return void 0!==b?this.c+b:b};
-n.fd=function(b,c,d){if(!(b instanceof Ac)){var e=b[0],f=b[1],g=b[2],h=b[3],e=[e,f,e,h,g,h,g,f,e,f],f=new Sc(null);Tc(f,"XY",e,[e.length]);b=f}e=d||{};d=void 0!==e.padding?e.padding:[0,0,0,0];var h=void 0!==e.constrainResolution?e.constrainResolution:!0,f=void 0!==e.nearest?e.nearest:!1,k;void 0!==e.minResolution?k=e.minResolution:void 0!==e.maxZoom?k=this.constrainResolution(this.b,e.maxZoom-this.c,0):k=0;var l=b.a,g=Xc(this),e=Math.cos(-g),g=Math.sin(-g),m=Infinity,p=Infinity,q=-Infinity,r=-Infinity;
-b=b.b;for(var u=0,w=l.length;u<w;u+=b)var y=l[u]*e-l[u+1]*g,z=l[u]*g+l[u+1]*e,m=Math.min(m,y),p=Math.min(p,z),q=Math.max(q,y),r=Math.max(r,z);c=Yc([m,p,q,r],[c[0]-d[1]-d[3],c[1]-d[0]-d[2]]);c=isNaN(c)?k:Math.max(c,k);h&&(k=this.constrainResolution(c,0,0),!f&&k<c&&(k=this.constrainResolution(k,-1,0)),c=k);Zc(this,c);g=-g;k=(m+q)/2+(d[1]-d[3])/2*c;c=(p+r)/2+(d[0]-d[2])/2*c;this.ma([k*e-c*g,c*e+k*g])};
-n.rotate=function(b,c){if(void 0!==c){var d,e=this.ga();void 0!==e&&(d=[e[0]-c[0],e[1]-c[1]],ub(d,b-Xc(this)),tb(d,c));this.ma(d)}this.set("rotation",b)};n.ma=function(b){this.set("center",b)};function $c(b,c){b.g[1]+=c}function Zc(b,c){b.set("resolution",c)}n.ue=function(b){b=this.constrainResolution(this.b,b-this.c,0);Zc(this,b)};function ad(b){return 1-Math.pow(1-b,3)}function bd(b){return 3*b*b-2*b*b*b}function cd(b){return b};function dd(b){var c=b.source,d=b.start?b.start:Date.now(),e=c[0],f=c[1],g=void 0!==b.duration?b.duration:1E3,h=b.easing?b.easing:bd;return function(b,c){if(c.time<d)return c.animate=!0,c.viewHints[0]+=1,!0;if(c.time<d+g){var m=1-h((c.time-d)/g),p=e-c.viewState.center[0],q=f-c.viewState.center[1];c.animate=!0;c.viewState.center[0]+=m*p;c.viewState.center[1]+=m*q;c.viewHints[0]+=1;return!0}return!1}}
-function ed(b){var c=b.rotation?b.rotation:0,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:bd,g=b.anchor?b.anchor:null;return function(b,k){if(k.time<d)return k.animate=!0,k.viewHints[0]+=1,!0;if(k.time<d+e){var l=1-f((k.time-d)/e),l=(c-k.viewState.rotation)*l;k.animate=!0;k.viewState.rotation+=l;if(g){var m=k.viewState.center;m[0]-=g[0];m[1]-=g[1];ub(m,l);tb(m,g)}k.viewHints[0]+=1;return!0}return!1}}
-function fd(b){var c=b.resolution,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:bd;return function(b,h){if(h.time<d)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<d+e){var k=1-f((h.time-d)/e),l=c-h.viewState.resolution;h.animate=!0;h.viewState.resolution+=k*l;h.viewHints[0]+=1;return!0}return!1}};function gd(b,c,d,e){this.a=b;this.b=c;this.f=d;this.c=e}function hd(b,c,d){return b.a<=c&&c<=b.b&&b.f<=d&&d<=b.c}function id(b,c){return b.a==c.a&&b.f==c.f&&b.b==c.b&&b.c==c.c}function jd(b,c){return b.a<=c.b&&b.b>=c.a&&b.f<=c.c&&b.c>=c.f};function kd(b){this.b=b.html;this.a=b.tileRanges?b.tileRanges:null};function ld(b,c,d){S.call(this,b,d);this.element=c}M(ld,S);function md(b){U.call(this);this.a=b?b:[];nd(this)}M(md,U);n=md.prototype;n.clear=function(){for(;0<this.get("length");)this.pop()};function od(b,c,d){b.a.forEach(c,d)}n.item=function(b){return this.a[b]};n.pop=function(){return pd(this,this.get("length")-1)};n.push=function(b){var c=this.a.length;this.a.splice(c,0,b);nd(this);T(this,new ld("add",b,this));return c};
-n.remove=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)if(c[d]===b)return pd(this,d)};function pd(b,c){var d=b.a[c];b.a.splice(c,1);nd(b);T(b,new ld("remove",d,b));return d}function nd(b){b.set("length",b.a.length)};function qd(b,c){Array.prototype.forEach.call(b,c,void 0)}function rd(b){var c=b.length;if(0<c){for(var d=Array(c),e=0;e<c;e++)d[e]=b[e];return d}return[]}function sd(b,c,d){return 2>=arguments.length?Array.prototype.slice.call(b,c):Array.prototype.slice.call(b,c,d)};var td=/^#(?:[0-9a-f]{3}){1,2}$/i,ud=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,vd=/^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i;function wd(b){if("string"!==typeof b){var c=b[0];c!=(c|0)&&(c=c+.5|0);var d=b[1];d!=(d|0)&&(d=d+.5|0);var e=b[2];e!=(e|0)&&(e=e+.5|0);b="rgba("+c+","+d+","+e+","+(void 0===b[3]?1:b[3])+")"}return b}
-var yd=function(){var b={},c=0;return function(d){var e;if(b.hasOwnProperty(d))e=b[d];else{if(1024<=c){e=0;for(var f in b)0===(e++&3)&&(delete b[f],--c)}var g,h;td.exec(d)?(h=3==d.length-1?1:2,e=parseInt(d.substr(1+0*h,h),16),f=parseInt(d.substr(1+1*h,h),16),g=parseInt(d.substr(1+2*h,h),16),1==h&&(e=(e<<4)+e,f=(f<<4)+f,g=(g<<4)+g),e=[e,f,g,1]):(h=vd.exec(d))?(e=Number(h[1]),f=Number(h[2]),g=Number(h[3]),h=Number(h[4]),e=[e,f,g,h],e=xd(e,e)):(h=ud.exec(d))?(e=Number(h[1]),f=Number(h[2]),g=Number(h[3]),
-e=[e,f,g,1],e=xd(e,e)):e=void 0;b[d]=e;++c}return e}}();function xd(b,c){var d=c||[];d[0]=Ba(b[0]+.5|0,0,255);d[1]=Ba(b[1]+.5|0,0,255);d[2]=Ba(b[2]+.5|0,0,255);d[3]=Ba(b[3],0,1);return d};function zd(b){return"string"===typeof b||b instanceof CanvasPattern||b instanceof CanvasGradient?b:wd(b)};var Ad;a:{var Bd=x.navigator;if(Bd){var Cd=Bd.userAgent;if(Cd){Ad=Cd;break a}}Ad=""}function W(b){return-1!=Ad.indexOf(b)};function Dd(b,c){for(var d in b)c.call(void 0,b[d],d,b)}var Ed="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function Fd(b,c){for(var d,e,f=1;f<arguments.length;f++){e=arguments[f];for(d in e)b[d]=e[d];for(var g=0;g<Ed.length;g++)d=Ed[g],Object.prototype.hasOwnProperty.call(e,d)&&(b[d]=e[d])}};var Gd=W("Opera")||W("OPR"),Hd=W("Trident")||W("MSIE"),Id=W("Edge"),Jd=W("Gecko")&&!(-1!=Ad.toLowerCase().indexOf("webkit")&&!W("Edge"))&&!(W("Trident")||W("MSIE"))&&!W("Edge"),Kd=-1!=Ad.toLowerCase().indexOf("webkit")&&!W("Edge");function Ld(){var b=x.document;return b?b.documentMode:void 0}var Md;
-a:{var Nd="",Od=function(){var b=Ad;if(Jd)return/rv\:([^\);]+)(\)|;)/.exec(b);if(Id)return/Edge\/([\d\.]+)/.exec(b);if(Hd)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(b);if(Kd)return/WebKit\/(\S+)/.exec(b);if(Gd)return/(?:Version)[ \/]?(\S+)/.exec(b)}();Od&&(Nd=Od?Od[1]:"");if(Hd){var Pd=Ld();if(null!=Pd&&Pd>parseFloat(Nd)){Md=String(Pd);break a}}Md=Nd}var Qd={};
-function Rd(b){var c;if(!(c=Qd[b])){c=0;for(var d=qa(String(Md)).split("."),e=qa(String(b)).split("."),f=Math.max(d.length,e.length),g=0;0==c&&g<f;g++){var h=d[g]||"",k=e[g]||"",l=RegExp("(\\d*)(\\D*)","g"),m=RegExp("(\\d*)(\\D*)","g");do{var p=l.exec(h)||["","",""],q=m.exec(k)||["","",""];if(0==p[0].length&&0==q[0].length)break;c=Aa(0==p[1].length?0:parseInt(p[1],10),0==q[1].length?0:parseInt(q[1],10))||Aa(0==p[2].length,0==q[2].length)||Aa(p[2],q[2])}while(0==c)}c=Qd[b]=0<=c}return c}
-var Sd=x.document,Td=Sd&&Hd?Ld()||("CSS1Compat"==Sd.compatMode?parseInt(Md,10):5):void 0;var Ud=!Hd||9<=Number(Td);!Jd&&!Hd||Hd&&9<=Number(Td)||Jd&&Rd("1.9.1");Hd&&Rd("9");function Vd(b,c){this.x=void 0!==b?b:0;this.y=void 0!==c?c:0}n=Vd.prototype;n.clone=function(){return new Vd(this.x,this.y)};n.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};n.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};n.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};n.scale=function(b,c){var d=ea(c)?c:b;this.x*=b;this.y*=d;return this};function Wd(b,c){this.width=b;this.height=c}n=Wd.prototype;n.clone=function(){return new Wd(this.width,this.height)};n.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};n.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};n.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};n.scale=function(b,c){var d=ea(c)?c:b;this.width*=b;this.height*=d;return this};function Xd(b){return b?new Yd(Zd(b)):pa||(pa=new Yd)}function $d(b){var c=document;return da(b)?c.getElementById(b):b}function ae(b,c){Dd(c,function(c,e){"style"==e?b.style.cssText=c:"class"==e?b.className=c:"for"==e?b.htmlFor=c:be.hasOwnProperty(e)?b.setAttribute(be[e],c):0==e.lastIndexOf("aria-",0)||0==e.lastIndexOf("data-",0)?b.setAttribute(e,c):b[e]=c})}
-var be={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",frameborder:"frameBorder",height:"height",maxlength:"maxLength",nonce:"nonce",role:"role",rowspan:"rowSpan",type:"type",usemap:"useMap",valign:"vAlign",width:"width"};
-function ce(b,c,d){var e=arguments,f=document,g=e[0],h=e[1];if(!Ud&&h&&(h.name||h.type)){g=["<",g];h.name&&g.push(' name="',sa(h.name),'"');if(h.type){g.push(' type="',sa(h.type),'"');var k={};Fd(k,h);delete k.type;h=k}g.push(">");g=g.join("")}g=f.createElement(g);h&&(da(h)?g.className=h:"array"==ba(h)?g.className=h.join(" "):ae(g,h));2<e.length&&de(f,g,e);return g}
-function de(b,c,d){function e(d){d&&c.appendChild(da(d)?b.createTextNode(d):d)}for(var f=2;f<d.length;f++){var g=d[f];!ca(g)||ha(g)&&0<g.nodeType?e(g):qd(ee(g)?rd(g):g,e)}}function fe(b){for(var c;c=b.firstChild;)b.removeChild(c)}function ge(b,c,d){b.insertBefore(c,b.childNodes[d]||null)}function he(b){b&&b.parentNode&&b.parentNode.removeChild(b)}function ie(b,c){var d=c.parentNode;d&&d.replaceChild(b,c)}
-function je(b,c){if(!b||!c)return!1;if(b.contains&&1==c.nodeType)return b==c||b.contains(c);if("undefined"!=typeof b.compareDocumentPosition)return b==c||!!(b.compareDocumentPosition(c)&16);for(;c&&b!=c;)c=c.parentNode;return c==b}function Zd(b){return 9==b.nodeType?b:b.ownerDocument||b.document}function ee(b){if(b&&"number"==typeof b.length){if(ha(b))return"function"==typeof b.item||"string"==typeof b.item;if(ga(b))return"function"==typeof b.item}return!1}
-function Yd(b){this.a=b||x.document||document}Yd.prototype.appendChild=function(b,c){b.appendChild(c)};function ke(b,c,d,e){this.top=b;this.right=c;this.bottom=d;this.left=e}n=ke.prototype;n.clone=function(){return new ke(this.top,this.right,this.bottom,this.left)};n.ceil=function(){this.top=Math.ceil(this.top);this.right=Math.ceil(this.right);this.bottom=Math.ceil(this.bottom);this.left=Math.ceil(this.left);return this};n.floor=function(){this.top=Math.floor(this.top);this.right=Math.floor(this.right);this.bottom=Math.floor(this.bottom);this.left=Math.floor(this.left);return this};
-n.round=function(){this.top=Math.round(this.top);this.right=Math.round(this.right);this.bottom=Math.round(this.bottom);this.left=Math.round(this.left);return this};n.scale=function(b,c){var d=ea(c)?c:b;this.left*=b;this.right*=b;this.top*=d;this.bottom*=d;return this};function le(b,c){var d=Zd(b);return d.defaultView&&d.defaultView.getComputedStyle&&(d=d.defaultView.getComputedStyle(b,null))?d[c]||d.getPropertyValue(c)||"":""}function me(b){var c;try{c=b.getBoundingClientRect()}catch(d){return{left:0,top:0,right:0,bottom:0}}Hd&&b.ownerDocument.body&&(b=b.ownerDocument,c.left-=b.documentElement.clientLeft+b.body.clientLeft,c.top-=b.documentElement.clientTop+b.body.clientTop);return c}
-function ne(b){var c=oe;if("none"!=(le(b,"display")||(b.currentStyle?b.currentStyle.display:null)||b.style&&b.style.display))return c(b);var d=b.style,e=d.display,f=d.visibility,g=d.position;d.visibility="hidden";d.position="absolute";d.display="inline";b=c(b);d.display=e;d.position=g;d.visibility=f;return b}function oe(b){var c=b.offsetWidth,d=b.offsetHeight,e=Kd&&!c&&!d;return(void 0===c||e)&&b.getBoundingClientRect?(b=me(b),new Wd(b.right-b.left,b.bottom-b.top)):new Wd(c,d)}
-function pe(b,c){b.style.display=c?"":"none"}function qe(b,c,d,e){if(/^\d+px?$/.test(c))return parseInt(c,10);var f=b.style[d],g=b.runtimeStyle[d];b.runtimeStyle[d]=b.currentStyle[d];b.style[d]=c;c=b.style[e];b.style[d]=f;b.runtimeStyle[d]=g;return c}function re(b,c){var d=b.currentStyle?b.currentStyle[c]:null;return d?qe(b,d,"left","pixelLeft"):0}var se={thin:2,medium:4,thick:6};
-function te(b,c){if("none"==(b.currentStyle?b.currentStyle[c+"Style"]:null))return 0;var d=b.currentStyle?b.currentStyle[c+"Width"]:null;return d in se?se[d]:qe(b,d,"left","pixelLeft")};function ue(b,c,d){S.call(this,b);this.map=c;this.frameState=void 0!==d?d:null}M(ue,S);function ve(b){U.call(this);this.element=b.element?b.element:null;this.c=this.A=null;this.h=[];this.render=b.render?b.render:N;b.target&&(this.A=$d(b.target))}M(ve,U);ve.prototype.K=function(){he(this.element);ve.Y.K.call(this)};ve.prototype.setMap=function(b){this.c&&he(this.element);for(var c=0,d=this.h.length;c<d;++c)P(this.h[c]);this.h.length=0;if(this.c=b)(this.A?this.A:b.j).appendChild(this.element),this.render!==N&&this.h.push(R(b,"postrender",this.render,this)),b.render()};function we(){this.f=0;this.c={};this.b=this.a=null}n=we.prototype;n.clear=function(){this.f=0;this.c={};this.b=this.a=null};function xe(b,c){return b.c.hasOwnProperty(c)}function ye(b,c){for(var d=b.a;d;)c.call(void 0,d.Ba,d.Kb,b),d=d.ja}n.get=function(b){b=this.c[b];if(b===this.b)return b.Ba;b===this.a?(this.a=this.a.ja,this.a.Ia=null):(b.ja.Ia=b.Ia,b.Ia.ja=b.ja);b.ja=null;b.Ia=this.b;this.b=this.b.ja=b;return b.Ba};
-n.pop=function(){var b=this.a;delete this.c[b.Kb];b.ja&&(b.ja.Ia=null);this.a=b.ja;this.a||(this.b=null);--this.f;return b.Ba};n.replace=function(b,c){this.get(b);this.c[b].Ba=c};n.set=function(b,c){var d={Kb:b,ja:null,Ia:this.b,Ba:c};this.b?this.b.ja=d:this.a=d;this.b=d;this.c[b]=d;++this.f};function ze(b){we.call(this);this.g=void 0!==b?b:2048}M(ze,we);function Ae(b){return b.f>b.g}function Be(b,c){for(var d,e;Ae(b);){d=b.a.Ba;e=d.L[0].toString();var f;if(f=e in c)d=d.L,f=hd(c[e],d[1],d[2]);if(f)break;else ib(b.pop())}};function Ce(b,c){lb.call(this);this.L=b;this.state=c;this.a=null;this.key=""}M(Ce,lb);function De(b){T(b,"change")}Ce.prototype.getKey=function(){return I(this).toString()};Ce.prototype.N=function(){return this.state};function Ee(b){U.call(this);this.c=kc(b.projection);this.i=Fe(b.attributions);this.v=b.logo;this.A=void 0!==b.state?b.state:"ready";this.j=void 0!==b.wrapX?b.wrapX:!1}M(Ee,U);function Fe(b){if("string"===typeof b)return[new kd({html:b})];if(b instanceof kd)return[b];if(Array.isArray(b)){for(var c=b.length,d=Array(c),e=0;e<c;e++){var f=b[e];d[e]="string"===typeof f?new kd({html:f}):f}return d}return null}Ee.prototype.N=function(){return this.A};Ee.prototype.ra=function(){this.w()};function Ge(b){this.minZoom=void 0!==b.minZoom?b.minZoom:0;this.b=b.resolutions;this.maxZoom=this.b.length-1;this.f=void 0!==b.origin?b.origin:null;this.g=null;void 0!==b.origins&&(this.g=b.origins);var c=b.extent;void 0===c||this.f||this.g||(this.f=ac(c));this.h=null;void 0!==b.tileSizes&&(this.h=b.tileSizes);this.l=void 0!==b.tileSize?b.tileSize:this.h?null:256;this.i=void 0!==c?c:null;this.a=null;void 0!==b.sizes?this.a=b.sizes.map(function(b){return new gd(Math.min(0,b[0]),Math.max(b[0]-1,-1),
-Math.min(0,b[1]),Math.max(b[1]-1,-1))},this):c&&He(this,c);this.c=[0,0]}var Ie=[0,0,0];function Je(b,c,d,e,f){f=Ke(b,c,f);for(c=c[0]-1;c>=b.minZoom;){if(d.call(null,c,Le(b,f,c,e)))return!0;--c}return!1}Ge.prototype.C=function(){return this.i};Ge.prototype.fa=function(b){return this.f?this.f:this.g[b]};Ge.prototype.J=function(b){return this.b[b]};Ge.prototype.Gb=function(){return this.b};function Me(b,c,d,e){return c[0]<b.maxZoom?(e=Ke(b,c,e),Le(b,e,c[0]+1,d)):null}
-function Ne(b,c,d,e){Oe(b,c[0],c[1],d,!1,Ie);var f=Ie[1],g=Ie[2];Oe(b,c[2],c[3],d,!0,Ie);b=Ie[1];c=Ie[2];void 0!==e?(e.a=f,e.b=b,e.f=g,e.c=c):e=new gd(f,b,g,c);return e}function Le(b,c,d,e){d=b.J(d);return Ne(b,c,d,e)}function Pe(b,c){var d=b.fa(c[0]),e=b.J(c[0]),f=sb(Qe(b,c[0]),b.c);return[d[0]+(c[1]+.5)*f[0]*e,d[1]+(c[2]+.5)*f[1]*e]}function Ke(b,c,d){var e=b.fa(c[0]),f=b.J(c[0]);b=sb(Qe(b,c[0]),b.c);var g=e[0]+c[1]*b[0]*f;c=e[1]+c[2]*b[1]*f;return Nb(g,c,g+b[0]*f,c+b[1]*f,d)}
-function Oe(b,c,d,e,f,g){var h=Re(b,e),k=e/b.J(h),l=b.fa(h);b=sb(Qe(b,h),b.c);c=k*Math.floor((c-l[0])/e+(f?.5:0))/b[0];d=k*Math.floor((d-l[1])/e+(f?0:.5))/b[1];f?(c=Math.ceil(c)-1,d=Math.ceil(d)-1):(c=Math.floor(c),d=Math.floor(d));f=c;void 0!==g?(g[0]=h,g[1]=f,g[2]=d):g=[h,f,d];return g}function Se(b,c,d){d=b.J(d);return Oe(b,c[0],c[1],d,!1,void 0)}function Qe(b,c){return b.l?b.l:b.h[c]}function Re(b,c){var d=Ha(b.b,c,0);return Ba(d,b.minZoom,b.maxZoom)}
-function He(b,c){for(var d=b.b.length,e=Array(d),f=b.minZoom;f<d;++f)e[f]=Le(b,c,f);b.a=e}function Te(b){var c=b.c;if(!c){var c=Ue(b),d=Ve(c,void 0,void 0),c=new Ge({extent:c,origin:ac(c),resolutions:d,tileSize:void 0});b.c=c}return c}function Ve(b,c,d){c=void 0!==c?c:42;var e=Vb(b);b=Ub(b);d=sb(void 0!==d?d:256);d=Math.max(b/d[0],e/d[1]);c+=1;e=Array(c);for(b=0;b<c;++b)e[b]=d/Math.pow(2,b);return e}function Ue(b){b=kc(b);var c=b.C();c||(b=180*gc.degrees/oc(b),c=Nb(-b,-b,b,b));return c};function We(b){Ee.call(this,{attributions:b.attributions,extent:b.extent,logo:b.logo,projection:b.projection,state:b.state,wrapX:b.wrapX});this.G=void 0!==b.opaque?b.opaque:!1;this.Z=void 0!==b.tilePixelRatio?b.tilePixelRatio:1;this.tileGrid=void 0!==b.tileGrid?b.tileGrid:null;this.a=new ze(b.cacheSize);this.h=[0,0]}M(We,Ee);n=We.prototype;n.Gc=function(){return Ae(this.a)};n.Hc=function(b,c){var d=this.Ua(b);d&&Be(d,c)};
-function Xe(b,c,d,e,f){c=b.Ua(c);if(!c)return!1;for(var g=!0,h,k,l=e.a;l<=e.b;++l)for(var m=e.f;m<=e.c;++m)h=b.cb(d,l,m),k=!1,xe(c,h)&&(h=c.get(h),(k=2===h.N())&&(k=!1!==f(h))),k||(g=!1);return g}n.bb=function(){return 0};n.cb=function(b,c,d){return b+"/"+c+"/"+d};n.Fb=function(){return this.G};n.Gb=function(){return this.tileGrid.Gb()};n.ia=function(b){return this.tileGrid?this.tileGrid:Te(b)};n.Ua=function(b){var c=this.c;return c&&!vc(c,b)?null:this.a};n.eb=function(){return this.Z};
-function Ye(b,c,d,e){e=b.ia(e);d=b.eb(d);c=sb(Qe(e,c),b.h);return 1==d?c:rb(c,d,b.h)}function Ze(b,c,d){var e=void 0!==d?d:b.c;d=b.ia(e);if(b.j&&e.f){var f=c;c=f[0];b=Pe(d,f);var e=Ue(e),g=b[0],h=b[1];e[0]<=g&&g<=e[2]&&e[1]<=h&&h<=e[3]?c=f:(f=Ub(e),b[0]+=f*Math.ceil((e[0]-b[0])/f),c=Se(d,b,c))}e=c[0];b=c[1];f=c[2];d=d.minZoom>e||e>d.maxZoom?!1:(d=(g=d.C())?Le(d,g,e):d.a?d.a[e]:null)?hd(d,b,f):!0;return d?c:null}n.ra=function(){this.a.clear();this.w()};n.Qc=N;
-function $e(b,c){S.call(this,b);this.tile=c}M($e,S);function af(b){b=b?b:{};this.s=document.createElement("UL");this.j=document.createElement("LI");this.s.appendChild(this.j);pe(this.j,!1);this.g=void 0!==b.collapsed?b.collapsed:!0;this.i=void 0!==b.collapsible?b.collapsible:!0;this.i||(this.g=!1);var c=void 0!==b.className?b.className:"ol-attribution",d=void 0!==b.tipLabel?b.tipLabel:"Attributions",e=void 0!==b.collapseLabel?b.collapseLabel:"\u00bb";this.u="string"===typeof e?ce("SPAN",{},e):e;e=void 0!==b.label?b.label:"i";this.v="string"===typeof e?
-ce("SPAN",{},e):e;d=ce("BUTTON",{type:"button",title:d},this.i&&!this.g?this.u:this.v);R(d,"click",this.G,this);c=ce("DIV",c+" ol-unselectable ol-control"+(this.g&&this.i?" ol-collapsed":"")+(this.i?"":" ol-uncollapsible"),this.s,d);ve.call(this,{element:c,render:b.render?b.render:bf,target:b.target});this.o=!0;this.b={};this.a={};this.D={}}M(af,ve);
-function bf(b){if(b=b.frameState){var c,d,e,f,g,h,k,l,m,p,q,r=b.layerStatesArray,u=Va({},b.attributions),w={},y=b.viewState.projection;d=0;for(c=r.length;d<c;d++)if(h=r[d].layer.W())if(p=I(h).toString(),m=h.i)for(e=0,f=m.length;e<f;e++)if(k=m[e],l=I(k).toString(),!(l in u)){if(g=b.usedTiles[p]){var z=h.ia(y);a:{q=k;var D=y;if(q.a){var t=void 0,v=void 0,B=void 0,F=void 0;for(F in g)if(F in q.a)for(var B=g[F],C,t=0,v=q.a[F].length;t<v;++t){C=q.a[F][t];if(jd(C,B)){q=!0;break a}var G=Le(z,Ue(D),parseInt(F,
-10)),J=G.b-G.a+1;if(B.a<G.a||B.b>G.b)if(jd(C,new gd(Da(B.a,J),Da(B.b,J),B.f,B.c))||B.b-B.a+1>J&&jd(C,G)){q=!0;break a}}q=!1}else q=!0}}else q=!1;q?(l in w&&delete w[l],u[l]=k):w[l]=k}c=[u,w];d=c[0];c=c[1];for(var A in this.b)A in d?(this.a[A]||(pe(this.b[A],!0),this.a[A]=!0),delete d[A]):A in c?(this.a[A]&&(pe(this.b[A],!1),delete this.a[A]),delete c[A]):(he(this.b[A]),delete this.b[A],delete this.a[A]);for(A in d)e=document.createElement("LI"),e.innerHTML=d[A].b,this.s.appendChild(e),this.b[A]=e,
-this.a[A]=!0;for(A in c)e=document.createElement("LI"),e.innerHTML=c[A].b,pe(e,!1),this.s.appendChild(e),this.b[A]=e;A=!Za(this.a)||!Za(b.logos);this.o!=A&&(pe(this.element,A),this.o=A);A&&Za(this.a)?this.element.classList.add("ol-logo-only"):this.element.classList.remove("ol-logo-only");var H;b=b.logos;A=this.D;for(H in A)H in b||(he(A[H]),delete A[H]);for(var O in b)O in A||(H=new Image,H.src=O,d=b[O],""===d?d=H:(d=ce("A",{href:d}),d.appendChild(H)),this.j.appendChild(d),A[O]=d);pe(this.j,!Za(b))}else this.o&&
-(pe(this.element,!1),this.o=!1)}af.prototype.G=function(b){b.preventDefault();this.element.classList.toggle("ol-collapsed");this.g?ie(this.u,this.v):ie(this.v,this.u);this.g=!this.g};function cf(b){b=b?b:{};var c=void 0!==b.className?b.className:"ol-rotate",d=void 0!==b.label?b.label:"\u21e7";this.a=null;"string"===typeof d?this.a=ce("SPAN","ol-compass",d):(this.a=d,this.a.classList.add(this.a,"ol-compass"));d=ce("BUTTON",{"class":c+"-reset",type:"button",title:b.tipLabel?b.tipLabel:"Reset rotation"},this.a);R(d,"click",cf.prototype.o,this);c=ce("DIV",c+" ol-unselectable ol-control",d);d=b.render?b.render:df;this.g=b.resetNorth?b.resetNorth:void 0;ve.call(this,{element:c,render:d,
-target:b.target});this.i=void 0!==b.duration?b.duration:250;this.b=void 0!==b.autoHide?b.autoHide:!0;this.j=void 0;this.b&&this.element.classList.add("ol-hidden")}M(cf,ve);cf.prototype.o=function(b){b.preventDefault();if(void 0!==this.g)this.g();else{b=this.c;var c=b.O();if(c){var d=Xc(c);void 0!==d&&(0<this.i&&(d%=2*Math.PI,d<-Math.PI&&(d+=2*Math.PI),d>Math.PI&&(d-=2*Math.PI),b.ea(ed({rotation:d,duration:this.i,easing:ad}))),c.set("rotation",0))}}};
-function df(b){if(b=b.frameState){b=b.viewState.rotation;if(b!=this.j){var c="rotate("+b+"rad)";if(this.b){var d=this.element.classList.contains("ol-hidden");d||0!==b?d&&0!==b&&this.element.classList.remove("ol-hidden"):this.element.classList.add("ol-hidden")}this.a.style.msTransform=c;this.a.style.webkitTransform=c;this.a.style.transform=c}this.j=b}};function ef(b){b=b?b:{};var c=void 0!==b.className?b.className:"ol-zoom",d=void 0!==b.delta?b.delta:1,e=void 0!==b.zoomOutLabel?b.zoomOutLabel:"\u2212",f=void 0!==b.zoomOutTipLabel?b.zoomOutTipLabel:"Zoom out",g=ce("BUTTON",{"class":c+"-in",type:"button",title:void 0!==b.zoomInTipLabel?b.zoomInTipLabel:"Zoom in"},void 0!==b.zoomInLabel?b.zoomInLabel:"+");R(g,"click",na(ef.prototype.b,d),this);e=ce("BUTTON",{"class":c+"-out",type:"button",title:f},e);R(e,"click",na(ef.prototype.b,-d),this);c=ce("DIV",
-c+" ol-unselectable ol-control",g,e);ve.call(this,{element:c,target:b.target});this.a=void 0!==b.duration?b.duration:250}M(ef,ve);ef.prototype.b=function(b,c){c.preventDefault();var d=this.c,e=d.O();if(e){var f=e.J();f&&(0<this.a&&d.ea(fd({resolution:f,duration:this.a,easing:ad})),d=e.constrainResolution(f,b),Zc(e,d))}};function ff(b){b=b?b:{};var c=new md;(void 0!==b.zoom?b.zoom:1)&&c.push(new ef(b.zoomOptions));(void 0!==b.rotate?b.rotate:1)&&c.push(new cf(b.rotateOptions));(void 0!==b.attribution?b.attribution:1)&&c.push(new af(b.attributionOptions));return c};var gf=Kd?"webkitfullscreenchange":Jd?"mozfullscreenchange":Hd?"MSFullscreenChange":"fullscreenchange";function hf(){var b=Xd().a,c=b.body;return!!(c.webkitRequestFullscreen||c.mozRequestFullScreen&&b.mozFullScreenEnabled||c.msRequestFullscreen&&b.msFullscreenEnabled||c.requestFullscreen&&b.fullscreenEnabled)}
-function jf(b){b.webkitRequestFullscreen?b.webkitRequestFullscreen():b.mozRequestFullScreen?b.mozRequestFullScreen():b.msRequestFullscreen?b.msRequestFullscreen():b.requestFullscreen&&b.requestFullscreen()}function kf(){var b=Xd().a;return!!(b.webkitIsFullScreen||b.mozFullScreen||b.msFullscreenElement||b.fullscreenElement)};function lf(b){b=b?b:{};this.a=void 0!==b.className?b.className:"ol-full-screen";var c=void 0!==b.label?b.label:"\u2922";this.b="string"===typeof c?document.createTextNode(c):c;c=void 0!==b.labelActive?b.labelActive:"\u00d7";this.g="string"===typeof c?document.createTextNode(c):c;c=b.tipLabel?b.tipLabel:"Toggle full-screen";c=ce("BUTTON",{"class":this.a+"-"+kf(),type:"button",title:c},this.b);R(c,"click",this.s,this);var d=this.a+" ol-unselectable ol-control "+(hf()?"":"ol-unsupported"),c=ce("DIV",
-d,c);ve.call(this,{element:c,target:b.target});this.o=void 0!==b.keys?b.keys:!1;this.i=b.source}M(lf,ve);
-lf.prototype.s=function(b){b.preventDefault();hf()&&(b=this.c)&&(kf()?(b=Xd().a,b.webkitCancelFullScreen?b.webkitCancelFullScreen():b.mozCancelFullScreen?b.mozCancelFullScreen():b.msExitFullscreen?b.msExitFullscreen():b.exitFullscreen&&b.exitFullscreen()):(b=this.i?$d(this.i):b.Fa(),this.o?b.mozRequestFullScreenWithKeys?b.mozRequestFullScreenWithKeys():b.webkitRequestFullscreen?b.webkitRequestFullscreen():jf(b):jf(b)))};
-lf.prototype.j=function(){var b=this.element.firstElementChild,c=this.c;kf()?(b.className=this.a+"-true",ie(this.g,this.b)):(b.className=this.a+"-false",ie(this.b,this.g));c&&c.nb()};lf.prototype.setMap=function(b){lf.Y.setMap.call(this,b);b&&this.h.push(R(x.document,gf,this.j,this))};var mf;
-function nf(){var b=x.MessageChannel;"undefined"===typeof b&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&!W("Presto")&&(b=function(){var b=document.createElement("IFRAME");b.style.display="none";b.src="";document.documentElement.appendChild(b);var c=b.contentWindow,b=c.document;b.open();b.write("");b.close();var d="callImmediate"+Math.random(),e="file:"==c.location.protocol?"*":c.location.protocol+"//"+c.location.host,b=ma(function(b){if(("*"==e||b.origin==e)&&b.data==
-d)this.port1.onmessage()},this);c.addEventListener("message",b,!1);this.port1={};this.port2={postMessage:function(){c.postMessage(d,e)}}});if("undefined"!==typeof b&&!W("Trident")&&!W("MSIE")){var c=new b,d={},e=d;c.port1.onmessage=function(){if(void 0!==d.next){d=d.next;var b=d.fc;d.fc=null;b()}};return function(b){e.next={fc:b};e=e.next;c.port2.postMessage(0)}}return"undefined"!==typeof document&&"onreadystatechange"in document.createElement("SCRIPT")?function(b){var c=document.createElement("SCRIPT");
-c.onreadystatechange=function(){c.onreadystatechange=null;c.parentNode.removeChild(c);c=null;b();b=null};document.documentElement.appendChild(c)}:function(b){x.setTimeout(b,0)}};function of(b,c,d){S.call(this,b);this.a=c;b=d?d:{};this.buttons=pf(b);this.pressure=qf(b,this.buttons);this.bubbles="bubbles"in b?b.bubbles:!1;this.cancelable="cancelable"in b?b.cancelable:!1;this.view="view"in b?b.view:null;this.detail="detail"in b?b.detail:null;this.screenX="screenX"in b?b.screenX:0;this.screenY="screenY"in b?b.screenY:0;this.clientX="clientX"in b?b.clientX:0;this.clientY="clientY"in b?b.clientY:0;this.button="button"in b?b.button:0;this.relatedTarget="relatedTarget"in b?b.relatedTarget:
-null;this.pointerId="pointerId"in b?b.pointerId:0;this.width="width"in b?b.width:0;this.height="height"in b?b.height:0;this.pointerType="pointerType"in b?b.pointerType:"";this.isPrimary="isPrimary"in b?b.isPrimary:!1;c.preventDefault&&(this.preventDefault=function(){c.preventDefault()})}M(of,S);function pf(b){if(b.buttons||rf)b=b.buttons;else switch(b.which){case 1:b=1;break;case 2:b=4;break;case 3:b=2;break;default:b=0}return b}function qf(b,c){var d=0;b.pressure?d=b.pressure:d=c?.5:0;return d}
-var rf=!1;try{rf=1===(new MouseEvent("click",{buttons:1})).buttons}catch(b){};function sf(b,c){var d=document.createElement("CANVAS");b&&(d.width=b);c&&(d.height=c);return d.getContext("2d")}
-var tf=function(){var b;return function(){if(void 0===b){var c=document.createElement("P"),d,e={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]="translate(1px,1px)",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&"none"!==d}return b}}(),uf=function(){var b;return function(){if(void 0===b){var c=document.createElement("P"),
-d,e={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]="translate3d(1px,1px,1px)",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&"none"!==d}return b}}();
-function vf(b,c){var d=b.style;d.WebkitTransform=c;d.MozTransform=c;d.a=c;d.msTransform=c;d.transform=c;Hd&&Rd("9.0")&&(b.style.transformOrigin="0 0")}function wf(b,c){var d;if(uf()){var e=Array(16);for(d=0;16>d;++d)e[d]=c[d].toFixed(6);vf(b,"matrix3d("+e.join(",")+")")}else if(tf()){var e=[c[0],c[1],c[4],c[5],c[12],c[13]],f=Array(6);for(d=0;6>d;++d)f[d]=e[d].toFixed(6);vf(b,"matrix("+f.join(",")+")")}else b.style.left=Math.round(c[12])+"px",b.style.top=Math.round(c[13])+"px"};var xf=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function yf(b,c){var d,e,f=xf.length;for(e=0;e<f;++e)try{if(d=b.getContext(xf[e],c))return d}catch(g){}return null};var zf,Af="undefined"!==typeof navigator?navigator.userAgent.toLowerCase():"",Bf=-1!==Af.indexOf("firefox"),Cf=-1!==Af.indexOf("safari")&&-1===Af.indexOf("chrom"),Df=-1!==Af.indexOf("macintosh"),Ef=x.devicePixelRatio||1,Ff=!1,Gf=function(){if(!("HTMLCanvasElement"in x))return!1;try{var b=sf();return b?(void 0!==b.setLineDash&&(Ff=!0),!0):!1}catch(c){return!1}}(),Hf="ontouchstart"in x,If="PointerEvent"in x,Jf=!!x.navigator.msPointerEnabled,Kf=!1,Lf=[];
-if("WebGLRenderingContext"in x)try{var Mf=yf(document.createElement("CANVAS"),{failIfMajorPerformanceCaveat:!0});Mf&&(Kf=!0,Lf=Mf.getSupportedExtensions())}catch(b){}zf=Kf;oa=Lf;function Nf(b,c){this.a=b;this.g=c};function Of(b){Nf.call(this,b,{mousedown:this.Kd,mousemove:this.Ld,mouseup:this.Od,mouseover:this.Nd,mouseout:this.Md});this.b=b.b;this.f=[]}M(Of,Nf);function Pf(b,c){for(var d=b.f,e=c.clientX,f=c.clientY,g=0,h=d.length,k;g<h&&(k=d[g]);g++){var l=Math.abs(f-k[1]);if(25>=Math.abs(e-k[0])&&25>=l)return!0}return!1}function Qf(b){var c=Rf(b,b),d=c.preventDefault;c.preventDefault=function(){b.preventDefault();d()};c.pointerId=1;c.isPrimary=!0;c.pointerType="mouse";return c}n=Of.prototype;
-n.Kd=function(b){if(!Pf(this,b)){if((1).toString()in this.b){var c=Qf(b);Sf(this.a,Tf,c,b);delete this.b[(1).toString()]}c=Qf(b);this.b[(1).toString()]=b;Sf(this.a,Uf,c,b)}};n.Ld=function(b){if(!Pf(this,b)){var c=Qf(b);Sf(this.a,Vf,c,b)}};n.Od=function(b){if(!Pf(this,b)){var c=this.b[(1).toString()];c&&c.button===b.button&&(c=Qf(b),Sf(this.a,Wf,c,b),delete this.b[(1).toString()])}};n.Nd=function(b){if(!Pf(this,b)){var c=Qf(b);Xf(this.a,c,b)}};
-n.Md=function(b){if(!Pf(this,b)){var c=Qf(b);Yf(this.a,c,b)}};function Zf(b){Nf.call(this,b,{MSPointerDown:this.Td,MSPointerMove:this.Ud,MSPointerUp:this.Xd,MSPointerOut:this.Vd,MSPointerOver:this.Wd,MSPointerCancel:this.Sd,MSGotPointerCapture:this.Qd,MSLostPointerCapture:this.Rd});this.b=b.b;this.f=["","unavailable","touch","pen","mouse"]}M(Zf,Nf);function $f(b,c){var d=c;ea(c.pointerType)&&(d=Rf(c,c),d.pointerType=b.f[c.pointerType]);return d}n=Zf.prototype;n.Td=function(b){this.b[b.pointerId.toString()]=b;var c=$f(this,b);Sf(this.a,Uf,c,b)};
-n.Ud=function(b){var c=$f(this,b);Sf(this.a,Vf,c,b)};n.Xd=function(b){var c=$f(this,b);Sf(this.a,Wf,c,b);delete this.b[b.pointerId.toString()]};n.Vd=function(b){var c=$f(this,b);Yf(this.a,c,b)};n.Wd=function(b){var c=$f(this,b);Xf(this.a,c,b)};n.Sd=function(b){var c=$f(this,b);Sf(this.a,Tf,c,b);delete this.b[b.pointerId.toString()]};n.Rd=function(b){T(this.a,new of("lostpointercapture",b,b))};n.Qd=function(b){T(this.a,new of("gotpointercapture",b,b))};function ag(b){Nf.call(this,b,{pointerdown:this.he,pointermove:this.ie,pointerup:this.le,pointerout:this.je,pointerover:this.ke,pointercancel:this.ge,gotpointercapture:this.ld,lostpointercapture:this.Jd})}M(ag,Nf);n=ag.prototype;n.he=function(b){bg(this.a,b)};n.ie=function(b){bg(this.a,b)};n.le=function(b){bg(this.a,b)};n.je=function(b){bg(this.a,b)};n.ke=function(b){bg(this.a,b)};n.ge=function(b){bg(this.a,b)};n.Jd=function(b){bg(this.a,b)};n.ld=function(b){bg(this.a,b)};function cg(b,c){Nf.call(this,b,{touchstart:this.ye,touchmove:this.xe,touchend:this.we,touchcancel:this.ve});this.b=b.b;this.l=c;this.f=void 0;this.h=0;this.c=void 0}M(cg,Nf);n=cg.prototype;n.Pc=function(){this.h=0;this.c=void 0};
-function dg(b,c,d){c=Rf(c,d);c.pointerId=d.identifier+2;c.bubbles=!0;c.cancelable=!0;c.detail=b.h;c.button=0;c.buttons=1;c.width=d.webkitRadiusX||d.radiusX||0;c.height=d.webkitRadiusY||d.radiusY||0;c.pressure=d.webkitForce||d.force||.5;c.isPrimary=b.f===d.identifier;c.pointerType="touch";c.clientX=d.clientX;c.clientY=d.clientY;c.screenX=d.screenX;c.screenY=d.screenY;return c}
-function eg(b,c,d){function e(){c.preventDefault()}var f=Array.prototype.slice.call(c.changedTouches),g=f.length,h,k;for(h=0;h<g;++h)k=dg(b,c,f[h]),k.preventDefault=e,d.call(b,c,k)}
-n.ye=function(b){var c=b.touches,d=Object.keys(this.b),e=d.length;if(e>=c.length){var f=[],g,h,k;for(g=0;g<e;++g){h=d[g];k=this.b[h];var l;if(!(l=1==h))a:{l=c.length;for(var m=void 0,p=0;p<l;p++)if(m=c[p],m.identifier===h-2){l=!0;break a}l=!1}l||f.push(k.out)}for(g=0;g<f.length;++g)this.xb(b,f[g])}c=b.changedTouches[0];d=Object.keys(this.b).length;if(0===d||1===d&&(1).toString()in this.b)this.f=c.identifier,void 0!==this.c&&x.clearTimeout(this.c);fg(this,b);this.h++;eg(this,b,this.fe)};
-n.fe=function(b,c){this.b[c.pointerId]={target:c.target,out:c,Mc:c.target};var d=this.a;c.bubbles=!0;Sf(d,gg,c,b);d=this.a;c.bubbles=!1;Sf(d,hg,c,b);Sf(this.a,Uf,c,b)};n.xe=function(b){b.preventDefault();eg(this,b,this.Pd)};n.Pd=function(b,c){var d=this.b[c.pointerId];if(d){var e=d.out,f=d.Mc;Sf(this.a,Vf,c,b);e&&f!==c.target&&(e.relatedTarget=c.target,c.relatedTarget=f,e.target=f,c.target?(Yf(this.a,e,b),Xf(this.a,c,b)):(c.target=f,c.relatedTarget=null,this.xb(b,c)));d.out=c;d.Mc=c.target}};
-n.we=function(b){fg(this,b);eg(this,b,this.ze)};n.ze=function(b,c){Sf(this.a,Wf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Sf(d,ig,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Pc.bind(this),200))};n.ve=function(b){eg(this,b,this.xb)};n.xb=function(b,c){Sf(this.a,Tf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Sf(d,ig,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Pc.bind(this),200))};
-function fg(b,c){var d=b.l.f,e=c.changedTouches[0];if(b.f===e.identifier){var f=[e.clientX,e.clientY];d.push(f);x.setTimeout(function(){Ka(d,f)},2500)}};function jg(b){lb.call(this);this.g=b;this.b={};this.c={};this.a=[];If?kg(this,new ag(this)):Jf?kg(this,new Zf(this)):(b=new Of(this),kg(this,b),Hf&&kg(this,new cg(this,b)));b=this.a.length;for(var c,d=0;d<b;d++)c=this.a[d],lg(this,Object.keys(c.g))}M(jg,lb);function kg(b,c){var d=Object.keys(c.g);d&&(d.forEach(function(b){var d=c.g[b];d&&(this.c[b]=d.bind(c))},b),b.a.push(c))}jg.prototype.f=function(b){var c=this.c[b.type];c&&c(b)};
-function lg(b,c){c.forEach(function(b){R(this.g,b,this.f,this)},b)}function mg(b,c){c.forEach(function(b){fb(this.g,b,this.f,this)},b)}function Rf(b,c){for(var d={},e,f=0,g=ng.length;f<g;f++)e=ng[f][0],d[e]=b[e]||c[e]||ng[f][1];return d}jg.prototype.out=function(b,c){b.bubbles=!0;Sf(this,og,b,c)};function Yf(b,c,d){b.out(c,d);var e=c.relatedTarget;e&&je(c.target,e)||(c.bubbles=!1,Sf(b,ig,c,d))}
-function Xf(b,c,d){c.bubbles=!0;Sf(b,gg,c,d);var e=c.relatedTarget;e&&je(c.target,e)||(c.bubbles=!1,Sf(b,hg,c,d))}function Sf(b,c,d,e){T(b,new of(c,e,d))}function bg(b,c){T(b,new of(c.type,c,c))}jg.prototype.K=function(){for(var b=this.a.length,c,d=0;d<b;d++)c=this.a[d],mg(this,Object.keys(c.g));jg.Y.K.call(this)};
-var Vf="pointermove",Uf="pointerdown",Wf="pointerup",gg="pointerover",og="pointerout",hg="pointerenter",ig="pointerleave",Tf="pointercancel",ng=[["bubbles",!1],["cancelable",!1],["view",null],["detail",null],["screenX",0],["screenY",0],["clientX",0],["clientY",0],["ctrlKey",!1],["altKey",!1],["shiftKey",!1],["metaKey",!1],["button",0],["relatedTarget",null],["buttons",0],["pointerId",0],["width",0],["height",0],["pressure",0],["tiltX",0],["tiltY",0],["pointerType",""],["hwTimestamp",0],["isPrimary",
-!1],["type",""],["target",null],["currentTarget",null],["which",0]];function pg(b,c,d,e,f){ue.call(this,b,c,f);this.originalEvent=d;this.pixel=c.nc(d);this.coordinate=c.pa(this.pixel);this.dragging=void 0!==e?e:!1}M(pg,ue);pg.prototype.preventDefault=function(){pg.Y.preventDefault.call(this);this.originalEvent.preventDefault()};pg.prototype.stopPropagation=function(){pg.Y.stopPropagation.call(this);this.originalEvent.stopPropagation()};function qg(b,c,d,e,f){pg.call(this,b,c,d.a,e,f);this.a=d}M(qg,pg);
-function rg(b){lb.call(this);this.f=b;this.h=0;this.l=!1;this.c=[];this.b=null;b=this.f.a;this.s=0;this.o={};this.g=new jg(b);this.a=null;this.i=R(this.g,Uf,this.xd,this);this.j=R(this.g,Vf,this.ne,this)}M(rg,lb);function sg(b,c){var d;d=new qg(tg,b.f,c);T(b,d);0!==b.h?(x.clearTimeout(b.h),b.h=0,d=new qg(ug,b.f,c),T(b,d)):b.h=x.setTimeout(function(){this.h=0;var b=new qg(vg,this.f,c);T(this,b)}.bind(b),250)}
-function wg(b,c){c.type==xg||c.type==yg?delete b.o[c.pointerId]:c.type==zg&&(b.o[c.pointerId]=!0);b.s=Object.keys(b.o).length}n=rg.prototype;n.qc=function(b){wg(this,b);var c=new qg(xg,this.f,b);T(this,c);!this.l&&0===b.button&&sg(this,this.b);0===this.s&&(this.c.forEach(P),this.c.length=0,this.l=!1,this.b=null,ib(this.a),this.a=null)};
-n.xd=function(b){wg(this,b);var c=new qg(zg,this.f,b);T(this,c);this.b=b;0===this.c.length&&(this.a=new jg(document),this.c.push(R(this.a,Ag,this.$d,this),R(this.a,xg,this.qc,this),R(this.g,yg,this.qc,this)))};n.$d=function(b){if(b.clientX!=this.b.clientX||b.clientY!=this.b.clientY){this.l=!0;var c=new qg(Bg,this.f,b,this.l);T(this,c)}b.preventDefault()};n.ne=function(b){T(this,new qg(b.type,this.f,b,!(!this.b||b.clientX==this.b.clientX&&b.clientY==this.b.clientY)))};
-n.K=function(){this.j&&(P(this.j),this.j=null);this.i&&(P(this.i),this.i=null);this.c.forEach(P);this.c.length=0;this.a&&(ib(this.a),this.a=null);this.g&&(ib(this.g),this.g=null);rg.Y.K.call(this)};var vg="singleclick",tg="click",ug="dblclick",Bg="pointerdrag",Ag="pointermove",zg="pointerdown",xg="pointerup",yg="pointercancel",Cg={Le:vg,Ae:tg,Be:ug,Ee:Bg,He:Ag,De:zg,Ke:xg,Je:"pointerover",Ie:"pointerout",Fe:"pointerenter",Ge:"pointerleave",Ce:yg};function Dg(b){U.call(this);var c=Va({},b);c.opacity=void 0!==b.opacity?b.opacity:1;c.visible=void 0!==b.visible?b.visible:!0;c.zIndex=void 0!==b.zIndex?b.zIndex:0;c.maxResolution=void 0!==b.maxResolution?b.maxResolution:Infinity;c.minResolution=void 0!==b.minResolution?b.minResolution:0;this.l(c)}M(Dg,U);
-function Eg(b){var c=b.Ob(),d=b.Ib(),e=b.Va(),f=b.C(),g=b.Pb(),h=b.get("maxResolution"),k=b.get("minResolution");return{layer:b,opacity:Ba(c,0,1),Tb:d,visible:e,Wa:!0,extent:f,zIndex:g,maxResolution:h,minResolution:Math.max(k,0)}}n=Dg.prototype;n.C=function(){return this.get("extent")};n.Ob=function(){return this.get("opacity")};n.Va=function(){return this.get("visible")};n.Pb=function(){return this.get("zIndex")};n.vc=function(b){this.set("opacity",b)};n.wc=function(b){this.set("visible",b)};
-n.xc=function(b){this.set("zIndex",b)};function Fg(){};function Gg(b,c,d,e,f,g){S.call(this,b,c);this.vectorContext=d;this.frameState=e;this.context=f;this.glContext=g}M(Gg,S);function Hg(b){var c=Va({},b);delete c.source;Dg.call(this,c);this.h=this.c=this.b=null;b.map&&this.setMap(b.map);R(this,qb("source"),this.Cd,this);this.Sb(b.source?b.source:null)}M(Hg,Dg);function Ig(b,c){return b.visible&&c>=b.minResolution&&c<b.maxResolution}n=Hg.prototype;n.Eb=function(b){b=b?b:[];b.push(Eg(this));return b};n.W=function(){return this.get("source")||null};n.Ib=function(){var b=this.W();return b?b.N():"undefined"};n.be=function(){this.w()};
-n.Cd=function(){this.h&&(P(this.h),this.h=null);var b=this.W();b&&(this.h=R(b,"change",this.be,this));this.w()};n.setMap=function(b){this.b&&(P(this.b),this.b=null);b||this.w();this.c&&(P(this.c),this.c=null);b&&(this.b=R(b,"precompose",function(b){var d=Eg(this);d.Wa=!1;d.zIndex=Infinity;b.frameState.layerStatesArray.push(d);b.frameState.layerStates[I(this)]=d},this),this.c=R(this,"change",b.render,b),this.w())};n.Sb=function(b){this.set("source",b)};function Jg(b,c,d,e,f,g,h,k){Cb(b);0===c&&0===d||Eb(b,c,d);1==e&&1==f||Fb(b,e,f);0!==g&&Gb(b,g);0===h&&0===k||Eb(b,h,k);return b}function Kg(b,c){return b[0]==c[0]&&b[1]==c[1]&&b[4]==c[4]&&b[5]==c[5]&&b[12]==c[12]&&b[13]==c[13]}function Lg(b,c,d){var e=b[1],f=b[5],g=b[13],h=c[0];c=c[1];d[0]=b[0]*h+b[4]*c+b[12];d[1]=e*h+f*c+g;return d};function Mg(b){nb.call(this);this.a=b}M(Mg,nb);Mg.prototype.Xa=N;Mg.prototype.yc=cc;Mg.prototype.l=function(b,c,d){return function(e,f){return Xe(b,c,e,f,function(b){d[e]||(d[e]={});d[e][b.L.toString()]=b})}};function Ng(b){var c=b.a;c.Va()&&"ready"==c.Ib()&&b.w()}function Og(b,c){c.Gc()&&b.postRenderFunctions.push(na(function(b,c,f){c=I(b).toString();b.Hc(f.viewState.projection,f.usedTiles[c])},c))}function Pg(b,c){if(c){var d,e,f;e=0;for(f=c.length;e<f;++e)d=c[e],b[I(d).toString()]=d}}
-function Qg(b,c){var d=c.v;void 0!==d&&("string"===typeof d?b.logos[d]="":ha(d)&&(b.logos[d.src]=d.href))}function Rg(b,c,d,e){c=I(c).toString();d=d.toString();c in b?d in b[c]?(b=b[c][d],e.a<b.a&&(b.a=e.a),e.b>b.b&&(b.b=e.b),e.f<b.f&&(b.f=e.f),e.c>b.c&&(b.c=e.c)):b[c][d]=e:(b[c]={},b[c][d]=e)}function Sg(b,c,d){return[c*(Math.round(b[0]/c)+d[0]%2/2),c*(Math.round(b[1]/c)+d[1]%2/2)]}
-function Tg(b,c,d,e,f,g,h,k,l,m){var p=I(c).toString();p in b.wantedTiles||(b.wantedTiles[p]={});var q=b.wantedTiles[p];b=b.tileQueue;var r=d.minZoom,u,w,y,z,D,t;for(t=h;t>=r;--t)for(w=Le(d,g,t,w),y=d.J(t),z=w.a;z<=w.b;++z)for(D=w.f;D<=w.c;++D)h-t<=k?(u=Ug(c,t,z,D,e,f),0==u.N()&&(q[u.L.toString()]=!0,u.getKey()in b.f||b.c([u,p,Pe(d,u.L),y])),void 0!==l&&l.call(m,u)):c.Qc(t,z,D,f)};function Vg(b){this.B=b.opacity;this.o=b.rotateWithView;this.s=b.rotation;this.u=b.scale;this.v=b.snapToPixel};function Wg(b){b=b||{};this.g=void 0!==b.anchor?b.anchor:[.5,.5];this.c=null;this.b=void 0!==b.anchorOrigin?b.anchorOrigin:"top-left";this.l=void 0!==b.anchorXUnits?b.anchorXUnits:"fraction";this.i=void 0!==b.anchorYUnits?b.anchorYUnits:"fraction";var c=void 0!==b.crossOrigin?b.crossOrigin:null,d=void 0!==b.img?b.img:null,e=void 0!==b.imgSize?b.imgSize:null,f=b.src;void 0!==f&&0!==f.length||!d||(f=d.src||I(d).toString());var g=void 0!==b.src?0:2,h;void 0!==b.color?(h=b.color,h=Array.isArray(h)?h:
-yd(h)):h=null;var k=Xg.qa(),l=k.get(f,c,h);l||(l=new Yg(d,f,e,c,g,h),k.set(f,c,h,l));this.a=l;this.H=void 0!==b.offset?b.offset:[0,0];this.f=void 0!==b.offsetOrigin?b.offsetOrigin:"top-left";this.h=null;this.j=void 0!==b.size?b.size:null;Vg.call(this,{opacity:void 0!==b.opacity?b.opacity:1,rotation:void 0!==b.rotation?b.rotation:0,scale:void 0!==b.scale?b.scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0,rotateWithView:void 0!==b.rotateWithView?b.rotateWithView:!1})}M(Wg,Vg);n=Wg.prototype;
-n.Sa=function(){if(this.c)return this.c;var b=this.g,c=this.ya();if("fraction"==this.l||"fraction"==this.i){if(!c)return null;b=this.g.slice();"fraction"==this.l&&(b[0]*=c[0]);"fraction"==this.i&&(b[1]*=c[1])}if("top-left"!=this.b){if(!c)return null;b===this.g&&(b=this.g.slice());if("top-right"==this.b||"bottom-right"==this.b)b[0]=-b[0]+c[0];if("bottom-left"==this.b||"bottom-right"==this.b)b[1]=-b[1]+c[1]}return this.c=b};n.S=function(b){return this.a.S(b)};n.Db=function(){return this.a.b};n.Ya=function(){return this.a.f};
-n.jb=function(){var b=this.a;if(!b.l)if(b.i){var c=b.b[0],d=b.b[1],e=sf(c,d);e.fillRect(0,0,c,d);b.l=e.canvas}else b.l=b.a;return b.l};n.fa=function(){if(this.h)return this.h;var b=this.H;if("top-left"!=this.f){var c=this.ya(),d=this.a.b;if(!c||!d)return null;b=b.slice();if("top-right"==this.f||"bottom-right"==this.f)b[0]=d[0]-c[0]-b[0];if("bottom-left"==this.f||"bottom-right"==this.f)b[1]=d[1]-c[1]-b[1]}return this.h=b};n.ya=function(){return this.j?this.j:this.a.b};
-n.Mb=function(b,c){return R(this.a,"change",b,c)};n.load=function(){this.a.load()};n.Ub=function(b,c){fb(this.a,"change",b,c)};function Yg(b,c,d,e,f,g){lb.call(this);this.l=null;this.a=b?b:new Image;null!==e&&(this.a.crossOrigin=e);this.c=g?document.createElement("CANVAS"):null;this.h=g;this.g=null;this.f=f;this.b=d;this.o=c;this.i=!1;2==this.f&&Zg(this)}M(Yg,lb);function Zg(b){var c=sf(1,1);try{c.drawImage(b.a,0,0),c.getImageData(0,0,1,1)}catch(d){b.i=!0}}
-Yg.prototype.j=function(){this.f=3;this.g.forEach(P);this.g=null;T(this,"change")};
-Yg.prototype.s=function(){this.f=2;this.b&&(this.a.width=this.b[0],this.a.height=this.b[1]);this.b=[this.a.width,this.a.height];this.g.forEach(P);this.g=null;Zg(this);if(!this.i&&null!==this.h){this.c.width=this.a.width;this.c.height=this.a.height;var b=this.c.getContext("2d");b.drawImage(this.a,0,0);for(var c=b.getImageData(0,0,this.a.width,this.a.height),d=c.data,e=this.h[0]/255,f=this.h[1]/255,g=this.h[2]/255,h=0,k=d.length;h<k;h+=4)d[h]*=e,d[h+1]*=f,d[h+2]*=g;b.putImageData(c,0,0)}T(this,"change")};
-Yg.prototype.S=function(){return this.c?this.c:this.a};Yg.prototype.load=function(){if(0==this.f){this.f=1;this.g=[R(this.a,"error",this.j,this,!0),R(this.a,"load",this.s,this,!0)];try{this.a.src=this.o}catch(b){this.j()}}};function Xg(){this.a={};this.b=0}aa(Xg);Xg.prototype.clear=function(){this.a={};this.b=0};Xg.prototype.get=function(b,c,d){b=c+":"+b+":"+(d?wd(d):"null");return b in this.a?this.a[b]:null};Xg.prototype.set=function(b,c,d,e){this.a[c+":"+b+":"+(d?wd(d):"null")]=e;++this.b};function $g(b,c){this.h=c;this.f={};this.B={}}M($g,hb);function ah(b){var c=b.viewState,d=b.coordinateToPixelMatrix;Jg(d,b.size[0]/2,b.size[1]/2,1/c.resolution,-1/c.resolution,-c.rotation,-c.center[0],-c.center[1]);Db(d,b.pixelToCoordinateMatrix)}n=$g.prototype;n.K=function(){for(var b in this.f)ib(this.f[b])};function bh(){var b=Xg.qa();if(32<b.b){var c=0,d,e;for(d in b.a)e=b.a[d],0!==(c++&3)||mb(e)||(delete b.a[d],--b.b)}}
-n.Qb=function(b,c,d,e,f,g){function h(b,f){var g=I(b).toString(),h=c.layerStates[I(f)].Wa;if(!(g in c.skippedFeatureUids)||h)return d.call(e,b,h?f:null)}var k,l=c.viewState,m=l.resolution,p=l.projection,l=b;if(p.a){var p=p.C(),q=Ub(p),r=b[0];if(r<p[0]||r>p[2])l=[r+q*Math.ceil((p[0]-r)/q),b[1]]}p=c.layerStatesArray;for(q=p.length-1;0<=q;--q){var u=p[q],r=u.layer;if(Ig(u,m)&&f.call(g,r)&&(u=ch(this,r),r.W()&&(k=u.Xa(r.W().j?l:b,c,h,e)),k))return k}};
-n.zc=function(b,c,d,e){return void 0!==this.Qb(b,c,bc,this,d,e)};function ch(b,c){var d=I(c).toString();if(d in b.f)return b.f[d];var e=b.Bb(c);b.f[d]=e;b.B[d]=R(e,"change",b.rd,b);return e}n.rd=function(){this.h.render()};n.kb=N;n.qe=function(b,c){for(var d in this.f)if(!(c&&d in c.layerStates)){var e=d,f=this.f[e];delete this.f[e];P(this.B[e]);delete this.B[e];ib(f)}};function dh(b,c){for(var d in b.f)if(!(d in c.layerStates)){c.postRenderFunctions.push(b.qe.bind(b));break}}
-function Na(b,c){return b.zIndex-c.zIndex};function eh(b,c){this.j=b;this.l=c;this.a=[];this.b=[];this.f={}}eh.prototype.clear=function(){this.a.length=0;this.b.length=0;Wa(this.f)};function fh(b){var c=b.a,d=b.b,e=c[0];1==c.length?(c.length=0,d.length=0):(c[0]=c.pop(),d[0]=d.pop(),gh(b,0));c=b.l(e);delete b.f[c];return e}eh.prototype.c=function(b){var c=this.j(b);return Infinity!=c?(this.a.push(b),this.b.push(c),this.f[this.l(b)]=!0,hh(this,0,this.a.length-1),!0):!1};
-function gh(b,c){for(var d=b.a,e=b.b,f=d.length,g=d[c],h=e[c],k=c;c<f>>1;){var l=2*c+1,m=2*c+2,l=m<f&&e[m]<e[l]?m:l;d[c]=d[l];e[c]=e[l];c=l}d[c]=g;e[c]=h;hh(b,k,c)}function hh(b,c,d){var e=b.a;b=b.b;for(var f=e[d],g=b[d];d>c;){var h=d-1>>1;if(b[h]>g)e[d]=e[h],b[d]=b[h],d=h;else break}e[d]=f;b[d]=g}function ih(b){var c=b.j,d=b.a,e=b.b,f=0,g=d.length,h,k,l;for(k=0;k<g;++k)h=d[k],l=c(h),Infinity==l?delete b.f[b.l(h)]:(e[f]=l,d[f++]=h);d.length=f;e.length=f;for(c=(b.a.length>>1)-1;0<=c;c--)gh(b,c)};function jh(b,c){eh.call(this,function(c){return b.apply(null,c)},function(b){return b[0].getKey()});this.B=c;this.h=0;this.g={}}M(jh,eh);jh.prototype.c=function(b){var c=jh.Y.c.call(this,b);c&&R(b[0],"change",this.i,this);return c};jh.prototype.i=function(b){b=b.target;var c=b.N();if(2===c||3===c||4===c||5===c)fb(b,"change",this.i,this),b=b.getKey(),b in this.g&&(delete this.g[b],--this.h),this.B()};function kh(){this.a=[];this.b=this.f=0}function lh(b,c){var d=b.b,e=.05-d,f=Math.log(.05/b.b)/-.005;return dd({source:c,duration:f,easing:function(b){return d*(Math.exp(-.005*b*f)-1)/e}})};function mh(b){U.call(this);this.T=null;this.set("active",!0);this.handleEvent=b.handleEvent}M(mh,U);mh.prototype.setMap=function(b){this.T=b};function nh(b,c,d,e,f){if(void 0!==d){var g=Xc(c),h=c.ga();void 0!==g&&h&&f&&0<f&&(b.ea(ed({rotation:g,duration:f,easing:ad})),e&&b.ea(dd({source:h,duration:f,easing:ad})));c.rotate(d,e)}}function oh(b,c,d,e,f){var g=c.J();d=c.constrainResolution(g,d,0);ph(b,c,d,e,f)}
-function ph(b,c,d,e,f){if(d){var g=c.J(),h=c.ga();void 0!==g&&h&&d!==g&&f&&0<f&&(b.ea(fd({resolution:g,duration:f,easing:ad})),e&&b.ea(dd({source:h,duration:f,easing:ad})));if(e){var k;b=c.ga();f=c.J();void 0!==b&&void 0!==f&&(k=[e[0]-d*(e[0]-b[0])/f,e[1]-d*(e[1]-b[1])/f]);c.ma(k)}Zc(c,d)}};function qh(b){b=b?b:{};this.a=b.delta?b.delta:1;mh.call(this,{handleEvent:rh});this.b=void 0!==b.duration?b.duration:250}M(qh,mh);function rh(b){var c=!1,d=b.originalEvent;if(b.type==ug){var c=b.map,e=b.coordinate,d=d.shiftKey?-this.a:this.a,f=c.O();oh(c,f,d,e,this.b);b.preventDefault();c=!0}return!c};function sh(b){b=b.originalEvent;return b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function th(b){b=b.originalEvent;return 0==b.button&&!(Kd&&Df&&b.ctrlKey)}function uh(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&!b.shiftKey}function vh(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function wh(b){b=b.originalEvent.target.tagName;return"INPUT"!==b&&"SELECT"!==b&&"TEXTAREA"!==b}function xh(b){return"mouse"==b.a.pointerType};function yh(b){b=b?b:{};mh.call(this,{handleEvent:b.handleEvent?b.handleEvent:zh});this.ob=b.handleDownEvent?b.handleDownEvent:cc;this.pb=b.handleDragEvent?b.handleDragEvent:N;this.qb=b.handleMoveEvent?b.handleMoveEvent:N;this.rb=b.handleUpEvent?b.handleUpEvent:cc;this.s=!1;this.G={};this.c=[]}M(yh,mh);function Ah(b){for(var c=b.length,d=0,e=0,f=0;f<c;f++)d+=b[f].clientX,e+=b[f].clientY;return[d/c,e/c]}
-function zh(b){if(!(b instanceof qg))return!0;var c=!1,d=b.type;if(d===zg||d===Bg||d===xg)d=b.a,b.type==xg?delete this.G[d.pointerId]:b.type==zg?this.G[d.pointerId]=d:d.pointerId in this.G&&(this.G[d.pointerId]=d),this.c=Xa(this.G);this.s&&(b.type==Bg?this.pb(b):b.type==xg&&(this.s=this.rb(b)));b.type==zg?(this.s=b=this.ob(b),c=this.v(b)):b.type==Ag&&this.qb(b);return!c}yh.prototype.v=function(b){return b};function Bh(b){yh.call(this,{handleDownEvent:Ch,handleDragEvent:Dh,handleUpEvent:Eh});b=b?b:{};this.a=b.kinetic;this.b=this.g=null;this.i=b.condition?b.condition:uh;this.h=!1}M(Bh,yh);function Dh(b){var c=Ah(this.c);this.a&&this.a.a.push(c[0],c[1],Date.now());if(this.b){var d=this.b[0]-c[0],e=c[1]-this.b[1];b=b.map;var f=b.O(),g=f.N(),e=d=[d,e],h=g.resolution;e[0]*=h;e[1]*=h;ub(d,g.rotation);tb(d,g.center);d=f.a.center(d);b.render();f.ma(d)}this.b=c}
-function Eh(b){b=b.map;var c=b.O();if(0===this.c.length){var d;if(d=!this.h&&this.a)if(d=this.a,6>d.a.length)d=!1;else{var e=Date.now()-100,f=d.a.length-3;if(d.a[f+2]<e)d=!1;else{for(var g=f-3;0<g&&d.a[g+2]>e;)g-=3;var e=d.a[f+2]-d.a[g+2],h=d.a[f]-d.a[g],f=d.a[f+1]-d.a[g+1];d.f=Math.atan2(f,h);d.b=Math.sqrt(h*h+f*f)/e;d=.05<d.b}}d&&(d=(.05-this.a.b)/-.005,f=this.a.f,g=c.ga(),this.g=lh(this.a,g),b.ea(this.g),g=Fh(b,g),d=b.pa([g[0]-d*Math.cos(f),g[1]-d*Math.sin(f)]),d=c.a.center(d),c.ma(d));$c(c,-1);
-b.render();return!1}this.b=null;return!0}function Ch(b){if(0<this.c.length&&this.i(b)){var c=b.map,d=c.O();this.b=null;this.s||$c(d,1);c.render();this.g&&Ka(c.A,this.g)&&(d.ma(b.frameState.viewState.center),this.g=null);this.a&&(b=this.a,b.a.length=0,b.f=0,b.b=0);this.h=1<this.c.length;return!0}return!1}Bh.prototype.v=cc;function Gh(b){b=b?b:{};yh.call(this,{handleDownEvent:Hh,handleDragEvent:Ih,handleUpEvent:Jh});this.b=b.condition?b.condition:sh;this.a=void 0;this.g=void 0!==b.duration?b.duration:250}M(Gh,yh);function Ih(b){if(xh(b)){var c=b.map,d=c.Ha();b=b.pixel;d=Math.atan2(d[1]/2-b[1],b[0]-d[0]/2);if(void 0!==this.a){b=d-this.a;var e=c.O(),f=Xc(e);c.render();nh(c,e,f-b)}this.a=d}}
-function Jh(b){if(!xh(b))return!0;b=b.map;var c=b.O();$c(c,-1);var d=Xc(c),e=this.g,d=c.constrainRotation(d,0);nh(b,c,d,void 0,e);return!1}function Hh(b){return xh(b)&&th(b)&&this.b(b)?(b=b.map,$c(b.O(),1),b.render(),this.a=void 0,!0):!1}Gh.prototype.v=cc;function Kh(b){this.c=null;this.b=document.createElement("div");this.b.style.position="absolute";this.b.className="ol-box "+b;this.f=this.g=this.a=null}M(Kh,hb);Kh.prototype.K=function(){this.setMap(null)};function Lh(b){var c=b.g,d=b.f;b=b.b.style;b.left=Math.min(c[0],d[0])+"px";b.top=Math.min(c[1],d[1])+"px";b.width=Math.abs(d[0]-c[0])+"px";b.height=Math.abs(d[1]-c[1])+"px"}
-Kh.prototype.setMap=function(b){if(this.a){this.a.o.removeChild(this.b);var c=this.b.style;c.left=c.top=c.width=c.height="inherit"}(this.a=b)&&this.a.o.appendChild(this.b)};function Mh(b){var c=b.g,d=b.f,c=[c,[c[0],d[1]],d,[d[0],c[1]]].map(b.a.pa,b.a);c[4]=c[0].slice();b.c?b.c.X([c]):b.c=new Sc([c])}Kh.prototype.M=function(){return this.c};function Nh(b,c,d){S.call(this,b);this.coordinate=c;this.mapBrowserEvent=d}M(Nh,S);function Oh(b){yh.call(this,{handleDownEvent:Ph,handleDragEvent:Qh,handleUpEvent:Rh});b=b?b:{};this.a=new Kh(b.className||"ol-dragbox");this.b=null;this.j=b.condition?b.condition:bc;this.i=b.boxEndCondition?b.boxEndCondition:Sh}M(Oh,yh);function Sh(b,c,d){b=d[0]-c[0];c=d[1]-c[1];return 64<=b*b+c*c}
-function Qh(b){if(xh(b)){var c=this.a,d=b.pixel;c.g=this.b;c.f=d;Mh(c);Lh(c);T(this,new Nh("boxdrag",b.coordinate,b))}}Oh.prototype.M=function(){return this.a.M()};Oh.prototype.h=N;function Rh(b){if(!xh(b))return!0;this.a.setMap(null);this.i(b,this.b,b.pixel)&&(this.h(b),T(this,new Nh("boxend",b.coordinate,b)));return!1}
-function Ph(b){if(xh(b)&&th(b)&&this.j(b)){this.b=b.pixel;this.a.setMap(b.map);var c=this.a,d=this.b;c.g=this.b;c.f=d;Mh(c);Lh(c);T(this,new Nh("boxstart",b.coordinate,b));return!0}return!1};function Th(b){b=b?b:{};var c=b.condition?b.condition:vh;this.g=void 0!==b.duration?b.duration:200;this.o=void 0!==b.out?b.out:!1;Oh.call(this,{condition:c,className:b.className||"ol-dragzoom"})}M(Th,Oh);
-Th.prototype.h=function(){var b=this.T,c=b.O(),d=b.Ha(),e=this.M().C();if(this.o){var f=c.dc(d),e=[Fh(b,Wb(e)),Fh(b,[e[2],e[3]])],g=Ob(void 0),h,k;h=0;for(k=e.length;h<k;++h)Jb(g,e[h]);g=1/Yc(g,d);e=(f[2]-f[0])/2*(g-1);g=(f[3]-f[1])/2*(g-1);f[0]-=e;f[2]+=e;f[1]-=g;f[3]+=g;e=f}d=c.constrainResolution(Yc(e,d));f=c.J();g=c.ga();b.ea(fd({resolution:f,duration:this.g,easing:ad}));b.ea(dd({source:g,duration:this.g,easing:ad}));c.ma(Xb(e));Zc(c,d)};function Uh(b){mh.call(this,{handleEvent:Vh});b=b||{};this.a=function(b){return uh.call(this,b)&&wh.call(this,b)};this.b=void 0!==b.condition?b.condition:this.a;this.c=void 0!==b.duration?b.duration:100;this.g=void 0!==b.pixelDelta?b.pixelDelta:128}M(Uh,mh);
-function Vh(b){var c=!1;if("keydown"==b.type){var d=b.originalEvent.keyCode;if(this.b(b)&&(40==d||37==d||39==d||38==d)){var e=b.map,c=e.O(),f=c.J()*this.g,g=0,h=0;40==d?h=-f:37==d?g=-f:39==d?g=f:h=f;d=[g,h];ub(d,Xc(c));f=this.c;if(g=c.ga())f&&0<f&&e.ea(dd({source:g,duration:f,easing:cd})),e=c.a.center([g[0]+d[0],g[1]+d[1]]),c.ma(e);b.preventDefault();c=!0}}return!c};function Wh(b){mh.call(this,{handleEvent:Xh});b=b?b:{};this.b=b.condition?b.condition:wh;this.a=b.delta?b.delta:1;this.c=void 0!==b.duration?b.duration:100}M(Wh,mh);function Xh(b){var c=!1;if("keydown"==b.type||"keypress"==b.type){var d=b.originalEvent.charCode;if(this.b(b)&&(43==d||45==d)){c=b.map;d=43==d?this.a:-this.a;c.render();var e=c.O();oh(c,e,d,void 0,this.c);b.preventDefault();c=!0}}return!c};function Yh(b){mh.call(this,{handleEvent:Zh});b=b||{};this.a=0;this.i=void 0!==b.duration?b.duration:250;this.j=void 0!==b.useAnchor?b.useAnchor:!0;this.c=null;this.g=this.b=void 0}M(Yh,mh);
-function Zh(b){var c=!1;if("wheel"==b.type||"mousewheel"==b.type){var c=b.map,d=b.originalEvent;this.j&&(this.c=b.coordinate);var e;"wheel"==b.type?(e=d.deltaY,Bf&&d.deltaMode===x.WheelEvent.DOM_DELTA_PIXEL&&(e/=Ef),d.deltaMode===x.WheelEvent.DOM_DELTA_LINE&&(e*=40)):"mousewheel"==b.type&&(e=-d.wheelDeltaY,Cf&&(e/=3));this.a+=e;void 0===this.b&&(this.b=Date.now());e=Math.max(80-(Date.now()-this.b),0);x.clearTimeout(this.g);this.g=x.setTimeout(this.h.bind(this,c),e);b.preventDefault();c=!0}return!c}
-Yh.prototype.h=function(b){var c=Ba(this.a,-1,1),d=b.O();b.render();oh(b,d,-c,this.c,this.i);this.a=0;this.c=null;this.g=this.b=void 0};function $h(b){yh.call(this,{handleDownEvent:ai,handleDragEvent:bi,handleUpEvent:ci});b=b||{};this.b=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==b.threshold?b.threshold:.3;this.i=void 0!==b.duration?b.duration:250}M($h,yh);
-function bi(b){var c=0,d=this.c[0],e=this.c[1],d=Math.atan2(e.clientY-d.clientY,e.clientX-d.clientX);void 0!==this.g&&(c=d-this.g,this.h+=c,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=d;b=b.map;d=b.a.getBoundingClientRect();e=Ah(this.c);e[0]-=d.left;e[1]-=d.top;this.b=b.pa(e);this.a&&(d=b.O(),e=Xc(d),b.render(),nh(b,d,e+c,this.b))}
-function ci(b){if(2>this.c.length){b=b.map;var c=b.O();$c(c,-1);if(this.a){var d=Xc(c),e=this.b,f=this.i,d=c.constrainRotation(d,0);nh(b,c,d,e,f)}return!1}return!0}function ai(b){return 2<=this.c.length?(b=b.map,this.b=null,this.g=void 0,this.a=!1,this.h=0,this.s||$c(b.O(),1),b.render(),!0):!1}$h.prototype.v=cc;function di(b){yh.call(this,{handleDownEvent:ei,handleDragEvent:fi,handleUpEvent:gi});b=b?b:{};this.b=null;this.h=void 0!==b.duration?b.duration:400;this.a=void 0;this.g=1}M(di,yh);function fi(b){var c=1,d=this.c[0],e=this.c[1],f=d.clientX-e.clientX,d=d.clientY-e.clientY,f=Math.sqrt(f*f+d*d);void 0!==this.a&&(c=this.a/f);this.a=f;1!=c&&(this.g=c);b=b.map;var f=b.O(),d=f.J(),e=b.a.getBoundingClientRect(),g=Ah(this.c);g[0]-=e.left;g[1]-=e.top;this.b=b.pa(g);b.render();ph(b,f,d*c,this.b)}
-function gi(b){if(2>this.c.length){b=b.map;var c=b.O();$c(c,-1);var d=c.J(),e=this.b,f=this.h,d=c.constrainResolution(d,0,this.g-1);ph(b,c,d,e,f);return!1}return!0}function ei(b){return 2<=this.c.length?(b=b.map,this.b=null,this.a=void 0,this.g=1,this.s||$c(b.O(),1),b.render(),!0):!1}di.prototype.v=cc;function hi(b){var c=b||{};b=Va({},c);delete b.layers;c=c.layers;Dg.call(this,b);this.b=[];this.a={};R(this,qb("layers"),this.td,this);c?Array.isArray(c)&&(c=new md(c.slice())):c=new md;this.set("layers",c)}M(hi,Dg);n=hi.prototype;n.gb=function(){this.Va()&&this.w()};
-n.td=function(){this.b.forEach(P);this.b.length=0;var b=this.get("layers");this.b.push(R(b,"add",this.sd,this),R(b,"remove",this.ud,this));for(var c in this.a)this.a[c].forEach(P);Wa(this.a);var b=b.a,d,e;c=0;for(d=b.length;c<d;c++)e=b[c],this.a[I(e).toString()]=[R(e,"propertychange",this.gb,this),R(e,"change",this.gb,this)];this.w()};n.sd=function(b){b=b.element;var c=I(b).toString();this.a[c]=[R(b,"propertychange",this.gb,this),R(b,"change",this.gb,this)];this.w()};
-n.ud=function(b){b=I(b.element).toString();this.a[b].forEach(P);delete this.a[b];this.w()};n.Eb=function(b){var c=void 0!==b?b:[],d=c.length;od(this.get("layers"),function(b){b.Eb(c)});b=Eg(this);var e,f;for(e=c.length;d<e;d++)f=c[d],f.opacity*=b.opacity,f.visible=f.visible&&b.visible,f.maxResolution=Math.min(f.maxResolution,b.maxResolution),f.minResolution=Math.max(f.minResolution,b.minResolution),void 0!==b.extent&&(f.extent=void 0!==f.extent?Zb(f.extent,b.extent):b.extent);return c};n.Ib=function(){return"ready"};function ii(b){hc.call(this,{code:b,units:"m",extent:ji,global:!0,worldExtent:ki})}M(ii,hc);ii.prototype.getPointResolution=function(b,c){return b/Ca(c[1]/6378137)};var li=6378137*Math.PI,ji=[-li,-li,li,li],ki=[-180,-85,180,85],mi="EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" ").map(function(b){return new ii(b)});
-function ni(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=6378137*Math.PI*b[f]/180,c[f+1]=6378137*Math.log(Math.tan(Math.PI*(b[f+1]+90)/360));return c}function oi(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=180*b[f]/(6378137*Math.PI),c[f+1]=360*Math.atan(Math.exp(b[f+1]/6378137))/Math.PI-90;return c};var pi=new dc(6378137);function qi(b,c){hc.call(this,{code:b,units:"degrees",extent:ri,axisOrientation:c,global:!0,metersPerUnit:si,worldExtent:ri})}M(qi,hc);qi.prototype.getPointResolution=function(b){return b};
-var ri=[-180,-90,180,90],si=Math.PI*pi.radius/180,ti=[new qi("CRS:84"),new qi("EPSG:4326","neu"),new qi("urn:ogc:def:crs:EPSG::4326","neu"),new qi("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new qi("urn:ogc:def:crs:OGC:1.3:CRS84"),new qi("urn:ogc:def:crs:OGC:2:84"),new qi("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new qi("urn:x-ogc:def:crs:EPSG:4326","neu")];function X(b){b=b?b:{};var c=Va({},b);delete c.preload;delete c.useInterimTilesOnError;Hg.call(this,c);this.set("preload",void 0!==b.preload?b.preload:0);this.set("useInterimTilesOnError",void 0!==b.useInterimTilesOnError?b.useInterimTilesOnError:!0)}M(X,Hg);function ui(b){return b.get("useInterimTilesOnError")};var vi=[0,0,0,1],wi=[],xi=[0,0,0,1];function yi(b,c,d,e){0!==c&&(b.translate(d,e),b.rotate(c),b.translate(-d,-e))};function zi(b){b=b||{};this.a=void 0!==b.color?b.color:null;this.b=void 0}function Ai(b){void 0===b.b&&(b.b=b.a instanceof CanvasPattern||b.a instanceof CanvasGradient?I(b.a).toString():"f"+(b.a?wd(b.a):"-"));return b.b};function Bi(){this.b=-1};function Ci(){this.b=-1;this.b=64;this.a=Array(4);this.g=Array(this.b);this.c=this.f=0;this.a[0]=1732584193;this.a[1]=4023233417;this.a[2]=2562383102;this.a[3]=271733878;this.c=this.f=0}M(Ci,Bi);
-function Di(b,c,d){d||(d=0);var e=Array(16);if(da(c))for(var f=0;16>f;++f)e[f]=c.charCodeAt(d++)|c.charCodeAt(d++)<<8|c.charCodeAt(d++)<<16|c.charCodeAt(d++)<<24;else for(f=0;16>f;++f)e[f]=c[d++]|c[d++]<<8|c[d++]<<16|c[d++]<<24;c=b.a[0];d=b.a[1];var f=b.a[2],g=b.a[3],h=0,h=c+(g^d&(f^g))+e[0]+3614090360&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[1]+3905402710&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[2]+606105819&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^
-c))+e[3]+3250441966&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[4]+4118548399&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[5]+1200080426&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[6]+2821735955&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[7]+4249261313&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[8]+1770035416&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[9]+2336552879&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+
-(d^g&(c^d))+e[10]+4294925233&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[11]+2304563134&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[12]+1804603682&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[13]+4254626195&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[14]+2792965006&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[15]+1236535329&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(f^g&(d^f))+e[1]+4129170786&4294967295;c=d+(h<<5&4294967295|
-h>>>27);h=g+(d^f&(c^d))+e[6]+3225465664&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[11]+643717713&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[0]+3921069994&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[5]+3593408605&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[10]+38016083&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[15]+3634488961&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[4]+3889429448&4294967295;d=f+(h<<20&4294967295|
-h>>>12);h=c+(f^g&(d^f))+e[9]+568446438&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[14]+3275163606&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[3]+4107603335&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[8]+1163531501&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[13]+2850285829&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[2]+4243563512&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[7]+1735328473&4294967295;f=g+(h<<14&4294967295|
-h>>>18);h=d+(g^c&(f^g))+e[12]+2368359562&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(d^f^g)+e[5]+4294588738&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[8]+2272392833&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[11]+1839030562&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[14]+4259657740&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[1]+2763975236&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[4]+1272893353&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^
-c^d)+e[7]+4139469664&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[10]+3200236656&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[13]+681279174&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[0]+3936430074&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[3]+3572445317&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[6]+76029189&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[9]+3654602809&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[12]+3873151461&4294967295;
-g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[15]+530742520&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[2]+3299628645&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(f^(d|~g))+e[0]+4096336452&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[7]+1126891415&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[14]+2878612391&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[5]+4237533241&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[12]+1700485571&4294967295;c=d+
-(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[3]+2399980690&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[10]+4293915773&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[1]+2240044497&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[8]+1873313359&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[15]+4264355552&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[6]+2734768916&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[13]+1309151649&4294967295;
-d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[4]+4149444226&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[11]+3174756917&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[2]+718787259&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[9]+3951481745&4294967295;b.a[0]=b.a[0]+c&4294967295;b.a[1]=b.a[1]+(f+(h<<21&4294967295|h>>>11))&4294967295;b.a[2]=b.a[2]+f&4294967295;b.a[3]=b.a[3]+g&4294967295}
-function Ei(b,c){var d;void 0===d&&(d=c.length);for(var e=d-b.b,f=b.g,g=b.f,h=0;h<d;){if(0==g)for(;h<=e;)Di(b,c,h),h+=b.b;if(da(c))for(;h<d;){if(f[g++]=c.charCodeAt(h++),g==b.b){Di(b,f);g=0;break}}else for(;h<d;)if(f[g++]=c[h++],g==b.b){Di(b,f);g=0;break}}b.f=g;b.c+=d};function Fi(b){b=b||{};this.b=void 0!==b.color?b.color:null;this.c=b.lineCap;this.a=void 0!==b.lineDash?b.lineDash:null;this.g=b.lineJoin;this.h=b.miterLimit;this.f=b.width;this.l=void 0}
-function Gi(b){if(void 0===b.l){var c="s"+(b.b?wd(b.b):"-")+","+(void 0!==b.c?b.c.toString():"-")+","+(b.a?b.a.toString():"-")+","+(void 0!==b.g?b.g:"-")+","+(void 0!==b.h?b.h.toString():"-")+","+(void 0!==b.f?b.f.toString():"-"),d=new Ci;Ei(d,c);var e=Array((56>d.f?d.b:2*d.b)-d.f);e[0]=128;for(c=1;c<e.length-8;++c)e[c]=0;for(var f=8*d.c,c=e.length-8;c<e.length;++c)e[c]=f&255,f/=256;Ei(d,e);e=Array(16);for(c=f=0;4>c;++c)for(var g=0;32>g;g+=8)e[f++]=d.a[c]>>>g&255;if(8192>=e.length)d=String.fromCharCode.apply(null,
-e);else for(d="",c=0;c<e.length;c+=8192)d+=String.fromCharCode.apply(null,sd(e,c,c+8192));b.l=d}return b.l};function Hi(b){b=b||{};this.h=this.a=this.c=null;this.g=void 0!==b.fill?b.fill:null;this.b=void 0!==b.stroke?b.stroke:null;this.f=b.radius;this.j=[0,0];this.i=this.H=this.l=null;var c=b.atlasManager,d,e=null,f,g=0;this.b&&(f=wd(this.b.b),g=this.b.f,void 0===g&&(g=1),e=this.b.a,Ff||(e=null));var h=2*(this.f+g)+1;f={strokeStyle:f,Za:g,size:h,lineDash:e};if(void 0===c)this.a=document.createElement("CANVAS"),this.a.height=h,this.a.width=h,d=h=this.a.width,c=this.a.getContext("2d"),this.Jc(f,c,0,0),this.g?
-this.h=this.a:(c=this.h=document.createElement("CANVAS"),c.height=f.size,c.width=f.size,c=c.getContext("2d"),this.Ic(f,c,0,0));else{h=Math.round(h);(e=!this.g)&&(d=this.Ic.bind(this,f));var g=this.b?Gi(this.b):"-",k=this.g?Ai(this.g):"-";this.c&&g==this.c[1]&&k==this.c[2]&&this.f==this.c[3]||(this.c=["c"+g+k+(void 0!==this.f?this.f.toString():"-"),g,k,this.f]);f=c.add(this.c[0],h,h,this.Jc.bind(this,f),d);this.a=f.image;this.j=[f.offsetX,f.offsetY];d=f.image.width;this.h=e?f.Id:this.a}this.l=[h/2,
-h/2];this.H=[h,h];this.i=[d,d];Vg.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0})}M(Hi,Vg);n=Hi.prototype;n.Sa=function(){return this.l};n.jb=function(){return this.h};n.S=function(){return this.a};n.Ya=function(){return 2};n.Db=function(){return this.i};n.fa=function(){return this.j};n.ya=function(){return this.H};n.Mb=N;n.load=N;n.Ub=N;
-n.Jc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.f,0,2*Math.PI,!0);this.g&&(c.fillStyle=zd(this.g.a),c.fill());this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Za,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};
-n.Ic=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.f,0,2*Math.PI,!0);c.fillStyle=wd(vi);c.fill();this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Za,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};function Ii(b){b=b||{};this.h=null;this.f=Ji;void 0!==b.geometry&&Ki(this,b.geometry);this.g=void 0!==b.fill?b.fill:null;this.l=void 0!==b.image?b.image:null;this.c=void 0!==b.stroke?b.stroke:null;this.b=void 0!==b.text?b.text:null;this.a=b.zIndex}Ii.prototype.M=function(){return this.h};Ii.prototype.S=function(){return this.l};function Ki(b,c){ga(c)?b.f=c:"string"===typeof c?b.f=function(b){return b.get(c)}:c?void 0!==c&&(b.f=function(){return c}):b.f=Ji;b.h=c}
-function Li(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b}var Mi=null;function Ni(){if(!Mi){var b=new zi({color:"rgba(255,255,255,0.4)"}),c=new Fi({color:"#3399CC",width:1.25});Mi=[new Ii({image:new Hi({fill:b,stroke:c,radius:5}),fill:b,stroke:c})]}return Mi}
-function Oi(){var b={},c=[255,255,255,1],d=[0,153,255,1];b.Polygon=[new Ii({fill:new zi({color:[255,255,255,.5]})})];b.MultiPolygon=b.Polygon;b.LineString=[new Ii({stroke:new Fi({color:c,width:5})}),new Ii({stroke:new Fi({color:d,width:3})})];b.MultiLineString=b.LineString;b.Circle=b.Polygon.concat(b.LineString);b.Point=[new Ii({image:new Hi({radius:6,fill:new zi({color:d}),stroke:new Fi({color:c,width:1.5})}),zIndex:Infinity})];b.MultiPoint=b.Point;b.GeometryCollection=b.Polygon.concat(b.LineString,
-b.Point);return b}function Ji(b){return b.M()};function Y(b){b=b?b:{};var c=Va({},b);delete c.style;delete c.renderBuffer;delete c.updateWhileAnimating;delete c.updateWhileInteracting;Hg.call(this,c);this.a=void 0!==b.renderBuffer?b.renderBuffer:100;this.o=null;this.g=void 0;this.s(b.style);this.i=void 0!==b.updateWhileAnimating?b.updateWhileAnimating:!1;this.j=void 0!==b.updateWhileInteracting?b.updateWhileInteracting:!1}M(Y,Hg);Y.prototype.s=function(b){this.o=void 0!==b?b:Ni;this.g=null===b?void 0:Li(this.o);this.w()};function Pi(b,c,d,e,f){this.c=b;this.u=c;this.l=d;this.v=e;this.Ca=f;this.g=this.a=this.b=this.Z=this.T=this.R=null;this.aa=this.ha=this.o=this.D=this.I=this.A=0;this.da=!1;this.h=this.ka=0;this.ua=!1;this.V=0;this.f="";this.j=this.H=this.va=this.la=0;this.G=this.B=this.i=null;this.s=[];this.wa=yb()}M(Pi,Fg);
-function Qi(b,c,d){if(b.g){c=zc(c,0,d,2,b.v,b.s);d=b.c;var e=b.wa,f=d.globalAlpha;1!=b.o&&(d.globalAlpha=f*b.o);var g=b.ka;b.da&&(g+=b.Ca);var h,k;h=0;for(k=c.length;h<k;h+=2){var l=c[h]-b.A,m=c[h+1]-b.I;b.ua&&(l=Math.round(l),m=Math.round(m));if(0!==g||1!=b.h){var p=l+b.A,q=m+b.I;Jg(e,p,q,b.h,b.h,g,-p,-q);d.setTransform(e[0],e[1],e[4],e[5],e[12],e[13])}d.drawImage(b.g,b.ha,b.aa,b.V,b.D,l,m,b.V,b.D)}0===g&&1==b.h||d.setTransform(1,0,0,1,0,0);1!=b.o&&(d.globalAlpha=f)}}
-function Ri(b,c,d,e){var f=0;if(b.G&&""!==b.f){b.i&&Si(b,b.i);b.B&&Ti(b,b.B);var g=b.G,h=b.c,k=b.Z;k?(k.font!=g.font&&(k.font=h.font=g.font),k.textAlign!=g.textAlign&&(k.textAlign=h.textAlign=g.textAlign),k.textBaseline!=g.textBaseline&&(k.textBaseline=h.textBaseline=g.textBaseline)):(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline,b.Z={font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});c=zc(c,f,d,e,b.v,b.s);for(g=b.c;f<d;f+=e){h=c[f]+b.la;k=c[f+1]+b.va;if(0!==b.H||
-1!=b.j){var l=Jg(b.wa,h,k,b.j,b.j,b.H,-h,-k);g.setTransform(l[0],l[1],l[4],l[5],l[12],l[13])}b.B&&g.strokeText(b.f,h,k);b.i&&g.fillText(b.f,h,k)}0===b.H&&1==b.j||g.setTransform(1,0,0,1,0,0)}}function Ui(b,c,d,e,f,g){var h=b.c;b=zc(c,d,e,f,b.v,b.s);h.moveTo(b[0],b[1]);c=b.length;g&&(c-=2);for(d=2;d<c;d+=2)h.lineTo(b[d],b[d+1]);g&&h.closePath();return e}function Vi(b,c,d,e,f){var g,h;g=0;for(h=e.length;g<h;++g)d=Ui(b,c,d,e[g],f,!0);return d}n=Pi.prototype;
-n.hc=function(b){if($b(this.l,b.C())){if(this.b||this.a){this.b&&Si(this,this.b);this.a&&Ti(this,this.a);var c;c=this.v;var d=this.s,e=b.a;c=e?zc(e,0,e.length,b.b,c,d):null;d=c[2]-c[0];e=c[3]-c[1];d=Math.sqrt(d*d+e*e);e=this.c;e.beginPath();e.arc(c[0],c[1],d,0,2*Math.PI);this.b&&e.fill();this.a&&e.stroke()}""!==this.f&&Ri(this,b.a.slice(0,b.b),2,2)}};n.Ra=function(b){var c=b.a;b=b.b;this.g&&Qi(this,c,c.length);""!==this.f&&Ri(this,c,c.length,b)};
-n.Qa=function(b){var c=b.a;b=b.b;this.g&&Qi(this,c,c.length);""!==this.f&&Ri(this,c,c.length,b)};n.ic=function(b){if($b(this.l,b.C())){if(this.a){Ti(this,this.a);var c=this.c,d=b.a;c.beginPath();Ui(this,d,0,d.length,b.b,!1);c.stroke()}""!==this.f&&(b=Wi(b),Ri(this,b,2,2))}};
-n.jc=function(b){var c=b.C();if($b(this.l,c)){if(this.a){Ti(this,this.a);var c=this.c,d=b.a,e=0,f=b.Ta(),g=b.b;c.beginPath();var h,k;h=0;for(k=f.length;h<k;++h)e=Ui(this,d,e,f[h],g,!1);c.stroke()}""!==this.f&&(b=Xi(b),Ri(this,b,b.length,2))}};n.lc=function(b){if($b(this.l,b.C())){if(this.a||this.b){this.b&&Si(this,this.b);this.a&&Ti(this,this.a);var c=this.c;c.beginPath();Vi(this,Uc(b),0,b.Ta(),b.b);this.b&&c.fill();this.a&&c.stroke()}""!==this.f&&(b=Vc(b),Ri(this,b,2,2))}};
-n.kc=function(b){if($b(this.l,b.C())){if(this.a||this.b){this.b&&Si(this,this.b);this.a&&Ti(this,this.a);var c=this.c,d=Yi(b),e=0,f=b.c,g=b.b,h,k;h=0;for(k=f.length;h<k;++h){var l=f[h];c.beginPath();e=Vi(this,d,e,l,g);this.b&&c.fill();this.a&&c.stroke()}}""!==this.f&&(b=Zi(b),Ri(this,b,b.length,2))}};function Si(b,c){var d=b.c,e=b.R;e?e.fillStyle!=c.fillStyle&&(e.fillStyle=d.fillStyle=c.fillStyle):(d.fillStyle=c.fillStyle,b.R={fillStyle:c.fillStyle})}
-function Ti(b,c){var d=b.c,e=b.T;e?(e.lineCap!=c.lineCap&&(e.lineCap=d.lineCap=c.lineCap),Ff&&!La(e.lineDash,c.lineDash)&&d.setLineDash(e.lineDash=c.lineDash),e.lineJoin!=c.lineJoin&&(e.lineJoin=d.lineJoin=c.lineJoin),e.lineWidth!=c.lineWidth&&(e.lineWidth=d.lineWidth=c.lineWidth),e.miterLimit!=c.miterLimit&&(e.miterLimit=d.miterLimit=c.miterLimit),e.strokeStyle!=c.strokeStyle&&(e.strokeStyle=d.strokeStyle=c.strokeStyle)):(d.lineCap=c.lineCap,Ff&&d.setLineDash(c.lineDash),d.lineJoin=c.lineJoin,d.lineWidth=
-c.lineWidth,d.miterLimit=c.miterLimit,d.strokeStyle=c.strokeStyle,b.T={lineCap:c.lineCap,lineDash:c.lineDash,lineJoin:c.lineJoin,lineWidth:c.lineWidth,miterLimit:c.miterLimit,strokeStyle:c.strokeStyle})}
-n.za=function(b,c){if(b){var d=b.a;this.b={fillStyle:zd(d?d:vi)}}else this.b=null;if(c){var d=c.b,e=c.c,f=c.a,g=c.g,h=c.f,k=c.h;this.a={lineCap:void 0!==e?e:"round",lineDash:f?f:wi,lineJoin:void 0!==g?g:"round",lineWidth:this.u*(void 0!==h?h:1),miterLimit:void 0!==k?k:10,strokeStyle:wd(d?d:xi)}}else this.a=null};
-n.Aa=function(b){if(b){var c=b.Sa(),d=b.S(1),e=b.fa(),f=b.ya();this.A=c[0];this.I=c[1];this.D=f[1];this.g=d;this.o=b.B;this.ha=e[0];this.aa=e[1];this.da=b.o;this.ka=b.s;this.h=b.u;this.ua=b.v;this.V=f[0]}else this.g=null};
-n.sa=function(b){if(b){var c=b.c;c?(c=c.a,this.i={fillStyle:zd(c?c:vi)}):this.i=null;var d=b.l;if(d){var c=d.b,e=d.c,f=d.a,g=d.g,h=d.f,d=d.h;this.B={lineCap:void 0!==e?e:"round",lineDash:f?f:wi,lineJoin:void 0!==g?g:"round",lineWidth:void 0!==h?h:1,miterLimit:void 0!==d?d:10,strokeStyle:wd(c?c:xi)}}else this.B=null;var c=b.a,e=b.b,f=b.f,g=b.g,h=b.h,d=b.i,k=b.j;b=b.B;this.G={font:void 0!==c?c:"10px sans-serif",textAlign:void 0!==k?k:"center",textBaseline:void 0!==b?b:"middle"};this.f=void 0!==d?d:
-"";this.la=void 0!==e?this.u*e:0;this.va=void 0!==f?this.u*f:0;this.H=void 0!==g?g:0;this.j=this.u*(void 0!==h?h:1)}else this.f=""};function $i(b){Mg.call(this,b);this.I=yb()}M($i,Mg);
-$i.prototype.g=function(b,c,d){aj(this,"precompose",d,b,void 0);var e=this.S();if(e){var f=c.extent,g=void 0!==f;if(g){var h=b.pixelRatio,k=b.size[0]*h,l=b.size[1]*h,m=b.viewState.rotation,p=ac(f),q=[f[2],f[3]],r=[f[2],f[1]],f=Wb(f);Lg(b.coordinateToPixelMatrix,p,p);Lg(b.coordinateToPixelMatrix,q,q);Lg(b.coordinateToPixelMatrix,r,r);Lg(b.coordinateToPixelMatrix,f,f);d.save();yi(d,-m,k/2,l/2);d.beginPath();d.moveTo(p[0]*h,p[1]*h);d.lineTo(q[0]*h,q[1]*h);d.lineTo(r[0]*h,r[1]*h);d.lineTo(f[0]*h,f[1]*
-h);d.clip();yi(d,m,k/2,l/2)}h=this.D;k=d.globalAlpha;d.globalAlpha=c.opacity;d.drawImage(e,0,0,+e.width,+e.height,Math.round(h[12]),Math.round(h[13]),Math.round(e.width*h[0]),Math.round(e.height*h[5]));d.globalAlpha=k;g&&d.restore()}aj(this,"postcompose",d,b,void 0)};
-function aj(b,c,d,e,f){var g=b.a;if(mb(g,c)){var h=e.size[0]*e.pixelRatio,k=e.size[1]*e.pixelRatio,l=e.viewState.rotation;yi(d,-l,h/2,k/2);b=void 0!==f?f:bj(b,e,0);b=new Pi(d,e.pixelRatio,e.extent,b,e.viewState.rotation);T(g,new Gg(c,g,b,e,d,null));yi(d,l,h/2,k/2)}}function bj(b,c,d){var e=c.viewState,f=c.pixelRatio;return Jg(b.I,f*c.size[0]/2,f*c.size[1]/2,f/e.resolution,-f/e.resolution,-e.rotation,-e.center[0]+d,-e.center[1])};var cj=["Polygon","LineString","Image","Text"];function dj(b,c,d){this.aa=b;this.G=c;this.c=null;this.g=0;this.resolution=d;this.D=this.I=null;this.b=[];this.coordinates=[];this.T=yb();this.a=[];this.R=[];this.Z=yb();this.ha=yb()}M(dj,Fg);
-function ej(b,c,d,e,f,g){var h=b.coordinates.length,k=b.Cb(),l=[c[d],c[d+1]],m=[NaN,NaN],p=!0,q,r,u;for(q=d+f;q<e;q+=f){m[0]=c[q];m[1]=c[q+1];u=k[1];var w=k[2],y=k[3],z=m[0],D=m[1],t=0;z<k[0]?t=t|16:z>w&&(t=t|4);D<u?t|=8:D>y&&(t|=2);0===t&&(t=1);u=t;u!==r?(p&&(b.coordinates[h++]=l[0],b.coordinates[h++]=l[1]),b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],p=!1):1===u?(b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],p=!1):p=!0;l[0]=m[0];l[1]=m[1];r=u}q===d+f&&(b.coordinates[h++]=l[0],b.coordinates[h++]=
-l[1]);g&&(b.coordinates[h++]=c[d],b.coordinates[h++]=c[d+1]);return h}function fj(b,c){b.I=[0,c,0];b.b.push(b.I);b.D=[0,c,0];b.a.push(b.D)}
-function gj(b,c,d,e,f,g,h,k,l){var m;Kg(e,b.T)?m=b.R:(m=zc(b.coordinates,0,b.coordinates.length,2,e,b.R),Bb(b.T,e));e=!Za(g);var p=0,q=h.length,r=0,u,w=b.Z;b=b.ha;for(var y,z,D,t;p<q;){var v=h[p],B,F,C,G;switch(v[0]){case 0:r=v[1];e&&g[I(r).toString()]||!r.M()?p=v[2]:void 0===l||$b(l,r.M().C())?++p:p=v[2];break;case 1:c.beginPath();++p;break;case 2:r=v[1];u=m[r];v=m[r+1];D=m[r+2]-u;r=m[r+3]-v;c.arc(u,v,Math.sqrt(D*D+r*r),0,2*Math.PI,!0);++p;break;case 3:c.closePath();++p;break;case 4:r=v[1];u=v[2];
-B=v[3];C=v[4]*d;var J=v[5]*d,A=v[6];F=v[7];var H=v[8],O=v[9];D=v[11];t=v[12];var Q=v[13],L=v[14];for(v[10]&&(D+=f);r<u;r+=2){v=m[r]-C;G=m[r+1]-J;Q&&(v=Math.round(v),G=Math.round(G));if(1!=t||0!==D){var K=v+C,fa=G+J;Jg(w,K,fa,t,t,D,-K,-fa);c.transform(w[0],w[1],w[4],w[5],w[12],w[13])}K=c.globalAlpha;1!=F&&(c.globalAlpha=K*F);var fa=L+H>B.width?B.width-H:L,ra=A+O>B.height?B.height-O:A;c.drawImage(B,H,O,fa,ra,v,G,fa*d,ra*d);1!=F&&(c.globalAlpha=K);if(1!=t||0!==D)Db(w,b),c.transform(b[0],b[1],b[4],b[5],
-b[12],b[13])}++p;break;case 5:r=v[1];u=v[2];C=v[3];J=v[4]*d;A=v[5]*d;D=v[6];t=v[7]*d;B=v[8];for(F=v[9];r<u;r+=2){v=m[r]+J;G=m[r+1]+A;if(1!=t||0!==D)Jg(w,v,G,t,t,D,-v,-G),c.transform(w[0],w[1],w[4],w[5],w[12],w[13]);H=C.split("\n");O=H.length;1<O?(Q=Math.round(1.5*c.measureText("M").width),G-=(O-1)/2*Q):Q=0;for(L=0;L<O;L++)K=H[L],F&&c.strokeText(K,v,G),B&&c.fillText(K,v,G),G+=Q;if(1!=t||0!==D)Db(w,b),c.transform(b[0],b[1],b[4],b[5],b[12],b[13])}++p;break;case 6:if(void 0!==k&&(r=v[1],r=k(r)))return r;
-++p;break;case 7:c.fill();++p;break;case 8:r=v[1];u=v[2];v=m[r];G=m[r+1];D=v+.5|0;t=G+.5|0;if(D!==y||t!==z)c.moveTo(v,G),y=D,z=t;for(r+=2;r<u;r+=2)if(v=m[r],G=m[r+1],D=v+.5|0,t=G+.5|0,D!==y||t!==z)c.lineTo(v,G),y=D,z=t;++p;break;case 9:c.fillStyle=v[1];++p;break;case 10:y=void 0!==v[7]?v[7]:!0;z=v[2];c.strokeStyle=v[1];c.lineWidth=y?z*d:z;c.lineCap=v[3];c.lineJoin=v[4];c.miterLimit=v[5];Ff&&c.setLineDash(v[6]);z=y=NaN;++p;break;case 11:c.font=v[1];c.textAlign=v[2];c.textBaseline=v[3];++p;break;case 12:c.stroke();
-++p;break;default:++p}}}function hj(b){var c=b.a;c.reverse();var d,e=c.length,f,g,h=-1;for(d=0;d<e;++d)if(f=c[d],g=f[0],6==g)h=d;else if(0==g){f[2]=d;f=b.a;for(g=d;h<g;){var k=f[h];f[h]=f[g];f[g]=k;++h;--g}h=-1}}function ij(b,c){b.I[2]=b.b.length;b.I=null;b.D[2]=b.a.length;b.D=null;var d=[6,c];b.b.push(d);b.a.push(d)}dj.prototype.ib=N;dj.prototype.Cb=function(){return this.G};
-function jj(b,c,d){dj.call(this,b,c,d);this.i=this.V=null;this.A=this.v=this.H=this.u=this.s=this.o=this.B=this.j=this.l=this.h=this.f=void 0}M(jj,dj);jj.prototype.Ra=function(b,c){if(this.i){fj(this,c);var d=b.a,e=this.coordinates.length,d=ej(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.B,this.o,this.s,this.u,this.H,this.v,this.A]);this.a.push([4,e,d,this.V,this.f,this.h,this.l,this.j,this.B,this.o,this.s,this.u,this.H,this.v,this.A]);ij(this,c)}};
-jj.prototype.Qa=function(b,c){if(this.i){fj(this,c);var d=b.a,e=this.coordinates.length,d=ej(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.B,this.o,this.s,this.u,this.H,this.v,this.A]);this.a.push([4,e,d,this.V,this.f,this.h,this.l,this.j,this.B,this.o,this.s,this.u,this.H,this.v,this.A]);ij(this,c)}};jj.prototype.ib=function(){hj(this);this.h=this.f=void 0;this.i=this.V=null;this.A=this.v=this.u=this.s=this.o=this.B=this.j=this.H=this.l=void 0};
-jj.prototype.Aa=function(b){var c=b.Sa(),d=b.ya(),e=b.jb(1),f=b.S(1),g=b.fa();this.f=c[0];this.h=c[1];this.V=e;this.i=f;this.l=d[1];this.j=b.B;this.B=g[0];this.o=g[1];this.s=b.o;this.u=b.s;this.H=b.u;this.v=b.v;this.A=d[0]};function kj(b,c,d){dj.call(this,b,c,d);this.f={Pa:void 0,Ka:void 0,La:null,Ma:void 0,Na:void 0,Oa:void 0,Lb:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(kj,dj);
-function lj(b,c,d,e,f){var g=b.coordinates.length;c=ej(b,c,d,e,f,!1);g=[8,g,c];b.b.push(g);b.a.push(g);return e}n=kj.prototype;n.Cb=function(){this.c||(this.c=Lb(this.G),0<this.g&&Kb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};
-function mj(b){var c=b.f,d=c.strokeStyle,e=c.lineCap,f=c.lineDash,g=c.lineJoin,h=c.lineWidth,k=c.miterLimit;c.Pa==d&&c.Ka==e&&La(c.La,f)&&c.Ma==g&&c.Na==h&&c.Oa==k||(c.Lb!=b.coordinates.length&&(b.b.push([12]),c.Lb=b.coordinates.length),b.b.push([10,d,h,e,g,k,f],[1]),c.Pa=d,c.Ka=e,c.La=f,c.Ma=g,c.Na=h,c.Oa=k)}
-n.ic=function(b,c){var d=this.f,e=d.lineWidth;void 0!==d.strokeStyle&&void 0!==e&&(mj(this),fj(this,c),this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]),d=b.a,lj(this,d,0,d.length,b.b),this.a.push([12]),ij(this,c))};
-n.jc=function(b,c){var d=this.f,e=d.lineWidth;if(void 0!==d.strokeStyle&&void 0!==e){mj(this);fj(this,c);this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]);var d=b.Ta(),e=b.a,f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=lj(this,e,g,d[h],f);this.a.push([12]);ij(this,c)}};n.ib=function(){this.f.Lb!=this.coordinates.length&&this.b.push([12]);hj(this);this.f=null};
-n.za=function(b,c){var d=c.b;this.f.strokeStyle=wd(d?d:xi);d=c.c;this.f.lineCap=void 0!==d?d:"round";d=c.a;this.f.lineDash=d?d:wi;d=c.g;this.f.lineJoin=void 0!==d?d:"round";d=c.f;this.f.lineWidth=void 0!==d?d:1;d=c.h;this.f.miterLimit=void 0!==d?d:10;this.f.lineWidth>this.g&&(this.g=this.f.lineWidth,this.c=null)};
-function nj(b,c,d){dj.call(this,b,c,d);this.f={gc:void 0,Pa:void 0,Ka:void 0,La:null,Ma:void 0,Na:void 0,Oa:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(nj,dj);
-function oj(b,c,d,e,f){var g=b.f,h=[1];b.b.push(h);b.a.push(h);var k,h=0;for(k=e.length;h<k;++h){var l=e[h],m=b.coordinates.length;d=ej(b,c,d,l,f,!0);d=[8,m,d];m=[3];b.b.push(d,m);b.a.push(d,m);d=l}c=[7];b.a.push(c);void 0!==g.fillStyle&&b.b.push(c);void 0!==g.strokeStyle&&(g=[12],b.b.push(g),b.a.push(g));return d}n=nj.prototype;
-n.hc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){pj(this);fj(this,c);this.a.push([9,wd(vi)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var f=b.a,e=this.coordinates.length;ej(this,f,0,f.length,b.b,!1);f=[1];e=[2,e];this.b.push(f,e);this.a.push(f,e);e=[7];this.a.push(e);void 0!==d.fillStyle&&this.b.push(e);void 0!==d.strokeStyle&&(d=[12],this.b.push(d),this.a.push(d));ij(this,c)}};
-n.lc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e)pj(this),fj(this,c),this.a.push([9,wd(vi)]),void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]),d=b.Ta(),e=Uc(b),oj(this,e,0,d,b.b),ij(this,c)};
-n.kc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){pj(this);fj(this,c);this.a.push([9,wd(vi)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var d=b.c,e=Yi(b),f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=oj(this,e,g,d[h],f);ij(this,c)}};n.ib=function(){hj(this);this.f=null;var b=this.aa;if(0!==b){var c=this.coordinates,d,e;d=0;for(e=c.length;d<e;++d)c[d]=b*Math.round(c[d]/b)}};
-n.Cb=function(){this.c||(this.c=Lb(this.G),0<this.g&&Kb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};
-n.za=function(b,c){var d=this.f;if(b){var e=b.a;d.fillStyle=zd(e?e:vi)}else d.fillStyle=void 0;c?(e=c.b,d.strokeStyle=wd(e?e:xi),e=c.c,d.lineCap=void 0!==e?e:"round",e=c.a,d.lineDash=e?e.slice():wi,e=c.g,d.lineJoin=void 0!==e?e:"round",e=c.f,d.lineWidth=void 0!==e?e:1,e=c.h,d.miterLimit=void 0!==e?e:10,d.lineWidth>this.g&&(this.g=d.lineWidth,this.c=null)):(d.strokeStyle=void 0,d.lineCap=void 0,d.lineDash=null,d.lineJoin=void 0,d.lineWidth=void 0,d.miterLimit=void 0)};
-function pj(b){var c=b.f,d=c.fillStyle,e=c.strokeStyle,f=c.lineCap,g=c.lineDash,h=c.lineJoin,k=c.lineWidth,l=c.miterLimit;void 0!==d&&c.gc!=d&&(b.b.push([9,d]),c.gc=c.fillStyle);void 0===e||c.Pa==e&&c.Ka==f&&c.La==g&&c.Ma==h&&c.Na==k&&c.Oa==l||(b.b.push([10,e,k,f,h,l,g]),c.Pa=e,c.Ka=f,c.La=g,c.Ma=h,c.Na=k,c.Oa=l)}function qj(b,c,d){dj.call(this,b,c,d);this.v=this.H=this.u=null;this.i="";this.s=this.o=this.B=this.j=0;this.l=this.h=this.f=null}M(qj,dj);
-function rj(b,c,d,e,f){if(""!==b.i&&b.l&&(b.f||b.h)){if(b.f){var g=b.f,h=b.u;if(!h||h.fillStyle!=g.fillStyle){var k=[9,g.fillStyle];b.b.push(k);b.a.push(k);h?h.fillStyle=g.fillStyle:b.u={fillStyle:g.fillStyle}}}b.h&&(g=b.h,h=b.H,h&&h.lineCap==g.lineCap&&h.lineDash==g.lineDash&&h.lineJoin==g.lineJoin&&h.lineWidth==g.lineWidth&&h.miterLimit==g.miterLimit&&h.strokeStyle==g.strokeStyle||(k=[10,g.strokeStyle,g.lineWidth,g.lineCap,g.lineJoin,g.miterLimit,g.lineDash,!1],b.b.push(k),b.a.push(k),h?(h.lineCap=
-g.lineCap,h.lineDash=g.lineDash,h.lineJoin=g.lineJoin,h.lineWidth=g.lineWidth,h.miterLimit=g.miterLimit,h.strokeStyle=g.strokeStyle):b.H={lineCap:g.lineCap,lineDash:g.lineDash,lineJoin:g.lineJoin,lineWidth:g.lineWidth,miterLimit:g.miterLimit,strokeStyle:g.strokeStyle}));g=b.l;h=b.v;h&&h.font==g.font&&h.textAlign==g.textAlign&&h.textBaseline==g.textBaseline||(k=[11,g.font,g.textAlign,g.textBaseline],b.b.push(k),b.a.push(k),h?(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline):b.v=
-{font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});fj(b,f);g=b.coordinates.length;c=ej(b,c,0,d,e,!1);c=[5,g,c,b.i,b.j,b.B,b.o,b.s,!!b.f,!!b.h];b.b.push(c);b.a.push(c);ij(b,f)}}
-qj.prototype.sa=function(b){if(b){var c=b.c;c?(c=c.a,c=zd(c?c:vi),this.f?this.f.fillStyle=c:this.f={fillStyle:c}):this.f=null;var d=b.l;if(d){var c=d.b,e=d.c,f=d.a,g=d.g,h=d.f,d=d.h,e=void 0!==e?e:"round",f=f?f.slice():wi,g=void 0!==g?g:"round",h=void 0!==h?h:1,d=void 0!==d?d:10,c=wd(c?c:xi);if(this.h){var k=this.h;k.lineCap=e;k.lineDash=f;k.lineJoin=g;k.lineWidth=h;k.miterLimit=d;k.strokeStyle=c}else this.h={lineCap:e,lineDash:f,lineJoin:g,lineWidth:h,miterLimit:d,strokeStyle:c}}else this.h=null;
-var l=b.a,c=b.b,e=b.f,f=b.g,h=b.h,d=b.i,g=b.j,k=b.B;b=void 0!==l?l:"10px sans-serif";g=void 0!==g?g:"center";k=void 0!==k?k:"middle";this.l?(l=this.l,l.font=b,l.textAlign=g,l.textBaseline=k):this.l={font:b,textAlign:g,textBaseline:k};this.i=void 0!==d?d:"";this.j=void 0!==c?c:0;this.B=void 0!==e?e:0;this.o=void 0!==f?f:0;this.s=void 0!==h?h:1}else this.i=""};function sj(b,c,d,e){this.o=b;this.h=c;this.B=d;this.l=e;this.b={};this.i=sf(1,1);this.j=yb()}
-function tj(b){for(var c in b.b){var d=b.b[c],e;for(e in d)d[e].ib()}}sj.prototype.g=function(b,c,d,e,f){var g=this.j;Jg(g,.5,.5,1/c,-1/c,-d,-b[0],-b[1]);var h=this.i;h.clearRect(0,0,1,1);var k;void 0!==this.l&&(k=Ib(),Jb(k,b),Kb(k,c*this.l,k));return uj(this,h,g,d,e,function(b){if(0<h.getImageData(0,0,1,1).data[3]){if(b=f(b))return b;h.clearRect(0,0,1,1)}},k)};
-sj.prototype.a=function(b,c){var d=void 0!==b?b.toString():"0",e=this.b[d];void 0===e&&(e={},this.b[d]=e);d=e[c];void 0===d&&(d=new vj[c](this.o,this.h,this.B),e[c]=d);return d};sj.prototype.c=function(){return Za(this.b)};
-sj.prototype.f=function(b,c,d,e,f,g){var h=Object.keys(this.b).map(Number);h.sort(Ga);if(!1!==g){var k=this.h;g=k[0];var l=k[1],m=k[2],k=k[3];g=[g,l,g,k,m,k,m,l];zc(g,0,8,2,d,g);b.save();b.beginPath();b.moveTo(g[0],g[1]);b.lineTo(g[2],g[3]);b.lineTo(g[4],g[5]);b.lineTo(g[6],g[7]);b.closePath();b.clip()}var p,q;g=0;for(l=h.length;g<l;++g)for(p=this.b[h[g].toString()],m=0,k=cj.length;m<k;++m)q=p[cj[m]],void 0!==q&&gj(q,b,c,d,e,f,q.b,void 0);b.restore()};
-function uj(b,c,d,e,f,g,h){var k=Object.keys(b.b).map(Number);k.sort(function(b,c){return c-b});var l,m,p,q,r;l=0;for(m=k.length;l<m;++l)for(q=b.b[k[l].toString()],p=cj.length-1;0<=p;--p)if(r=q[cj[p]],void 0!==r&&(r=gj(r,c,1,d,e,f,r.a,g,h)))return r}var vj={Image:jj,LineString:kj,Polygon:nj,Text:qj};function wj(b,c){return I(b)-I(c)}function xj(b,c){var d=.5*b/c;return d*d}function yj(b,c,d,e,f,g){var h=!1,k,l;if(k=d.S())l=k.Ya(),2==l||3==l?k.Ub(f,g):(0==l&&k.load(),k.Mb(f,g),h=!0);if(f=(0,d.f)(c))e=f.Hb(e),(0,zj[e.U()])(b,e,d,c);return h}
-var zj={Point:function(b,c,d,e){var f=d.S();if(f){if(2!=f.Ya())return;var g=b.a(d.a,"Image");g.Aa(f);g.Ra(c,e)}if(f=d.b)b=b.a(d.a,"Text"),b.sa(f),rj(b,c.a,2,2,e)},LineString:function(b,c,d,e){var f=d.c;if(f){var g=b.a(d.a,"LineString");g.za(null,f);g.ic(c,e)}if(f=d.b)b=b.a(d.a,"Text"),b.sa(f),rj(b,Wi(c),2,2,e)},Polygon:function(b,c,d,e){var f=d.g,g=d.c;if(f||g){var h=b.a(d.a,"Polygon");h.za(f,g);h.lc(c,e)}if(f=d.b)b=b.a(d.a,"Text"),b.sa(f),rj(b,Vc(c),2,2,e)},MultiPoint:function(b,c,d,e){var f=d.S();
-if(f){if(2!=f.Ya())return;var g=b.a(d.a,"Image");g.Aa(f);g.Qa(c,e)}if(f=d.b)b=b.a(d.a,"Text"),b.sa(f),d=c.a,rj(b,d,d.length,c.b,e)},MultiLineString:function(b,c,d,e){var f=d.c;if(f){var g=b.a(d.a,"LineString");g.za(null,f);g.jc(c,e)}if(f=d.b)b=b.a(d.a,"Text"),b.sa(f),c=Xi(c),rj(b,c,c.length,2,e)},MultiPolygon:function(b,c,d,e){var f=d.g,g=d.c;if(g||f){var h=b.a(d.a,"Polygon");h.za(f,g);h.kc(c,e)}if(f=d.b)b=b.a(d.a,"Text"),b.sa(f),c=Zi(c),rj(b,c,c.length,2,e)},GeometryCollection:function(b,c,d,e){c=
-c.a;var f,g;f=0;for(g=c.length;f<g;++f)(0,zj[c[f].U()])(b,c[f],d,e)},Circle:function(b,c,d,e){var f=d.g,g=d.c;if(f||g){var h=b.a(d.a,"Polygon");h.za(f,g);h.hc(c,e)}if(f=d.b)b=b.a(d.a,"Text"),b.sa(f),rj(b,c.a.slice(0,c.b),2,2,e)}};var Aj=!((W("Chrome")||W("CriOS"))&&!W("Opera")&&!W("OPR")&&!W("Edge"))||W("iPhone")&&!W("iPod")&&!W("iPad")||W("iPad")||W("iPod");function Bj(b,c,d,e){b=d-b;c=e-c;var f=Math.sqrt(b*b+c*c);return[Math.round(d+b/f),Math.round(e+c/f)]}
-function Cj(b,c,d,e,f,g,h,k,l,m,p){var q=sf(Math.round(d*b),Math.round(d*c));if(0===l.length)return q.canvas;q.scale(d,d);var r=Ib();l.forEach(function(b){Rb(r,b.extent)});var u=sf(Math.round(d*Ub(r)/e),Math.round(d*Vb(r)/e)),w=d/e;l.forEach(function(b){u.drawImage(b.image,m,m,b.image.width-2*m,b.image.height-2*m,(b.extent[0]-r[0])*w,-(b.extent[3]-r[3])*w,Ub(b.extent)*w,Vb(b.extent)*w)});var y=ac(h);k.c.forEach(function(b){var c=b.source,f=b.target,h=c[1][0],k=c[1][1],l=c[2][0],m=c[2][1];b=(f[0][0]-
-y[0])/g;var w=-(f[0][1]-y[1])/g,p=(f[1][0]-y[0])/g,A=-(f[1][1]-y[1])/g,H=(f[2][0]-y[0])/g,O=-(f[2][1]-y[1])/g,f=c[0][0],c=c[0][1],h=h-f,k=k-c,l=l-f,m=m-c;a:{h=[[h,k,0,0,p-b],[l,m,0,0,H-b],[0,0,h,k,A-w],[0,0,l,m,O-w]];k=h.length;for(l=0;l<k;l++){for(var m=l,Q=Math.abs(h[l][l]),L=l+1;L<k;L++){var K=Math.abs(h[L][l]);K>Q&&(Q=K,m=L)}if(0===Q){h=null;break a}Q=h[m];h[m]=h[l];h[l]=Q;for(m=l+1;m<k;m++)for(Q=-h[m][l]/h[l][l],L=l;L<k+1;L++)h[m][L]=l==L?0:h[m][L]+Q*h[l][L]}l=Array(k);for(m=k-1;0<=m;m--)for(l[m]=
-h[m][k]/h[m][m],Q=m-1;0<=Q;Q--)h[Q][k]-=h[Q][m]*l[m];h=l}h&&(q.save(),q.beginPath(),Aj?(l=(b+p+H)/3,m=(w+A+O)/3,k=Bj(l,m,b,w),p=Bj(l,m,p,A),H=Bj(l,m,H,O),q.moveTo(k[0],k[1]),q.lineTo(p[0],p[1]),q.lineTo(H[0],H[1])):(q.moveTo(b,w),q.lineTo(p,A),q.lineTo(H,O)),q.closePath(),q.clip(),q.transform(h[0],h[2],h[1],h[3],b,w),q.translate(r[0]-f,r[3]-c),q.scale(e/d,-e/d),q.drawImage(u.canvas,0,0),q.restore())});p&&(q.save(),q.strokeStyle="black",q.lineWidth=1,k.c.forEach(function(b){var c=b.target;b=(c[0][0]-
-y[0])/g;var d=-(c[0][1]-y[1])/g,e=(c[1][0]-y[0])/g,f=-(c[1][1]-y[1])/g,h=(c[2][0]-y[0])/g,c=-(c[2][1]-y[1])/g;q.beginPath();q.moveTo(b,d);q.lineTo(e,f);q.lineTo(h,c);q.closePath();q.stroke()}),q.restore());return q.canvas};function Dj(b,c,d,e,f){this.f=b;this.g=c;var g={},h=wc(this.g,this.f);this.b=function(b){var c=b[0]+"/"+b[1];g[c]||(g[c]=h(b));return g[c]};this.h=e;this.B=f*f;this.c=[];this.i=!1;this.j=this.f.a&&!!e&&!!this.f.C()&&Ub(e)==Ub(this.f.C());this.a=this.f.C()?Ub(this.f.C()):null;this.l=this.g.C()?Ub(this.g.C()):null;b=ac(d);c=[d[2],d[3]];e=[d[2],d[1]];d=Wb(d);f=this.b(b);var k=this.b(c),l=this.b(e),m=this.b(d);Ej(this,b,c,e,d,f,k,l,m,10);if(this.i){var p=Infinity;this.c.forEach(function(b){p=Math.min(p,
-b.source[0][0],b.source[1][0],b.source[2][0])});this.c.forEach(function(b){if(Math.max(b.source[0][0],b.source[1][0],b.source[2][0])-p>this.a/2){var c=[[b.source[0][0],b.source[0][1]],[b.source[1][0],b.source[1][1]],[b.source[2][0],b.source[2][1]]];c[0][0]-p>this.a/2&&(c[0][0]-=this.a);c[1][0]-p>this.a/2&&(c[1][0]-=this.a);c[2][0]-p>this.a/2&&(c[2][0]-=this.a);Math.max(c[0][0],c[1][0],c[2][0])-Math.min(c[0][0],c[1][0],c[2][0])<this.a/2&&(b.source=c)}},this)}g={}}
-function Ej(b,c,d,e,f,g,h,k,l,m){var p=Hb([g,h,k,l]),q=b.a?Ub(p)/b.a:null,r=b.f.a&&.5<q&&1>q,u=!1;if(0<m){if(b.g.f&&b.l)var w=Hb([c,d,e,f]),u=u|.25<Ub(w)/b.l;!r&&b.f.f&&q&&(u|=.25<q)}if(u||!b.h||$b(p,b.h)){if(!(u||isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])&&isFinite(l[0])&&isFinite(l[1])))if(0<m)u=!0;else return;if(0<m&&(u||(q=b.b([(c[0]+e[0])/2,(c[1]+e[1])/2]),p=r?(Da(g[0],b.a)+Da(k[0],b.a))/2-Da(q[0],b.a):(g[0]+k[0])/2-q[0],q=(g[1]+k[1])/2-q[1],
-u=p*p+q*q>b.B),u)){Math.abs(c[0]-e[0])<=Math.abs(c[1]-e[1])?(r=[(d[0]+e[0])/2,(d[1]+e[1])/2],p=b.b(r),q=[(f[0]+c[0])/2,(f[1]+c[1])/2],u=b.b(q),Ej(b,c,d,r,q,g,h,p,u,m-1),Ej(b,q,r,e,f,u,p,k,l,m-1)):(r=[(c[0]+d[0])/2,(c[1]+d[1])/2],p=b.b(r),q=[(e[0]+f[0])/2,(e[1]+f[1])/2],u=b.b(q),Ej(b,c,r,q,f,g,p,u,l,m-1),Ej(b,r,d,e,q,p,h,k,u,m-1));return}if(r){if(!b.j)return;b.i=!0}b.c.push({source:[g,k,l],target:[c,e,f]});b.c.push({source:[g,h,k],target:[c,d,e]})}}
-function Fj(b){var c=Ib();b.c.forEach(function(b){b=b.source;Jb(c,b[0]);Jb(c,b[1]);Jb(c,b[2])});return c};function Gj(b){U.call(this);this.g=void 0;this.a="geometry";this.h=null;this.c=void 0;this.b=null;R(this,qb(this.a),this.fb,this);void 0!==b&&(b instanceof yc||!b?Hj(this,b):this.l(b))}M(Gj,U);n=Gj.prototype;n.clone=function(){var b=new Gj(this.ua());Ij(b,this.a);var c=this.M();c&&Hj(b,c.clone());if(c=this.h)b.h=c,b.c=c?Jj(c):void 0,b.w();return b};n.M=function(){return this.get(this.a)};n.Da=function(){return this.g};n.nd=function(){this.w()};
-n.fb=function(){this.b&&(P(this.b),this.b=null);var b=this.M();b&&(this.b=R(b,"change",this.nd,this));this.w()};function Hj(b,c){b.set(b.a,c)}function Ij(b,c){fb(b,qb(b.a),b.fb,b);b.a=c;R(b,qb(b.a),b.fb,b);b.fb()}function Jj(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b};function Kj(b,c,d){return function(e,f,g){var h=new XMLHttpRequest;h.open("GET",ga(b)?b(e,f,g):b,!0);"arraybuffer"==c.U()&&(h.responseType="arraybuffer");h.onload=function(){if(200<=h.status&&300>h.status){var b=c.U(),e;"json"==b||"text"==b?e=h.responseText:"xml"==b?(e=h.responseXML,e||(b=h.responseText,e=(new DOMParser).parseFromString(b,"application/xml"))):"arraybuffer"==b&&(e=h.response);e&&d.call(this,c.b(e,{featureProjection:g}),c.f(Lj(e)))}}.bind(this);h.send()}}
-function Mj(b,c){return Kj(b,c,function(b){this.vb(b)})};function Nj(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Oj;
-(function(){var b={mc:{}};(function(){function c(b,d){if(!(this instanceof c))return new c(b,d);this.tb=Math.max(4,b||9);this.Zb=Math.max(2,Math.ceil(.4*this.tb));d&&this.Xc(d);this.clear()}function d(b,c){b.bbox=e(b,0,b.children.length,c)}function e(b,c,d,e){for(var g=[Infinity,Infinity,-Infinity,-Infinity],h;c<d;c++)h=b.children[c],f(g,b.$?e(h):h.bbox);return g}function f(b,c){b[0]=Math.min(b[0],c[0]);b[1]=Math.min(b[1],c[1]);b[2]=Math.max(b[2],c[2]);b[3]=Math.max(b[3],c[3])}function g(b,c){return b.bbox[0]-
-c.bbox[0]}function h(b,c){return b.bbox[1]-c.bbox[1]}function k(b){return(b[2]-b[0])*(b[3]-b[1])}function l(b){return b[2]-b[0]+(b[3]-b[1])}function m(b,c){return b[0]<=c[0]&&b[1]<=c[1]&&c[2]<=b[2]&&c[3]<=b[3]}function p(b,c){return c[0]<=b[2]&&c[1]<=b[3]&&c[2]>=b[0]&&c[3]>=b[1]}function q(b,c,d,e,f){for(var g=[c,d],h;g.length;)d=g.pop(),c=g.pop(),d-c<=e||(h=c+Math.ceil((d-c)/e/2)*e,r(b,c,d,h,f),g.push(c,h,h,d))}function r(b,c,d,e,f){for(var g,h,k,l,m;d>c;){600<d-c&&(g=d-c+1,h=e-c+1,k=Math.log(g),
-l=.5*Math.exp(2*k/3),m=.5*Math.sqrt(k*l*(g-l)/g)*(0>h-g/2?-1:1),k=Math.max(c,Math.floor(e-h*l/g+m)),h=Math.min(d,Math.floor(e+(g-h)*l/g+m)),r(b,k,h,e,f));g=b[e];h=c;l=d;u(b,c,e);for(0<f(b[d],g)&&u(b,c,d);h<l;){u(b,h,l);h++;for(l--;0>f(b[h],g);)h++;for(;0<f(b[l],g);)l--}0===f(b[c],g)?u(b,c,l):(l++,u(b,l,d));l<=e&&(c=l+1);e<=l&&(d=l-1)}}function u(b,c,d){var e=b[c];b[c]=b[d];b[d]=e}c.prototype={all:function(){return this.Vb(this.data,[])},search:function(b){var c=this.data,d=[],e=this.ca;if(!p(b,c.bbox))return d;
-for(var f=[],g,h,k,l;c;){g=0;for(h=c.children.length;g<h;g++)k=c.children[g],l=c.$?e(k):k.bbox,p(b,l)&&(c.$?d.push(k):m(b,l)?this.Vb(k,d):f.push(k));c=f.pop()}return d},load:function(b){if(!b||!b.length)return this;if(b.length<this.Zb){for(var c=0,d=b.length;c<d;c++)this.xa(b[c]);return this}b=this.Xb(b.slice(),0,b.length-1,0);this.data.children.length?this.data.height===b.height?this.$b(this.data,b):(this.data.height<b.height&&(c=this.data,this.data=b,b=c),this.Yb(b,this.data.height-b.height-1,!0)):
-this.data=b;return this},xa:function(b){b&&this.Yb(b,this.data.height-1);return this},clear:function(){this.data={children:[],height:1,bbox:[Infinity,Infinity,-Infinity,-Infinity],$:!0};return this},remove:function(b){if(!b)return this;for(var c=this.data,d=this.ca(b),e=[],f=[],g,h,k,l;c||e.length;){c||(c=e.pop(),h=e[e.length-1],g=f.pop(),l=!0);if(c.$&&(k=c.children.indexOf(b),-1!==k)){c.children.splice(k,1);e.push(c);this.Wc(e);break}l||c.$||!m(c.bbox,d)?h?(g++,c=h.children[g],l=!1):c=null:(e.push(c),
-f.push(g),g=0,h=c,c=c.children[0])}return this},ca:function(b){return b},zb:function(b,c){return b[0]-c[0]},Ab:function(b,c){return b[1]-c[1]},toJSON:function(){return this.data},Vb:function(b,c){for(var d=[];b;)b.$?c.push.apply(c,b.children):d.push.apply(d,b.children),b=d.pop();return c},Xb:function(b,c,e,f){var g=e-c+1,h=this.tb,k;if(g<=h)return k={children:b.slice(c,e+1),height:1,bbox:null,$:!0},d(k,this.ca),k;f||(f=Math.ceil(Math.log(g)/Math.log(h)),h=Math.ceil(g/Math.pow(h,f-1)));k={children:[],
-height:f,bbox:null,$:!1};var g=Math.ceil(g/h),h=g*Math.ceil(Math.sqrt(h)),l,m,p;for(q(b,c,e,h,this.zb);c<=e;c+=h)for(m=Math.min(c+h-1,e),q(b,c,m,g,this.Ab),l=c;l<=m;l+=g)p=Math.min(l+g-1,m),k.children.push(this.Xb(b,l,p,f-1));d(k,this.ca);return k},Vc:function(b,c,d,e){for(var f,g,h,l,m,p,q,r;;){e.push(c);if(c.$||e.length-1===d)break;q=r=Infinity;f=0;for(g=c.children.length;f<g;f++)h=c.children[f],m=k(h.bbox),p=h.bbox,p=(Math.max(p[2],b[2])-Math.min(p[0],b[0]))*(Math.max(p[3],b[3])-Math.min(p[1],
-b[1]))-m,p<r?(r=p,q=m<q?m:q,l=h):p===r&&m<q&&(q=m,l=h);c=l}return c},Yb:function(b,c,d){var e=this.ca;d=d?b.bbox:e(b);var e=[],g=this.Vc(d,this.data,c,e);g.children.push(b);for(f(g.bbox,d);0<=c;)if(e[c].children.length>this.tb)this.Yc(e,c),c--;else break;this.Sc(d,e,c)},Yc:function(b,c){var e=b[c],f=e.children.length,g=this.Zb;this.Tc(e,g,f);f=this.Uc(e,g,f);f={children:e.children.splice(f,e.children.length-f),height:e.height,bbox:null,$:!1};e.$&&(f.$=!0);d(e,this.ca);d(f,this.ca);c?b[c-1].children.push(f):
-this.$b(e,f)},$b:function(b,c){this.data={children:[b,c],height:b.height+1,bbox:null,$:!1};d(this.data,this.ca)},Uc:function(b,c,d){var f,g,h,l,m,p,q;m=p=Infinity;for(f=c;f<=d-c;f++)g=e(b,0,f,this.ca),h=e(b,f,d,this.ca),l=Math.max(0,Math.min(g[2],h[2])-Math.max(g[0],h[0]))*Math.max(0,Math.min(g[3],h[3])-Math.max(g[1],h[1])),g=k(g)+k(h),l<m?(m=l,q=f,p=g<p?g:p):l===m&&g<p&&(p=g,q=f);return q},Tc:function(b,c,d){var e=b.$?this.zb:g,f=b.$?this.Ab:h,k=this.Wb(b,c,d,e);c=this.Wb(b,c,d,f);k<c&&b.children.sort(e)},
-Wb:function(b,c,d,g){b.children.sort(g);g=this.ca;var h=e(b,0,c,g),k=e(b,d-c,d,g),m=l(h)+l(k),p,q;for(p=c;p<d-c;p++)q=b.children[p],f(h,b.$?g(q):q.bbox),m+=l(h);for(p=d-c-1;p>=c;p--)q=b.children[p],f(k,b.$?g(q):q.bbox),m+=l(k);return m},Sc:function(b,c,d){for(;0<=d;d--)f(c[d].bbox,b)},Wc:function(b){for(var c=b.length-1,e;0<=c;c--)0===b[c].children.length?0<c?(e=b[c-1].children,e.splice(e.indexOf(b[c]),1)):this.clear():d(b[c],this.ca)},Xc:function(b){var c=["return a"," - b",";"];this.zb=new Function("a",
-"b",c.join(b[0]));this.Ab=new Function("a","b",c.join(b[1]));this.ca=new Function("a","return [a"+b.join(", a")+"];")}};"undefined"!==typeof b?b.mc=c:"undefined"!==typeof self?self.a=c:window.a=c})();Oj=b.mc})();function Pj(b){this.a=Oj(b);this.b={}}n=Pj.prototype;n.xa=function(b,c){var d=[b[0],b[1],b[2],b[3],c];this.a.xa(d);this.b[I(c)]=d};n.load=function(b,c){for(var d=Array(c.length),e=0,f=c.length;e<f;e++){var g=b[e],h=c[e],g=[g[0],g[1],g[2],g[3],h];d[e]=g;this.b[I(h)]=g}this.a.load(d)};n.remove=function(b){b=I(b);var c=this.b[b];delete this.b[b];return null!==this.a.remove(c)};function Qj(b){return b.a.all().map(function(b){return b[4]})}
-function Rj(b,c){return b.a.search(c).map(function(b){return b[4]})}function Sj(b,c,d,e){return Tj(Rj(b,c),d,e)}function Tj(b,c,d){for(var e,f=0,g=b.length;f<g&&!(e=c.call(d,b[f]));f++);return e}n.clear=function(){this.a.clear();this.b={}};n.C=function(){return this.a.data.bbox};function Uj(b){b=b||{};Ee.call(this,{attributions:b.attributions,logo:b.logo,projection:void 0,state:"ready",wrapX:void 0!==b.wrapX?b.wrapX:!0});this.o=N;this.D=b.format;this.u=b.url;void 0!==b.loader?this.o=b.loader:void 0!==this.u&&(this.o=Mj(this.u,this.D));this.G=void 0!==b.strategy?b.strategy:Nj;var c=void 0!==b.useSpatialIndex?b.useSpatialIndex:!0;this.P=c?new Pj:null;this.s=new Pj;this.ba={};this.b={};this.g={};this.h={};this.a=null;var d,e;b.features instanceof md?(d=b.features,e=d.a):Array.isArray(b.features)&&
-(e=b.features);c||void 0!==d||(d=new md(e));void 0!==e&&Vj(this,e);void 0!==d&&Wj(this,d)}M(Uj,Ee);n=Uj.prototype;n.ub=function(b){var c=I(b).toString();if(Xj(this,c,b)){Yj(this,c,b);var d=b.M();d?(c=d.C(),this.P&&this.P.xa(c,b)):this.ba[c]=b;T(this,new Zj("addfeature",b))}this.w()};function Yj(b,c,d){b.h[c]=[R(d,"change",b.oc,b),R(d,"propertychange",b.oc,b)]}function Xj(b,c,d){var e=!0,f=d.Da();void 0!==f?f.toString()in b.b?e=!1:b.b[f.toString()]=d:b.g[c]=d;return e}n.vb=function(b){Vj(this,b);this.w()};
-function Vj(b,c){var d,e,f,g,h=[],k=[],l=[];e=0;for(f=c.length;e<f;e++)g=c[e],d=I(g).toString(),Xj(b,d,g)&&k.push(g);e=0;for(f=k.length;e<f;e++){g=k[e];d=I(g).toString();Yj(b,d,g);var m=g.M();m?(d=m.C(),h.push(d),l.push(g)):b.ba[d]=g}b.P&&b.P.load(h,l);e=0;for(f=k.length;e<f;e++)T(b,new Zj("addfeature",k[e]))}
-function Wj(b,c){var d=!1;R(b,"addfeature",function(b){d||(d=!0,c.push(b.feature),d=!1)});R(b,"removefeature",function(b){d||(d=!0,c.remove(b.feature),d=!1)});R(c,"add",function(b){d||(b=b.element,d=!0,this.ub(b),d=!1)},b);R(c,"remove",function(b){if(!d){b=b.element;d=!0;var c=I(b).toString();c in this.ba?delete this.ba[c]:this.P&&this.P.remove(b);this.Rb(b);this.w();d=!1}},b);b.a=c}
-n.clear=function(b){if(b){for(var c in this.h)this.h[c].forEach(P);this.a||(this.h={},this.b={},this.g={})}else if(this.P){b=this.Rb;Tj(Qj(this.P),b,this);for(var d in this.ba)this.Rb(this.ba[d])}this.a&&this.a.clear();this.P&&this.P.clear();this.s.clear();this.ba={};T(this,new Zj("clear"));this.w()};n.gd=function(b,c){if(this.P)return Tj(Qj(this.P),b,c);if(this.a)return od(this.a,b,c)};function ak(b,c,d,e){b.P?Sj(b.P,c,d,e):b.a&&od(b.a,d,e)}
-n.ee=function(){var b;this.a?b=this.a.a:this.P&&(b=Qj(this.P),Za(this.ba)||Ja(b,Xa(this.ba)));return b};n.C=function(){return this.P.C()};
-n.oc=function(b){b=b.target;var c=I(b).toString(),d=b.M();if(d)if(d=d.C(),c in this.ba)delete this.ba[c],this.P&&this.P.xa(d,b);else{if(this.P){var e=this.P,f=I(b);Qb(e.b[f].slice(0,4),d)||(e.remove(b),e.xa(d,b))}}else c in this.ba||(this.P&&this.P.remove(b),this.ba[c]=b);d=b.Da();void 0!==d?(d=d.toString(),c in this.g?(delete this.g[c],this.b[d]=b):this.b[d]!==b&&(bk(this,b),this.b[d]=b)):c in this.g||(bk(this,b),this.g[c]=b);this.w();T(this,new Zj("changefeature",b))};
-function ck(b,c,d,e){var f=b.s;c=b.G(c,d);var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];Sj(f,k,function(b){return Mb(b.extent,k)})||(b.o.call(b,k,d,e),f.xa(k,{extent:k.slice()}))}}n.Rb=function(b){var c=I(b).toString();this.h[c].forEach(P);delete this.h[c];var d=b.Da();void 0!==d?delete this.b[d.toString()]:delete this.g[c];T(this,new Zj("removefeature",b))};function bk(b,c){for(var d in b.b)if(b.b[d]===c){delete b.b[d];break}}function Zj(b,c){S.call(this,b);this.feature=c}M(Zj,S);function dk(b){$i.call(this,b);this.c=sf();this.b=null;this.j=Ib();this.h=yb()}M(dk,$i);
-dk.prototype.g=function(b,c,d){var e=b.pixelRatio,f=b.viewState,g=f.center,h=f.projection,k=f.rotation,l=b.size,m=Math.round(e*l[0]/2),p=Math.round(e*l[1]/2),q=e/f.resolution,r=this.a,u=r.W(),w=u.bb(h),f=bj(this,b,0);aj(this,"precompose",d,b,f);var l=d,r=mb(r,"render"),y,z,D,t;if(k||r){l=this.c;y=l.canvas;D=u.eb(e)/e;var v=d.canvas.width*D;z=d.canvas.height*D;t=Math.round(Math.sqrt(v*v+z*z));y.width!=t?y.width=y.height=t:l.clearRect(0,0,t,t);y=(t-v)/2/D;z=(t-z)/2/D;q*=D;m=Math.round(D*(m+y));p=Math.round(D*
-(p+z))}v=l.globalAlpha;l.globalAlpha=c.opacity;var B=u.ia(h),F=this.b,C;c=u.Fb(h)&&1==c.opacity;c||(F.reverse(),C=[]);for(var G=0,J=F.length;G<J;++G){var A=F[G],H=A.L,O=Ke(B,H,this.j),Q=H[0],L=Wb(Ke(B,Se(B,g,Q))),H=Math.round(Ub(O)*q),K=Math.round(Vb(O)*q),fa=Math.round((O[0]-L[0])*q/H)*H+m+Math.round((L[0]-g[0])*q),O=Math.round((L[1]-O[3])*q/K)*K+p+Math.round((g[1]-L[1])*q);if(!c){L=[fa,O,fa+H,O+K];l.save();for(var ra=0,$l=C.length;ra<$l;++ra){var Ya=C[ra];$b(L,Ya)&&(l.beginPath(),l.moveTo(L[0],
-L[1]),l.lineTo(L[0],L[3]),l.lineTo(L[2],L[3]),l.lineTo(L[2],L[1]),l.moveTo(Ya[0],Ya[1]),l.lineTo(Ya[2],Ya[1]),l.lineTo(Ya[2],Ya[3]),l.lineTo(Ya[0],Ya[3]),l.closePath(),l.clip())}C.push(L)}Q=Ye(u,Q,e,h);l.drawImage(A.S(),w,w,Q[0],Q[1],fa,O,H,K);c||l.restore()}r&&(e=y-m/D+m,h=z-p/D+p,g=Jg(this.h,t/2-e,t/2-h,q,-q,-k,-g[0]+e/q,-g[1]-h/q),aj(this,"render",l,b,g));(k||r)&&d.drawImage(l.canvas,-Math.round(y),-Math.round(z),t/D,t/D);l.globalAlpha=v;aj(this,"postcompose",d,b,f)};
-dk.prototype.i=function(b,c){function d(b){b=b.N();return 2==b||4==b||3==b&&!u}var e=b.pixelRatio,f=b.viewState,g=f.projection,h=this.a,k=h.W(),l=k.ia(g),m=Re(l,f.resolution),p=l.J(m),q=f.center;p==f.resolution?(q=Sg(q,p,b.size),f=Yb(q,p,f.rotation,b.size)):f=b.extent;void 0!==c.extent&&(f=Zb(f,c.extent));if(f[2]<f[0]||f[3]<f[1])return!1;p=Ne(l,f,p);q={};q[m]={};var r=this.l(k,g,q),u=ui(h),w=Ib(),y=new gd(0,0,0,0),z,D,t,v;for(t=p.a;t<=p.b;++t)for(v=p.f;v<=p.c;++v)z=Ug(k,m,t,v,e,g),!d(z)&&z.a&&(z=
-z.a),d(z)?q[m][z.L.toString()]=z:(D=Je(l,z.L,r,y,w),D||(z=Me(l,z.L,y,w))&&r(m+1,z));r=Object.keys(q).map(Number);r.sort(Ga);var w=[],B,y=0;for(t=r.length;y<t;++y)for(B in z=r[y],v=q[z],v)z=v[B],2==z.N()&&w.push(z);this.b=w;Rg(b.usedTiles,k,m,p);Tg(b,k,l,e,g,f,m,h.get("preload"));Og(b,k);Qg(b,k);return!0};function ek(b){$i.call(this,b);this.b=!1;this.v=-1;this.u=NaN;this.j=Ib();this.c=this.o=null;this.h=sf()}M(ek,$i);
-ek.prototype.g=function(b,c,d){var e=b.extent,f=b.pixelRatio,g=c.Wa?b.skippedFeatureUids:{},h=b.viewState,k=h.projection,h=h.rotation,l=k.C(),m=this.a.W(),p=bj(this,b,0);aj(this,"precompose",d,b,p);var q=this.c;if(q&&!q.c()){var r;mb(this.a,"render")?(this.h.canvas.width=d.canvas.width,this.h.canvas.height=d.canvas.height,r=this.h):r=d;var u=r.globalAlpha;r.globalAlpha=c.opacity;c=b.size[0]*f;var w=b.size[1]*f;yi(r,-h,c/2,w/2);q.f(r,f,p,h,g);if(m.j&&k.a&&!Mb(l,e)){for(var k=e[0],m=Ub(l),y=0;k<l[0];)--y,
-p=m*y,p=bj(this,b,p),q.f(r,f,p,h,g),k+=m;y=0;for(k=e[2];k>l[2];)++y,p=m*y,p=bj(this,b,p),q.f(r,f,p,h,g),k-=m;p=bj(this,b,0)}yi(r,h,c/2,w/2);r!=d&&(aj(this,"render",r,b,p),d.drawImage(r.canvas,0,0));r.globalAlpha=u}aj(this,"postcompose",d,b,p)};ek.prototype.Xa=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};ek.prototype.A=function(){Ng(this)};
-ek.prototype.i=function(b){function c(b){var c,e=b.c;e?c=e.call(b,m):(e=d.g)&&(c=e(b,m));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=yj(r,b,c[f],xj(m,p),this.A,this)||e;else e=yj(r,b,c,xj(m,p),this.A,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.W();Pg(b.attributions,e.i);Qg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var l=b.extent,k=b.viewState,f=k.projection,m=k.resolution,p=b.pixelRatio,g=d.f,q=d.a,h=d.get("renderOrder");
-void 0===h&&(h=wj);l=Kb(l,q*m);q=k.projection.C();e.j&&k.projection.a&&!Mb(q,b.extent)&&(b=Math.max(Ub(l)/2,Ub(q)),l[0]=q[0]-b,l[2]=q[2]+b);if(!this.b&&this.u==m&&this.v==g&&this.o==h&&Mb(this.j,l))return!0;this.c=null;this.b=!1;var r=new sj(.5*m/p,l,m,d.a);ck(e,l,m,f);if(h){var u=[];ak(e,l,function(b){u.push(b)},this);u.sort(h);u.forEach(c,this)}else ak(e,l,c,this);tj(r);this.u=m;this.v=g;this.o=h;this.j=l;this.c=r;return!0};function fk(b,c){var d=/\{z\}/g,e=/\{x\}/g,f=/\{y\}/g,g=/\{-y\}/g;return function(h){if(h)return b.replace(d,h[0].toString()).replace(e,h[1].toString()).replace(f,function(){return(-h[2]-1).toString()}).replace(g,function(){var b=c.a?c.a[h[0]]:null;return(b.c-b.f+1+h[2]).toString()})}}function gk(b,c){for(var d=b.length,e=Array(d),f=0;f<d;++f)e[f]=fk(b[f],c);return hk(e)}function hk(b){return 1===b.length?b[0]:function(c,d,e){if(c)return b[Da((c[1]<<c[0])+c[2],b.length)](c,d,e)}}function ik(){};function jk(b){We.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tilePixelRatio:b.tilePixelRatio,wrapX:b.wrapX});this.tileLoadFunction=b.tileLoadFunction;this.tileUrlFunction=this.g?this.g.bind(this):ik;this.urls=null;if(b.urls){var c=b.urls;this.urls=c;kk(this,this.g?this.g.bind(this):gk(c,this.tileGrid))}else b.url&&this.s(b.url);b.tileUrlFunction&&kk(this,b.tileUrlFunction)}
-M(jk,We);jk.prototype.D=function(b){b=b.target;switch(b.N()){case 1:T(this,new $e("tileloadstart",b));break;case 2:T(this,new $e("tileloadend",b));break;case 3:T(this,new $e("tileloaderror",b))}};function kk(b,c){b.a.clear();b.tileUrlFunction=c;b.w()}
-jk.prototype.s=function(b){var c=[],d=/\{(\d)-(\d)\}/.exec(b)||/\{([a-z])-([a-z])\}/.exec(b);if(d){var e=d[2].charCodeAt(0),f;for(f=d[1].charCodeAt(0);f<=e;++f)c.push(b.replace(d[0],String.fromCharCode(f)))}else c.push(b);b=this.urls=c;kk(this,this.g?this.g.bind(this):gk(b,this.tileGrid))};jk.prototype.Qc=function(b,c,d){b=this.cb(b,c,d);xe(this.a,b)&&this.a.get(b)};function lk(b,c){$g.call(this,0,c);this.c=sf();sf();this.a=this.c.canvas;this.a.style.width="100%";this.a.style.height="100%";this.a.className="ol-unselectable";ge(b,this.a,0);this.b=!0;this.g=yb()}M(lk,$g);lk.prototype.Bb=function(b){return b instanceof X?new dk(b):b instanceof Y?new ek(b):null};
-function mk(b,c,d){var e=b.h,f=b.c;if(mb(e,c)){var g=d.extent,h=d.pixelRatio,k=d.viewState.rotation,l=d.pixelRatio,m=d.viewState,p=m.resolution;b=Jg(b.g,b.a.width/2,b.a.height/2,l/p,-l/p,-m.rotation,-m.center[0],-m.center[1]);g=new Pi(f,h,g,b,k);T(e,new Gg(c,e,g,d,f,null))}}lk.prototype.U=function(){return"canvas"};
-lk.prototype.kb=function(b){if(b){var c=this.c,d=b.pixelRatio,e=Math.round(b.size[0]*d),d=Math.round(b.size[1]*d);this.a.width!=e||this.a.height!=d?(this.a.width=e,this.a.height=d):c.clearRect(0,0,e,d);var f=b.viewState.rotation;ah(b);mk(this,"precompose",b);var g=b.layerStatesArray;Ma(g);yi(c,f,e/2,d/2);var h=b.viewState.resolution,k,l,m,p;k=0;for(l=g.length;k<l;++k)p=g[k],m=p.layer,m=ch(this,m),Ig(p,h)&&"ready"==p.Tb&&m.i(b,p)&&m.g(b,p,c);yi(c,-f,e/2,d/2);mk(this,"postcompose",b);this.b||(pe(this.a,
-!0),this.b=!0);dh(this,b);b.postRenderFunctions.push(bh)}else this.b&&(pe(this.a,!1),this.b=!1)};function nk(b,c){Mg.call(this,b);this.target=c}M(nk,Mg);nk.prototype.yb=N;nk.prototype.Ac=N;function ok(b){var c=document.createElement("DIV");c.style.position="absolute";nk.call(this,b,c);this.c=!0;this.h=1;this.g=0;this.b={}}M(ok,nk);ok.prototype.yb=function(){fe(this.target);this.g=0};
-ok.prototype.Bc=function(b,c){if(!c.visible)return this.c&&(pe(this.target,!1),this.c=!1),!0;var d=b.pixelRatio,e=b.viewState,f=e.projection,g=this.a,h=g.W(),k=h.ia(f),l=h.bb(f),m=Re(k,e.resolution),p=k.J(m),q=e.center,r;p==e.resolution?(q=Sg(q,p,b.size),r=Yb(q,p,e.rotation,b.size)):r=b.extent;void 0!==c.extent&&(r=Zb(r,c.extent));var p=Ne(k,r,p),u={};u[m]={};var w=this.l(h,f,u),y=ui(g),z=Ib(),D=new gd(0,0,0,0),t,v,B,F;for(B=p.a;B<=p.b;++B)for(F=p.f;F<=p.c;++F)t=Ug(h,m,B,F,d,f),v=t.N(),v=2==v||4==
-v||3==v&&!y,!v&&t.a&&(t=t.a),v=t.N(),2==v?u[m][t.L.toString()]=t:4==v||3==v&&!y||(v=Je(k,t.L,w,D,z),v||(t=Me(k,t.L,D,z))&&w(m+1,t));var C;if(this.g!=h.f){for(C in this.b)y=this.b[+C],he(y.target);this.b={};this.g=h.f}z=Object.keys(u).map(Number);z.sort(Ga);var w={},G;B=0;for(F=z.length;B<F;++B){C=z[B];C in this.b?y=this.b[C]:(y=Se(k,q,C),y=new pk(k,y),w[C]=!0,this.b[C]=y);C=u[C];for(G in C){t=y;v=C[G];var J=l,A=v.L,H=A[0],O=A[1],Q=A[2],A=A.toString();if(!(A in t.b)){var H=sb(Qe(t.g,H),t.i),L=v.S(t),
-K=L.style;K.maxWidth="none";var fa=void 0,ra=void 0;0<J?(fa=document.createElement("DIV"),ra=fa.style,ra.overflow="hidden",ra.width=H[0]+"px",ra.height=H[1]+"px",K.position="absolute",K.left=-J+"px",K.top=-J+"px",K.width=H[0]+2*J+"px",K.height=H[1]+2*J+"px",fa.appendChild(L)):(K.width=H[0]+"px",K.height=H[1]+"px",fa=L,ra=K);ra.position="absolute";ra.left=(O-t.f[1])*H[0]+"px";ra.top=(t.f[2]-Q)*H[1]+"px";t.a||(t.a=document.createDocumentFragment());t.a.appendChild(fa);t.b[A]=v}}y.a&&(y.target.appendChild(y.a),
-y.a=null)}l=Object.keys(this.b).map(Number);l.sort(Ga);B=yb();G=0;for(z=l.length;G<z;++G)if(C=l[G],y=this.b[C],C in u)if(t=y.J(),F=y.fa(),Jg(B,b.size[0]/2,b.size[1]/2,t/e.resolution,t/e.resolution,e.rotation,(F[0]-q[0])/t,(q[1]-F[1])/t),y.setTransform(B),C in w){for(--C;0<=C;--C)if(C in this.b){F=this.b[C].target;F.parentNode&&F.parentNode.insertBefore(y.target,F.nextSibling);break}0>C&&ge(this.target,y.target,0)}else{if(!b.viewHints[0]&&!b.viewHints[1]){v=Le(y.g,r,y.f[0],D);C=[];t=F=void 0;for(t in y.b)F=
-y.b[t],J=F.L,hd(v,J[1],J[2])||C.push(F);J=v=void 0;v=0;for(J=C.length;v<J;++v)F=C[v],t=F.L.toString(),he(F.S(y)),delete y.b[t]}}else he(y.target),delete this.b[C];c.opacity!=this.h&&(this.h=this.target.style.opacity=c.opacity);c.visible&&!this.c&&(pe(this.target,!0),this.c=!0);Rg(b.usedTiles,h,m,p);Tg(b,h,k,d,f,r,m,g.get("preload"));Og(b,h);Qg(b,h);return!0};
-function pk(b,c){this.target=document.createElement("DIV");this.target.style.position="absolute";this.target.style.width="100%";this.target.style.height="100%";this.g=b;this.f=c;this.h=ac(Ke(b,c));this.l=b.J(c[0]);this.b={};this.a=null;this.c=Ab();this.i=[0,0]}pk.prototype.fa=function(){return this.h};pk.prototype.J=function(){return this.l};pk.prototype.setTransform=function(b){Kg(b,this.c)||(wf(this.target,b),Bb(this.c,b))};function qk(b){this.g=sf();var c=this.g.canvas;c.style.maxWidth="none";c.style.position="absolute";nk.call(this,b,c);this.b=!1;this.h=-1;this.o=NaN;this.i=Ib();this.c=this.j=null;this.v=yb();this.u=yb()}M(qk,nk);n=qk.prototype;n.yb=function(){var b=this.g.canvas;b.width=b.width;this.h=0};
-n.Ac=function(b,c){var d=b.viewState,e=d.center,f=d.rotation,g=d.resolution,d=b.pixelRatio,h=b.size[0],k=b.size[1],l=h*d,m=k*d,e=Jg(this.v,d*h/2,d*k/2,d/g,-d/g,-f,-e[0],-e[1]),g=this.g;g.canvas.width=l;g.canvas.height=m;h=Jg(this.u,0,0,1/d,1/d,0,-(l-h)/2*d,-(m-k)/2*d);wf(g.canvas,h);rk(this,"precompose",b,e);(h=this.c)&&!h.c()&&(g.globalAlpha=c.opacity,h.f(g,d,e,f,c.Wa?b.skippedFeatureUids:{}),rk(this,"render",b,e));rk(this,"postcompose",b,e)};
-function rk(b,c,d,e){var f=b.g;b=b.a;mb(b,c)&&(e=new Pi(f,d.pixelRatio,d.extent,e,d.viewState.rotation),T(b,new Gg(c,b,e,d,f,null)))}n.Xa=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};n.Cc=function(){Ng(this)};
-n.Bc=function(b){function c(b){var c,e=b.c;e?c=e.call(b,l):(e=d.g)&&(c=e(b,l));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=yj(p,b,c[f],xj(l,m),this.Cc,this)||e;else e=yj(p,b,c,xj(l,m),this.Cc,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.W();Pg(b.attributions,e.i);Qg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var g=b.extent,h=b.viewState,f=h.projection,l=h.resolution,m=b.pixelRatio;b=d.f;k=d.a;h=d.get("renderOrder");
-void 0===h&&(h=wj);g=Kb(g,k*l);if(!this.b&&this.o==l&&this.h==b&&this.j==h&&Mb(this.i,g))return!0;this.c=null;this.b=!1;var p=new sj(.5*l/m,g,l,d.a);ck(e,g,l,f);if(h){var q=[];ak(e,g,function(b){q.push(b)},this);q.sort(h);q.forEach(c,this)}else ak(e,g,c,this);tj(p);this.o=l;this.h=b;this.j=h;this.i=g;this.c=p;return!0};function sk(b,c){$g.call(this,0,c);this.c=sf();var d=this.c.canvas;d.style.position="absolute";d.style.width="100%";d.style.height="100%";d.className="ol-unselectable";ge(b,d,0);this.g=yb();this.a=document.createElement("DIV");this.a.className="ol-unselectable";d=this.a.style;d.position="absolute";d.width="100%";d.height="100%";R(this.a,"touchstart",kb);ge(b,this.a,0);this.b=!0}M(sk,$g);sk.prototype.K=function(){he(this.a);sk.Y.K.call(this)};
-sk.prototype.Bb=function(b){if(b instanceof X)b=new ok(b);else if(b instanceof Y)b=new qk(b);else return null;return b};function tk(b,c,d){var e=b.h;if(mb(e,c)){var f=d.extent,g=d.pixelRatio,h=d.viewState,k=h.rotation,l=b.c,m=l.canvas;Jg(b.g,m.width/2,m.height/2,g/h.resolution,-g/h.resolution,-h.rotation,-h.center[0],-h.center[1]);b=new Pi(l,g,f,b.g,k);T(e,new Gg(c,e,b,d,l,null))}}sk.prototype.U=function(){return"dom"};
-sk.prototype.kb=function(b){if(b){var c=this.h;if(mb(c,"precompose")||mb(c,"postcompose")){var c=this.c.canvas,d=b.pixelRatio;c.width=b.size[0]*d;c.height=b.size[1]*d}tk(this,"precompose",b);c=b.layerStatesArray;Ma(c);var d=b.viewState.resolution,e,f,g,h;e=0;for(f=c.length;e<f;++e)h=c[e],g=h.layer,g=ch(this,g),ge(this.a,g.target,e),Ig(h,d)&&"ready"==h.Tb?g.Bc(b,h)&&g.Ac(b,h):g.yb();var c=b.layerStates,k;for(k in this.f)k in c||(g=this.f[k],he(g.target));this.b||(pe(this.a,!0),this.b=!0);ah(b);dh(this,
-b);b.postRenderFunctions.push(bh);tk(this,"postcompose",b)}else this.b&&(pe(this.a,!1),this.b=!1)};function uk(b){this.a=b}function vk(b){this.a=b}M(vk,uk);vk.prototype.U=function(){return 35632};function wk(b){this.a=b}M(wk,uk);wk.prototype.U=function(){return 35633};function xk(){this.a="precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}M(xk,vk);aa(xk);
-function yk(){this.a="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"}M(yk,wk);aa(yk);
-function zk(b,c){this.i=b.getUniformLocation(c,"j");this.j=b.getUniformLocation(c,"i");this.h=b.getUniformLocation(c,"k");this.l=b.getUniformLocation(c,"h");this.a=b.getAttribLocation(c,"e");this.b=b.getAttribLocation(c,"f");this.c=b.getAttribLocation(c,"c");this.f=b.getAttribLocation(c,"g");this.g=b.getAttribLocation(c,"d")};function Ak(b){this.a=void 0!==b?b:[]};function Bk(b,c){this.B=b;this.a=c;this.b={};this.g={};this.c={};this.i=this.j=this.h=this.l=null;(this.f=0<=oa.indexOf("OES_element_index_uint"))&&c.getExtension("OES_element_index_uint");R(this.B,"webglcontextlost",this.o,this);R(this.B,"webglcontextrestored",this.s,this)}M(Bk,hb);
-function Ck(b,c,d){var e=b.a,f=d.a,g=String(I(d));if(g in b.b)e.bindBuffer(c,b.b[g].buffer);else{var h=e.createBuffer();e.bindBuffer(c,h);var k;34962==c?k=new Float32Array(f):34963==c&&(k=b.f?new Uint32Array(f):new Uint16Array(f));e.bufferData(c,k,35044);b.b[g]={Ne:d,buffer:h}}}function Dk(b,c){var d=b.a,e=String(I(c)),f=b.b[e];d.isContextLost()||d.deleteBuffer(f.buffer);delete b.b[e]}
-Bk.prototype.K=function(){gb(this.B);var b=this.a;if(!b.isContextLost()){for(var c in this.b)b.deleteBuffer(this.b[c].buffer);for(c in this.c)b.deleteProgram(this.c[c]);for(c in this.g)b.deleteShader(this.g[c]);b.deleteFramebuffer(this.h);b.deleteRenderbuffer(this.i);b.deleteTexture(this.j)}};
-function Ek(b){if(!b.h){var c=b.a,d=c.createFramebuffer();c.bindFramebuffer(c.FRAMEBUFFER,d);var e=Fk(c,1,1),f=c.createRenderbuffer();c.bindRenderbuffer(c.RENDERBUFFER,f);c.renderbufferStorage(c.RENDERBUFFER,c.DEPTH_COMPONENT16,1,1);c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,e,0);c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT,c.RENDERBUFFER,f);c.bindTexture(c.TEXTURE_2D,null);c.bindRenderbuffer(c.RENDERBUFFER,null);c.bindFramebuffer(c.FRAMEBUFFER,null);b.h=d;
-b.j=e;b.i=f}return b.h}function Gk(b,c){var d=String(I(c));if(d in b.g)return b.g[d];var e=b.a,f=e.createShader(c.U());e.shaderSource(f,c.a);e.compileShader(f);return b.g[d]=f}function Hk(b,c,d){var e=I(c)+"/"+I(d);if(e in b.c)return b.c[e];var f=b.a,g=f.createProgram();f.attachShader(g,Gk(b,c));f.attachShader(g,Gk(b,d));f.linkProgram(g);return b.c[e]=g}Bk.prototype.o=function(){Wa(this.b);Wa(this.g);Wa(this.c);this.i=this.j=this.h=this.l=null};Bk.prototype.s=function(){};
-function Ik(b,c){if(c==b.l)return!1;b.a.useProgram(c);b.l=c;return!0}function Jk(b,c,d){var e=b.createTexture();b.bindTexture(b.TEXTURE_2D,e);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR);void 0!==c&&b.texParameteri(3553,10242,c);void 0!==d&&b.texParameteri(3553,10243,d);return e}function Fk(b,c,d){var e=Jk(b,void 0,void 0);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,c,d,0,b.RGBA,b.UNSIGNED_BYTE,null);return e};function Kk(b,c){this.H=this.u=void 0;this.j=Xb(c);this.s=[];this.h=[];this.A=void 0;this.g=[];this.c=[];this.D=this.I=void 0;this.b=[];this.v=this.i=null;this.V=void 0;this.ka=Ab();this.ua=Ab();this.R=this.G=void 0;this.la=Ab();this.ha=this.Z=this.T=void 0;this.da=[];this.l=[];this.a=[];this.o=null;this.f=[];this.B=[];this.aa=void 0}M(Kk,Fg);
-function Lk(b,c){var d=b.o,e=b.i,f=b.da,g=b.l,h=c.a;return function(){if(!h.isContextLost()){var b,l;b=0;for(l=f.length;b<l;++b)h.deleteTexture(f[b]);b=0;for(l=g.length;b<l;++b)h.deleteTexture(g[b])}Dk(c,d);Dk(c,e)}}
-function Mk(b,c,d,e){var f=b.u,g=b.H,h=b.A,k=b.I,l=b.D,m=b.V,p=b.G,q=b.R,r=b.T?1:0,u=b.Z,w=b.ha,y=b.aa,z=Math.cos(u),u=Math.sin(u),D=b.b.length,t=b.a.length,v,B,F,C,G,J;for(v=0;v<d;v+=e)G=c[v]-b.j[0],J=c[v+1]-b.j[1],B=t/8,F=-w*f,C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=F*z-C*u,b.a[t++]=F*u+C*z,b.a[t++]=p/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,F=w*(y-f),C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=F*z-C*u,b.a[t++]=F*u+C*z,b.a[t++]=(p+y)/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,F=w*(y-f),C=w*g,b.a[t++]=
-G,b.a[t++]=J,b.a[t++]=F*z-C*u,b.a[t++]=F*u+C*z,b.a[t++]=(p+y)/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,F=-w*f,C=w*g,b.a[t++]=G,b.a[t++]=J,b.a[t++]=F*z-C*u,b.a[t++]=F*u+C*z,b.a[t++]=p/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,b.b[D++]=B,b.b[D++]=B+1,b.b[D++]=B+2,b.b[D++]=B,b.b[D++]=B+2,b.b[D++]=B+3}Kk.prototype.Qa=function(b,c){this.f.push(this.b.length);this.B.push(c);var d=b.a;Mk(this,d,d.length,b.b)};Kk.prototype.Ra=function(b,c){this.f.push(this.b.length);this.B.push(c);var d=b.a;Mk(this,d,d.length,b.b)};
-function Nk(b,c){var d=c.a;b.s.push(b.b.length);b.h.push(b.b.length);b.o=new Ak(b.a);Ck(c,34962,b.o);b.i=new Ak(b.b);Ck(c,34963,b.i);var e={};Ok(b.da,b.g,e,d);Ok(b.l,b.c,e,d);b.u=void 0;b.H=void 0;b.A=void 0;b.g=null;b.c=null;b.I=void 0;b.D=void 0;b.b=null;b.V=void 0;b.G=void 0;b.R=void 0;b.T=void 0;b.Z=void 0;b.ha=void 0;b.a=null;b.aa=void 0}
-function Ok(b,c,d,e){var f,g,h,k,l=c.length;for(k=0;k<l;++k){g=c[k];h=I(g).toString();if(h in d)f=d[h];else{f=e;var m=Jk(f,33071,33071);f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,g);f=m;d[h]=f}b[k]=f}}
-function Pk(b,c,d,e,f,g,h,k,l,m,p){var q=c.a;Ck(c,34962,b.o);Ck(c,34963,b.i);var r=xk.qa(),u=yk.qa(),u=Hk(c,r,u);b.v?r=b.v:(r=new zk(q,u),b.v=r);Ik(c,u);q.enableVertexAttribArray(r.c);q.vertexAttribPointer(r.c,2,5126,!1,32,0);q.enableVertexAttribArray(r.a);q.vertexAttribPointer(r.a,2,5126,!1,32,8);q.enableVertexAttribArray(r.g);q.vertexAttribPointer(r.g,2,5126,!1,32,16);q.enableVertexAttribArray(r.b);q.vertexAttribPointer(r.b,1,5126,!1,32,24);q.enableVertexAttribArray(r.f);q.vertexAttribPointer(r.f,
-1,5126,!1,32,28);u=b.la;Jg(u,0,0,2/(e*g[0]),2/(e*g[1]),-f,-(d[0]-b.j[0]),-(d[1]-b.j[1]));d=b.ua;e=2/g[0];g=2/g[1];Cb(d);d[0]=e;d[5]=g;d[10]=1;d[15]=1;g=b.ka;Cb(g);0!==f&&Gb(g,-f);q.uniformMatrix4fv(r.l,!1,u);q.uniformMatrix4fv(r.j,!1,d);q.uniformMatrix4fv(r.i,!1,g);q.uniform1f(r.h,h);var w;if(void 0===l)Qk(b,q,c,k,b.da,b.s);else{if(m)a:{f=c.f?5125:5123;c=c.f?4:2;g=b.f.length-1;for(h=b.l.length-1;0<=h;--h)for(q.bindTexture(3553,b.l[h]),m=0<h?b.h[h-1]:0,u=b.h[h];0<=g&&b.f[g]>=m;){w=b.f[g];d=b.B[g];
-e=I(d).toString();if(void 0===k[e]&&d.M()&&(void 0===p||$b(p,d.M().C()))&&(q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),q.drawElements(4,u-w,f,w*c),u=l(d))){b=u;break a}u=w;g--}b=void 0}else q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),Qk(b,q,c,k,b.l,b.h),b=(b=l(null))?b:void 0;w=b}q.disableVertexAttribArray(r.c);q.disableVertexAttribArray(r.a);q.disableVertexAttribArray(r.g);q.disableVertexAttribArray(r.b);q.disableVertexAttribArray(r.f);return w}
-function Qk(b,c,d,e,f,g){var h=d.f?5125:5123;d=d.f?4:2;if(Za(e)){var k;b=0;e=f.length;for(k=0;b<e;++b){c.bindTexture(3553,f[b]);var l=g[b];c.drawElements(4,l-k,h,k*d);k=l}}else{k=0;var m,l=0;for(m=f.length;l<m;++l){c.bindTexture(3553,f[l]);for(var p=0<l?g[l-1]:0,q=g[l],r=p;k<b.f.length&&b.f[k]<=q;){var u=I(b.B[k]).toString();void 0!==e[u]?(r!==p&&c.drawElements(4,p-r,h,r*d),p=r=k===b.f.length-1?q:b.f[k+1]):p=k===b.f.length-1?q:b.f[k+1];k++}r!==p&&c.drawElements(4,p-r,h,r*d)}}}
-Kk.prototype.Aa=function(b){var c=b.Sa(),d=b.S(1),e=b.Db(),f=b.jb(1),g=b.B,h=b.fa(),k=b.o,l=b.s,m=b.ya();b=b.u;var p;0===this.g.length?this.g.push(d):(p=this.g[this.g.length-1],I(p)!=I(d)&&(this.s.push(this.b.length),this.g.push(d)));0===this.c.length?this.c.push(f):(p=this.c[this.c.length-1],I(p)!=I(f)&&(this.h.push(this.b.length),this.c.push(f)));this.u=c[0];this.H=c[1];this.A=m[1];this.I=e[1];this.D=e[0];this.V=g;this.G=h[0];this.R=h[1];this.Z=l;this.T=k;this.ha=b;this.aa=m[0]};
-function Rk(b,c,d){this.l=c;this.i=b;this.h=d;this.b={}}function Sk(b,c){var d=[],e;for(e in b.b)d.push(Lk(b.b[e],c));return function(){for(var b=d.length,c,e=0;e<b;e++)c=d[e].apply(this,arguments);return c}}function Tk(b,c){for(var d in b.b)Nk(b.b[d],c)}Rk.prototype.a=function(b,c){var d=this.b[c];void 0===d&&(d=new Uk[c](this.i,this.l),this.b[c]=d);return d};Rk.prototype.c=function(){return Za(this.b)};
-Rk.prototype.f=function(b,c,d,e,f,g,h,k){var l,m;g=0;for(l=cj.length;g<l;++g)m=this.b[cj[g]],void 0!==m&&Pk(m,b,c,d,e,f,h,k,void 0,!1)};function Vk(b,c,d,e,f,g,h,k,l,m){var p=Wk,q,r;for(q=cj.length-1;0<=q;--q)if(r=b.b[cj[q]],void 0!==r&&(r=Pk(r,c,d,e,f,p,g,h,k,l,m)))return r}
-Rk.prototype.g=function(b,c,d,e,f,g,h,k,l,m){var p=c.a;p.bindFramebuffer(p.FRAMEBUFFER,Ek(c));var q;void 0!==this.h&&(q=Kb(Pb(b),e*this.h));return Vk(this,c,b,e,f,k,l,function(b){var c=new Uint8Array(4);p.readPixels(0,0,1,1,p.RGBA,p.UNSIGNED_BYTE,c);if(0<c[3]&&(b=m(b)))return b},!0,q)};function Xk(b,c,d,e,f,g,h){var k=d.a;k.bindFramebuffer(k.FRAMEBUFFER,Ek(d));return void 0!==Vk(b,d,c,e,f,g,h,function(){var b=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,b);return 0<b[3]},!1)}
-var Uk={Image:Kk},Wk=[1,1];function Yk(b,c,d,e,f,g){this.a=b;this.f=c;this.c=g;this.l=f;this.h=e;this.g=d;this.b=null}M(Yk,Fg);Yk.prototype.Ra=function(b,c){var d=this.a,e=(new Rk(1,this.c)).a(0,"Image");e.Aa(this.b);e.Ra(b,c);Nk(e,d);Pk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Lk(e,d)()};Yk.prototype.Qa=function(b,c){var d=this.a,e=(new Rk(1,this.c)).a(0,"Image");e.Aa(this.b);e.Qa(b,c);Nk(e,d);Pk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Lk(e,d)()};Yk.prototype.Aa=function(b){this.b=b};function Zk(){this.a="precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"}M(Zk,vk);aa(Zk);function $k(){this.a="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}M($k,wk);aa($k);
-function al(b,c){this.f=b.getUniformLocation(c,"f");this.c=b.getUniformLocation(c,"e");this.h=b.getUniformLocation(c,"d");this.g=b.getUniformLocation(c,"g");this.a=b.getAttribLocation(c,"b");this.b=b.getAttribLocation(c,"c")};function bl(b,c){Mg.call(this,c);this.c=b;this.G=new Ak([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.ta=null;this.j=void 0;this.D=yb();this.R=Ab();this.o=null}M(bl,Mg);
-function cl(b,c,d){var e=b.c.c;if(void 0===b.j||b.j!=d){c.postRenderFunctions.push(na(function(b,c,d){b.isContextLost()||(b.deleteFramebuffer(c),b.deleteTexture(d))},e,b.i,b.ta));c=Fk(e,d,d);var f=e.createFramebuffer();e.bindFramebuffer(36160,f);e.framebufferTexture2D(36160,36064,3553,c,0);b.ta=c;b.i=f;b.j=d}else e.bindFramebuffer(36160,b.i)}
-bl.prototype.Dc=function(b,c,d){dl(this,"precompose",d,b);Ck(d,34962,this.G);var e=d.a,f=Zk.qa(),g=$k.qa(),f=Hk(d,f,g);this.o?g=this.o:this.o=g=new al(e,f);Ik(d,f)&&(e.enableVertexAttribArray(g.a),e.vertexAttribPointer(g.a,2,5126,!1,16,0),e.enableVertexAttribArray(g.b),e.vertexAttribPointer(g.b,2,5126,!1,16,8),e.uniform1i(g.g,0));e.uniformMatrix4fv(g.h,!1,this.D);e.uniformMatrix4fv(g.c,!1,this.R);e.uniform1f(g.f,c.opacity);e.bindTexture(3553,this.ta);e.drawArrays(5,0,4);dl(this,"postcompose",d,b)};
-function dl(b,c,d,e){b=b.a;if(mb(b,c)){var f=e.viewState;T(b,new Gg(c,b,new Yk(d,f.center,f.resolution,f.rotation,e.size,e.extent),e,null,d))}}bl.prototype.s=function(){this.i=this.ta=null;this.j=void 0};function el(){this.a="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}M(el,vk);aa(el);function fl(){this.a="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"}M(fl,wk);aa(fl);function gl(b,c){this.f=b.getUniformLocation(c,"e");this.c=b.getUniformLocation(c,"d");this.a=b.getAttribLocation(c,"b");this.b=b.getAttribLocation(c,"c")};function hl(b,c){bl.call(this,b,c);this.A=el.qa();this.T=fl.qa();this.b=null;this.v=new Ak([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.u=this.g=null;this.h=-1;this.I=[0,0]}M(hl,bl);hl.prototype.K=function(){Dk(this.c.g,this.v);hl.Y.K.call(this)};hl.prototype.l=function(b,c,d){var e=this.c;return function(f,g){return Xe(b,c,f,g,function(b){var c=xe(e.b,b.getKey());c&&(d[f]||(d[f]={}),d[f][b.L.toString()]=b);return c})}};hl.prototype.s=function(){hl.Y.s.call(this);this.b=null};
-hl.prototype.Ec=function(b,c,d){var e=this.c,f=d.a,g=b.viewState,h=g.projection,k=this.a,l=k.W(),m=l.ia(h),p=Re(m,g.resolution),q=m.J(p),r=Ye(l,p,b.pixelRatio,h),u=r[0]/sb(Qe(m,p),this.I)[0],w=q/u,y=l.bb(h),z=g.center,D;q==g.resolution?(z=Sg(z,q,b.size),D=Yb(z,q,g.rotation,b.size)):D=b.extent;q=Ne(m,D,q);if(this.g&&id(this.g,q)&&this.h==l.f)w=this.u;else{var t=[q.b-q.a+1,q.c-q.f+1],v=Math.pow(2,Math.ceil(Math.log(Math.max(t[0]*r[0],t[1]*r[1]))/Math.LN2)),t=w*v,B=m.fa(p),F=B[0]+q.a*r[0]*w,w=B[1]+q.f*
-r[1]*w,w=[F,w,F+t,w+t];cl(this,b,v);f.viewport(0,0,v,v);f.clearColor(0,0,0,0);f.clear(16384);f.disable(3042);v=Hk(d,this.A,this.T);Ik(d,v);this.b||(this.b=new gl(f,v));Ck(d,34962,this.v);f.enableVertexAttribArray(this.b.a);f.vertexAttribPointer(this.b.a,2,5126,!1,16,0);f.enableVertexAttribArray(this.b.b);f.vertexAttribPointer(this.b.b,2,5126,!1,16,8);f.uniform1i(this.b.f,0);d={};d[p]={};var C=this.l(l,h,d),G=ui(k),v=!0,F=Ib(),J=new gd(0,0,0,0),A,H,O;for(H=q.a;H<=q.b;++H)for(O=q.f;O<=q.c;++O){B=Ug(l,
-p,H,O,u,h);if(void 0!==c.extent&&(A=Ke(m,B.L,F),!$b(A,c.extent)))continue;A=B.N();A=2==A||4==A||3==A&&!G;!A&&B.a&&(B=B.a);A=B.N();if(2==A){if(xe(e.b,B.getKey())){d[p][B.L.toString()]=B;continue}}else if(4==A||3==A&&!G)continue;v=!1;A=Je(m,B.L,C,J,F);A||(B=Me(m,B.L,J,F))&&C(p+1,B)}c=Object.keys(d).map(Number);c.sort(Ga);for(var C=new Float32Array(4),Q,L,K,G=0,J=c.length;G<J;++G)for(Q in L=d[c[G]],L)B=L[Q],A=Ke(m,B.L,F),H=2*(A[2]-A[0])/t,O=2*(A[3]-A[1])/t,K=2*(A[0]-w[0])/t-1,A=2*(A[1]-w[1])/t-1,xb(C,
-H,O,K,A),f.uniform4fv(this.b.c,C),il(e,B,r,y*u),f.drawArrays(5,0,4);v?(this.g=q,this.u=w,this.h=l.f):(this.u=this.g=null,this.h=-1,b.animate=!0)}Rg(b.usedTiles,l,p,q);var fa=e.i;Tg(b,l,m,u,h,D,p,k.get("preload"),function(b){var c;(c=2!=b.N()||xe(e.b,b.getKey()))||(c=b.getKey()in fa.f);c||fa.c([b,Pe(m,b.L),m.J(b.L[0]),r,y*u])},this);Og(b,l);Qg(b,l);f=this.D;Cb(f);Eb(f,(z[0]-w[0])/(w[2]-w[0]),(z[1]-w[1])/(w[3]-w[1]));0!==g.rotation&&Gb(f,g.rotation);Fb(f,b.size[0]*g.resolution/(w[2]-w[0]),b.size[1]*
-g.resolution/(w[3]-w[1]));Eb(f,-.5,-.5);return!0};function jl(b,c){bl.call(this,b,c);this.h=!1;this.I=-1;this.A=NaN;this.u=Ib();this.g=this.b=this.v=null}M(jl,bl);n=jl.prototype;n.Dc=function(b,c,d){this.g=c;var e=b.viewState,f=this.b;f&&!f.c()&&f.f(d,e.center,e.resolution,e.rotation,b.size,b.pixelRatio,c.opacity,c.Wa?b.skippedFeatureUids:{})};n.K=function(){var b=this.b;b&&(Sk(b,this.c.g)(),this.b=null);jl.Y.K.call(this)};
-n.Xa=function(b,c,d,e){if(this.b&&this.g){var f=c.viewState,g=this.a,h={};return this.b.g(b,this.c.g,f.center,f.resolution,f.rotation,c.size,c.pixelRatio,this.g.opacity,{},function(b){var c=I(b).toString();if(!(c in h))return h[c]=!0,d.call(e,b,g)})}};n.yc=function(b,c){if(this.b&&this.g){var d=c.viewState;return Xk(this.b,b,this.c.g,d.resolution,d.rotation,this.g.opacity,c.skippedFeatureUids)}return!1};n.Fc=function(){Ng(this)};
-n.Ec=function(b,c,d){function e(b){var c,d=b.c;d?c=d.call(b,m):(d=f.g)&&(c=d(b,m));if(c){if(c){d=!1;if(Array.isArray(c))for(var e=0,g=c.length;e<g;++e)d=yj(r,b,c[e],xj(m,p),this.Fc,this)||d;else d=yj(r,b,c,xj(m,p),this.Fc,this)||d;b=d}else b=!1;this.h=this.h||b}}var f=this.a;c=f.W();Pg(b.attributions,c.i);Qg(b,c);var g=b.viewHints[0],h=b.viewHints[1],k=f.i,l=f.j;if(!this.h&&!k&&g||!l&&h)return!0;var h=b.extent,k=b.viewState,g=k.projection,m=k.resolution,p=b.pixelRatio,k=f.f,q=f.a,l=f.get("renderOrder");
-void 0===l&&(l=wj);h=Kb(h,q*m);if(!this.h&&this.A==m&&this.I==k&&this.v==l&&Mb(this.u,h))return!0;this.b&&b.postRenderFunctions.push(Sk(this.b,d));this.h=!1;var r=new Rk(.5*m/p,h,f.a);ck(c,h,m,g);if(l){var u=[];ak(c,h,function(b){u.push(b)},this);u.sort(l);u.forEach(e,this)}else ak(c,h,e,this);Tk(r,d);this.A=m;this.I=k;this.v=l;this.u=h;this.b=r;return!0};function kl(b,c){$g.call(this,0,c);this.a=document.createElement("CANVAS");this.a.style.width="100%";this.a.style.height="100%";this.a.className="ol-unselectable";ge(b,this.a,0);this.s=this.u=0;this.H=sf();this.j=!0;this.c=yf(this.a,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.g=new Bk(this.a,this.c);R(this.a,"webglcontextlost",this.ce,this);R(this.a,"webglcontextrestored",this.de,this);this.b=new we;this.o=null;this.i=new eh(function(b){var c=
-b[1];b=b[2];var f=c[0]-this.o[0],c=c[1]-this.o[1];return 65536*Math.log(b)+Math.sqrt(f*f+c*c)/b}.bind(this),function(b){return b[0].getKey()});this.v=function(){if(0!==this.i.a.length){ih(this.i);var b=fh(this.i);il(this,b[0],b[3],b[4])}return!1}.bind(this);this.l=0;ll(this)}M(kl,$g);
-function il(b,c,d,e){var f=b.c,g=c.getKey();if(xe(b.b,g))b=b.b.get(g),f.bindTexture(3553,b.ta),9729!=b.sc&&(f.texParameteri(3553,10240,9729),b.sc=9729),9729!=b.tc&&(f.texParameteri(3553,10240,9729),b.tc=9729);else{var h=f.createTexture();f.bindTexture(3553,h);if(0<e){var k=b.H.canvas,l=b.H;b.u!==d[0]||b.s!==d[1]?(k.width=d[0],k.height=d[1],b.u=d[0],b.s=d[1]):l.clearRect(0,0,d[0],d[1]);l.drawImage(c.S(),e,e,d[0],d[1],0,0,d[0],d[1]);f.texImage2D(3553,0,6408,6408,5121,k)}else f.texImage2D(3553,0,6408,
-6408,5121,c.S());f.texParameteri(3553,10240,9729);f.texParameteri(3553,10241,9729);f.texParameteri(3553,10242,33071);f.texParameteri(3553,10243,33071);b.b.set(g,{ta:h,sc:9729,tc:9729})}}n=kl.prototype;n.Bb=function(b){return b instanceof X?new hl(this,b):b instanceof Y?new jl(this,b):null};function ml(b,c,d){var e=b.h;if(mb(e,c)){b=b.g;var f=d.viewState;T(e,new Gg(c,e,new Yk(b,f.center,f.resolution,f.rotation,d.size,d.extent),d,null,b))}}
-n.K=function(){var b=this.c;b.isContextLost()||ye(this.b,function(c){c&&b.deleteTexture(c.ta)});ib(this.g);kl.Y.K.call(this)};n.ed=function(b,c){for(var d=this.c,e;1024<this.b.f-this.l;){if(e=this.b.a.Ba)d.deleteTexture(e.ta);else if(+this.b.a.Kb==c.index)break;else--this.l;this.b.pop()}};n.U=function(){return"webgl"};n.ce=function(b){b.preventDefault();this.b.clear();this.l=0;b=this.f;for(var c in b)b[c].s()};n.de=function(){ll(this);this.h.render()};
-function ll(b){b=b.c;b.activeTexture(33984);b.blendFuncSeparate(770,771,1,771);b.disable(2884);b.disable(2929);b.disable(3089);b.disable(2960)}
-n.kb=function(b){var c=this.g,d=this.c;if(d.isContextLost())return!1;if(!b)return this.j&&(pe(this.a,!1),this.j=!1),!1;this.o=b.focus;this.b.set((-b.index).toString(),null);++this.l;ml(this,"precompose",b);var e=[],f=b.layerStatesArray;Ma(f);var g=b.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],Ig(m,g)&&"ready"==m.Tb&&(l=ch(this,m.layer),l.Ec(b,m,c)&&e.push(m));f=b.size[0]*b.pixelRatio;g=b.size[1]*b.pixelRatio;if(this.a.width!=f||this.a.height!=g)this.a.width=f,this.a.height=g;d.bindFramebuffer(36160,
-null);d.clearColor(0,0,0,0);d.clear(16384);d.enable(3042);d.viewport(0,0,this.a.width,this.a.height);h=0;for(k=e.length;h<k;++h)m=e[h],l=ch(this,m.layer),l.Dc(b,m,c);this.j||(pe(this.a,!0),this.j=!0);ah(b);1024<this.b.f-this.l&&b.postRenderFunctions.push(this.ed.bind(this));0!==this.i.a.length&&(b.postRenderFunctions.push(this.v),b.animate=!0);ml(this,"postcompose",b);dh(this,b);b.postRenderFunctions.push(bh)};
-n.Qb=function(b,c,d,e,f,g){var h;if(this.c.isContextLost())return!1;var k=c.viewState,l=c.layerStatesArray,m;for(m=l.length-1;0<=m;--m){h=l[m];var p=h.layer;if(Ig(h,k.resolution)&&f.call(g,p)&&(h=ch(this,p).Xa(b,c,d,e)))return h}};n.zc=function(b,c,d,e){var f=!1;if(this.c.isContextLost())return!1;var g=c.viewState,h=c.layerStatesArray,k;for(k=h.length-1;0<=k;--k){var l=h[k],m=l.layer;if(Ig(l,g.resolution)&&d.call(e,m)&&(f=ch(this,m).yc(b,c)))return!0}return f};var nl=["canvas","webgl","dom"];
-function Z(b){U.call(this);var c=pl(b);this.Ca=void 0!==b.loadTilesWhileAnimating?b.loadTilesWhileAnimating:!1;this.ob=void 0!==b.loadTilesWhileInteracting?b.loadTilesWhileInteracting:!1;this.qb=void 0!==b.pixelRatio?b.pixelRatio:Ef;this.pb=c.logos;this.T=function(){this.g=void 0;this.re.call(this,Date.now())}.bind(this);this.va=yb();this.rb=yb();this.wa=0;this.b=null;this.ka=Ib();this.u=this.G=null;this.a=document.createElement("DIV");this.a.className="ol-viewport"+(Hf?" ol-touch":"");this.a.style.position=
-"relative";this.a.style.overflow="hidden";this.a.style.width="100%";this.a.style.height="100%";this.a.style.msTouchAction="none";this.a.style.touchAction="none";this.o=document.createElement("DIV");this.o.className="ol-overlaycontainer";this.a.appendChild(this.o);this.j=document.createElement("DIV");this.j.className="ol-overlaycontainer-stopevent";b=["click","dblclick","mousedown","touchstart","mspointerdown",zg,"mousewheel","wheel"];for(var d=0,e=b.length;d<e;++d)R(this.j,b[d],jb);this.a.appendChild(this.j);
-this.aa=new rg(this);for(var f in Cg)R(this.aa,Cg[f],this.pc,this);this.Z=c.keyboardEventTarget;this.i=null;R(this.a,"wheel",this.Ga,this);R(this.a,"mousewheel",this.Ga,this);this.s=c.controls;this.h=c.interactions;this.v=c.overlays;this.Nc={};this.D=new c.te(this.a,this);this.R=null;this.A=[];this.da=[];this.la=new jh(this.jd.bind(this),this.Ed.bind(this));this.sb={};R(this,qb("layergroup"),this.od,this);R(this,qb("view"),this.Fd,this);R(this,qb("size"),this.Bd,this);R(this,qb("target"),this.Dd,
-this);this.l(c.values);od(this.s,function(b){b.setMap(this)},this);R(this.s,"add",function(b){b.element.setMap(this)},this);R(this.s,"remove",function(b){b.element.setMap(null)},this);od(this.h,function(b){b.setMap(this)},this);R(this.h,"add",function(b){b.element.setMap(this)},this);R(this.h,"remove",function(b){b.element.setMap(null)},this);od(this.v,this.ac,this);R(this.v,"add",function(b){this.ac(b.element)},this);R(this.v,"remove",function(b){var c=b.element.Da();void 0!==c&&delete this.Nc[c.toString()];
-b.element.setMap(null)},this)}M(Z,U);n=Z.prototype;n.$c=function(b){this.s.push(b)};n.ad=function(b){this.h.push(b)};n.bd=function(b){ql(this).get("layers").push(b)};n.cd=function(b){this.v.push(b)};n.ac=function(b){var c=b.Da();void 0!==c&&(this.Nc[c.toString()]=b);b.setMap(this)};n.ea=function(b){this.render();Array.prototype.push.apply(this.A,arguments)};
-n.K=function(){ib(this.aa);ib(this.D);fb(this.a,"wheel",this.Ga,this);fb(this.a,"mousewheel",this.Ga,this);void 0!==this.c&&(x.removeEventListener("resize",this.c,!1),this.c=void 0);this.g&&(x.cancelAnimationFrame(this.g),this.g=void 0);this.set("target",null);Z.Y.K.call(this)};n.hd=function(b,c,d,e,f){if(this.b)return b=this.pa(b),this.D.Qb(b,this.b,c,void 0!==d?d:null,void 0!==e?e:bc,void 0!==f?f:null)};
-n.Hd=function(b,c,d){if(!this.b)return!1;b=this.pa(b);return this.D.zc(b,this.b,void 0!==c?c:bc,void 0!==d?d:null)};n.nc=function(b){var c=this.a.getBoundingClientRect();b=b.changedTouches?b.changedTouches[0]:b;return[b.clientX-c.left,b.clientY-c.top]};n.Nb=function(){return this.get("target")};n.Fa=function(){var b=this.Nb();return void 0!==b?$d(b):null};n.pa=function(b){var c=this.b;return c?(b=b.slice(),Lg(c.pixelToCoordinateMatrix,b,b)):null};function ql(b){return b.get("layergroup")}
-function Fh(b,c){var d=b.b;if(d){var e=c.slice(0,2);return Lg(d.coordinateToPixelMatrix,e,e)}return null}n.Ha=function(){return this.get("size")};n.O=function(){return this.get("view")};n.jd=function(b,c,d,e){var f=this.b;if(!(f&&c in f.wantedTiles&&f.wantedTiles[c][b.L.toString()]))return Infinity;b=d[0]-f.focus[0];d=d[1]-f.focus[1];return 65536*Math.log(e)+Math.sqrt(b*b+d*d)/e};n.Ga=function(b,c){var d=new pg(c||b.type,this,b);this.pc(d)};
-n.pc=function(b){if(this.b){this.R=b.coordinate;b.frameState=this.b;var c=this.h.a,d;if(!1!==T(this,b))for(d=c.length-1;0<=d;d--){var e=c[d];if(e.get("active")&&!e.handleEvent(b))break}}};
-n.Ad=function(){var b=this.b,c=this.la;if(0!==c.a.length){var d=16,e=d;if(b){var f=b.viewHints;f[0]&&(d=this.Ca?8:0,e=2);f[1]&&(d=this.ob?8:0,e=2)}if(c.h<d){ih(c);for(var f=0,g,h;c.h<d&&f<e&&0<c.a.length;)g=fh(c)[0],h=g.getKey(),0!==g.N()||h in c.g||(c.g[h]=!0,++c.h,++f,g.load())}}c=this.da;d=0;for(e=c.length;d<e;++d)c[d](this,b);c.length=0};n.Bd=function(){this.render()};
-n.Dd=function(){var b;this.Nb()&&(b=this.Fa());if(this.i){for(var c=0,d=this.i.length;c<d;++c)P(this.i[c]);this.i=null}b?(b.appendChild(this.a),b=this.Z?this.Z:b,this.i=[R(b,"keydown",this.Ga,this),R(b,"keypress",this.Ga,this)],this.c||(this.c=this.nb.bind(this),x.addEventListener("resize",this.c,!1))):(he(this.a),void 0!==this.c&&(x.removeEventListener("resize",this.c,!1),this.c=void 0));this.nb()};n.Ed=function(){this.render()};n.Gd=function(){this.render()};
-n.Fd=function(){this.G&&(P(this.G),this.G=null);var b=this.O();b&&(this.G=R(b,"propertychange",this.Gd,this));this.render()};n.pd=function(){this.render()};n.qd=function(){this.render()};n.od=function(){this.u&&(this.u.forEach(P),this.u=null);var b=ql(this);b&&(this.u=[R(b,"propertychange",this.qd,this),R(b,"change",this.pd,this)]);this.render()};n.se=function(){this.g&&x.cancelAnimationFrame(this.g);this.T()};n.render=function(){void 0===this.g&&(this.g=x.requestAnimationFrame(this.T))};n.oe=function(b){return this.h.remove(b)};
-n.pe=function(b){return ql(this).get("layers").remove(b)};
-n.re=function(b){var c,d,e,f=this.Ha(),g=this.O(),h=null;if(c=void 0!==f&&0<f[0]&&0<f[1]&&g)c=!!g.ga()&&void 0!==g.J();if(c){var h=g.g.slice(),k=ql(this).Eb(),l={};c=0;for(d=k.length;c<d;++c)l[I(k[c].layer)]=k[c];e=g.N();h={animate:!1,attributions:{},coordinateToPixelMatrix:this.va,extent:null,focus:this.R?this.R:e.center,index:this.wa++,layerStates:l,layerStatesArray:k,logos:Va({},this.pb),pixelRatio:this.qb,pixelToCoordinateMatrix:this.rb,postRenderFunctions:[],size:f,skippedFeatureUids:this.sb,
-tileQueue:this.la,time:b,usedTiles:{},viewState:e,viewHints:h,wantedTiles:{}}}if(h){b=this.A;c=f=0;for(d=b.length;c<d;++c)g=b[c],g(this,h)&&(b[f++]=g);b.length=f;h.extent=Yb(e.center,e.resolution,e.rotation,h.size)}this.b=h;this.D.kb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.da,h.postRenderFunctions),0!==this.A.length||h.viewHints[0]||h.viewHints[1]||Qb(h.extent,this.ka)||(T(this,new ue("moveend",this,h)),Lb(h.extent,this.ka)));T(this,new ue("postrender",this,h));c=e=this.Ad;
-this&&(c=ma(e,this));!ga(x.setImmediate)||x.Window&&x.Window.prototype&&!W("Edge")&&x.Window.prototype.setImmediate==x.setImmediate?(mf||(mf=nf()),mf(c)):x.setImmediate(c)};
-n.nb=function(){var b=this.Fa();if(b){var c=Zd(b),d=Hd&&b.currentStyle,e;if(e=d)Xd(c),e=!0;if(e&&"auto"!=d.width&&"auto"!=d.height&&!d.boxSizing)c=qe(b,d.width,"width","pixelWidth"),b=qe(b,d.height,"height","pixelHeight"),b=new Wd(c,b);else{d=new Wd(b.offsetWidth,b.offsetHeight);if(Hd){c=re(b,"paddingLeft");e=re(b,"paddingRight");var f=re(b,"paddingTop"),g=re(b,"paddingBottom"),c=new ke(f,e,g,c)}else c=le(b,"paddingLeft"),e=le(b,"paddingRight"),f=le(b,"paddingTop"),g=le(b,"paddingBottom"),c=new ke(parseFloat(f),
-parseFloat(e),parseFloat(g),parseFloat(c));!Hd||9<=Number(Td)?(e=le(b,"borderLeftWidth"),f=le(b,"borderRightWidth"),g=le(b,"borderTopWidth"),b=le(b,"borderBottomWidth"),b=new ke(parseFloat(g),parseFloat(f),parseFloat(b),parseFloat(e))):(e=te(b,"borderLeft"),f=te(b,"borderRight"),g=te(b,"borderTop"),b=te(b,"borderBottom"),b=new ke(g,f,b,e));b=new Wd(d.width-b.left-c.left-c.right-b.right,d.height-b.top-c.top-c.bottom-b.bottom)}this.set("size",[b.width,b.height])}else this.set("size",void 0)};
-function pl(b){var c=null;void 0!==b.keyboardEventTarget&&(c="string"===typeof b.keyboardEventTarget?document.getElementById(b.keyboardEventTarget):b.keyboardEventTarget);var d={},e={};if(void 0===b.logo||"boolean"===typeof b.logo&&b.logo)e["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"]=
-"http://openlayers.org/";else{var f=b.logo;"string"===typeof f?e[f]="":ha(f)&&(e[f.src]=f.href)}f=b.layers instanceof hi?b.layers:new hi({layers:b.layers});d.layergroup=f;d.target=b.target;d.view=void 0!==b.view?b.view:new Wc;var f=$g,g;void 0!==b.renderer?Array.isArray(b.renderer)?g=b.renderer:"string"===typeof b.renderer&&(g=[b.renderer]):g=nl;var h,k;h=0;for(k=g.length;h<k;++h){var l=g[h];if("canvas"==l){if(Gf){f=lk;break}}else if("dom"==l){f=sk;break}else if("webgl"==l&&zf){f=kl;break}}var m;
-void 0!==b.controls?m=Array.isArray(b.controls)?new md(b.controls.slice()):b.controls:m=ff();if(void 0!==b.interactions)g=Array.isArray(b.interactions)?new md(b.interactions.slice()):b.interactions;else{g={};h=new md;k=new kh;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new Gh);(void 0!==g.doubleClickZoom?g.doubleClickZoom:1)&&h.push(new qh({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new Bh({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:
-1)&&h.push(new $h);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new di({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Uh),h.push(new Wh({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Yh({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:1)&&h.push(new Th({duration:g.zoomDuration}));g=h}b=void 0!==b.overlays?Array.isArray(b.overlays)?new md(b.overlays.slice()):b.overlays:new md;return{controls:m,
-interactions:g,keyboardEventTarget:c,logos:e,overlays:b,te:f,values:d}}lc(mi);lc(ti);ti.forEach(function(b){mi.forEach(function(c){mc(b,c,ni);mc(c,b,oi)})});function rl(b){U.call(this);this.j=b.id;this.i=void 0!==b.insertFirst?b.insertFirst:!0;this.o=void 0!==b.stopEvent?b.stopEvent:!0;this.b=document.createElement("DIV");this.b.className="ol-overlay-container";this.b.style.position="absolute";this.autoPan=void 0!==b.autoPan?b.autoPan:!1;this.g=void 0!==b.autoPanAnimation?b.autoPanAnimation:{};this.h=void 0!==b.autoPanMargin?b.autoPanMargin:20;this.a={$a:"",hb:"",lb:"",mb:"",visible:!0};this.c=null;R(this,qb("element"),this.md,this);R(this,qb("map"),
-this.vd,this);R(this,qb("offset"),this.wd,this);R(this,qb("position"),this.yd,this);R(this,qb("positioning"),this.zd,this);void 0!==b.element&&this.set("element",b.element);this.set("offset",void 0!==b.offset?b.offset:[0,0]);this.set("positioning",void 0!==b.positioning?b.positioning:"top-left");void 0!==b.position&&this.uc(b.position)}M(rl,U);n=rl.prototype;n.Da=function(){return this.j};n.md=function(){fe(this.b);var b=this.get("element");b&&this.b.appendChild(b)};
-n.vd=function(){this.c&&(he(this.b),P(this.c),this.c=null);var b=this.get("map");b&&(this.c=R(b,"postrender",this.render,this),sl(this),b=this.o?b.j:b.o,this.i?ge(b,this.b,0):b.appendChild(this.b))};n.render=function(){sl(this)};n.wd=function(){sl(this)};
-n.yd=function(){sl(this);if(void 0!==this.get("position")&&this.autoPan){var b=this.get("map");if(void 0!==b&&b.Fa()){var c=tl(b.Fa(),b.Ha()),d=this.get("element"),e=d.offsetWidth,f=d.currentStyle||x.getComputedStyle(d),e=e+(parseInt(f.marginLeft,10)+parseInt(f.marginRight,10)),f=d.offsetHeight,g=d.currentStyle||x.getComputedStyle(d),f=f+(parseInt(g.marginTop,10)+parseInt(g.marginBottom,10)),h=tl(d,[e,f]),d=this.h;Mb(c,h)||(e=h[0]-c[0],f=c[2]-h[2],g=h[1]-c[1],h=c[3]-h[3],c=[0,0],0>e?c[0]=e-d:0>f&&
-(c[0]=Math.abs(f)+d),0>g?c[1]=g-d:0>h&&(c[1]=Math.abs(h)+d),0===c[0]&&0===c[1])||(d=b.O().ga(),e=Fh(b,d),c=[e[0]+c[0],e[1]+c[1]],this.g&&(this.g.source=d,b.ea(dd(this.g))),b.O().ma(b.pa(c)))}}};n.zd=function(){sl(this)};n.setMap=function(b){this.set("map",b)};n.uc=function(b){this.set("position",b)};
-function tl(b,c){var d=Zd(b),e=new Vd(0,0),f;f=d?Zd(d):document;var g;(g=!Hd||9<=Number(Td))||(Xd(f),g=!0);b!=(g?f.documentElement:f.body)&&(f=me(b),g=Xd(d).a,d=g.scrollingElement?g.scrollingElement:Kd?g.body||g.documentElement:g.documentElement,g=g.parentWindow||g.defaultView,d=Hd&&Rd("10")&&g.pageYOffset!=d.scrollTop?new Vd(d.scrollLeft,d.scrollTop):new Vd(g.pageXOffset||d.scrollLeft,g.pageYOffset||d.scrollTop),e.x=f.left+d.x,e.y=f.top+d.y);return[e.x,e.y,e.x+c[0],e.y+c[1]]}
-function ul(b,c){b.a.visible!==c&&(pe(b.b,c),b.a.visible=c)}
-function sl(b){var c=b.get("map"),d=b.get("position");if(void 0!==c&&c.b&&void 0!==d){var d=Fh(c,d),e=c.Ha(),c=b.b.style,f=b.get("offset"),g=b.get("positioning"),h=f[0],f=f[1];if("bottom-right"==g||"center-right"==g||"top-right"==g)""!==b.a.hb&&(b.a.hb=c.left=""),h=Math.round(e[0]-d[0]-h)+"px",b.a.lb!=h&&(b.a.lb=c.right=h);else{""!==b.a.lb&&(b.a.lb=c.right="");if("bottom-center"==g||"center-center"==g||"top-center"==g)h-=ne(b.b).width/2;h=Math.round(d[0]+h)+"px";b.a.hb!=h&&(b.a.hb=c.left=h)}if("bottom-left"==
-g||"bottom-center"==g||"bottom-right"==g)""!==b.a.mb&&(b.a.mb=c.top=""),d=Math.round(e[1]-d[1]-f)+"px",b.a.$a!=d&&(b.a.$a=c.bottom=d);else{""!==b.a.$a&&(b.a.$a=c.bottom="");if("center-left"==g||"center-center"==g||"center-right"==g)f-=ne(b.b).height/2;d=Math.round(d[1]+f)+"px";b.a.mb!=d&&(b.a.mb=c.top=d)}ul(b,!0)}else ul(b,!1)};function vl(){this.defaultDataProjection=null}function wl(b,c,d){var e;d&&(e={dataProjection:d.dataProjection?d.dataProjection:b.f(Lj(c)),featureProjection:d.featureProjection});var f;e&&(f={featureProjection:e.featureProjection,dataProjection:e.dataProjection?e.dataProjection:b.defaultDataProjection,rightHanded:e.rightHanded},e.decimals&&(f.decimals=e.decimals));return f}
-function xl(b,c){var d=c?kc(c.featureProjection):null,e=c?kc(c.dataProjection):null;if(d&&e&&!vc(d,e))if(b instanceof yc)d=b.o(e,d);else{e=wc(e,d);d=[b[0],b[1],b[0],b[3],b[2],b[1],b[2],b[3]];e(d,d,2);var f=[d[0],d[2],d[4],d[6]],g=[d[1],d[3],d[5],d[7]],d=Math.min.apply(null,f),e=Math.min.apply(null,g),f=Math.max.apply(null,f),g=Math.max.apply(null,g),d=Nb(d,e,f,g,void 0)}else d=b;return d};function yl(){this.defaultDataProjection=null}M(yl,vl);function Lj(b){return ha(b)?b:"string"===typeof b?(b=JSON.parse(b))?b:null:null}yl.prototype.U=function(){return"json"};yl.prototype.g=function(b,c){return this.a(Lj(b),wl(this,b,c))};yl.prototype.b=function(b,c){return this.h(Lj(b),wl(this,b,c))};function zl(b,c,d,e,f){var g=NaN,h=NaN,k=(d-c)/e;if(0!==k)if(1==k)g=b[c],h=b[c+1];else if(2==k)g=.5*b[c]+.5*b[c+e],h=.5*b[c+1]+.5*b[c+e+1];else{var h=b[c],k=b[c+1],l=0,g=[0],m;for(m=c+e;m<d;m+=e){var p=b[m],q=b[m+1],l=l+Math.sqrt((p-h)*(p-h)+(q-k)*(q-k));g.push(l);h=p;k=q}d=.5*l;l=0;m=g.length;for(p=!1;l<m;)h=l+(m-l>>1),k=+Ga(g[h],d),0>k?l=h+1:(m=h,p=!k);h=p?l:~l;0>h?(d=(d-g[-h-2])/(g[-h-1]-g[-h-2]),c+=(-h-2)*e,g=b[c],g=g+d*(b[c+e]-g),h=b[c+1],h=h+d*(b[c+e+1]-h)):(g=b[c+h*e],h=b[c+h*e+1])}return f?
-(f[0]=g,f[1]=h,f):[g,h]};function Al(b,c){Ac.call(this);this.c=null;this.j=-1;this.X(b,c)}M(Al,Ac);n=Al.prototype;n.clone=function(){var b=new Al(null);V(b,this.g,this.a.slice());b.w();return b};n.oa=function(){return Gc(this.a,0,this.a.length,this.b)};function Wi(b){if(b.j!=b.f){var c;c=zl(b.a,0,b.a.length,b.b,b.c);b.c=c;b.j=b.f}return b.c}n.Ea=function(b){var c=[];c.length=Ic(this.a,0,this.a.length,this.b,b,c,0);b=new Al(null);V(b,"XY",c);b.w();return b};n.U=function(){return"LineString"};
-n.X=function(b,c){b?(Cc(this,c,b,1),this.a||(this.a=[]),this.a.length=Ec(this.a,0,b,this.b)):V(this,"XY",null);this.w()};function Bl(b,c){Ac.call(this);this.c=[];this.X(b,c)}M(Bl,Ac);n=Bl.prototype;n.clone=function(){var b=new Bl(null),c=this.c.slice();V(b,this.g,this.a.slice());b.c=c;b.w();return b};n.oa=function(){return Hc(this.a,0,this.c,this.b)};n.Ta=function(){return this.c};function Xi(b){var c=[],d=b.a,e=0,f=b.c;b=b.b;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g],e=zl(d,e,k,b);Ja(c,e);e=k}return c}
-n.Ea=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b,h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var p=f[l],k=Ic(e,h,p,g,b,c,k);d.push(k);h=p}c.length=k;b=new Bl(null);V(b,"XY",c);b.c=d;b.w();return b};n.U=function(){return"MultiLineString"};n.X=function(b,c){if(b){Cc(this,c,b,2);this.a||(this.a=[]);var d=Fc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1]}else d=this.c,V(this,"XY",null),this.c=d;this.w()};function Cl(b,c){Ac.call(this);this.X(b,c)}M(Cl,Ac);Cl.prototype.clone=function(){var b=new Cl(null);V(b,this.g,this.a.slice());b.w();return b};Cl.prototype.oa=function(){return Gc(this.a,0,this.a.length,this.b)};Cl.prototype.U=function(){return"MultiPoint"};Cl.prototype.X=function(b,c){b?(Cc(this,c,b,1),this.a||(this.a=[]),this.a.length=Ec(this.a,0,b,this.b)):V(this,"XY",null);this.w()};function Dl(b,c){Ac.call(this);this.c=[];this.A=-1;this.D=null;this.G=-1;this.j=null;this.X(b,c)}M(Dl,Ac);n=Dl.prototype;n.clone=function(){for(var b=new Dl(null),c=this.c.length,d=Array(c),e=0;e<c;++e)d[e]=this.c[e].slice();V(b,this.g,this.a.slice());b.c=d;b.w();return b};n.oa=function(b){var c;void 0!==b?(c=Yi(this).slice(),Rc(c,this.c,this.b,b)):c=this.a;b=c;c=this.c;var d=this.b,e=0,f=[],g=0,h,k;h=0;for(k=c.length;h<k;++h){var l=c[h];f[g++]=Hc(b,e,l,d,f[g]);e=l[l.length-1]}f.length=g;return f};
-function Zi(b){if(b.A!=b.f){var c=b.a,d=b.c,e=b.b,f=0,g=[],h,k,l=Ib();h=0;for(k=d.length;h<k;++h){var m=d[h],l=c,p=m[0],q=e,r=Ob(void 0),l=Sb(r,l,f,p,q);g.push((l[0]+l[2])/2,(l[1]+l[3])/2);f=m[m.length-1]}c=Yi(b);d=b.c;e=b.b;h=0;k=[];m=0;for(l=d.length;m<l;++m)f=d[m],k=Nc(c,h,f,e,g,2*m,k),h=f[f.length-1];b.D=k;b.A=b.f}return b.D}
-function Yi(b){if(b.G!=b.f){var c=b.a,d;a:{d=b.c;var e,f;e=0;for(f=d.length;e<f;++e)if(!Pc(c,d[e],b.b,void 0)){d=!1;break a}d=!0}d?b.j=c:(b.j=c.slice(),b.j.length=Rc(b.j,b.c,b.b));b.G=b.f}return b.j}n.Ea=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b;b=Math.sqrt(b);var h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var p=f[l],q=[],k=Jc(e,h,p,g,b,c,k,q);d.push(q);h=p[p.length-1]}c.length=k;e=new Dl(null);V(e,"XY",c);e.c=d;e.w();return e};n.U=function(){return"MultiPolygon"};
-n.X=function(b,c){if(b){Cc(this,c,b,3);this.a||(this.a=[]);var d=this.a,e=this.b,f=this.c,g=0,f=f?f:[],h=0,k,l;k=0;for(l=b.length;k<l;++k)g=Fc(d,g,b[k],e,f[h]),f[h++]=g,g=g[g.length-1];f.length=h;0===f.length?this.a.length=0:(d=f[f.length-1],this.a.length=0===d.length?0:d[d.length-1])}else d=this.c,V(this,"XY",null),this.c=d;this.w()};function El(b){b=b?b:{};this.defaultDataProjection=null;this.c=b.geometryName}M(El,yl);function Fl(b){var c="XY";!0===b.hasZ&&!0===b.hasM?c="XYZM":!0===b.hasZ?c="XYZ":!0===b.hasM&&(c="XYM");return c}
-var Gl={Point:function(b){return void 0!==b.m&&void 0!==b.z?new Lc([b.x,b.y,b.z,b.m],"XYZM"):void 0!==b.z?new Lc([b.x,b.y,b.z],"XYZ"):void 0!==b.m?new Lc([b.x,b.y,b.m],"XYM"):new Lc([b.x,b.y])},LineString:function(b){return new Al(b.paths[0],Fl(b))},Polygon:function(b){return new Sc(b.rings,Fl(b))},MultiPoint:function(b){return new Cl(b.points,Fl(b))},MultiLineString:function(b){return new Bl(b.paths,Fl(b))},MultiPolygon:function(b){return new Dl(b.rings,Fl(b))}};
-El.prototype.a=function(b,c){var d;if(d=b.geometry){var e;if(ea(d.x)&&ea(d.y))e="Point";else if(d.points)e="MultiPoint";else if(d.paths)e=1===d.paths.length?"LineString":"MultiLineString";else if(d.rings){var f=d.rings,g=Fl(d),h=[];e=[];var k,l;k=0;for(l=f.length;k<l;++k){var m=Ia(f[k]);Oc(m,0,m.length,g.length)?h.push([f[k]]):e.push(f[k])}for(;e.length;){f=e.shift();g=!1;for(k=h.length-1;0<=k;k--)if(Mb((new Kc(h[k][0])).C(),(new Kc(f)).C())){h[k].push(f);g=!0;break}g||h.push([f.reverse()])}d=Va({},
-d);1===h.length?(e="Polygon",d.rings=h[0]):(e="MultiPolygon",d.rings=h)}d=xl((0,Gl[e])(d),c)}else d=null;h=new Gj;this.c&&Ij(h,this.c);Hj(h,d);c&&c.Jb&&b.attributes[c.Jb]&&(h.g=b.attributes[c.Jb],h.w());b.attributes&&h.l(b.attributes);return h};El.prototype.h=function(b,c){var d=c?c:{};if(b.features){var e=[],f=b.features,g,h;d.Jb=b.objectIdFieldName;g=0;for(h=f.length;g<h;++g)e.push(this.a(f[g],d));return e}return[this.a(b,d)]};
-El.prototype.f=function(b){return b.spatialReference&&b.spatialReference.wkid?kc("EPSG:"+b.spatialReference.wkid):null};function Hl(b){yc.call(this);this.a=b?b:null;Il(this)}M(Hl,yc);function Jl(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)fb(b.a[c],"change",b.w,b)}function Il(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)R(b.a[c],"change",b.w,b)}n=Hl.prototype;n.clone=function(){var b=new Hl(null),c=this.a,d=[],e,f;e=0;for(f=c.length;e<f;++e)d.push(c[e].clone());Jl(b);b.a=d;Il(b);b.w();return b};n.ab=function(b){Ob(b);for(var c=this.a,d=0,e=c.length;d<e;++d)Rb(b,c[d].C());return b};
-n.Hb=function(b){this.s!=this.f&&(Wa(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=[],e=this.a,f=!1,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g],l=k.Hb(b);d.push(l);l!==k&&(f=!0)}if(f)return b=new Hl(null),Jl(b),b.a=d,Il(b),b.w(),this.h[c]=b;this.i=b;return this};n.U=function(){return"GeometryCollection"};n.rotate=function(b,c){for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].rotate(b,c);this.w()};
-n.wb=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].wb(b);this.w()};n.K=function(){Jl(this);Hl.Y.K.call(this)};function Kl(b){b=b?b:{};this.defaultDataProjection=null;this.defaultDataProjection=kc(b.defaultDataProjection?b.defaultDataProjection:"EPSG:4326");this.c=b.geometryName}M(Kl,yl);function Ll(b,c){return b?xl((0,Ml[b.type])(b),c):null}
-var Ml={Point:function(b){return new Lc(b.coordinates)},LineString:function(b){return new Al(b.coordinates)},Polygon:function(b){return new Sc(b.coordinates)},MultiPoint:function(b){return new Cl(b.coordinates)},MultiLineString:function(b){return new Bl(b.coordinates)},MultiPolygon:function(b){return new Dl(b.coordinates)},GeometryCollection:function(b,c){var d=b.geometries.map(function(b){return Ll(b,c)});return new Hl(d)}};
-Kl.prototype.a=function(b,c){var d=Ll(b.geometry,c),e=new Gj;this.c&&Ij(e,this.c);Hj(e,d);void 0!==b.id&&(e.g=b.id,e.w());b.properties&&e.l(b.properties);return e};Kl.prototype.h=function(b,c){if("Feature"==b.type)return[this.a(b,c)];if("FeatureCollection"==b.type){var d=[],e=b.features,f,g;f=0;for(g=e.length;f<g;++f)d.push(this.a(e[f],c));return d}return[]};Kl.prototype.f=function(b){return(b=b.crs)?"name"==b.type?kc(b.properties.name):"EPSG"==b.type?kc("EPSG:"+b.properties.code):null:this.defaultDataProjection};function Nl(b,c,d){if("array"==ba(c))for(var e=0;e<c.length;e++)Nl(b,String(c[e]),d);else null!=c&&d.push("&",b,""===c?"":"=",encodeURIComponent(String(c)))};function Ol(b,c,d){Ac.call(this);Pl(this,b,c?c:0,d)}M(Ol,Ac);Ol.prototype.clone=function(){var b=new Ol(null);V(b,this.g,this.a.slice());b.w();return b};Ol.prototype.ab=function(b){var c=this.a,d=c[this.b]-c[0];return Nb(c[0]-d,c[1]-d,c[0]+d,c[1]+d,b)};Ol.prototype.U=function(){return"Circle"};function Pl(b,c,d,e){if(c){Cc(b,e,c,0);b.a||(b.a=[]);e=b.a;c=Dc(e,c);e[c++]=e[0]+d;var f;d=1;for(f=b.b;d<f;++d)e[c++]=e[d];e.length=c}else V(b,"XY",null);b.w()};function Ql(b,c,d,e,f){Ce.call(this,b,c);this.g=d;this.b=new Image;null!==e&&(this.b.crossOrigin=e);this.f={};this.c=null;this.h=f}M(Ql,Ce);n=Ql.prototype;n.K=function(){1==this.state&&Rl(this);this.a&&ib(this.a);this.state=5;De(this);Ql.Y.K.call(this)};n.S=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=Za(this.f)?this.b:this.b.cloneNode(!1);return this.f[c]=b}return this.b};n.getKey=function(){return this.g};n.Yd=function(){this.state=3;Rl(this);De(this)};
-n.Zd=function(){this.state=this.b.naturalWidth&&this.b.naturalHeight?2:4;Rl(this);De(this)};n.load=function(){0==this.state&&(this.state=1,De(this),this.c=[R(this.b,"error",this.Yd,this,!0),R(this.b,"load",this.Zd,this,!0)],this.h(this,this.g))};function Rl(b){b.c.forEach(P);b.c=null};function Sl(b,c){S.call(this,b);this.feature=c}M(Sl,S);
-function Tl(b){yh.call(this,{handleDownEvent:Ul,handleEvent:Vl,handleUpEvent:Wl});this.R=null;this.o=!1;this.wa=b.source?b.source:null;this.la=b.features?b.features:null;this.Zc=b.snapTolerance?b.snapTolerance:12;this.D=b.type;this.b=Xl(this.D);this.ka=b.minPoints?b.minPoints:this.b===Yl?3:2;this.da=b.maxPoints?b.maxPoints:Infinity;var c=b.geometryFunction;if(!c)if("Circle"===this.D)c=function(b,c){var d=c?c:new Ol([NaN,NaN]),h=b[0],k=b[1],l=h[0]-k[0],h=h[1]-k[1];Pl(d,b[0],Math.sqrt(l*l+h*h));return d};
-else{var d,c=this.b;c===Zl?d=Lc:c===am?d=Al:c===Yl&&(d=Sc);c=function(b,c){var g=c;g?g.X(b):g=new d(b);return g}}this.u=c;this.A=this.i=this.a=this.j=this.g=this.h=null;this.dd=b.clickTolerance?b.clickTolerance*b.clickTolerance:36;this.Z=new Y({source:new Uj({useSpatialIndex:!1,wrapX:b.wrapX?b.wrapX:!1}),style:b.style?b.style:bm()});this.va=b.geometryName;this.sb=b.condition?b.condition:uh;this.aa=b.freehandCondition?b.freehandCondition:vh;R(this,qb("active"),this.Ca,this)}M(Tl,yh);
-function bm(){var b=Oi();return function(c){return b[c.M().U()]}}Tl.prototype.setMap=function(b){Tl.Y.setMap.call(this,b);this.Ca()};function Vl(b){this.b!==am&&this.b!==Yl||!this.aa(b)||(this.o=!0);var c=!this.o;this.o&&b.type===Bg?(cm(this,b),c=!1):b.type===Ag?c=dm(this,b):b.type===ug&&(c=!1);return zh.call(this,b)&&c}function Ul(b){return this.sb(b)?(this.R=b.pixel,!0):this.o?(this.R=b.pixel,this.h||em(this,b),!0):!1}
-function Wl(b){this.o=!1;var c=this.R,d=b.pixel,e=c[0]-d[0],c=c[1]-d[1],d=!0;e*e+c*c<=this.dd&&(dm(this,b),this.h?this.b===fm?gm(this):hm(this,b)?gm(this):cm(this,b):(em(this,b),this.b===Zl&&gm(this)),d=!1);return d}
-function dm(b,c){if(b.h){var d=c.coordinate,e=b.g.M(),f;b.b===Zl?f=b.a:b.b===Yl?(f=b.a[0],f=f[f.length-1],hm(b,c)&&(d=b.h.slice())):(f=b.a,f=f[f.length-1]);f[0]=d[0];f[1]=d[1];b.u(b.a,e);b.j&&b.j.M().X(d);e instanceof Sc&&b.b!==Yl?(b.i||(b.i=new Gj(new Al(null))),0>=e.c.length?e=null:(d=new Kc(null),V(d,e.g,e.a.slice(0,e.c[0])),d.w(),e=d),d=b.i.M(),V(d,e.g,e.a),d.w()):b.A&&(d=b.i.M(),d.X(b.A));im(b)}else e=c.coordinate.slice(),b.j?b.j.M().X(e):(b.j=new Gj(new Lc(e)),im(b));return!0}
-function hm(b,c){var d=!1;if(b.g){var e=!1,f=[b.h];b.b===am?e=b.a.length>b.ka:b.b===Yl&&(e=b.a[0].length>b.ka,f=[b.a[0][0],b.a[0][b.a[0].length-2]]);if(e)for(var e=c.map,g=0,h=f.length;g<h;g++){var k=f[g],l=Fh(e,k),m=c.pixel,d=m[0]-l[0],l=m[1]-l[1],m=b.o&&b.aa(c)?1:b.Zc;if(d=Math.sqrt(d*d+l*l)<=m){b.h=k;break}}}return d}
-function em(b,c){var d=c.coordinate;b.h=d;b.b===Zl?b.a=d.slice():b.b===Yl?(b.a=[[d.slice(),d.slice()]],b.A=b.a[0]):(b.a=[d.slice(),d.slice()],b.b===fm&&(b.A=b.a));b.A&&(b.i=new Gj(new Al(b.A)));d=b.u(b.a);b.g=new Gj;b.va&&Ij(b.g,b.va);Hj(b.g,d);im(b);T(b,new Sl("drawstart",b.g))}
-function cm(b,c){var d=c.coordinate,e=b.g.M(),f,g;if(b.b===am)b.h=d.slice(),g=b.a,g.push(d.slice()),f=g.length>b.da,b.u(g,e);else if(b.b===Yl){g=b.a[0];g.push(d.slice());if(f=g.length>b.da)b.h=g[0];b.u(b.a,e)}im(b);f&&gm(b)}
-function gm(b){var c=jm(b),d=b.a,e=c.M();b.b===am?(d.pop(),b.u(d,e)):b.b===Yl&&(d[0].pop(),d[0].push(d[0][0]),b.u(d,e));"MultiPoint"===b.D?Hj(c,new Cl([d])):"MultiLineString"===b.D?Hj(c,new Bl([d])):"MultiPolygon"===b.D&&Hj(c,new Dl([d]));T(b,new Sl("drawend",c));b.la&&b.la.push(c);b.wa&&b.wa.ub(c)}function jm(b){b.h=null;var c=b.g;c&&(b.g=null,b.j=null,b.i=null,b.Z.W().clear(!0));return c}Tl.prototype.v=cc;
-function im(b){var c=[];b.g&&c.push(b.g);b.i&&c.push(b.i);b.j&&c.push(b.j);b=b.Z.W();b.clear(!0);b.vb(c)}Tl.prototype.Ca=function(){var b=this.T,c=this.get("active");b&&c||jm(this);this.Z.setMap(c?b:null)};function Xl(b){var c;"Point"===b||"MultiPoint"===b?c=Zl:"LineString"===b||"MultiLineString"===b?c=am:"Polygon"===b||"MultiPolygon"===b?c=Yl:"Circle"===b&&(c=fm);return c}var Zl="Point",am="LineString",Yl="Polygon",fm="Circle";function km(b,c,d,e,f,g,h,k,l,m,p){Ce.call(this,f,0);this.u=void 0!==p?p:!1;this.s=h;this.o=k;this.c=null;this.f={};this.g=c;this.l=e;this.i=g?g:f;this.b=[];this.Ja=null;this.h=0;g=Ke(e,this.i);k=this.l.C();f=this.g.C();g=k?Zb(g,k):g;if(0===Tb(g))this.state=4;else if((k=b.C())&&(f?f=Zb(f,k):f=k),k=e.J(this.i[0]),p=Xb(g),e=wc(d,b)(p,void 0,p.length),k=d.getPointResolution(k,p),p=oc(d),void 0!==p&&(k*=p),p=oc(b),void 0!==p&&(k/=p),e=b.getPointResolution(k,e)/k,isFinite(e)&&0<e&&(k/=e),e=k,!isFinite(e)||
-0>=e)this.state=4;else if(this.j=new Dj(b,d,g,f,e*(void 0!==m?m:.5)),0===this.j.c.length)this.state=4;else if(this.h=Re(c,e),d=Fj(this.j),f&&(b.a?(d[1]=Ba(d[1],f[1],f[3]),d[3]=Ba(d[3],f[1],f[3])):d=Zb(d,f)),Tb(d))if(b=Le(c,d,this.h),100>(b.b-b.a+1)*(b.c-b.f+1)){for(c=b.a;c<=b.b;c++)for(d=b.f;d<=b.c;d++)(m=l(this.h,c,d,h))&&this.b.push(m);0===this.b.length&&(this.state=4)}else this.state=3;else this.state=4}M(km,Ce);km.prototype.K=function(){1==this.state&&(this.Ja.forEach(P),this.Ja=null);km.Y.K.call(this)};
-km.prototype.S=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=Za(this.f)?this.c:this.c.cloneNode(!1);return this.f[c]=b}return this.c};
-km.prototype.Oc=function(){var b=[];this.b.forEach(function(c){c&&2==c.N()&&b.push({extent:Ke(this.g,c.L),image:c.S()})},this);this.b.length=0;if(0===b.length)this.state=3;else{var c=this.i[0],d=Qe(this.l,c),e=ea(d)?d:d[0],d=ea(d)?d:d[1],c=this.l.J(c),f=this.g.J(this.h),g=Ke(this.l,this.i);this.c=Cj(e,d,this.s,f,this.g.C(),c,g,this.j,b,this.o,this.u);this.state=2}De(this)};
-km.prototype.load=function(){if(0==this.state){this.state=1;De(this);var b=0;this.Ja=[];this.b.forEach(function(c){var d=c.N();if(0==d||1==d){b++;var e;e=R(c,"change",function(){var d=c.N();if(2==d||3==d||4==d)P(e),b--,0===b&&(this.Ja.forEach(P),this.Ja=null,this.Oc())},this);this.Ja.push(e)}},this);this.b.forEach(function(b){0==b.N()&&b.load()});0===b&&x.setTimeout(this.Oc.bind(this),0)}};function lm(b){jk.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction?b.tileLoadFunction:mm,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:b.wrapX});this.crossOrigin=void 0!==b.crossOrigin?b.crossOrigin:null;this.tileClass=void 0!==b.tileClass?b.tileClass:Ql;this.b={};this.o={};this.T=b.reprojectionErrorThreshold}
-M(lm,jk);n=lm.prototype;n.Gc=function(){if(Ae(this.a))return!0;for(var b in this.b)if(Ae(this.b[b]))return!0;return!1};n.Hc=function(b,c){var d=this.Ua(b);Be(this.a,this.a==d?c:{});for(var e in this.b){var f=this.b[e];Be(f,f==d?c:{})}};n.bb=function(){return 0};n.Fb=function(b){return this.c&&b&&!vc(this.c,b)?!1:lm.Y.Fb.call(this,b)};n.ia=function(b){var c=this.c;return!this.tileGrid||c&&!vc(c,b)?(c=I(b).toString(),c in this.o||(this.o[c]=Te(b)),this.o[c]):this.tileGrid};
-n.Ua=function(b){var c=this.c;if(!c||vc(c,b))return this.a;b=I(b).toString();b in this.b||(this.b[b]=new ze);return this.b[b]};function nm(b,c,d,e,f,g){c=[c,d,e];f=(d=Ze(b,c,g))?b.tileUrlFunction(d,f,g):void 0;f=new b.tileClass(c,void 0!==f?0:4,void 0!==f?f:"",b.crossOrigin,b.tileLoadFunction);f.key="";R(f,"change",b.D,b);return f}
-function Ug(b,c,d,e,f,g){if(b.c&&g&&!vc(b.c,g)){var h=b.Ua(g);d=[c,d,e];c=b.cb.apply(b,d);if(xe(h,c))return h.get(c);var k=b.c;e=b.ia(k);var l=b.ia(g),m=Ze(b,d,g);b=new km(k,e,g,l,d,m,b.eb(f),0,function(b,c,d,e){return om(this,b,c,d,e,k)}.bind(b),b.T,!1);h.set(c,b);return b}return om(b,c,d,e,f,g)}
-function om(b,c,d,e,f,g){var h=null,k=b.cb(c,d,e);if(xe(b.a,k)){if(h=b.a.get(k),""!=h.key){var l=h;h.a&&""==h.a.key?(h=h.a,2==l.N()&&(h.a=l)):(h=nm(b,c,d,e,f,g),2==l.N()?h.a=l:l.a&&2==l.a.N()&&(h.a=l.a,l.a=null));h.a&&(h.a.a=null);b.a.replace(k,h)}}else h=nm(b,c,d,e,f,g),b.a.set(k,h);return h}function mm(b,c){b.S().src=c};function pm(b){var c=void 0!==b.projection?b.projection:"EPSG:3857",d;if(void 0!==b.tileGrid)d=b.tileGrid;else{d={extent:Ue(c),maxZoom:b.maxZoom,minZoom:b.minZoom,tileSize:b.tileSize};var e={};Va(e,void 0!==d?d:{});void 0===e.extent&&(e.extent=kc("EPSG:3857").C());e.resolutions=Ve(e.extent,e.maxZoom,e.tileSize);delete e.maxZoom;d=new Ge(e)}lm.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,opaque:b.opaque,projection:c,reprojectionErrorThreshold:b.reprojectionErrorThreshold,
-tileGrid:d,tileLoadFunction:b.tileLoadFunction,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0})}M(pm,lm);function qm(b){b=b||{};var c;void 0!==b.attributions?c=b.attributions:c=[rm];pm.call(this,{attributions:c,cacheSize:b.cacheSize,crossOrigin:void 0!==b.crossOrigin?b.crossOrigin:"anonymous",opaque:void 0!==b.opaque?b.opaque:!0,maxZoom:void 0!==b.maxZoom?b.maxZoom:19,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:b.wrapX})}M(qm,pm);var rm=new kd({html:'&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});function sm(b){b=b||{};var c=tm[b.layer];this.u=b.layer;pm.call(this,{attributions:c.attributions,cacheSize:b.cacheSize,crossOrigin:"anonymous",logo:"https://developer.mapquest.com/content/osm/mq_logo.png",maxZoom:c.maxZoom,reprojectionErrorThreshold:b.reprojectionErrorThreshold,opaque:c.opaque,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:"https://otile{1-4}-s.mqcdn.com/tiles/1.0.0/"+this.u+"/{z}/{x}/{y}.jpg"})}M(sm,pm);
-var um=new kd({html:'Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a>'}),tm={osm:{maxZoom:19,opaque:!0,attributions:[um,rm]},sat:{maxZoom:18,opaque:!0,attributions:[um,new kd({html:"Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency"})]},hyb:{maxZoom:18,opaque:!1,attributions:[um,rm]}};function vm(b){b=b||{};lm.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,projection:b.projection,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0});this.R=b.params||{};this.u=Ib()}M(vm,lm);vm.prototype.eb=function(b){return b};
-vm.prototype.g=function(b,c,d){var e=this.tileGrid;e||(e=this.ia(d));if(!(e.Gb().length<=b[0])){var f=Ke(e,b,this.u),g=sb(Qe(e,b[0]),this.h);1!=c&&(g=rb(g,c,this.h));e={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};Va(e,this.R);var h;var k=this.urls;if(k){d=d.na.split(":").pop();e.SIZE=g[0]+","+g[1];e.BBOX=f.join(",");e.BBOXSR=d;e.IMAGESR=d;e.DPI=Math.round(e.DPI?e.DPI*c:90*c);b=[(1==k.length?k[0]:k[Da((b[1]<<b[0])+b[2],k.length)]).replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,
-"ImageServer/exportImage")];for(h in e)Nl(h,e[h],b);b[1]&&(h=b[0],c=h.indexOf("#"),0<=c&&(b.push(h.substr(c)),b[0]=h=h.substr(0,c)),c=h.indexOf("?"),0>c?b[1]="?":c==h.length-1&&(b[1]=void 0));h=b.join("")}else h=void 0;return h}};function wm(b){this.j=this.c=this.g=null;this.i=void 0!==b.fill?b.fill:null;this.I=[0,0];this.a=b.points;this.f=void 0!==b.radius?b.radius:b.radius1;this.h=void 0!==b.radius2?b.radius2:this.f;this.l=void 0!==b.angle?b.angle:0;this.b=void 0!==b.stroke?b.stroke:null;this.A=this.D=this.H=null;var c=b.atlasManager,d="",e="",f=0,g=null,h,k=0;this.b&&(h=wd(this.b.b),k=this.b.f,void 0===k&&(k=1),g=this.b.a,Ff||(g=null),e=this.b.g,void 0===e&&(e="round"),d=this.b.c,void 0===d&&(d="round"),f=this.b.h,void 0===
-f&&(f=10));var l=2*(this.f+k)+1,d={strokeStyle:h,Za:k,size:l,lineCap:d,lineDash:g,lineJoin:e,miterLimit:f};if(void 0===c){this.c=document.createElement("CANVAS");this.c.height=l;this.c.width=l;var c=l=this.c.width,m=this.c.getContext("2d");this.Lc(d,m,0,0);this.i?this.j=this.c:(m=this.j=document.createElement("CANVAS"),m.height=d.size,m.width=d.size,m=m.getContext("2d"),this.Kc(d,m,0,0))}else l=Math.round(l),(e=!this.i)&&(m=this.Kc.bind(this,d)),f=this.b?Gi(this.b):"-",g=this.i?Ai(this.i):"-",this.g&&
-f==this.g[1]&&g==this.g[2]&&this.f==this.g[3]&&this.h==this.g[4]&&this.l==this.g[5]&&this.a==this.g[6]||(this.g=["r"+f+g+(void 0!==this.f?this.f.toString():"-")+(void 0!==this.h?this.h.toString():"-")+(void 0!==this.l?this.l.toString():"-")+(void 0!==this.a?this.a.toString():"-"),f,g,this.f,this.h,this.l,this.a]),m=c.add(this.g[0],l,l,this.Lc.bind(this,d),m),this.c=m.image,this.I=[m.offsetX,m.offsetY],c=m.image.width,this.j=e?m.Id:this.c;this.H=[l/2,l/2];this.D=[l,l];this.A=[c,c];Vg.call(this,{opacity:1,
-rotateWithView:void 0!==b.rotateWithView?b.rotateWithView:!1,rotation:void 0!==b.rotation?b.rotation:0,scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0})}M(wm,Vg);n=wm.prototype;n.Sa=function(){return this.H};n.jb=function(){return this.j};n.S=function(){return this.c};n.Db=function(){return this.A};n.Ya=function(){return 2};n.fa=function(){return this.I};n.ya=function(){return this.D};n.Mb=N;n.load=N;n.Ub=N;
-n.Lc=function(b,c,d,e){var f;c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();this.h!==this.f&&(this.a*=2);for(d=0;d<=this.a;d++)e=2*d*Math.PI/this.a-Math.PI/2+this.l,f=0===d%2?this.f:this.h,c.lineTo(b.size/2+f*Math.cos(e),b.size/2+f*Math.sin(e));this.i&&(c.fillStyle=zd(this.i.a),c.fill());this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Za,b.lineDash&&c.setLineDash(b.lineDash),c.lineCap=b.lineCap,c.lineJoin=b.lineJoin,c.miterLimit=b.miterLimit,c.stroke());c.closePath()};
-n.Kc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();this.h!==this.f&&(this.a*=2);var f;for(d=0;d<=this.a;d++)f=2*d*Math.PI/this.a-Math.PI/2+this.l,e=0===d%2?this.f:this.h,c.lineTo(b.size/2+e*Math.cos(f),b.size/2+e*Math.sin(f));c.fillStyle=vi;c.fill();this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Za,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};E("ol.format.GeoJSON",Kl,OPENLAYERS);Kl.prototype.readFeatures=Kl.prototype.b;Kl.prototype.readFeature=Kl.prototype.g;E("ol.format.EsriJSON",El,OPENLAYERS);El.prototype.readFeatures=El.prototype.b;El.prototype.readFeature=El.prototype.g;E("ol.style.Style",Ii,OPENLAYERS);E("ol.style.Circle",Hi,OPENLAYERS);E("ol.style.RegularShape",wm,OPENLAYERS);E("ol.style.Fill",zi,OPENLAYERS);E("ol.style.Stroke",Fi,OPENLAYERS);E("ol.style.Icon",Wg,OPENLAYERS);
-E("ol.style.Text",function(b){b=b||{};this.a=b.font;this.g=b.rotation;this.h=b.scale;this.i=b.text;this.j=b.textAlign;this.B=b.textBaseline;this.c=void 0!==b.fill?b.fill:new zi({color:"#333"});this.l=void 0!==b.stroke?b.stroke:null;this.b=void 0!==b.offsetX?b.offsetX:0;this.f=void 0!==b.offsetY?b.offsetY:0},OPENLAYERS);E("ol.View",Wc,OPENLAYERS);Wc.prototype.on=Wc.prototype.V;Wc.prototype.getZoom=Wc.prototype.kd;Wc.prototype.setZoom=Wc.prototype.ue;Wc.prototype.getCenter=Wc.prototype.ga;
-Wc.prototype.setCenter=Wc.prototype.ma;Wc.prototype.calculateExtent=Wc.prototype.dc;Wc.prototype.getProjection=Wc.prototype.ae;Wc.prototype.fit=Wc.prototype.fd;E("ol.control.defaults",ff,OPENLAYERS);E("ol.layer.Tile",X,OPENLAYERS);X.prototype.getVisible=X.prototype.Va;X.prototype.setVisible=X.prototype.wc;X.prototype.getZIndex=X.prototype.Pb;X.prototype.setZIndex=X.prototype.xc;X.prototype.getOpacity=X.prototype.Ob;X.prototype.setOpacity=X.prototype.vc;X.prototype.getSource=X.prototype.W;
-X.prototype.setSource=X.prototype.Sb;X.prototype.on=X.prototype.V;E("ol.layer.Vector",Y,OPENLAYERS);Y.prototype.getVisible=Y.prototype.Va;Y.prototype.setVisible=Y.prototype.wc;Y.prototype.getSource=Y.prototype.W;Y.prototype.setStyle=Y.prototype.s;Y.prototype.getZIndex=Y.prototype.Pb;Y.prototype.setZIndex=Y.prototype.xc;Y.prototype.getOpacity=Y.prototype.Ob;Y.prototype.setOpacity=Y.prototype.vc;Y.prototype.getSource=Y.prototype.W;Y.prototype.setSource=Y.prototype.Sb;Y.prototype.on=Y.prototype.V;
-E("ol.source.OSM",qm,OPENLAYERS);qm.prototype.refresh=qm.prototype.ra;E("ol.source.MapQuest",sm,OPENLAYERS);sm.prototype.refresh=sm.prototype.ra;E("ol.source.XYZ",pm,OPENLAYERS);pm.prototype.refresh=pm.prototype.ra;pm.prototype.setUrl=pm.prototype.s;pm.prototype.refresh=pm.prototype.ra;E("ol.Map",Z,OPENLAYERS);Z.prototype.on=Z.prototype.V;Z.prototype.getTarget=Z.prototype.Nb;Z.prototype.getTargetElement=Z.prototype.Fa;Z.prototype.getView=Z.prototype.O;Z.prototype.addOverlay=Z.prototype.cd;
-Z.prototype.addLayer=Z.prototype.bd;Z.prototype.removeLayer=Z.prototype.pe;Z.prototype.getEventPixel=Z.prototype.nc;Z.prototype.hasFeatureAtPixel=Z.prototype.Hd;Z.prototype.getSize=Z.prototype.Ha;Z.prototype.updateSize=Z.prototype.nb;Z.prototype.forEachFeatureAtPixel=Z.prototype.hd;Z.prototype.addInteraction=Z.prototype.ad;Z.prototype.removeInteraction=Z.prototype.oe;Z.prototype.beforeRender=Z.prototype.ea;Z.prototype.addControl=Z.prototype.$c;Z.prototype.once=Z.prototype.Rc;
-Z.prototype.renderSync=Z.prototype.se;E("ol.source.Vector",Uj,OPENLAYERS);Uj.prototype.getFeatures=Uj.prototype.ee;Uj.prototype.getExtent=Uj.prototype.C;Uj.prototype.refresh=Uj.prototype.ra;Uj.prototype.addFeatures=Uj.prototype.vb;Uj.prototype.addFeature=Uj.prototype.ub;Uj.prototype.clear=Uj.prototype.clear;Uj.prototype.forEachFeature=Uj.prototype.gd;Uj.prototype.refresh=Uj.prototype.ra;E("ol.source.TileArcGISRest",vm,OPENLAYERS);vm.prototype.refresh=vm.prototype.ra;E("ol.Overlay",rl,OPENLAYERS);
-rl.prototype.setPosition=rl.prototype.uc;E("ol.Feature",Gj,OPENLAYERS);Gj.prototype.getProperties=Gj.prototype.ua;Gj.prototype.setProperties=Gj.prototype.l;Gj.prototype.getGeometry=Gj.prototype.M;E("ol.geom.Point",Lc,OPENLAYERS);Lc.prototype.transform=Lc.prototype.o;Lc.prototype.getCoordinates=Lc.prototype.oa;Lc.prototype.getExtent=Lc.prototype.C;E("ol.geom.Polygon",Sc,OPENLAYERS);Sc.prototype.getCoordinates=Sc.prototype.oa;Sc.prototype.getExtent=Sc.prototype.C;Sc.prototype.transform=Sc.prototype.o;
-E("ol.geom.LineString",Al,OPENLAYERS);Al.prototype.getCoordinates=Al.prototype.oa;Al.prototype.getExtent=Al.prototype.C;Al.prototype.transform=Al.prototype.o;E("ol.proj.Projection",hc,OPENLAYERS);hc.prototype.getCode=hc.prototype.l;E("ol.interaction.Draw",Tl,OPENLAYERS);Tl.prototype.on=Tl.prototype.V;E("ol.animation.pan",dd,OPENLAYERS);E("ol.control.FullScreen",lf,OPENLAYERS);
-  return OPENLAYERS.ol;
-}));
-
diff --git a/_lib/ol/ol.js b/_lib/ol/ol.js
deleted file mode 100644
index 5230dce847e9ba600116dcd8b1f50e6654bbd52d..0000000000000000000000000000000000000000
--- a/_lib/ol/ol.js
+++ /dev/null
@@ -1,9 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-var ol = require('./ol-build');
-
-exports.default = ol;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/olHelpers/SortedFeatures.js b/_lib/olHelpers/SortedFeatures.js
deleted file mode 100644
index 0aee16c833d3bee1a64462d5b9f3db2cc1cce80c..0000000000000000000000000000000000000000
--- a/_lib/olHelpers/SortedFeatures.js
+++ /dev/null
@@ -1,138 +0,0 @@
-'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 ? "symbol" : typeof 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; }; }(); /**
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Created by gavorhes on 12/23/2015.
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      */
-
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-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"); } }
-
-var nm = (0, _provide2.default)('olHelpers');
-
-/**
- * take an array of features and sort by a given property name
- */
-
-var SortedFeatures = function () {
-
-    /**
-     *
-     * @param {Array<ol.Feature>} features array of ol features
-     * @param {string} propertyName - the property name to use for lookup
-     */
-
-    function SortedFeatures(features, propertyName) {
-        var _this2 = this;
-
-        _classCallCheck(this, SortedFeatures);
-
-        this.sortedFeatures = features;
-        this.propertyName = propertyName;
-
-        if (this.sortedFeatures.length > 0) {
-            (function () {
-                _this2._propertyType = _typeof(_this2.sortedFeatures[0].getProperties()[_this2.propertyName]);
-
-                var _this = _this2;
-                _this2.sortedFeatures.sort(function (a, b) {
-                    if (_this._propertyType == 'number') {
-                        return a['getProperties']()[_this.propertyName] - b['getProperties']()[_this.propertyName];
-                    } else if (_this._propertyType == 'string') {
-                        return a['getProperties']()[_this.propertyName] > b['getProperties']()[_this.propertyName];
-                    }
-                });
-            })();
-        }
-    }
-
-    /**
-     * recursive search to find the value
-     * @param {number|string} propertyValue - the property value to search for
-     * @param {boolean} [exactMatch=false] if only an exact match should be returned
-     * @param {Array} [sortedFeatures=this.sortedFeatures] - the candidate features
-     * @returns {ol.Feature|undefined} the feature matching the lookup
-     */
-
-
-    _createClass(SortedFeatures, [{
-        key: 'getFeature',
-        value: function getFeature(propertyValue, exactMatch, sortedFeatures) {
-            if (typeof sortedFeatures == 'undefined') {
-                sortedFeatures = this.sortedFeatures;
-            }
-
-            if (typeof exactMatch !== 'boolean') {
-                exactMatch = false;
-            }
-
-            if (sortedFeatures.length == 0) {
-                return undefined;
-            }
-
-            if (sortedFeatures.length == 1) {
-                if (exactMatch) {
-                    if (sortedFeatures[0].getProperties()[this.propertyName] == propertyValue) {
-                        return sortedFeatures[0];
-                    } else {
-                        return undefined;
-                    }
-                } else {
-                    return sortedFeatures[0];
-                }
-            }
-
-            var lowProp = sortedFeatures[0].getProperties()[this.propertyName];
-            var highProp = sortedFeatures[sortedFeatures.length - 1].getProperties()[this.propertyName];
-
-            if (exactMatch) {
-                if (lowProp == propertyValue) {
-                    return sortedFeatures[0];
-                } else if (propertyValue < lowProp) {
-                    return undefined;
-                } else if (highProp == propertyValue) {
-                    return sortedFeatures[sortedFeatures.length - 1];
-                } else if (propertyValue > highProp) {
-                    return undefined;
-                }
-            } else {
-                if (propertyValue <= lowProp) {
-                    return sortedFeatures[0];
-                } else if (propertyValue >= highProp) {
-                    return sortedFeatures[sortedFeatures.length - 1];
-                }
-            }
-
-            var midIndex = Math.floor(sortedFeatures.length / 2);
-            var midFeature = sortedFeatures[midIndex];
-            var midProperty = midFeature.getProperties()[this.propertyName];
-
-            if (midProperty === propertyValue) {
-                return midFeature;
-            }
-
-            if (propertyValue < midProperty) {
-                return this.getFeature(propertyValue, exactMatch, sortedFeatures.slice(0, midIndex));
-            } else {
-                return this.getFeature(propertyValue, exactMatch, sortedFeatures.slice(midIndex));
-            }
-        }
-    }]);
-
-    return SortedFeatures;
-}();
-
-nm.SortedFeatures = SortedFeatures;
-exports.default = SortedFeatures;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/olHelpers/esriToOlStyle.js b/_lib/olHelpers/esriToOlStyle.js
deleted file mode 100644
index 57202b649c0866d9951d998a001babea32db39d6..0000000000000000000000000000000000000000
--- a/_lib/olHelpers/esriToOlStyle.js
+++ /dev/null
@@ -1,478 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-    value: true
-});
-exports.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
-exports.makeMapServiceLegend = makeMapServiceLegend;
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-var _ol = require('../ol/ol');
-
-var _ol2 = _interopRequireDefault(_ol);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-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; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /**
-                                                                                                                                                           * Created by gavorhes on 1/4/2016.
-                                                                                                                                                           */
-
-
-var nm = (0, _provide2.default)('olHelpers.esriToOlStyle');
-
-/**
- * This callback is displayed as part of the Requester class.
- * @callback styleFunc
- * @param {ol.Feature} feat - openlayers feature
- * @param {number} resolution - map resolution
- */
-
-/**
- *
- * @param {Array<number>} colorArray - input color array
- * @param {number} opacity - the opacity 0 to 1
- * @returns {string} rgba string
- * @private
- */
-function _colorArrayToRgba(colorArray, opacity) {
-    "use strict";
-
-    return 'rgba(' + colorArray[0] + ',' + colorArray[1] + ',' + colorArray[2] + ',' + opacity + ')';
-}
-
-/**
- * escape html charcters
- * @param {string} str - input string
- * @returns {string} escaped string
- */
-function htmlEscape(str) {
-    return String(str).replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/'/g, '&#39;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
-}
-
-nm.htmlEscape = htmlEscape;
-
-var CommonSymbol =
-
-/**
- * 
- * @param symbolObj
- * @param {number} opacity
- */
-function CommonSymbol(symbolObj, opacity) {
-    _classCallCheck(this, CommonSymbol);
-
-    this.symbolObj = symbolObj;
-    this.opacity = opacity;
-    this.olStyle = undefined;
-    this.legendHtml = '';
-};
-
-var PointSymbol = function (_CommonSymbol) {
-    _inherits(PointSymbol, _CommonSymbol);
-
-    function PointSymbol(symbolObj, opacity) {
-        _classCallCheck(this, PointSymbol);
-
-        var _this2 = _possibleConstructorReturn(this, Object.getPrototypeOf(PointSymbol).call(this, symbolObj, opacity));
-
-        switch (_this2.symbolObj['type']) {
-            case 'esriSMS':
-                var innerColor = _colorArrayToRgba(_this2.symbolObj.color, _this2.opacity);
-                var outerColor = _colorArrayToRgba(_this2.symbolObj.outline.color, _this2.opacity);
-                var outlineWidth = _this2.symbolObj.outline.width;
-                var radius = _this2.symbolObj.size;
-
-                _this2.olStyle = new _ol2.default.style.Style({
-                    image: new _ol2.default.style.Circle({
-                        radius: radius,
-                        fill: new _ol2.default.style.Fill({
-                            color: innerColor
-                        }),
-                        stroke: new _ol2.default.style.Stroke({ color: outerColor, width: outlineWidth })
-                    })
-                });
-                _this2.legendHtml = '<span class="legend-layer-icon" style="color: ' + innerColor + '">&#9679;</span>';
-                break;
-            case 'esriPMS':
-                _this2.olStyle = new _ol2.default.style.Style({
-                    image: new _ol2.default.style.Icon({ src: 'data:image/png;base64,' + _this2.symbolObj['imageData'] })
-                });
-                _this2.legendHtml = '<img class="legend-layer-icon" height="17" src="data:image/png;base64,' + _this2.symbolObj['imageData'] + '">';
-                break;
-            default:
-                console.log(_this2.symbolObj);
-                alert('Point symbol does not handle symbol type: ' + _this2.symbolObj['type']);
-        }
-        return _this2;
-    }
-
-    return PointSymbol;
-}(CommonSymbol);
-
-var LineSymbol = function (_CommonSymbol2) {
-    _inherits(LineSymbol, _CommonSymbol2);
-
-    function LineSymbol(symbolObj, opacity) {
-        _classCallCheck(this, LineSymbol);
-
-        var _this3 = _possibleConstructorReturn(this, Object.getPrototypeOf(LineSymbol).call(this, symbolObj, opacity));
-
-        switch (_this3.symbolObj['type']) {
-            case 'esriSLS':
-                var innerColor = _colorArrayToRgba(_this3.symbolObj.color, _this3.opacity);
-                var lineWidth = _this3.symbolObj.width;
-
-                _this3.olStyle = new _ol2.default.style.Style({
-                    stroke: new _ol2.default.style.Stroke({
-                        color: innerColor,
-                        //lineDash: [4],
-                        width: lineWidth
-                    })
-                });
-
-                _this3.legendHtml = '<span class="legend-layer-icon" ';
-                _this3.legendHtml += 'style="';
-                _this3.legendHtml += 'background-color: ' + innerColor + ';';
-                _this3.legendHtml += 'width: 40px;';
-                _this3.legendHtml += 'height: 4px;';
-                _this3.legendHtml += 'position: relative;';
-                _this3.legendHtml += 'display: inline-block;';
-                _this3.legendHtml += 'top: -1px;';
-                _this3.legendHtml += '"></span>';
-                break;
-            default:
-                console.log(_this3.symbolObj);
-                alert('Line symbol does not handle symbol type: ' + _this3.symbolObj['type']);
-        }
-        return _this3;
-    }
-
-    return LineSymbol;
-}(CommonSymbol);
-
-var PolygonSymbol = function (_CommonSymbol3) {
-    _inherits(PolygonSymbol, _CommonSymbol3);
-
-    function PolygonSymbol(symbolObj, opacity) {
-        _classCallCheck(this, PolygonSymbol);
-
-        var _this4 = _possibleConstructorReturn(this, Object.getPrototypeOf(PolygonSymbol).call(this, symbolObj, opacity));
-
-        switch (_this4.symbolObj['type']) {
-            case 'esriSFS':
-                var innerColor = _colorArrayToRgba(_this4.symbolObj.color, _this4.opacity);
-                var outerColor = _colorArrayToRgba(_this4.symbolObj.outline.color, _this4.opacity);
-                var outlineWidth = _this4.symbolObj.outline.width;
-
-                _this4.olStyle = new _ol2.default.style.Style({
-                    stroke: new _ol2.default.style.Stroke({
-                        color: outerColor,
-                        //lineDash: [4],
-                        width: outlineWidth
-                    }),
-                    fill: new _ol2.default.style.Fill({
-                        color: innerColor
-                    })
-                });
-
-                _this4.legendHtml = '<span class="legend-layer-icon" ';
-                _this4.legendHtml += 'style="';
-                _this4.legendHtml += 'background-color: ' + innerColor + ';';
-                _this4.legendHtml += 'border: solid ' + outerColor + ' 1px;';
-                _this4.legendHtml += 'width: 40px;';
-                _this4.legendHtml += 'height: 9px;';
-                _this4.legendHtml += 'position: relative;';
-                _this4.legendHtml += 'display: inline-block;';
-                _this4.legendHtml += 'top: 2px;';
-                _this4.legendHtml += '"></span>';
-                break;
-
-            default:
-                console.log(_this4.symbolObj);
-                alert('Polygon symbol does handle symbol type: ' + _this4.symbolObj['type']);
-        }
-        return _this4;
-    }
-
-    return PolygonSymbol;
-}(CommonSymbol);
-
-var SymbolGenerator = function SymbolGenerator(esriResponse) {
-    _classCallCheck(this, SymbolGenerator);
-
-    this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;
-    this.renderer = esriResponse['drawingInfo']['renderer'];
-    this.olStyle = undefined;
-    this.legendHtml = '';
-};
-
-var SingleSymbol = function (_SymbolGenerator) {
-    _inherits(SingleSymbol, _SymbolGenerator);
-
-    /**
-     *
-     * @param {object} esriResponse - layer info
-     * @param {Constructor|*} SymbolClass - the symbol class to use
-     */
-
-    function SingleSymbol(esriResponse, SymbolClass) {
-        _classCallCheck(this, SingleSymbol);
-
-        var _this5 = _possibleConstructorReturn(this, Object.getPrototypeOf(SingleSymbol).call(this, esriResponse));
-
-        _this5.symbol = _this5.renderer['symbol'];
-        var symbolObj = new SymbolClass(_this5.symbol, _this5.opacity);
-        _this5.olStyle = symbolObj.olStyle;
-        _this5.legendHtml = symbolObj.legendHtml;
-        return _this5;
-    }
-
-    return SingleSymbol;
-}(SymbolGenerator);
-
-var UniqueValueSymbol = function (_SymbolGenerator2) {
-    _inherits(UniqueValueSymbol, _SymbolGenerator2);
-
-    /**
-     *
-     * @param {object} esriResponse - layer info
-     * @param {Constructor|*} SymbolClass - the Symbol class definition
-     */
-
-    function UniqueValueSymbol(esriResponse, SymbolClass) {
-        _classCallCheck(this, UniqueValueSymbol);
-
-        var _this6 = _possibleConstructorReturn(this, Object.getPrototypeOf(UniqueValueSymbol).call(this, esriResponse));
-
-        _this6.uniqueValueInfos = _this6.renderer['uniqueValueInfos'];
-        _this6.propertyName = _this6.renderer['field1'];
-        _this6.defaultSymbol = _this6.renderer['defaultSymbol'];
-
-        if (_this6.defaultSymbol) {
-            var symbolObj = new SymbolClass(_this6.defaultSymbol, _this6.opacity);
-            _this6.defaultStyle = symbolObj.olStyle;
-            _this6.defaultLabelHtml = '<span class="legend-layer-subitem">' + htmlEscape(_this6.renderer['defaultLabel']) + '</span>' + symbolObj.legendHtml;
-        } else {
-            _this6.defaultStyle = undefined;
-            _this6.defaultLabelHtml = 'other';
-        }
-
-        _this6.valueArray = [];
-        _this6.labelArray = [];
-        _this6.legendArray = [];
-        _this6.propertyStyleLookup = {};
-
-        var _iteratorNormalCompletion = true;
-        var _didIteratorError = false;
-        var _iteratorError = undefined;
-
-        try {
-            for (var _iterator = _this6.uniqueValueInfos[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
-                var uniqueVal = _step.value;
-
-                _this6.labelArray.push(uniqueVal['label']);
-                _this6.valueArray.push(uniqueVal['value']);
-                var uniqueSym = new SymbolClass(uniqueVal.symbol, _this6.opacity);
-                _this6.legendArray.push('<span class="legend-layer-subitem">' + htmlEscape(uniqueVal['label']) + '</span>' + uniqueSym.legendHtml);
-                _this6.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;
-            }
-        } catch (err) {
-            _didIteratorError = true;
-            _iteratorError = err;
-        } finally {
-            try {
-                if (!_iteratorNormalCompletion && _iterator.return) {
-                    _iterator.return();
-                }
-            } finally {
-                if (_didIteratorError) {
-                    throw _iteratorError;
-                }
-            }
-        }
-
-        var _this = _this6;
-
-        _this6.olStyle = function (feature, resolution) {
-            var checkProperties = feature.getProperties();
-            var checkProperty = checkProperties[_this.propertyName];
-
-            var returnValue = void 0;
-            if (_this.propertyStyleLookup[checkProperty] !== undefined) {
-                returnValue = [_this.propertyStyleLookup[checkProperty]];
-            } else {
-                returnValue = [_this.defaultStyle];
-            }
-
-            return returnValue;
-        };
-
-        if (_this6.defaultLabelHtml !== null) {
-            _this6.legendArray.push(_this6.defaultLabelHtml);
-        }
-
-        _this6.legendHtml = '<ul>';
-        var _iteratorNormalCompletion2 = true;
-        var _didIteratorError2 = false;
-        var _iteratorError2 = undefined;
-
-        try {
-            for (var _iterator2 = _this6.legendArray[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
-                var h = _step2.value;
-
-                _this6.legendHtml += '<li>' + h + '</li>';
-            }
-        } catch (err) {
-            _didIteratorError2 = true;
-            _iteratorError2 = err;
-        } finally {
-            try {
-                if (!_iteratorNormalCompletion2 && _iterator2.return) {
-                    _iterator2.return();
-                }
-            } finally {
-                if (_didIteratorError2) {
-                    throw _iteratorError2;
-                }
-            }
-        }
-
-        _this6.legendHtml += '</ul>';
-        return _this6;
-    }
-
-    return UniqueValueSymbol;
-}(SymbolGenerator);
-
-/**
- * style and legend object
- * @typedef {object} styleAndLegend
- * @property {styleFunc} style - style function
- * @property {string} legend - legend content
- */
-
-/**
- *
- * @param {object} esriResponse - layer info
- * @returns {styleAndLegend} style and legend object
- */
-
-
-function makeFeatureServiceLegendAndSymbol(esriResponse) {
-    "use strict";
-
-    var renderer = esriResponse['drawingInfo']['renderer'];
-    var symbolLegendOut = null;
-
-    switch (renderer['type']) {
-        case 'simple':
-            switch (esriResponse['geometryType']) {
-                case 'esriGeometryPoint':
-                    symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);
-                    break;
-                case 'esriGeometryPolyline':
-                    symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol);
-                    break;
-                case 'esriGeometryPolygon':
-                    symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol);
-                    break;
-                default:
-                    console.log(esriResponse);
-                    alert(esriResponse['geometryType'] + ' not handled');
-            }
-            break;
-        case 'uniqueValue':
-            switch (esriResponse['geometryType']) {
-                case 'esriGeometryPoint':
-                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);
-                    break;
-                case 'esriGeometryPolyline':
-                    symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol);
-                    break;
-                case 'esriGeometryPolygon':
-                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol);
-                    break;
-                default:
-                    console.log(esriResponse);
-                    alert(esriResponse['geometryType'] + ' not handled');
-            }
-            break;
-        default:
-            alert('not handled renderer type: ' + renderer['type']);
-    }
-
-    if (symbolLegendOut == null) {
-        return { style: undefined, legend: '' };
-    } else {
-        return { style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml };
-    }
-}
-
-nm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
-
-/**
- *
- * @param {object} lyrObject - the layer as defined in the response
- * @param {boolean} [iconsOnly=false] use only icons
- * @returns {string} legend html
- */
-function mapServiceLegendItem(lyrObject, iconsOnly) {
-
-    iconsOnly = typeof iconsOnly == 'boolean' ? iconsOnly : false;
-    var layerName = lyrObject['layerName'];
-    var legendItems = lyrObject['legend'];
-    var legendHtml = '';
-
-    if (legendItems.length == 1) {
-        legendHtml = '<img class="legend-layer-icon" height="17" src="data:image/png;base64,' + legendItems[0]['imageData'] + '">';
-    } else {
-        legendHtml += '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span><ul>';
-        for (var i = 0; i < legendItems.length; i++) {
-            legendHtml += '<li>';
-            legendHtml += '<span class="legend-layer-subitem">' + htmlEscape(legendItems[i]['label']) + '</span>';
-            legendHtml += '<img class="legend-layer-icon" height="17" src="data:image/png;base64,' + legendItems[i]['imageData'] + '">';
-            legendHtml += '</li>';
-        }
-        legendHtml += '</ul>';
-    }
-
-    if (!iconsOnly) {
-        legendHtml = '<span class="legend-layer-subitem">' + layerName + '</span>' + legendHtml;
-    }
-
-    return legendHtml;
-}
-
-/**
- * make map service legent
- * @param {object} esriResponse - layer info
- * @returns {string} legend content
- */
-function makeMapServiceLegend(esriResponse) {
-    "use strict";
-
-    var newLegendHtml = '';
-
-    var layers = esriResponse['layers'];
-
-    if (layers.length == 1) {
-        newLegendHtml += mapServiceLegendItem(layers[0], true);
-    } else {
-        newLegendHtml += '<ul>';
-        for (var i = 0; i < layers.length; i++) {
-            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';
-        }
-        newLegendHtml += '</ul>';
-    }
-
-    return newLegendHtml;
-}
-
-nm.makeMapServiceLegend = makeMapServiceLegend;
\ No newline at end of file
diff --git a/_lib/olHelpers/extentUtil.js b/_lib/olHelpers/extentUtil.js
deleted file mode 100644
index 44f21b0d11029626771020bd1a97666fa013e6a5..0000000000000000000000000000000000000000
--- a/_lib/olHelpers/extentUtil.js
+++ /dev/null
@@ -1,114 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-    value: true
-});
-exports.calculateExtent = calculateExtent;
-exports.fitToMap = fitToMap;
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var nm = (0, _provide2.default)('util');
-
-/**
- *
- * @param {Array<LayerBaseVector>|Array<ol.layer.Vector>|LayerBaseVector|ol.layer.Vector|*} layers - array of layers or single
- * @returns {ol.Extent|Array<number>|*} - collective extent
- */
-/**
- * Created by gavorhes on 7/18/2016.
- */
-function calculateExtent(layers) {
-    "use strict";
-
-    if (layers.constructor.name != 'Array') {
-        layers = [layers];
-    }
-
-    var hasExtent = false;
-
-    var minX = 10E100;
-    var minY = 10E100;
-    var maxX = -10E100;
-    var maxY = -10E100;
-
-    var _iteratorNormalCompletion = true;
-    var _didIteratorError = false;
-    var _iteratorError = undefined;
-
-    try {
-        for (var _iterator = layers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
-            var lyr = _step.value;
-
-
-            /**
-             * 
-             * @type {ol.layer.Vector}
-             */
-            var olLayer = lyr['olLayer'] || lyr;
-
-            if (olLayer.getSource().getFeatures().length > 0) {
-                hasExtent = true;
-                var ext = olLayer.getSource().getExtent();
-                minX = ext[0] < minX ? ext[0] : minX;
-                minY = ext[1] < minY ? ext[1] : minY;
-                maxX = ext[2] > maxX ? ext[2] : maxX;
-                maxY = ext[3] > maxY ? ext[3] : maxY;
-            }
-        }
-    } catch (err) {
-        _didIteratorError = true;
-        _iteratorError = err;
-    } finally {
-        try {
-            if (!_iteratorNormalCompletion && _iterator.return) {
-                _iterator.return();
-            }
-        } finally {
-            if (_didIteratorError) {
-                throw _iteratorError;
-            }
-        }
-    }
-
-    if (hasExtent) {
-        return [minX, minY, maxX, maxY];
-    } else {
-        return undefined;
-    }
-}
-
-nm.calculateExtent = calculateExtent;
-
-/**
- * given one or an array of layers, fit to the map
- * @param {Array<LayerBaseVector>|Array<ol.layer.Vector>|LayerBaseVector|ol.layer.Vector} layers - array of layers or single
- * @param {ol.Map} mp - the map to fit
- * @param {number|undefined} [zoomOut=undefined] - levels to zoom out after fit
- */
-function fitToMap(layers, mp, zoomOut) {
-    "use strict";
-
-    /**
-     * 
-     * @type {ol.Extent|undefined}
-     */
-
-    var ext = calculateExtent(layers);
-
-    if (typeof ext == 'undefined') {
-        return;
-    }
-
-    mp.getView().fit(ext, mp.getSize());
-
-    if (typeof zoomOut == 'number') {
-        mp.getView().setZoom(mp.getView().getZoom() - zoomOut);
-    }
-}
-
-nm.calculateExtent = calculateExtent;
\ No newline at end of file
diff --git a/_lib/olHelpers/layerSwipe.js b/_lib/olHelpers/layerSwipe.js
deleted file mode 100644
index cc4e0e25afde3e31072c57e330c80badfafc70a2..0000000000000000000000000000000000000000
--- a/_lib/olHelpers/layerSwipe.js
+++ /dev/null
@@ -1,179 +0,0 @@
-'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; }; }(); /**
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Created by gavorhes on 6/1/2016.
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      */
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-var _jquery = require('../jquery/jquery');
-
-var _jquery2 = _interopRequireDefault(_jquery);
-
-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"); } }
-
-var nm = (0, _provide2.default)('collections.layerSwipe');
-
-var LayerSwipe = function () {
-
-    /**
-     *
-     * @param {ol.Map} map - the map
-     * @param {string} [sliderContent=''] - additional html to be added inside the slider div
-     */
-
-    function LayerSwipe(map, sliderContent) {
-        var _this = this;
-
-        _classCallCheck(this, LayerSwipe);
-
-        sliderContent = sliderContent || '';
-        /**
-         *
-         * @type {Array<LayerBase>}
-         */
-        this.leftLayers = [];
-
-        /**
-         *
-         * @type {Array<LayerBase>}
-         */
-        this.rightLayers = [];
-
-        this._percentRight = 50;
-        this.offset = null;
-
-        this._map = map;
-        this.$mapElement = (0, _jquery2.default)(map.getTargetElement());
-        this.$mapElement.append('<div class="layer-swiper">' + sliderContent + '</div>');
-
-        this.$swiper = this.$mapElement.find('.layer-swiper');
-        this.percentRight = this.percentRight;
-
-        this.dragging = false;
-
-        this.$mapElement.mouseleave(function () {
-            _this.dragging = false;
-        });
-
-        this.$swiper.bind('mousewheel DOMMouseScroll', function (evt) {
-            evt.preventDefault();
-        });
-
-        this.$swiper.mousedown(function (evt) {
-            _this.dragging = true;
-            _this.offset = evt.offsetX;
-        });
-
-        (0, _jquery2.default)(window).mouseup(function () {
-            _this.dragging = false;
-        });
-
-        this.$mapElement.mousemove(function (evt) {
-            if (_this.dragging) {
-                var mapLeft = _this.$mapElement.position().left;
-                var mapWidth = _this.$mapElement.width();
-
-                _this.percentRight = 100 * (evt.pageX - _this.offset - mapLeft) / mapWidth;
-            }
-        });
-    }
-
-    /**
-     *
-     * @param {LayerBase|*} lyr - layer to be added to left side
-     */
-
-
-    _createClass(LayerSwipe, [{
-        key: 'addLeftLayer',
-        value: function addLeftLayer(lyr) {
-            var _this2 = this;
-
-            if (this.leftLayers.indexOf(lyr) != -1) {
-                return;
-            }
-
-            lyr.olLayer.on('precompose', function (event) {
-                var ctx = event.context;
-                var width = ctx.canvas.width * (_this2.percentRight / 100);
-
-                ctx.save();
-                ctx.beginPath();
-                ctx.rect(0, 0, width, ctx.canvas.height);
-                ctx.clip();
-            });
-
-            lyr.olLayer.on('postcompose', function (event) {
-                var ctx = event.context;
-                ctx.restore();
-            });
-
-            this.leftLayers.push(lyr);
-        }
-
-        /**
-         *
-         * @param {LayerBase|*} lyr - layer to be added to right side
-         */
-
-    }, {
-        key: 'addRightLayer',
-        value: function addRightLayer(lyr) {
-            var _this3 = this;
-
-            if (this.rightLayers.indexOf(lyr) != -1) {
-                return;
-            }
-
-            lyr.olLayer.on('precompose', function (event) {
-                var ctx = event.context;
-                var width = ctx.canvas.width * (_this3.percentRight / 100);
-
-                ctx.save();
-                ctx.beginPath();
-                ctx.rect(width, 0, ctx.canvas.width - width, ctx.canvas.height);
-                ctx.clip();
-            });
-
-            lyr.olLayer.on('postcompose', function (event) {
-                var ctx = event.context;
-                ctx.restore();
-            });
-
-            this.rightLayers.push(lyr);
-        }
-    }, {
-        key: 'percentRight',
-        get: function get() {
-            return this._percentRight;
-        },
-        set: function set(pcnt) {
-            var maxed = this.$swiper.position().left + this.$swiper.width() > this.$mapElement.width();
-
-            if (pcnt < 0) {
-                return;
-            } else if (maxed && pcnt > this.percentRight) {
-                return;
-            }
-
-            this._percentRight = pcnt;
-            this.$swiper.css('left', this._percentRight.toFixed(2) + '%');
-            this._map.render();
-        }
-    }]);
-
-    return LayerSwipe;
-}();
-
-nm.LayerSwipe = LayerSwipe;
-exports.default = LayerSwipe;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/olHelpers/mapInteractionBase.js b/_lib/olHelpers/mapInteractionBase.js
deleted file mode 100644
index 7513a45c87192dc479e8cdaddbb52fbe541285f1..0000000000000000000000000000000000000000
--- a/_lib/olHelpers/mapInteractionBase.js
+++ /dev/null
@@ -1,115 +0,0 @@
-'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; }; }(); /**
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Created by gavorhes on 12/8/2015.
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      */
-
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-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"); } }
-
-var nm = (0, _provide2.default)('olHelpers');
-
-/**
- * base interaction
- */
-
-var MapInteractionBase = function () {
-
-    /**
-     * map interaction base
-     * @param {string} subtype - the interaction subtype
-     */
-
-    function MapInteractionBase(subtype) {
-        _classCallCheck(this, MapInteractionBase);
-
-        this._map = undefined;
-        this._initialized = false;
-        this._subtype = subtype;
-    }
-
-    /**
-     * base initializer, returns true for already initialized
-     * @param {ol.Map} theMap - the ol Map
-     * @returns {boolean} true for already initialized
-     */
-
-
-    _createClass(MapInteractionBase, [{
-        key: 'init',
-        value: function init(theMap) {
-            if (!this._initialized) {
-                this._map = theMap;
-                this._initialized = true;
-
-                return false;
-            }
-
-            return true;
-        }
-
-        /**
-         * get reference to the ol map object
-         * @returns {ol.Map} the map object
-         */
-
-    }, {
-        key: '_checkInit',
-
-
-        /**
-         * Check the initialization status and throw exception if not valid yet
-         * @protected
-         */
-        value: function _checkInit() {
-            if (!this.initialized) {
-                var msg = this._subtype + ' object not initialized';
-                alert(msg);
-                console.log(msg);
-                throw msg;
-            }
-        }
-
-        /**
-         * Check the initialization status and throw exception if not valid yet
-         */
-
-    }, {
-        key: 'checkInit',
-        value: function checkInit() {
-            this._checkInit();
-        }
-    }, {
-        key: 'map',
-        get: function get() {
-            return this._map;
-        }
-
-        /**
-         * get if is initialized
-         * @returns {boolean} is initialized
-         */
-
-    }, {
-        key: 'initialized',
-        get: function get() {
-            return this._initialized;
-        }
-    }]);
-
-    return MapInteractionBase;
-}();
-
-nm.MapInteractionBase = MapInteractionBase;
-exports.default = MapInteractionBase;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/olHelpers/mapMove.js b/_lib/olHelpers/mapMove.js
deleted file mode 100644
index dfd819f2af5e0f05a014403463e13d823513a9c0..0000000000000000000000000000000000000000
--- a/_lib/olHelpers/mapMove.js
+++ /dev/null
@@ -1,21 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _mapMoveCls = require('./mapMoveCls');
-
-var _mapMoveCls2 = _interopRequireDefault(_mapMoveCls);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-/**
- * The single map move object catch is that it is common to multimap pages
- * @type {MapMoveCls}
- */
-exports.default = new _mapMoveCls2.default(); /**
-                                               * Created by gavorhes on 11/3/2015.
-                                               */
-
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/olHelpers/mapMoveCls.js b/_lib/olHelpers/mapMoveCls.js
deleted file mode 100644
index 0d299b3074105b234949eee97d00537aa6dfbb70..0000000000000000000000000000000000000000
--- a/_lib/olHelpers/mapMoveCls.js
+++ /dev/null
@@ -1,343 +0,0 @@
-'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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
-
-var _jquery = require('../jquery/jquery');
-
-var _jquery2 = _interopRequireDefault(_jquery);
-
-var _mapInteractionBase = require('./mapInteractionBase');
-
-var _mapInteractionBase2 = _interopRequireDefault(_mapInteractionBase);
-
-var _checkDefined = require('../util/checkDefined');
-
-var checkDefined = _interopRequireWildcard(_checkDefined);
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-var _makeGuid = require('../util/makeGuid');
-
-var _makeGuid2 = _interopRequireDefault(_makeGuid);
-
-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 _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; } /**
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Created by gavorhes on 11/3/2015.
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */
-
-var nm = (0, _provide2.default)('olHelpers');
-
-/**
- * assists with map move interactions, trigger callback functions
- * @augments MapInteractionBase
- */
-
-var MapMoveCls = function (_MapInteractionBase) {
-    _inherits(MapMoveCls, _MapInteractionBase);
-
-    /**
-     * constructor called implicitly
-     */
-
-    function MapMoveCls() {
-        _classCallCheck(this, MapMoveCls);
-
-        var _this2 = _possibleConstructorReturn(this, Object.getPrototypeOf(MapMoveCls).call(this, 'map move'));
-
-        _this2._arrLyrRequest = [];
-        _this2._arrLyrTimeout = [];
-        _this2._arrLayer = [];
-        _this2._lookupLayer = {};
-
-        _this2._mapMoveCallbacks = [];
-        _this2._mapMoveCallbacksLookup = {};
-        _this2._mapMoveCallbackDelays = [];
-        _this2._mapMoveCallbackContext = [];
-        _this2._mapMoveCallbackTimeout = [];
-
-        _this2._mapExtent = undefined;
-        _this2._zoomLevel = undefined;
-        return _this2;
-    }
-
-    /**
-     * initialize the map move object
-     * @param {ol.Map} theMap - the ol map
-     */
-
-
-    _createClass(MapMoveCls, [{
-        key: 'init',
-        value: function init(theMap) {
-            if (_get(Object.getPrototypeOf(MapMoveCls.prototype), 'init', this).call(this, theMap)) {
-                return;
-            }
-
-            var _this = this;
-
-            this.map.getView().on(['change:center', 'change:resolution'], function (e) {
-
-                _this._updateMapExtent();
-
-                // trigger the layer updates
-                for (var i = 0; i < _this._arrLayer.length; i++) {
-                    _this.triggerLyrLoad(_this._arrLayer[i], i, e.type);
-                }
-
-                // trigger the map callbacks
-                for (var _i = 0; _i < _this._mapMoveCallbacks.length; _i++) {
-                    _this.triggerMoveCallback(_i, e.type);
-                }
-            });
-        }
-    }, {
-        key: '_updateMapExtent',
-        value: function _updateMapExtent() {
-            var theView = this.map.getView();
-            this._zoomLevel = theView.getZoom();
-
-            var extentArray = theView.calculateExtent(this.map.getSize());
-
-            this._mapExtent = {
-                minX: extentArray[0],
-                minY: extentArray[1],
-                maxX: extentArray[2],
-                maxY: extentArray[3]
-            };
-        }
-
-        /**
-         * return the map extent
-         */
-
-    }, {
-        key: 'triggerLyrLoad',
-
-
-        /**
-         * Trigger the layer load
-         * @param {LayerBaseVector|*} lyr - the layer being acted on
-         * @param {number} [index=undefined] - index of the layer
-         * @param {string|*} [eventType=undefined] the event triggering the load, as 'change:center' or 'change:resolution'
-         */
-        value: function triggerLyrLoad(lyr, index, eventType) {
-            var _this3 = this;
-
-            if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {
-                throw 'need to define lyr or index';
-            } else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {
-                index = this._arrLayer.indexOf(lyr);
-            } else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {
-                lyr = this._arrLayer[index];
-            }
-
-            // clear the timeout
-            if (this._arrLyrTimeout[index] != null) {
-                clearTimeout(this._arrLyrTimeout[index]);
-                this._arrLyrTimeout[index] = null;
-            }
-
-            // abort if necessary and clear the request
-            if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {
-                this._arrLyrRequest[index].abort();
-                this._arrLyrRequest[index] = null;
-            }
-
-            // dummy callback used if before load returns false
-            var callbackFunc = function callbackFunc() {};
-
-            if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {
-                (function () {
-                    lyr.mapMoveMakeGetParams(_this3._mapExtent, _this3._zoomLevel);
-
-                    var _this = _this3;
-
-                    callbackFunc = function callbackFunc() {
-                        function innerFunction(theLayer, theIndex) {
-                            var _innerThis = this;
-                            this._arrLyrRequest[theIndex] = _jquery2.default.get(theLayer.url, theLayer.mapMoveParams, function (d) {
-                                /**
-                                 * @type {LayerBaseVector}
-                                 */
-                                theLayer.mapMoveCallback(d);
-                                theLayer.loadCallback();
-                            }, 'json').fail(function (jqXHR) {
-                                if (jqXHR.statusText != 'abort') {
-                                    console.log('failed');
-                                    console.log(theLayer.url);
-                                    console.log(theLayer.mapMoveParams);
-                                }
-                            }).always(function () {
-                                _innerThis._arrLyrTimeout[theIndex] = null;
-                                _innerThis._arrLyrRequest[theIndex] = null;
-                            });
-                        }
-                        innerFunction.call(_this, lyr, index);
-                    };
-                })();
-            } else {
-                lyr.clear();
-            }
-            this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);
-        }
-
-        /**
-         * trigger the map move call back at the given index
-         * @param {number} ind - the index of the layer
-         * @param {string|*} [eventType=undefined] the event triggering the load as 'change:center' or 'change:resolution'
-         * @param {string} [functionId=undefined] the function id used to reference the added callback function
-         */
-
-    }, {
-        key: 'triggerMoveCallback',
-        value: function triggerMoveCallback(ind, eventType, functionId) {
-
-            if (typeof ind == 'undefined' && typeof functionId == 'undefined') {
-                throw 'either the function index or the id must be defined';
-            }
-
-            if (typeof ind !== 'number') {
-                ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);
-            }
-
-            if (ind < 0) {
-                console.log('function not found');
-
-                return;
-            }
-
-            // clear the timeout
-            if (this._mapMoveCallbackTimeout[ind] != null) {
-                clearTimeout(this._mapMoveCallbackTimeout[ind]);
-                this._mapMoveCallbackTimeout[ind] = null;
-            }
-
-            var ctx = this._mapMoveCallbackContext[ind];
-            var theFunc = this._mapMoveCallbacks[ind];
-
-            var _this = this;
-
-            var f = function f() {
-                if (ctx !== null) {
-                    theFunc.call(ctx, _this._mapExtent, _this._zoomLevel, eventType);
-                } else {
-                    theFunc(_this._mapExtent, _this._zoomLevel, eventType);
-                }
-            };
-
-            this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);
-        }
-
-        /**
-         * Add a layer to the interaction
-         * @param {LayerBaseVector|*} lyr - layer to add
-         * @param {boolean} [triggerOnAdd=true] - if the layer should be loaded on add
-         */
-
-    }, {
-        key: 'addVectorLayer',
-        value: function addVectorLayer(lyr, triggerOnAdd) {
-            if (this._arrLayer.indexOf(lyr) > -1) {
-                console.log('already added ' + lyr.name + ' to map move');
-
-                return;
-            }
-            this._checkInit();
-
-            this._arrLyrRequest.push(null);
-            this._arrLyrTimeout.push(null);
-            this._arrLayer.push(lyr);
-            this._lookupLayer[lyr.id] = lyr;
-
-            triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
-
-            if (triggerOnAdd) {
-                if (this._mapExtent === undefined) {
-                    this._updateMapExtent();
-                }
-                this.triggerLyrLoad(lyr, this._arrLayer.length - 1);
-            }
-        }
-
-        /**
-         * This callback is displayed as a global member.
-         * @callback mapMoveCallbackFunction
-         * @param {object} extent - extent object
-         * @param {number} extent.minX - minX
-         * @param {number} extent.minY - minY
-         * @param {number} extent.maxX - maxX
-         * @param {number} extent.maxY - maxY
-         * @param {number} zoomLevel - zoom level
-         * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
-         */
-
-        /**
-         * add a callback to the map move event
-         * @param {mapMoveCallbackFunction} func - callback function
-         * @param {*} context - the context to use for this function
-         * @param {number} [delay=50] the delay before call load
-         * @param {boolean} [triggerOnAdd=true] if the layer should be loaded on add to mapMove
-         * @param {string} [functionId=undefined] optional id to reference the function later for outside triggering
-         */
-
-    }, {
-        key: 'addCallback',
-        value: function addCallback(func, context, delay, triggerOnAdd, functionId) {
-
-            if (this._mapMoveCallbacks.indexOf(func) > -1) {
-                console.log('this function already added to map move');
-
-                return;
-            }
-            this._checkInit();
-            if (!functionId) {
-                functionId = (0, _makeGuid2.default)();
-            }
-
-            this._mapMoveCallbacks.push(func);
-            this._mapMoveCallbacksLookup[functionId] = func;
-            this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);
-            this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);
-            this._mapMoveCallbackTimeout.push(null);
-
-            triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
-
-            if (triggerOnAdd) {
-                if (this._mapExtent === undefined) {
-                    this._updateMapExtent();
-                }
-                this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);
-            }
-        }
-    }, {
-        key: 'mapExtent',
-        get: function get() {
-            if (!this._mapExtent) {
-                this._updateMapExtent();
-            }
-
-            return this._mapExtent;
-        }
-    }]);
-
-    return MapMoveCls;
-}(_mapInteractionBase2.default);
-
-nm.MapMoveCls = MapMoveCls;
-exports.default = MapMoveCls;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/olHelpers/mapPopup.js b/_lib/olHelpers/mapPopup.js
deleted file mode 100644
index 54d957ffd002cac260fe37a5b52208fd9d3bb047..0000000000000000000000000000000000000000
--- a/_lib/olHelpers/mapPopup.js
+++ /dev/null
@@ -1,21 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _mapPopupCls = require('./mapPopupCls');
-
-var _mapPopupCls2 = _interopRequireDefault(_mapPopupCls);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-/**
- * The single popup object catch is that it is common to multimap pages
- * @type {MapPopupCls}
- */
-exports.default = new _mapPopupCls2.default(); /**
-                                                * Created by gavorhes on 11/3/2015.
-                                                */
-
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/olHelpers/mapPopupCls.js b/_lib/olHelpers/mapPopupCls.js
deleted file mode 100644
index b87a328ee5332553d39595005724d5cdddef88dc..0000000000000000000000000000000000000000
--- a/_lib/olHelpers/mapPopupCls.js
+++ /dev/null
@@ -1,649 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-    value: true
-});
-
-var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
-
-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; }; }(); /**
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      * Created by gavorhes on 11/3/2015.
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      */
-
-var _jquery = require('../jquery/jquery');
-
-var _jquery2 = _interopRequireDefault(_jquery);
-
-var _mapInteractionBase = require('./mapInteractionBase');
-
-var _mapInteractionBase2 = _interopRequireDefault(_mapInteractionBase);
-
-var _propertiesZoomStyle = require('../olHelpers/propertiesZoomStyle');
-
-var _propertiesZoomStyle2 = _interopRequireDefault(_propertiesZoomStyle);
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-var _ol = require('../ol/ol');
-
-var _ol2 = _interopRequireDefault(_ol);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-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; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-var nm = (0, _provide2.default)('olHelpers');
-
-var _FeatureLayerProperties = function () {
-
-    /**
-     *
-     * @param {ol.Feature} feature the feature
-     * @param {LayerBaseVector|*} layer - the layer in the popup
-     * @param {number} layerIndex - index of the layer
-     * @param {ol.layer.Vector} selectionLayer - the ol selection layer
-     * @param {string} [esriLayerName=undefined] - esri layer name
-     */
-
-    function _FeatureLayerProperties(feature, layer, layerIndex, selectionLayer, esriLayerName) {
-        _classCallCheck(this, _FeatureLayerProperties);
-
-        this.feature = feature;
-        this.layer = layer;
-        this.layerIndex = layerIndex;
-        this.selectionLayer = selectionLayer;
-        this.popupContent = '';
-        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;
-    }
-
-    _createClass(_FeatureLayerProperties, [{
-        key: 'layerName',
-        get: function get() {
-            if (typeof this.esriLayerName == 'string') {
-                return this.esriLayerName;
-            } else {
-                return this.layer.name;
-            }
-        }
-    }]);
-
-    return _FeatureLayerProperties;
-}();
-
-/**
- * map popup class
- * @augments MapInteractionBase
- */
-
-
-var MapPopupCls = function (_MapInteractionBase) {
-    _inherits(MapPopupCls, _MapInteractionBase);
-
-    /**
-     * Definition for openlayers style function
-     * @callback olStyleFunction
-     * &param feature the openlayers vector feature
-     * $param
-     */
-
-    /**
-     * Definition for popup changed callback functions
-     * @callback popupChangedFunction
-     * @param $popContent jquery reference to the popup content
-     */
-
-    /**
-     * map popup constructor
-     */
-
-    function MapPopupCls() {
-        _classCallCheck(this, MapPopupCls);
-
-        var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(MapPopupCls).call(this, 'map popup'));
-
-        _this._arrPopupLayerIds = [];
-        _this._arrPopupLayerNames = [];
-        /**
-         *
-         * @type {Array<LayerBaseVector>}
-         * @private
-         */
-        _this._arrPopupLayers = [];
-        _this._arrPopupOlLayers = [];
-        _this._arrPopupContentFunction = [];
-        _this._$popupContainer = undefined;
-        _this._$popupContent = undefined;
-        _this._$popupCloser = undefined;
-        _this._popupOverlay = undefined;
-        _this._selectionLayers = [];
-        _this._selectionLayerLookup = {};
-        _this._mapClickFunctions = [];
-
-        //let a = function($jqueryContent){console.log($jqueryContent)};
-        //this._popupChangedLookup = {'a': a};
-        _this._popupChangedFunctions = [];
-        /**
-         *
-         * @type {Array<LayerEsriMapServer>}
-         * @private
-         */
-        _this._esriMapServiceLayers = [];
-
-        _this._popupOpen = false;
-        _this._popupCoordinate = null;
-
-        /**
-         *
-         * @type {Array.<_FeatureLayerProperties>}
-         */
-        _this._passThroughLayerFeatureArray = [];
-
-        _this._currentPopupIndex = -1;
-        _this._popupContentLength = 0;
-
-        return _this;
-    }
-
-    /**
-     * map popup initialization
-     * @param {ol.Map} theMap - the ol map
-     */
-
-
-    _createClass(MapPopupCls, [{
-        key: 'init',
-        value: function init(theMap) {
-            var _this2 = this;
-
-            if (_get(Object.getPrototypeOf(MapPopupCls.prototype), 'init', this).call(this, theMap)) {
-                return;
-            }
-            var $map = (0, _jquery2.default)('#' + this.map.getTarget());
-
-            $map.append('<div class="ol-popup">' + '<span class="ol-popup-closer">X</span>' + '<div class="popup-content"></div>' + '</div>');
-
-            this._$popupContainer = $map.find('.ol-popup');
-            this._$popupContent = $map.find('.popup-content');
-            this._$popupCloser = $map.find('.ol-popup-closer');
-
-            this._popupOverlay = new _ol2.default.Overlay({
-                element: this._$popupContainer[0],
-                autoPan: true,
-                autoPanAnimation: {
-                    duration: 250
-                }
-            });
-
-            this._map.addOverlay(this._popupOverlay);
-
-            this._$popupCloser.click(function (evt) {
-                _this2.closePopup();
-            });
-
-            // display popup on click
-            this._map.on('singleclick', function (evt) {
-                _this2.closePopup();
-                _this2._popupCoordinate = evt.coordinate;
-
-                if (_this2._esriMapServiceLayers.length > 0) {
-                    var queryParams = {
-                        geometry: evt.coordinate.join(','),
-                        geometryType: 'esriGeometryPoint',
-                        layers: 'all',
-                        sr: _this2._map.getView().getProjection().getCode().split(':')[1],
-                        mapExtent: _this2._map.getView().calculateExtent(_this2._map.getSize()).join(','),
-                        imageDisplay: _this2._map.getSize().join(',') + ',96',
-                        returnGeometry: true,
-                        tolerance: 15,
-                        f: 'pjson'
-                    };
-
-                    var _iteratorNormalCompletion = true;
-                    var _didIteratorError = false;
-                    var _iteratorError = undefined;
-
-                    try {
-                        for (var _iterator = _this2._esriMapServiceLayers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
-                            var l = _step.value;
-
-                            l.getPopupInfo(queryParams, _this2._selectionLayerLookup[l.id]);
-                        }
-                    } catch (err) {
-                        _didIteratorError = true;
-                        _iteratorError = err;
-                    } finally {
-                        try {
-                            if (!_iteratorNormalCompletion && _iterator.return) {
-                                _iterator.return();
-                            }
-                        } finally {
-                            if (_didIteratorError) {
-                                throw _iteratorError;
-                            }
-                        }
-                    }
-                }
-
-                var layerFeatureObjectArray = _this2._featuresAtPixel(evt.pixel);
-
-                /**
-                 *
-                 * @type {Array.<_FeatureLayerProperties>}
-                 */
-                _this2._passThroughLayerFeatureArray = [];
-                _this2._currentPopupIndex = -1;
-
-                for (var i = 0; i < layerFeatureObjectArray.length; i++) {
-                    var featObj = layerFeatureObjectArray[i];
-
-                    var props = featObj.feature.getProperties();
-
-                    var popupContentResponse = _this2._arrPopupContentFunction[featObj.layerIndex](props, _this2._$popupContent);
-
-                    //skip if return was false
-                    if (popupContentResponse === false) {
-                        //continue;
-                    } else if (typeof popupContentResponse == 'string') {
-                            featObj.popupContent = popupContentResponse;
-                            _this2._passThroughLayerFeatureArray.push(featObj);
-                        } else {
-                            featObj.selectionLayer.getSource().addFeature(featObj.feature);
-                        }
-                }
-
-                _this2._popupContentLength = _this2._passThroughLayerFeatureArray.length;
-
-                _this2._currentPopupIndex = -1;
-
-                var popupHtml = '<div class="ol-popup-nav">';
-                popupHtml += '<span class="previous-popup ol-popup-nav-arrow">&#9664;</span>';
-                popupHtml += '<span class="next-popup ol-popup-nav-arrow">&#9654;</span>';
-                popupHtml += '<span class="current-popup-item-number" style="font-weight: bold;"></span>';
-                popupHtml += '<span>&nbsp;of&nbsp;</span>';
-                popupHtml += '<span class="popup-content-length" style="font-weight: bold;">' + _this2._popupContentLength + '</span>';
-                popupHtml += '<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>';
-                popupHtml += '<span class="current-popup-layer-name"></span>';
-                popupHtml += '</div>';
-                popupHtml += '<div class="ol-popup-inner">';
-
-                popupHtml += '</div>';
-
-                _this2._$popupContent.html(popupHtml);
-
-                _this2._$popupContent.find('.previous-popup').click(function () {
-                    if (_this2._popupContentLength == 1) {
-                        return;
-                    }
-
-                    if (_this2._currentPopupIndex == 0) {
-                        _this2._currentPopupIndex = _this2._popupContentLength - 1;
-                    } else {
-                        _this2._currentPopupIndex--;
-                    }
-                    _this2._triggerFeatSelect();
-                });
-
-                var nextPopup = _this2._$popupContent.find('.next-popup');
-
-                nextPopup.click(function () {
-                    if (_this2._popupContentLength == 1 && _this2._currentPopupIndex > -1) {
-                        return;
-                    }
-
-                    if (_this2._currentPopupIndex == _this2._popupContentLength - 1) {
-                        _this2._currentPopupIndex = 0;
-                    } else {
-                        _this2._currentPopupIndex++;
-                    }
-                    _this2._triggerFeatSelect();
-                });
-
-                if (_this2._popupContentLength > 0) {
-                    nextPopup.trigger('click');
-                    _this2._popupOverlay.setPosition(_this2._popupCoordinate);
-                    _this2._$popupContent.scrollTop(0);
-                    _this2._popupOpen = true;
-                }
-            });
-
-            //change mouse cursor when over marker
-            this._map.on('pointermove', function (e) {
-                if (e.dragging) {
-                    return;
-                }
-                var pixel = _this2.map.getEventPixel(e.originalEvent);
-                var hit = _this2.map.hasFeatureAtPixel(pixel, function (lyrCandidate) {
-                    var _iteratorNormalCompletion2 = true;
-                    var _didIteratorError2 = false;
-                    var _iteratorError2 = undefined;
-
-                    try {
-                        for (var _iterator2 = _this2._arrPopupOlLayers[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
-                            var olLayer = _step2.value;
-
-                            if (lyrCandidate == olLayer) {
-                                return true;
-                            }
-                        }
-                    } catch (err) {
-                        _didIteratorError2 = true;
-                        _iteratorError2 = err;
-                    } finally {
-                        try {
-                            if (!_iteratorNormalCompletion2 && _iterator2.return) {
-                                _iterator2.return();
-                            }
-                        } finally {
-                            if (_didIteratorError2) {
-                                throw _iteratorError2;
-                            }
-                        }
-                    }
-
-                    return false;
-                });
-                _this2.map.getTargetElement().style.cursor = hit ? 'pointer' : '';
-            });
-        }
-
-        /**
-         * helper to select features
-         * @private
-         */
-
-    }, {
-        key: '_triggerFeatSelect',
-        value: function _triggerFeatSelect() {
-            var $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');
-            var $innerPopup = this._$popupContent.find('.ol-popup-inner');
-            var $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');
-            this.clearSelection();
-            var lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];
-            $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());
-            $layerNameSpan.html(lyrFeatObj.layerName);
-            $innerPopup.html(lyrFeatObj.popupContent);
-            lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);
-            var _iteratorNormalCompletion3 = true;
-            var _didIteratorError3 = false;
-            var _iteratorError3 = undefined;
-
-            try {
-                for (var _iterator3 = this._popupChangedFunctions[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
-                    var f = _step3.value;
-
-                    f(this._$popupContent);
-                }
-            } catch (err) {
-                _didIteratorError3 = true;
-                _iteratorError3 = err;
-            } finally {
-                try {
-                    if (!_iteratorNormalCompletion3 && _iterator3.return) {
-                        _iterator3.return();
-                    }
-                } finally {
-                    if (_didIteratorError3) {
-                        throw _iteratorError3;
-                    }
-                }
-            }
-        }
-
-        /**
-         *
-         * @param {ol.Feature} feature - the ol feature
-         * @param {LayerEsriMapServer} lyr - the map server layer
-         * @param {string} popupContent - popup content
-         * @param {string} esriName - esri layer name
-         */
-
-    }, {
-        key: 'addMapServicePopupContent',
-        value: function addMapServicePopupContent(feature, lyr, popupContent, esriName) {
-
-            var featLayerObject = new _FeatureLayerProperties(feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName);
-            featLayerObject.popupContent = popupContent;
-
-            this._passThroughLayerFeatureArray.push(featLayerObject);
-            this._popupContentLength++;
-
-            (0, _jquery2.default)('.popup-content-length').html(this._popupContentLength.toFixed());
-
-            if (!this._popupOpen) {
-                this._$popupContent.find('.next-popup').trigger('click');
-
-                this._popupOverlay.setPosition(this._popupCoordinate);
-                this._$popupContent.scrollTop(0);
-                this._popupOpen = true;
-            }
-        }
-
-        /**
-         *
-         * @param {ol.Pixel} pixel - the ol pixel
-         * @returns {Array.<_FeatureLayerProperties>} - feature layer properties
-         * @private
-         */
-
-    }, {
-        key: '_featuresAtPixel',
-        value: function _featuresAtPixel(pixel) {
-            var _this3 = this;
-
-            var layerFeatureObjectArray = [];
-            this.map.forEachFeatureAtPixel(pixel, function (feature, layer) {
-                var lyrIndex = _this3._arrPopupOlLayers.indexOf(layer);
-
-                if (lyrIndex > -1) {
-                    layerFeatureObjectArray.push(new _FeatureLayerProperties(feature, _this3._arrPopupLayers[lyrIndex], lyrIndex, _this3._selectionLayers[lyrIndex]));
-                }
-            });
-
-            return layerFeatureObjectArray;
-        }
-    }, {
-        key: 'closePopup',
-        value: function closePopup() {
-            this._checkInit();
-            this._popupOpen = false;
-            this._popupOverlay.setPosition(undefined);
-            this._$popupCloser[0].blur();
-            this.clearSelection();
-            this._$popupContent.html('');
-
-            return false;
-        }
-    }, {
-        key: 'addPopupChangedFunction',
-
-
-        /**
-         *
-         * @param {popupChangedFunction} chgFunction - popup change function
-         */
-        value: function addPopupChangedFunction(chgFunction) {
-            this._popupChangedFunctions.push(chgFunction);
-        }
-
-        /**
-         *
-         * @param {LayerBase|*} lyr - the layer being acted on
-         * @param {object} [selectionStyle={}] the selection style configuration
-         * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
-         * @param {number} [selectionStyle.width=10] the selection width for linear features
-         * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
-         * @returns {ol.layer.Vector} the new selection layer
-         * @private
-         */
-
-    }, {
-        key: '_addPopupLayer',
-        value: function _addPopupLayer(lyr, selectionStyle) {
-            this._checkInit();
-
-            selectionStyle = selectionStyle || {};
-            selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';
-            selectionStyle.width = selectionStyle.width || 10;
-
-            var theStyle = void 0;
-
-            if (selectionStyle.olStyle) {
-                theStyle = selectionStyle.olStyle;
-            } else {
-                theStyle = new _ol2.default.style.Style({
-                    stroke: new _ol2.default.style.Stroke({
-                        color: selectionStyle.color,
-                        width: selectionStyle.width
-                    }),
-                    image: new _ol2.default.style.Circle({
-                        radius: 7,
-                        fill: new _ol2.default.style.Fill({ color: selectionStyle.color }),
-                        stroke: new _ol2.default.style.Stroke({ color: selectionStyle.color, width: 1 })
-                    }),
-                    fill: new _ol2.default.style.Fill({
-                        color: selectionStyle.color
-                    })
-                });
-            }
-
-            var selectionLayer = new _ol2.default.layer.Vector({
-                source: new _ol2.default.source.Vector(),
-                style: theStyle,
-                zIndex: 100
-            });
-
-            this._selectionLayers.push(selectionLayer);
-            this._selectionLayerLookup[lyr.id] = selectionLayer;
-            this.map.addLayer(selectionLayer);
-
-            return selectionLayer;
-        }
-
-        /**
-         * The popup callback function
-         * @callback popupCallback
-         * @param {object} featureProperties - the feature properties
-         * @param {jQuery} jqRef reference to the div content to do some async stuff inside the div
-         * @returns {string} the html content to be added to the popup
-         */
-
-        /**
-         * Add popup to the map
-         * @param {LayerBase|*} lyr The layer that the popup with act on
-         * @param {popupCallback} popupContentFunction - popup content function that makes popup info
-         * @param {object} [selectionStyle={}] the selection style configuration
-         * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
-         * @param {number} [selectionStyle.width=10] the selection width for linear features
-         * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
-         * @returns {object} a reference to the ol selection layer
-         */
-
-    }, {
-        key: 'addVectorPopup',
-        value: function addVectorPopup(lyr, popupContentFunction, selectionStyle) {
-            var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
-            this._arrPopupLayerIds.push(lyr.id);
-            this._arrPopupLayerNames.push(lyr.name);
-            this._arrPopupLayers.push(lyr);
-            this._arrPopupOlLayers.push(lyr.olLayer);
-            this._arrPopupContentFunction.push(popupContentFunction);
-
-            return selectionLayer;
-        }
-    }, {
-        key: 'removeVectorPopup',
-
-
-        /**
-         *
-         * @param {LayerBase} lyr - layer
-         */
-        value: function removeVectorPopup(lyr) {
-            var idx = this._arrPopupLayerIds.indexOf(lyr.id);
-
-            if (idx > -1) {
-                this._arrPopupLayerIds.splice(idx, 1);
-                this._arrPopupLayerNames.splice(idx, 1);
-                this._arrPopupLayers.splice(idx, 1);
-                this._arrPopupOlLayers.splice(idx, 1);
-                this._arrPopupContentFunction.splice(idx, 1);
-                this._selectionLayers.splice(idx, 1);
-                delete this._selectionLayerLookup[lyr.id];
-            }
-        }
-
-        /**
-         *
-         * @param {LayerEsriMapServer} lyr - map server layer
-         * @param {object} [selectionStyle={}] the selection style configuration
-         * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
-         * @param {number} [selectionStyle.width=10] the selection width for linear features
-         * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
-         * @returns {object} a reference to the ol selection layer
-         */
-
-    }, {
-        key: 'addMapServicePopup',
-        value: function addMapServicePopup(lyr, selectionStyle) {
-            var selectionLayer = this._addPopupLayer(lyr, selectionStyle);
-            this._esriMapServiceLayers.push(lyr);
-
-            return selectionLayer;
-        }
-    }, {
-        key: 'clearSelection',
-        value: function clearSelection() {
-            this._checkInit();
-            for (var i = 0; i < this._selectionLayers.length; i++) {
-                this._selectionLayers[i].getSource().clear();
-            }
-            var _iteratorNormalCompletion4 = true;
-            var _didIteratorError4 = false;
-            var _iteratorError4 = undefined;
-
-            try {
-                for (var _iterator4 = this._mapClickFunctions[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
-                    var f = _step4.value;
-
-                    f();
-                }
-            } catch (err) {
-                _didIteratorError4 = true;
-                _iteratorError4 = err;
-            } finally {
-                try {
-                    if (!_iteratorNormalCompletion4 && _iterator4.return) {
-                        _iterator4.return();
-                    }
-                } finally {
-                    if (_didIteratorError4) {
-                        throw _iteratorError4;
-                    }
-                }
-            }
-        }
-    }, {
-        key: 'addMapClickFunction',
-
-
-        /**
-         * Add a function to be called when the map is clicked but before any popups are implemented
-         * @param {function} func - the map click function
-         */
-        value: function addMapClickFunction(func) {
-            this._mapClickFunctions.push(func);
-        }
-    }]);
-
-    return MapPopupCls;
-}(_mapInteractionBase2.default);
-
-nm.MapPopupCls = MapPopupCls;
-exports.default = MapPopupCls;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/olHelpers/propertiesZoomStyle.js b/_lib/olHelpers/propertiesZoomStyle.js
deleted file mode 100644
index fcf5d3f3f137f310348e745261d51b89286980b9..0000000000000000000000000000000000000000
--- a/_lib/olHelpers/propertiesZoomStyle.js
+++ /dev/null
@@ -1,50 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-    value: true
-});
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-var _zoomResolutionConvert = require('./zoomResolutionConvert');
-
-var zoomResolutionConvert = _interopRequireWildcard(_zoomResolutionConvert);
-
-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 }; }
-
-/**
- * Created by gavorhes on 12/14/2015.
- */
-
-var nm = (0, _provide2.default)('olHelpers');
-
-/**
- * A style function based on properties and zoom level, wraps normal feature, resolution function
- * @callback propertiesZoomStyle
- * @param {object} properties the feature properties
- * @param {number} zoom level
- *
- */
-
-/**
- * wrapper to define a style function by properties and zoom level
- * @param {propertiesZoomStyle|*} styleFunc - style function
- * @returns {function|*} new function
- */
-function propertiesZoomStyle(styleFunc) {
-    if (styleFunc == undefined) {
-        return undefined;
-    }
-
-    return function (feature, resolution) {
-        styleFunc(feature.getProperties(), zoomResolutionConvert.resolutionToZoom(resolution));
-    };
-}
-
-nm.propertiesZoomStyle = propertiesZoomStyle;
-exports.default = propertiesZoomStyle;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/olHelpers/quickMap.js b/_lib/olHelpers/quickMap.js
deleted file mode 100644
index 9d626a56ab6449be7cc7a9d9e94807e52d6a629c..0000000000000000000000000000000000000000
--- a/_lib/olHelpers/quickMap.js
+++ /dev/null
@@ -1,57 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _quickMapBase = require('./quickMapBase');
-
-var _quickMapBase2 = _interopRequireDefault(_quickMapBase);
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-var _mapMove = require('./mapMove');
-
-var _mapMove2 = _interopRequireDefault(_mapMove);
-
-var _mapPopup = require('./mapPopup');
-
-var _mapPopup2 = _interopRequireDefault(_mapPopup);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-/**
- * Created by gavorhes on 12/15/2015.
- */
-
-var nm = (0, _provide2.default)('olHelpers');
-
-/**
- * Sets up a map with some default parameters and initializes
- * mapMove and mapPopup
- *
- * @param {object} [options={}] config options
- * @param {string} [options.divId=map] map div id
- * @param {object} [options.center={}] center config object
- * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
- * @param {number} [options.center.y=5574910] center y, web mercator y or lat
- * @param {number} [options.zoom=7] zoom level
- * @param {number} [options.minZoom=undefined] min zoom
- * @param {number} [options.maxZoom=undefined] max zoom
- * @param {boolean} [options.baseSwitcher=true] if add base map switcher
- * @param {boolean} [options.fullScreen=false] if add base map switcher
- * @returns {ol.Map} the ol map
- */
-function quickMap(options) {
-  var m = (0, _quickMapBase2.default)(options);
-  _mapMove2.default.init(m);
-  _mapPopup2.default.init(m);
-
-  return m;
-}
-
-nm.quickMap = quickMap;
-exports.default = quickMap;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/olHelpers/quickMapBase.js b/_lib/olHelpers/quickMapBase.js
deleted file mode 100644
index 65f9b73ac1bae9b2f7cd857ee2567020feab2856..0000000000000000000000000000000000000000
--- a/_lib/olHelpers/quickMapBase.js
+++ /dev/null
@@ -1,118 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-    value: true
-});
-
-var _jquery = require('../jquery/jquery');
-
-var _jquery2 = _interopRequireDefault(_jquery);
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-var _ol = require('../ol/ol');
-
-var _ol2 = _interopRequireDefault(_ol);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var nm = (0, _provide2.default)('olHelpers');
-
-/**
- * Sets up a map with some default parameters and initializes
- * mapMove and mapPopup
- *
- * @param {object} [options={}] config options
- * @param {string} [options.divId=map] map div id
- * @param {object} [options.center={}] center config object
- * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
- * @param {number} [options.center.y=5574910] center y, web mercator y or lat
- * @param {number} [options.zoom=7] zoom level
- * @param {number} [options.minZoom=undefined] min zoom
- * @param {number} [options.maxZoom=undefined] max zoom
- * @param {boolean} [options.baseSwitcher=true] if add base map switcher
- * @param {boolean} [options.fullScreen=false] if add base map switcher
- * @returns {ol.Map} the ol map
- */
-
-/**
- * Created by gavorhes on 12/15/2015.
- */
-
-function quickMapBase(options) {
-    options = options || {};
-    options.divId = options.divId || 'map';
-    options.center = options.center || {};
-    options.center.x = typeof options.center.x == 'number' ? options.center.x : -10018378;
-    options.center.y = typeof options.center.y == 'number' ? options.center.y : 5574910;
-    options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;
-    options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;
-    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;
-
-    var $mapDiv = (0, _jquery2.default)('#' + options.divId);
-    $mapDiv.css('position', 'relative');
-
-    var osmLayer = new _ol2.default.layer.Tile({ source: new _ol2.default.source.OSM() });
-    var satLayer = new _ol2.default.layer.Tile({ visible: false, source: new _ol2.default.source.MapQuest({ layer: 'sat' }) });
-
-    var osmCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')";
-    var aerialCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')";
-
-    if (options.baseSwitcher) {
-        //  let switcherContent = '<div class="base-map-switcher" title="Toggle Base Layer" style="';
-        //  switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';
-        //  switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;
-        //  switcherContent += '"></div>';
-        //  $mapDiv.append(switcherContent);
-        //
-        // $mapDiv.find('.base-map-switcher').click(function() {
-        //      "use strict";
-        //      osmLayer.setVisible(!osmLayer.getVisible());
-        //      satLayer.setVisible(!satLayer.getVisible());
-        //
-        //      if (osmLayer.getVisible()){
-        //          $(this).css('background', aerialCss);
-        //      } else {
-        //          $(this).css('background', osmCss);
-        //      }
-        //  });
-    }
-
-    if (options.zoom < 0 || options.zoom > 28) {
-        throw 'zoom out of range';
-    }
-
-    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {
-        var p = new _ol2.default.geom.Point([options.center.x, options.center.y]);
-        p.transform("EPSG:4326", "EPSG:3857");
-        var coordinates = p.getCoordinates();
-        options.center.x = coordinates[0];
-        options.center.y = coordinates[1];
-    }
-
-    var map = new _ol2.default.Map({
-        layers: [osmLayer, satLayer],
-        target: options.divId,
-        controls: _ol2.default.control.defaults({
-            attributionOptions: { collapsible: false }
-        }),
-        view: new _ol2.default.View({
-            center: [options.center.x, options.center.y],
-            zoom: options.zoom,
-            minZoom: options.minZoom,
-            maxZoom: options.maxZoom
-        })
-    });
-
-    if (options.fullScreen) {
-        map.addControl(new _ol2.default.control.FullScreen());
-    }
-
-    return map;
-}
-
-nm.quickMapBase = quickMapBase;
-exports.default = quickMapBase;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/olHelpers/quickMapMulti.js b/_lib/olHelpers/quickMapMulti.js
deleted file mode 100644
index 443fba045e9491086020fe51e7b06c0fd8b2c4be..0000000000000000000000000000000000000000
--- a/_lib/olHelpers/quickMapMulti.js
+++ /dev/null
@@ -1,66 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _quickMapBase = require('./quickMapBase');
-
-var _quickMapBase2 = _interopRequireDefault(_quickMapBase);
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-var _mapMoveCls = require('./mapMoveCls');
-
-var _mapMoveCls2 = _interopRequireDefault(_mapMoveCls);
-
-var _mapPopupCls = require('./mapPopupCls');
-
-var _mapPopupCls2 = _interopRequireDefault(_mapPopupCls);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-/**
- * Created by gavorhes on 12/15/2015.
- */
-
-var nm = (0, _provide2.default)('olHelpers');
-
-/**
- * @typedef {object} quickMapMultiReturn
- * @property {ol.Map} map The X Coordinate
- * @property {MapMoveCls} mapMove The Y Coordinate
- * @property {MapPopupCls} mapPopup The Y Coordinate
- */
-
-/**
- * Sets up a map with some default parameters and initializes
- * mapMove and mapPopup
- *
- * @param {object} [options={}] config options
- * @param {string} [options.divId=map] map div id
- * @param {object} [options.center={}] center config object
- * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
- * @param {number} [options.center.y=5574910] center y, web mercator y or lat
- * @param {number} [options.zoom=7] zoom level
- * @param {number} [options.minZoom=undefined] min zoom
- * @param {number} [options.maxZoom=undefined] max zoom
- * @param {boolean} [options.baseSwitcher=true] if add base map switcher
- * @param {boolean} [options.fullScreen=false] if add base map switcher
- * @returns {quickMapMultiReturn} return map, map move, and map popup objects
- */
-function quickMapMulti(options) {
-  var m = (0, _quickMapBase2.default)(options);
-  var mov = new _mapMoveCls2.default();
-  var pop = new _mapPopupCls2.default();
-  mov.init(m);
-  pop.init(m);
-
-  return { map: m, mapMove: mov, mapPopup: pop };
-}
-
-nm.quickMapMulti = quickMapMulti;
-exports.default = quickMapMulti;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/olHelpers/zoomResolutionConvert.js b/_lib/olHelpers/zoomResolutionConvert.js
deleted file mode 100644
index 7ceddee8dc1f02de0acc0783f016757fc4ba6872..0000000000000000000000000000000000000000
--- a/_lib/olHelpers/zoomResolutionConvert.js
+++ /dev/null
@@ -1,87 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-    value: true
-});
-exports.zoomToResolution = zoomToResolution;
-exports.resolutionToZoom = resolutionToZoom;
-
-var _provide = require('../util/provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var nm = (0, _provide2.default)('olHelpers.zoomResolutionConvert'); /**
-                                                                     * Created by gavorhes on 12/14/2015.
-                                                                     */
-
-var _zoomResLookup = [156543.03392804097, //0
-78271.51696402048, //1
-39135.75848201024, //2
-19567.87924100512, //3
-9783.93962050256, //4
-4891.96981025128, //5
-2445.98490512564, //6
-1222.99245256282, //7
-611.49622628141, //8
-305.748113140705, //9
-152.8740565703525, //10
-76.43702828517625, //11
-38.21851414258813, //12
-19.109257071294063, //13
-9.554628535647032, //14
-4.777314267823516, //15
-2.388657133911758, //16
-1.194328566955879, //17
-0.5971642834779395, //18
-0.29858214173896974, //19
-0.14929107086948487, //20
-0.07464553543474244, //21
-0.03732276771737122, //22
-0.01866138385868561, //23
-0.009330691929342804, //24
-0.004665345964671402, //25
-0.002332672982335701, //26
-0.0011663364911678506, //27
-0.0005831682455839253 //28
-];
-
-/**
- * Get the resolution given the zoom level
- * @param {number} zoomLevel - the zoom level
- * @returns {number|*} the map resolution
- */
-function zoomToResolution(zoomLevel) {
-    "use strict";
-
-    if (typeof zoomLevel == 'number') {
-        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {
-            return _zoomResLookup[zoomLevel];
-        } else {
-            console.log('invalid zoom level provided: ' + zoomLevel);
-
-            return undefined;
-        }
-    } else {
-        return undefined;
-    }
-}
-nm.zoomToResolution = zoomToResolution;
-
-/**
- * Get resolution from the zoom level
- * @param {number} resolution - the resolution
- * @returns {number|*} the zoom level
- */
-function resolutionToZoom(resolution) {
-    for (var i = 0; i < _zoomResLookup.length; i++) {
-        if (resolution >= _zoomResLookup[i]) {
-            return i;
-        }
-    }
-
-    return 0;
-}
-
-nm.resolutionToZoom = resolutionToZoom;
\ No newline at end of file
diff --git a/_lib/util/checkDefined.js b/_lib/util/checkDefined.js
deleted file mode 100644
index 24ef65ce64cfb8781135a5c075277327e5520157..0000000000000000000000000000000000000000
--- a/_lib/util/checkDefined.js
+++ /dev/null
@@ -1,44 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-    value: true
-});
-exports.undefinedOrNull = undefinedOrNull;
-exports.definedAndNotNull = definedAndNotNull;
-
-var _provide = require('./provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var nm = (0, _provide2.default)('util.checkDefined');
-
-/**
- * check if the input is undefined or null
- * @param {*} input - input pointer
- * @returns {boolean} true undefined or null
- */
-/**
- * Created by gavorhes on 12/11/2015.
- */
-function undefinedOrNull(input) {
-    "use strict";
-
-    return typeof input === 'undefined' || input === null;
-}
-
-nm.undefinedOrNull = undefinedOrNull;
-
-/**
- * check if the input is defined and not null
- * @param {*} input - input pointer
- * @returns {boolean} true defined and not null
- */
-function definedAndNotNull(input) {
-    "use strict";
-
-    return !undefinedOrNull(input);
-}
-
-nm.definedAndNotNull = definedAndNotNull;
\ No newline at end of file
diff --git a/_lib/util/colors.js b/_lib/util/colors.js
deleted file mode 100644
index 256b5723f7628264adffb9b86fee22b9b8ee0226..0000000000000000000000000000000000000000
--- a/_lib/util/colors.js
+++ /dev/null
@@ -1,194 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-    value: true
-});
-exports.rgb2hex = rgb2hex;
-exports.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;
-exports.rgbToRgba = rgbToRgba;
-exports.makeBlueGreenRedGradient = makeBlueGreenRedGradient;
-exports.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;
-
-var _provide = require('./provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-var _checkDefined = require('./checkDefined');
-
-var chk = _interopRequireWildcard(_checkDefined);
-
-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 }; }
-
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-var nm = (0, _provide2.default)('util.colors');
-
-/**
- * helper function to convert to hex
- * @param {number|string} x - the number to convert to hex
- * @returns {string} number as hex
- * @private
- */
-function _hex(x) {
-    var hexDigits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
-
-    return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
-}
-
-/**
- * converts an RGB string to hex
- * @param {string} rgb - rgb color
- * @returns {string} rbg as hex
- */
-function rgb2hex(rgb) {
-    var rgb1 = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
-
-    return ("#" + _hex(rgb1[1]) + _hex(rgb1[2]) + _hex(rgb1[3])).toUpperCase();
-}
-
-nm.rgb2hex = rgb2hex;
-
-/**
- * Convert hex string to RGB or RGBA string
- * @param {string} hexString - hex color string
- * @param {number} [alphaVal=undefined] Alpha value
- * @returns {string} - rgb or rgba color
- */
-function hexAlphaToRgbOrRgba(hexString, alphaVal) {
-    hexString = hexString.charAt(0) == "#" ? hexString.substring(1, 7) : hexString;
-    var r = parseInt(hexString.substring(0, 2), 16).toString() || '0';
-    var g = parseInt(hexString.substring(2, 4), 16).toString() || '0';
-    var b = parseInt(hexString.substring(4, 6), 16).toString() || '0';
-    if (alphaVal) {
-        return 'rgba(' + r + ',' + g + ',' + b + ',' + alphaVal + ')';
-    } else {
-        return 'rgba(' + r + ',' + g + ',' + b + ')';
-    }
-}
-
-nm.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;
-
-/**
- * adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)'
- * @param {string} rgb - rgb color
- * @param {number} alpha - alpha value 0 to 1
- * @returns {string} rgba color
- */
-function rgbToRgba(rgb, alpha) {
-    var pieces = rgb.split(',');
-    pieces[0] = pieces[0].replace('rgb', 'rgba');
-    pieces[2] = pieces[2].replace(')', '');
-    pieces.push(' ' + alpha.toFixed(1) + ')');
-
-    return pieces.join(',');
-}
-
-nm.rgbToRgba = rgbToRgba;
-
-/**
- * @typedef {function} colorLookupByNumber
- * @param {number} num - the number to use to retrieve the color
- * @returns {string} rgb color
- */
-
-/**
- * Make a blue green red gradient
- * @param {number} minVal - minimum value
- * @param {number} maxVal - maximum value
- * @param {boolean} flipColors - if the colors should be flipped
- * @returns {colorLookupByNumber} color lookup function
- */
-function makeBlueGreenRedGradient(minVal, maxVal, flipColors) {
-
-    if (typeof flipColors != "boolean") {
-        flipColors = false;
-    }
-
-    return function (theVal) {
-        var r = void 0,
-            g = void 0,
-            b = void 0;
-        var ratio = void 0;
-
-        if (chk.undefinedOrNull(theVal)) {
-            return 'rgb(100,100,100)';
-        }
-
-        var percent = (theVal - minVal) / (maxVal - minVal);
-
-        if (flipColors == true) {
-            percent = 1 - percent;
-        }
-
-        if (percent >= 1) {
-            r = 255;
-            g = 0;
-            b = 0;
-        } else if (percent <= 0) {
-            r = 0;
-            g = 0;
-            b = 255;
-        } else if (percent < .25) {
-            // green up, blue constant
-            r = 0;
-            g = Math.floor(255 * percent / 0.25);
-            b = 255;
-        } else if (percent < 0.50) {
-            //blue down, green constant
-            ratio = (percent - 0.25) / 0.25;
-            r = 0;
-            g = 255;
-            b = 255 - Math.floor(255 * ratio);
-        } else if (percent < 0.75) {
-            // red up, green constant
-            ratio = (percent - 0.5) / 0.25;
-            r = Math.floor(255 * ratio);
-            g = 255;
-            b = 0;
-        } else {
-            // green down, red constant
-            ratio = (percent - 0.75) / 0.25;
-            r = 255;
-            g = 255 - Math.floor(255 * ratio);
-            b = 0;
-        }
-
-        r = r.toFixed();
-        g = g.toFixed();
-        b = b.toFixed();
-
-        return 'rgb(' + r + ',' + g + ',' + b + ')';
-    };
-}
-
-nm.makeBlueGreenRedGradient = makeBlueGreenRedGradient;
-
-/**
- * Create a function that will return colors based on a gradient
- * @param {number} median - median value
- * @param {number} stdDev - standard deviation
- * @param {boolean} flipColors - if the colors should be flipped
- * @returns {colorLookupByNumber} color lookup function
- */
-function makeBlueGreenRedGradientZScore(median, stdDev, flipColors) {
-
-    var grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors);
-
-    return function (theVal) {
-
-        var zScore = void 0;
-        if (theVal == null) {
-            zScore = null;
-        } else {
-            zScore = (theVal - median) / stdDev;
-        }
-
-        return grd(zScore);
-    };
-}
-
-nm.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;
\ No newline at end of file
diff --git a/_lib/util/dateConvert.js b/_lib/util/dateConvert.js
deleted file mode 100644
index 2c6a1b204cb5b90efef71cc6bd393e9c96487998..0000000000000000000000000000000000000000
--- a/_lib/util/dateConvert.js
+++ /dev/null
@@ -1,62 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-    value: true
-});
-exports.dateToYyyyMmDdHhMmSs = dateToYyyyMmDdHhMmSs;
-exports.dateToYyyyMmDdHh000 = dateToYyyyMmDdHh000;
-
-var _provide = require('./provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var nm = (0, _provide2.default)('util.dateConvert'); /**
-                                                      * Created by gavorhes on 11/4/2015.
-                                                      */
-
-function leadingPad(inNum) {
-    var strNum = inNum.toFixed();
-    if (strNum.length < 2) {
-        strNum = '0' + strNum;
-    }
-
-    return strNum;
-}
-
-nm.leadingPad = leadingPad;
-
-/**
- * Given a date return a string in the format YYYY-mm-dd hh:MM:SS
- * @param {Date} dte to convert
- * @returns {string} the formatted date string
- */
-function dateToYyyyMmDdHhMmSs(dte) {
-    var yr = dte.getYear() + 1900;
-    var month = leadingPad(dte.getMonth() + 1);
-    var day = leadingPad(dte.getDate());
-    var hrs = leadingPad(dte.getHours());
-    var mns = leadingPad(dte.getMinutes());
-    var secs = leadingPad(dte.getSeconds());
-
-    return yr + '-' + month + '-' + day + ' ' + hrs + ':' + mns + ':' + secs;
-}
-
-nm.dateToYyyyMmDdHhMmSs = dateToYyyyMmDdHhMmSs;
-
-/**
- * Given a date return a string in the format YYYYmmdd_hh0000
- * @param {Date} dte the input date
- * @returns {string} the formatted date string
- */
-function dateToYyyyMmDdHh000(dte) {
-    var yr = dte.getYear() + 1900;
-    var month = leadingPad(dte.getMonth() + 1);
-    var day = leadingPad(dte.getDate());
-    var hrs = leadingPad(dte.getHours());
-
-    return '' + yr + month + day + '_' + hrs + '0000';
-}
-
-nm.dateToYyyyMmDdHh000 = dateToYyyyMmDdHh000;
\ No newline at end of file
diff --git a/_lib/util/formatString.js b/_lib/util/formatString.js
deleted file mode 100644
index e7abfc4062335595d891db5c71ca091ee0ee8df7..0000000000000000000000000000000000000000
--- a/_lib/util/formatString.js
+++ /dev/null
@@ -1,44 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-    value: true
-});
-/**
- * Created by gavorhes on 10/30/2015.
- */
-
-if (!String.prototype.format) {
-    /**
-     *  helper function for string replacement to keep code clean
-     * usage
-     * var aString = 'some{0}stuff{1}replaced';
-     * var c = 'cat';
-     * var b = 'bird';
-     * aString.format(c, b)  returns 'somecatstuffbirdreplaced'
-     * prettier than
-     * 'some' + c + 'stuff' + b + 'replaced'
-     * but same effect
-     * adapted to take a single array that is used for replacement by position ie
-     * var arrReplacements = [c, b];
-     * aString.format(arrReplacements)
-     * @returns {string} converted string
-     */
-    String.prototype.format = function () {
-        var args = arguments;
-        for (var i = 0; i < args.length; i++) {
-            args[i] = args[i] !== null ? args[i] : '';
-        }
-
-        //if the first argument is an array, use that
-        if (args[0].constructor == Array) {
-            args = args[0];
-        }
-
-        return this.replace(/{(\d+)}/g, function (match, number) {
-            return typeof args[number] != 'undefined' ? args[number] : match;
-        });
-    };
-}
-
-exports.default = undefined;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/util/getUrlParams.js b/_lib/util/getUrlParams.js
deleted file mode 100644
index 681efda5cd05a183b918fc6ce0ad5ca4d960826f..0000000000000000000000000000000000000000
--- a/_lib/util/getUrlParams.js
+++ /dev/null
@@ -1,63 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-    value: true
-});
-
-var _provide = require('./provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var nm = (0, _provide2.default)('util');
-
-/**
- *
- * @returns {object} object representation of url params
- */
-/**
- * Created by gavorhes on 6/23/2016.
- */
-function getUrlParams() {
-    "use strict";
-
-    var match = void 0;
-    var pl = /\+/g; // Regex for replacing addition symbol with a space
-    var search = /([^&=]+)=?([^&]*)/g;
-    var decode = function decode(s) {
-        return decodeURIComponent(s.replace(pl, " "));
-    };
-    var query = window.location.search.substring(1);
-
-    var urlParams = {};
-    while (match = search.exec(query)) {
-        /**
-         * @type {string}
-         */
-        var val = decode(match[2]).trim();
-
-        var typedVal = null;
-        if (val.length == 0) {
-            // pass
-        } else if (!isNaN(val)) {
-                if (val.indexOf('.') > -1) {
-                    typedVal = parseFloat(val);
-                } else {
-                    typedVal = parseInt(val);
-                }
-            } else if (val.toLowerCase() == 'false' || val.toLowerCase() == 'true') {
-                typedVal = val.toLowerCase() == 'true';
-            } else {
-                typedVal = val;
-            }
-        urlParams[decode(match[1])] = typedVal;
-    }
-
-    return urlParams;
-}
-
-nm.getUrlParams = getUrlParams;
-
-exports.default = getUrlParams;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/util/makeGuid.js b/_lib/util/makeGuid.js
deleted file mode 100644
index ee2e35ad41c1a1881e9bd31755c73bb88ebb0a20..0000000000000000000000000000000000000000
--- a/_lib/util/makeGuid.js
+++ /dev/null
@@ -1,33 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _provide = require('./provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var nm = (0, _provide2.default)('util');
-
-/**
- * guids are used to uniquely identify groups and features
- * @returns {string} a new guid
- */
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-function makeGuid() {
-  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
-    var r = Math.random() * 16 | 0,
-        v = c == 'x' ? r : r & 0x3 | 0x8;
-
-    return v.toString(16);
-  });
-}
-nm.makeGuid = makeGuid;
-exports.default = makeGuid;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_lib/util/objectHelpers.js b/_lib/util/objectHelpers.js
deleted file mode 100644
index 1901a4c0dc9d1a83202db4540875d367944569a2..0000000000000000000000000000000000000000
--- a/_lib/util/objectHelpers.js
+++ /dev/null
@@ -1,67 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-    value: true
-});
-exports.keyValPairs = keyValPairs;
-
-var _provide = require('./provide');
-
-var _provide2 = _interopRequireDefault(_provide);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var nm = (0, _provide2.default)('util');
-
-/**
- * @typedef {object} keyValuePair
- * @property {string} key
- * @property {object} value
- */
-
-/**
- * iterate over the key value pairs of an object
- * @param {object} obj - the input object
- * @returns {Array<keyValuePair>} - array of key value pairs
- */
-/**
- * Created by gavorhes on 6/7/2016.
- */
-
-function keyValPairs(obj) {
-    var outArray = [];
-    var _iteratorNormalCompletion = true;
-    var _didIteratorError = false;
-    var _iteratorError = undefined;
-
-    try {
-        for (var _iterator = Object.keys(obj)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
-            var key = _step.value;
-
-            outArray.push({ 'key': key, 'value': obj[key] });
-        }
-    } catch (err) {
-        _didIteratorError = true;
-        _iteratorError = err;
-    } finally {
-        try {
-            if (!_iteratorNormalCompletion && _iterator.return) {
-                _iterator.return();
-            }
-        } finally {
-            if (_didIteratorError) {
-                throw _iteratorError;
-            }
-        }
-    }
-
-    outArray.sort(function (a, b) {
-        "use strict";
-
-        return a > b ? 1 : -1;
-    });
-
-    return outArray;
-}
-
-nm.keyValPairs = keyValPairs;
\ No newline at end of file
diff --git a/_lib/util/provide.js b/_lib/util/provide.js
deleted file mode 100644
index 0029bd451fddfe3d9f2cb9a6ef9e0dc2e72707a3..0000000000000000000000000000000000000000
--- a/_lib/util/provide.js
+++ /dev/null
@@ -1,42 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-    value: true
-});
-/**
- * Created by gavorhes on 12/10/2015.
- */
-
-/**
- * create a namespace on the gv object
- * @param {string} namespace to create
- * @returns {object} object representing the namespace
- */
-function provide(namespace) {
-    "use strict";
-
-    if (typeof window.gv == 'undefined') {
-        window.gv = {};
-    }
-
-    var parts = namespace.split('.');
-    var nameSpace = window.gv;
-
-    for (var i = 0; i < parts.length; i++) {
-        var newObject = nameSpace[parts[i]];
-
-        if (typeof newObject == 'undefined') {
-            nameSpace[parts[i]] = {};
-        }
-
-        nameSpace = nameSpace[parts[i]];
-    }
-
-    return nameSpace;
-}
-
-provide('util');
-window.gv.util.provide = provide;
-
-exports.default = provide;
-module.exports = exports['default'];
\ No newline at end of file
diff --git a/_src/collections/ItsLayerCollection.js b/_src/collections/ItsLayerCollection.js
deleted file mode 100644
index 9c0aa67ee72adcef89a49e1903b288b7541171f5..0000000000000000000000000000000000000000
--- a/_src/collections/ItsLayerCollection.js
+++ /dev/null
@@ -1,162 +0,0 @@
-/**
- * Created by gavorhes on 12/14/2015.
- */
-
-import LayerItsInventory from '../layers/LayerItsInventory';
-import * as colors from '../util/colors';
-import provide from '../util/provide';
-let nm = provide('collections');
-
-let itsConfig = [
-    {
-        name: 'Camera',
-        itsType: 'cctv',
-        minZoom: 11,
-        itsIconConfig: {
-            prop: 'owner',
-            defaultName: 'WisDOT',
-            defaultIcon: 'cctv.png',
-            iconArray: [
-                ['City of Madison', 'Madison', 'cctv-mad.png']
-            ]
-        }
-    },
-    {
-        name: 'Message Signs',
-        itsType: 'DMS',
-        minZoom: 11,
-        itsIconConfig: {
-            prop: 'dmsType',
-            defaultName: 'DMS',
-            defaultIcon: 'dms.png',
-            iconArray: [
-                ['pcms', 'PCMS', 'pcms.png']
-            ]
-        }
-    },
-    {name: 'ATR', itsType: 'atr', minZoom: 8, itsIcon: 'atr.png', visible: false},
-    {name: 'Lighting', itsType: 'light', minZoom: 16, itsIcon: 'streetlight.png', visible: false, onDemand: true},
-    {name: 'Bluetooth', itsType: 'blue', minZoom: 10, itsIcon: 'bluetooth.png', visible: false},
-    {name: 'Cabinets', itsType: 'cabinet', minZoom: 10, itsIcon: 'cabinet.png', visible: false},
-    {name: 'Hut', itsType: 'hut', minZoom: 10, itsIcon: 'hut.png', visible: false},
-    {name: 'Vault', itsType: 'vault', minZoom: 13, itsIcon: 'vault.png', visible: false},
-    {name: 'Advisory Radio', itsType: 'har', minZoom: 10, itsIcon: 'har.png', visible: false},
-    {
-        name: 'Loop Detectors',
-        itsType: 'loop',
-        legendCollapse: true,
-        minZoom: 14,
-        visible: false,
-        itsIconConfig: {
-            prop: 'dtctrType',
-            defaultName: 'Other',
-            defaultIcon: 'loopdetectorother.png',
-            iconArray: [
-                ['detector', 'Detector', 'loopdetector.png'],
-                ['long', 'Long', 'loopdetectorlong.png'],
-                ['zone', 'Zone', 'loopdetectorzone.png']
-            ]
-        },
-        onDemand: true
-    },
-    {name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false},
-    {name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true},
-    {name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false},
-    {name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false},
-    {name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false},
-    {name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true},
-    {name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false},
-    {
-        name: 'Trench',
-        itsType: 'trench',
-        onDemand: true,
-        visible: false,
-        onDemandDelay: 500,
-        minZoom: 15,
-        legendCollapse: true,
-        itsLineConfig: {
-            prop: 'owner',
-            //defaultName: 'Other',
-            //defaultWidth: 7,
-            defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),
-            lineArray: [
-                ['WisDOT', 'WisDOT', colors.hexAlphaToRgbOrRgba('#FF032F', 0.7)],
-                ['WIN', 'WIN', colors.hexAlphaToRgbOrRgba('#FFC632', 0.7)],
-                ['USXchange', 'USXchange', colors.hexAlphaToRgbOrRgba('#2DFF46', 0.7)],
-                ['AT&T', 'AT&T', colors.hexAlphaToRgbOrRgba('#ff2be5', 0.7)],
-                ['Touch America', 'Touch America', colors.hexAlphaToRgbOrRgba('#52f3ff', 0.7)],
-                ['Qwest', 'Qwest', colors.hexAlphaToRgbOrRgba('#9278ff', 0.7)],
-                ['McLeodUSA', 'McLeodUSA', colors.hexAlphaToRgbOrRgba('#2926FF', 0.7)],
-                ['CINC', 'CINC', colors.hexAlphaToRgbOrRgba('#CB00FF', 0.7)],
-                ['City of Madison', 'Madison', colors.hexAlphaToRgbOrRgba('#000380', 0.7)]
-            ]
-        }
-    }
-
-
-];
-
-
-class ItsLayerCollection {
-
-    /**
-     * Create a collection of all ITS layers
-     * @param {ol.Map} theMap the openlayers map
-     * @param {Array} [exclude=[]] array of Its layer identifiers to exclude
-     *
-     * BLUE Bluetooth Detector - Bluetooth Detector
-     * CABINET Cabinets - The cabinets
-     * CCTV Camera - Traffic Cameras
-     * HUT Communication Hut - Communication Hut
-     * VAULT Communication Vault - The communication vaults
-     * HAR Highway Advisory Radio - Advisory Radios
-     * LIGHT Lighting - Lighting
-     * LOOP Loop Detectors - Loop Detectors
-     * DMS Message Board - Message Boards and Signs
-     * MICROWAVE Microwave Detector - Microwave Detectors
-     * PULL Pull Box - A pull box
-     * RWIS RWIS - Road weather information system
-     * GATE Ramp Gate - The ramp Gates
-     * METER Ramp Meter - The ramp meters
-     * SIGNAL Signal - Traffic Signal
-     * TOWER Tower - The towers
-     * TRENCH
-     */
-    constructor(theMap, exclude) {
-
-        this.map = theMap;
-        this._layers = [];
-
-        exclude = typeof exclude == 'object' ? exclude : [];
-
-        for (let i = 0; i < itsConfig.length; i++) {
-            let lyrConfig = itsConfig[i];
-            let addLayer = true;
-
-            for (let j = 0; j < exclude.length; j++) {
-                if (exclude[j] == lyrConfig.itsType) {
-                    addLayer = false;
-                    break;
-                }
-            }
-
-            if (addLayer) {
-                let inventLyr = new LayerItsInventory(lyrConfig);
-                this['map'].addLayer(inventLyr.olLayer);
-                this._layers.push(inventLyr);
-
-            }
-        }
-    }
-
-    /**
-     * Return the array of layers in this collection
-     * @returns {Array<LayerItsInventory>} an array of layers
-     */
-    get layers() {
-        return this._layers;
-    }
-}
-
-nm.ItsLayerCollection = ItsLayerCollection;
-export default ItsLayerCollection;
diff --git a/_src/collections/LayerLegend.js b/_src/collections/LayerLegend.js
deleted file mode 100644
index 1b4a9320597205d01f0bbef789bcb3b4e2baa27f..0000000000000000000000000000000000000000
--- a/_src/collections/LayerLegend.js
+++ /dev/null
@@ -1,340 +0,0 @@
-/**
- * Created by gavorhes on 12/16/2015.
- */
-import $ from '../jquery/jquery';
-import provide from '../util/provide';
-import makeGuid from '../util/makeGuid';
-import mapMove from '../olHelpers/mapMove';
-let nm = provide('collections');
-
-class LayerGroup {
-
-    /**
-     *
-     * @param {object} [groupConfig={}] - group configuration object
-     * @param {string} groupConfig.groupName - the group name
-     * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially
-     * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers
-     * @param {LayerGroup} [parent=undefined] - the parent group
-     */
-    constructor(groupConfig, parent) {
-        this.groupLayers = [];
-        this.groupLayersLookup = {};
-        this.groupGroups = [];
-        this.groupGroupsLookup = {};
-        this.itemIdArray = [];
-
-        if (typeof groupConfig == 'undefined') {
-            this.parent = null;
-            this.groupId = 'root';
-            this.groupName = 'root';
-            this.allGroupLookup = {root: this};
-            this.allGroupArray = [this];
-            this.allLayerArray = [];
-            this.allLayerLookup = {};
-            this.layerParentLookup = {};
-            this.collapse = false;
-            this.addCheck = false;
-        } else {
-            this.groupId = makeGuid();
-            this.parent = parent;
-            this.groupName = groupConfig.groupName;
-            this.collapse = typeof  groupConfig.collapse == 'boolean' ? groupConfig.collapse : false;
-            this.addCheck = typeof  groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true;
-        }
-    }
-
-    /**
-     *
-     * @param {object} groupConfig - configuration object
-     * @param {string} groupConfig.groupName - the group name
-     * @param {boolean} groupConfig.collapse if the group should be collapsed initially
-     * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers
-     * @param {Array<LayerGroup>} parents parent groups
-     * @returns {LayerGroup} the layer group just added
-     */
-    addGroup(groupConfig, parents) {
-        let parent;
-        if (parents.length > 0) {
-            parent = parents[parents.length - 1];
-        } else {
-            parent = 'root';
-        }
-
-
-        /**
-         * @type {LayerGroup}
-         */
-        let parentGroup = this.allGroupLookup[parent];
-        let newGroup = new LayerGroup(groupConfig, parentGroup);
-        this.allGroupLookup[newGroup.groupId] = newGroup;
-        this.allGroupArray.push(newGroup);
-
-        parentGroup.groupGroups.push(newGroup);
-        parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;
-
-        if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) {
-            console.log(newGroup.groupId);
-            throw 'layer and group ids must be unique';
-        }
-        parentGroup.itemIdArray.push(newGroup.groupId);
-
-        return newGroup;
-    }
-
-    /**
-     *
-     * @param {LayerBase} newLayer the layer to be added
-     * @param {Array} parents array
-     */
-    addLegendLayer(newLayer, parents) {
-        let parent;
-        if (parents.length > 0) {
-            parent = parents[parents.length - 1];
-        } else {
-            parent = 'root';
-        }
-
-        this.allLayerLookup[newLayer.id] = newLayer;
-        this.allLayerArray.push(newLayer);
-
-        /**
-         * @type {LayerGroup}
-         */
-        let parentGroup = this.allGroupLookup[parent];
-
-        parentGroup.groupLayers.push(newLayer);
-        parentGroup.groupLayersLookup[newLayer.id] = newLayer;
-        if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) {
-            console.log(newLayer.id);
-            throw 'layer and group ids must be unique';
-        }
-        parentGroup.itemIdArray.push(newLayer.id);
-
-        this.layerParentLookup[newLayer.id] = parentGroup;
-
-    }
-
-    getLegendHtml(legendId, options) {
-
-
-        let legendHtml = `<ul id="${legendId}" class="legend-container">`;
-
-        legendHtml += `<li>${options.legendTitle}<input type="checkbox" checked id="suppress-by-extent-${legendId}" class="suppress-by-extent">` +
-            `<label title="Suppress layers not visible at this zoom level" for="suppress-by-extent-${legendId}">` +
-            `<span></span>` +
-            `</label></li>`;
-
-        legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';
-
-        return legendHtml;
-    }
-
-    /**
-     * @param {Array} itemIds the items to process
-     * @param {LayerGroup} theGroup new group
-     * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs
-     * @static
-     * @returns {string} html string
-     */
-    _buildLegend(itemIds, theGroup, layerDivClasses) {
-
-        if (itemIds.length == 0) {
-            return '';
-        }
-
-        let theHml = '';
-
-        let itemId = itemIds[0];
-
-        if (theGroup.groupLayersLookup[itemId]) {
-
-            /**
-             * @type {LayerBase}
-             */
-            let lyr = theGroup.groupLayersLookup[itemId];
-            theHml += `<li id="${lyr.id}-layer-li" class="legend-layer-li ${layerDivClasses.join(' ')}">` + lyr.getLegendDiv() + '</li>';
-
-
-        } else if (theGroup.groupGroupsLookup[itemId]) {
-            /**
-             * type {LayerGroup}
-             */
-            let otherGroup = theGroup.groupGroupsLookup[itemId];
-
-            theHml += `<li>`;
-            theHml += `<div id="${otherGroup.groupId}-legend-layer-div" ` +
-                `class="legend-layer-group  ${layerDivClasses.join(' ')}">`;
-
-            if (otherGroup.addCheck) {
-                theHml += `<input type="checkbox" checked id="${otherGroup.groupId}-group-chck">` +
-                    `<label for="${otherGroup.groupId}-group-chck" title="Click arrow to expand or collapse">${otherGroup.groupName}</label>`;
-            } else {
-                theHml += `<label title="Click arrow to expand or collapse">${otherGroup.groupName}</label>`;
-            }
-
-            theHml += `<span title="Expand/Collapse" class="layer-group-expander`;
-            theHml += `${otherGroup.collapse ? ' legend-layer-group-initial-collapse' : ''}">`;
-            theHml += otherGroup.collapse ? '&#9654;' : '&#9660;';
-            theHml += '</span>';
-
-            //parents.push(groupId);
-            theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>';
-            theHml += '</div>';
-            theHml += '</li>';
-        }
-
-        return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);
-    }
-}
-
-/**
- * a wrapper to make a legend
- */
-class LayerLegend {
-
-    /**
-     *
-     * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}
-     * @param {string} divId the div where the legend should be added
-     * @param {object} options for legend
-     * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling
-     * @param {string} [options.legendTitle=Legend] the legend title
-     * @param {bool} [options.scaleDependent=true] if legend display is scale dependent
-     */
-    constructor(legendItems, divId, options) {
-        for (let i of legendItems) {
-            if (typeof i == 'undefined') {
-                throw 'undefined item passed in array to legend constructor';
-            }
-        }
-
-        options = options || {};
-
-        options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend';
-        options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true;
-        options.layerDivClasses = options.layerDivClasses || [];
-
-        // if legend display is scale dependent, make sure the mapMove object is initialized first
-        if (options.scaleDependent) {
-            mapMove.checkInit();
-        }
-
-        this.$divElement = $('#' + divId);
-
-        this._legendItems = legendItems;
-
-        this.layerGroup = new LayerGroup();
-
-        this._buildTree(legendItems);
-
-        this.legendId = makeGuid();
-
-        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));
-
-        for (let l of this.layerGroup.allLayerArray){
-            l.applyCollapse();
-        }
-
-        let _this = this;
-
-        //// if legend display is scale dependent, make sure the mapMove object is initialized first
-        if (options.scaleDependent) {
-            mapMove.checkInit();
-
-            mapMove.addCallback(function (ext, zoom, evt) {
-                if (typeof evt == 'undefined' || evt == 'change:resolution') {
-                    for (let lyr of this.layerGroup.allLayerArray) {
-                        let $lyrLi = $('#' + lyr.id + '-layer-li');
-                        if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {
-                            $lyrLi.addClass('layer-not-visible');
-                        } else {
-                            $lyrLi.removeClass('layer-not-visible');
-                        }
-                    }
-                }
-            }, this, 100, true, 'legend1');
-        }
-
-        // <editor-fold desc="add event listeners">
-
-        this.$divElement.find(".suppress-by-extent").change(function () {
-            let legendLayerLis = $('.legend-layer-li');
-            if (this.checked) {
-                legendLayerLis.removeClass('layer-force-show');
-            } else {
-                legendLayerLis.addClass('layer-force-show');
-            }
-        });
-
-
-        this.$divElement.find('.legend-check').change(function () {
-            let lyrId = this.id.replace('-legend-layer-check', '');
-            _this.layerGroup.allLayerLookup[lyrId].visible = this.checked;
-        });
-
-        this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () {
-            $(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change');
-        });
-
-        this.$divElement.find('.layer-group-expander').click(function () {
-            let $this = $(this);
-            $this.removeClass('legend-layer-group-initial-collapse');
-
-            $this.siblings('ul').slideToggle();
-
-            if ($this.hasClass('legend-layer-group-collapsed')){
-                $this.removeClass('legend-layer-group-collapsed');
-                $this.html('&#9660;');
-            } else {
-                $this.addClass('legend-layer-group-collapsed');
-                $this.html('&#9654;');
-            }
-        });
-
-        this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click');
-        // </editor-fold>
-    }
-
-    /**
-     * @param {Array} [legendItems=this._layerConfig] the legend items
-     * @param {Array} [parents=[]] the ordered list of groups in which this item is a member
-     * @private
-     */
-    _buildTree(legendItems, parents) {
-
-        if (legendItems.length == 0) {
-            return;
-        }
-
-        let oneItem = legendItems[0];
-
-        //reset the parent if the item is in the base array
-        if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') {
-            parents = [];
-        }
-
-        if (typeof oneItem['groupName'] !== 'undefined') {
-            let groupItem = legendItems[0];
-            let newGroup = this.layerGroup.addGroup(groupItem, parents);
-            parents.push(newGroup.groupId);
-            this._buildTree(groupItem.items, parents);
-        } else {
-            /**
-             * @type {LayerBase}
-             */
-            let layerItem = legendItems[0];
-
-            this.layerGroup.addLegendLayer(layerItem, parents);
-        }
-
-        this._buildTree(legendItems.slice(1), parents);
-    }
-
-    set showAll(val) {
-
-    }
-}
-
-nm.LayerLegend = LayerLegend;
-export default LayerLegend;
diff --git a/_src/collections/Sliders.js b/_src/collections/Sliders.js
deleted file mode 100644
index 04e7757f6483964bd977d81e8d068a5b24ce02fc..0000000000000000000000000000000000000000
--- a/_src/collections/Sliders.js
+++ /dev/null
@@ -1,536 +0,0 @@
-/**
- * Created by gavorhes on 12/10/2015.
- */
-import provide from '../util/provide';
-let nm = provide('collections');
-import $ from '../jquery/jquery';
-
-class _Slider {
-
-    /**
-     * Slider constructor
-     * @param {string} name - the slider name
-     * @param {Array} selections - the selection
-     * @param {number} wgt - weight
-     * @param {boolean} selected - if selected
-     */
-    constructor(name, selections, wgt, selected) {
-        //let _this = this;
-        this.name = name;
-        this.domId = name.toLowerCase().replace(/ /g, '-');
-        this._weight = wgt;
-        this._weightDefault = this._weight;
-
-        this.selectedParam = null;
-        this.selectedParamDefault = null;
-
-        this._locked = false;
-
-        this._min = 0.0;
-        this._max = 100;
-
-        this.labelLow = null;
-        this.labelHigh = null;
-        this.labelVal = null;
-        this.slider = null;
-        this.chk = null;
-
-        this.atMin = this._weight == this._min;
-        this.atMax = this._weight == this._max;
-
-
-        let sel = `<select class="${selections.length == 1 ? 'hidden-select' : 'show-select'}" id="${this.domId}_chg">`;
-        for (let i = 0; i < selections.length; i++) {
-            let itm = selections[i][0];
-            let itmSelected = itm === selected;
-
-            sel += `<option value="${itm}" ${itmSelected ? ' selected="selected"' : ''}>${selections[i][1]}</option>`;
-            if (itmSelected) {
-                this.selectedParam = itm;
-            }
-        }
-        sel += '</select>';
-
-        this.selectedParamDefault = this.selectedParam;
-
-        this.html = '<div class="slider-div">' +
-            `<label for="${this.domId}_chk" class="slider-label">${this.name}</label>` +
-            sel + `<br>` +
-            `<input id="${this.domId}_chk" type="checkbox" title="Lock/Unlock Slider">` +
-            `<label id="${this.domId}_low" class="low-high">${this._min.toFixed(1)}</label>` +
-            `<input id="${this.domId}" type="range" value="${this._weight.toFixed(1)}" min="0" max="100" step="0.1">` +
-            `<label id="${this.domId}_high" class="low-high">${this._max.toFixed(1)}</label>` +
-            `<label id="${this.domId}_lbl" for="${this.domId}" class="percent-label">${this._weight.toFixed(1)}%</label></div>`;
-    }
-
-    /**
-     * add html to dom
-     * @param {jQuery} $container - container element
-     */
-    addToDom($container) {
-        $container.append(this.html);
-        this.labelLow = $(`#${this.domId}_low`);
-        this.labelHigh = $(`#${this.domId}_high`);
-        this.labelVal = $(`#${this.domId}_lbl`);
-        this.slider = $(`#${this.domId}`);
-        this.selectionBox = $(`#${this.domId}_chg`);
-        this.chk = $(`#${this.domId}_chk`);
-    }
-
-    /**
-     * increment the slider
-     * @param {number} delta change delta
-     * @returns {number} the remainder not able to be allocated to this slider
-     */
-    increment(delta) {
-        let remainder = 0;
-        delta = Number(delta.toFixed(1));
-
-        this._weight += delta;
-        if (this._weight < this._min) {
-            remainder = this._min - this._weight;
-            this._weight = this._min;
-            this.atMin = true;
-        } else if (this._weight > this._max) {
-            remainder = this._max - this._weight;
-            this._weight = this._max;
-            this.atMax = true;
-        } else {
-            this.atMin = false;
-            this.atMax = false;
-        }
-
-        this.slider.val(this._weight.toFixed(1));
-        this.labelVal.html(this._weight.toFixed(1) + '%');
-
-        return remainder;
-    }
-
-    /**
-     * reset to the original values
-     */
-    reset() {
-        this.weight = this._weightDefault;
-        this.slider.val(this._weightDefault.toFixed(1));
-        this.selectionBox.val(this.selectedParamDefault);
-        this.chk.attr('checked', false);
-        //let event = new CustomEvent('change');
-        //this.chk[0].dispatchEvent(event);
-    }
-
-    /**
-     * set the value and drop down
-     * @param {number} newVal the new value
-     * @param {string} selectedParam the selected parameter
-     */
-    setValAndDropDown(newVal, selectedParam) {
-        this.weight = newVal;
-        this.min = 0;
-        this.max = 100;
-        this.slider.val(newVal.toFixed(1));
-        this.selectionBox.val(selectedParam);
-        this.selectedParam = selectedParam;
-        this.locked = true;
-    }
-
-    /**
-     *
-     * @returns {boolean} if locked
-     */
-    get locked() {
-        return this._locked;
-    }
-
-    /**
-     *
-     * @param {boolean} val if locked
-     */
-    set locked(val) {
-        this._locked = val;
-        this.slider.prop('disabled', this._locked);
-        this.selectionBox.prop('disabled', this._locked);
-        this.chk.prop('checked', !this._locked);
-    }
-
-    /**
-     *
-     * @returns {number} the minimum
-     */
-    get min() {
-        return this._min;
-    }
-
-    /**
-     *
-     * @param {number} newVal new minimum
-     */
-    set min(newVal) {
-        this._min = Number(newVal.toFixed(1));
-        if (this._min < 0) {
-            this._min = 0;
-        }
-        this.labelLow.html(this._min.toFixed(1));
-        this.slider.attr('min', this._min.toFixed(1));
-        this.atMin = this._weight == this._min;
-    }
-
-    /**
-     *
-     * @returns {number} the maximum
-     */
-    get max() {
-        return this._max;
-    }
-
-    /**
-     *
-     * @param {number} newVal the maximum
-     */
-    set max(newVal) {
-        this._max = Number(newVal.toFixed(1));
-        if (this._max > 100) {
-            this._max = 100.0;
-        }
-        this.labelHigh.html(this._max.toFixed(1));
-        this.slider.attr('max', this._max.toFixed(1));
-        this.atMax = this._weight == this._max;
-    }
-
-    /**
-     *
-     * @returns {number} the weight
-     */
-    get weight() {
-        return this._weight;
-    }
-
-    /**
-     *
-     * @param {number} newVal the weight
-     */
-    set weight(newVal) {
-        this._weight = Number(newVal.toFixed(1));
-        this.labelVal.html(this._weight.toFixed(1) + '%');
-        if (this._weight <= this._min) {
-            this.atMin = true;
-            this.atMax = false;
-        } else if (this._weight >= this._max) {
-            this.atMin = false;
-            this.atMax = true;
-        } else {
-            this.atMin = false;
-            this.atMax = false;
-        }
-    }
-}
-
-nm._Slider = _Slider;
-
-/**
- * class to make a slider group
- */
-class Sliders {
-    /**
-     *
-     * @param {Array} paramList list of parameters
-     * @param {string} divId the div id
-     */
-    constructor(paramList, divId) {
-        this.resetting = false;
-        this._slideFinishedFunctions = [];
-        this.reservedPercent = 0.0;
-        this.$container = $('#' + divId);
-        this.$container.addClass('slider-container');
-
-        this.sliderList = [];
-        this.sliderLookup = {};
-
-        this.total = 0;
-
-        for (let i = 0; i < paramList.length; i++) {
-            let p = paramList[i];
-
-            let sld = new _Slider(p[0], p[1], p[2], p[3]);
-            this.sliderList.push(sld);
-            this.sliderLookup[sld.domId] = sld;
-            sld.addToDom(this.$container);
-            this.total += sld._weight;
-        }
-
-        if (this.total != 100) {
-            alert('total not equal to 100');
-        }
-
-        this.lockedList = [];
-        this.inRangeList = [];
-        this.atMinList = [];
-        this.atMaxList = [];
-
-        this.lockedCount = 0;
-        this.notLockedCount = 0;
-
-        this._splitSliderArray();
-        this._addEventListeners();
-
-    }
-    
-    addSlideFinishedFunction (finishedFunction){
-        this._slideFinishedFunctions.push(finishedFunction);
-    }
-
-    /**
-     * split array into subarrays holding the sliders
-     * @private
-     */
-    _splitSliderArray() {
-        this.lockedList = [];
-        this.inRangeList = [];
-        this.atMinList = [];
-        this.atMaxList = [];
-
-        for (let i = 0; i < this.sliderList.length; i++) {
-            let sld = this.sliderList[i];
-
-            if (sld.locked) {
-                this.lockedList.push(sld);
-            } else if (sld.atMin) {
-                this.atMinList.push(sld);
-            } else if (sld.atMax) {
-                this.atMaxList.push(sld);
-            } else {
-                this.inRangeList.push(sld);
-            }
-        }
-        this.lockedCount = this.lockedList.length;
-        this.notLockedCount = this.sliderList.length - this.lockedCount;
-    }
-
-    /**
-     * handle remainder, recursive to take care of min max overshoots
-     * @param {number} remain the remainder
-     * @param {string} skipDomId - this dom id
-     * @private
-     */
-    _handleRemainder(remain, skipDomId) {
-
-        remain = Number(remain.toFixed(1));
-        if (remain == 0) {
-            return;
-        }
-
-        this._splitSliderArray();
-
-        let canChangeArray = [];
-        for (let i = 0; i < this.inRangeList.length; i++) {
-            let sld = this.inRangeList[i];
-            if (sld.domId == skipDomId) {
-                continue;
-            }
-            canChangeArray.push(sld);
-        }
-
-        if (remain > 0) {
-            for (let i = 0; i < this.atMaxList.length; i++) {
-                let sld = this.atMaxList[i];
-                if (sld.domId == skipDomId) {
-                    continue;
-                }
-                canChangeArray.push(sld);
-            }
-        } else {
-            for (let i = 0; i < this.atMinList.length; i++) {
-                let sld = this.atMinList[i];
-                if (sld.domId == skipDomId) {
-                    continue;
-                }
-                canChangeArray.push(sld);
-            }
-        }
-
-        if (canChangeArray.length == 0) {
-            return;
-        }
-
-        let inc = -1 * Number((remain / canChangeArray.length).toFixed(1));
-
-        let newRemainder = 0;
-        for (let i = 0; i < canChangeArray.length; i++) {
-            newRemainder += canChangeArray[i].increment(inc);
-        }
-
-        this._handleRemainder(newRemainder, skipDomId);
-    }
-
-    /**
-     * reset all
-     */
-    reset() {
-        this.resetting = true;
-        for (let i = 0; i < this.sliderList.length; i++) {
-            let sld = this.sliderList[i];
-            sld.reset();
-        }
-        this.resetting = false;
-
-        if (this._slideFinishedFunctions != null) {
-            this._slideFinishedFunctions();
-        }
-    }
-
-    /**
-     *
-     * @param {object} keyValList key and value list
-     */
-    setValues(keyValList) {
-        this.resetting = true;
-        for (let k in keyValList) {
-            if (keyValList.hasOwnProperty(k)) {
-                this.sliderLookup[k].setValAndDropDown(keyValList[k][0], keyValList[k][1]);
-            }
-        }
-        this.resetting = false;
-    }
-
-    /**
-     * get the weight sum
-     * @returns {number} the weight sum
-     */
-    getSum () {
-        let total = 0;
-        for (let i = 0; i < this.sliderList.length; i++) {
-            let sld = this.sliderList[i];
-            total += Number(sld.weight.toFixed(1));
-        }
-
-        return total;
-    }
-
-    /**
-     * get the parameter weights
-     * @returns {object} lookup with parameter weights
-     */
-    getParams  () {
-        let paramWeights = {};
-        for (let i = 0; i < this.sliderList.length; i++) {
-            let sld = this.sliderList[i];
-            paramWeights[sld.selectedParam] = Number(sld.weight.toFixed(1));
-        }
-
-        return paramWeights;
-    }
-
-    _addEventListeners() {
-        let _this = this;
-
-        //change function
-        this.$container.find('input[type="range"]').change(function () {
-                if (_this.resetting) {
-                    return;
-                }
-
-                let $this = $(this);
-                let domId = this['id'];
-                let sldr = _this.sliderLookup[domId];
-
-                let newValue = parseFloat($this.val());
-
-                let oldValue = sldr.weight;
-                let diff = newValue - oldValue;
-                diff = Number(diff.toFixed(1));
-
-                sldr.weight = Number(newValue.toFixed(1));
-
-                _this._handleRemainder(diff, domId);
-
-                //cleanup, make sure the sum is still 100
-                let sum = Number(_this.getSum().toFixed(1));
-
-                if (sum > 100) {
-                    loop1:
-                        while (true) {
-                            for (let i = 0; i < _this.sliderList.length; i++) {
-                                let sld = _this.sliderList[i];
-                                if (sld.domId == domId || sld.locked || sld.atMin) {
-                                    continue;
-                                }
-                                sld.increment(-0.1);
-                                sum -= 0.1;
-                                if (sum.toFixed(1) == '100.0') {
-                                    break loop1;
-                                }
-                            }
-                        }
-                } else if (sum < 100) {
-                    loop1:
-                        while (true) {
-                            for (let i = 0; i < _this.sliderList.length; i++) {
-                                let sld = _this.sliderList[i];
-                                if (sld.domId == domId || sld.locked || sld.atMax) {
-                                    continue;
-                                }
-                                sld.increment(0.1);
-                                sum += 0.1;
-                                if (sum.toFixed(1) == '100.0') {
-                                    break loop1;
-                                }
-                            }
-                        }
-                }
-
-                for (let i = 0; i < _this._slideFinishedFunctions.length; i++) {
-                    _this._slideFinishedFunctions[i]();
-                }
-            }
-        );
-
-        //update the selected parameter when the selection is changed
-        $('.show-select').change(function () {
-            if (_this.resetting) {
-                return;
-            }
-            _this.sliderLookup[this['id'].replace('_chg', '')].selectedParam = $(this).val();
-        });
-
-        //lock the slider and update the reserved percent
-        this.$container.find('input[type="checkbox"]').change(function () {
-            let domEl = this;
-
-            _this.sliderLookup[domEl.id.replace('_chk', '')].locked = !domEl.checked;
-            _this.reservedPercent = 0.0;
-            _this.notLockedCount = 0;
-
-            let notLockedSliders = [];
-
-            for (let i = 0; i < _this.sliderList.length; i++) {
-                let sld = _this.sliderList[i];
-                if (sld.locked) {
-                    _this.reservedPercent += sld.weight;
-                    continue;
-                }
-                notLockedSliders.push(sld);
-                _this.notLockedCount++;
-            }
-
-            for (let i = 0; i < _this.sliderList.length; i++) {
-                let sld = _this.sliderList[i];
-                if (sld.locked) {
-                    continue;
-                }
-                sld.max = 100 - _this.reservedPercent;
-            }
-
-            if (notLockedSliders.length == 1) {
-                notLockedSliders[0].min = notLockedSliders[0].weight;
-            } else {
-                for (let i = 0; i < notLockedSliders.length; i++) {
-                    notLockedSliders[i].min = 0;
-                }
-            }
-        });
-
-    }
-}
-
-nm.Sliders = Sliders;
-window.gv['collections'].Sliders = Sliders;
-export default Sliders;
diff --git a/_src/domUtil/SelectBoxBase.js b/_src/domUtil/SelectBoxBase.js
deleted file mode 100644
index 1a23b15096a1d122010679f8766e814c31e4f36d..0000000000000000000000000000000000000000
--- a/_src/domUtil/SelectBoxBase.js
+++ /dev/null
@@ -1,124 +0,0 @@
-/**
- * Created by gavorhes on 5/13/2016.
- */
-/**
- * Created by gavorhes on 5/12/2016.
- */
-import makeGuid from 'webmapsjs/src/util/makeGuid';
-import provide from 'webmapsjs/src/util/provide';
-const nm = provide('ssa.select');
-
-
-class SelectBoxBase{
-    
-    /**
-     *
-     * @param {jQuery} parent - parent container
-     * @param {string} labelContent
-     * @param {contentGenFunc} [contentGen=undefined] 
-     */
-    constructor(parent, labelContent, contentGen){
-        let guidTop = makeGuid();
-        let guid = makeGuid();
-
-        let htmlString = `<div id="${guidTop}">`;
-        htmlString += `<label for="${guid}">${labelContent}</label>`;
-
-        if (contentGen){
-            htmlString += contentGen(guid);
-        } else {
-            htmlString += `<select id="${guid}"></select>`;
-        }
-        htmlString += '</div>';
-
-        parent.append(htmlString);
-
-        this._$container = parent.find('#' + guidTop);
-
-        this.$label = this._$container.find('label');
-
-        /**
-         *
-         * @type {Array<changeListener>}
-         * @private
-         */
-        this._changeListeners = [];
-        
-        /**
-         * reference to the selector box
-         * @protected
-         * @type {jQuery}
-         */
-        this._box = parent.find(`#${guid}`);
-        
-        if (!this._box){
-            throw 'the select box was not found';
-        }
-
-        this._box.change(() => {
-            this.changed();
-        })
-    }
-
-    /**
-     * 
-     * @returns {jQuery}
-     */
-    get box(){
-        return this._box;
-    }
-
-    changed(){
-        let v = this._box.val();
-        
-        for (let f of this._changeListeners){
-            f(v);
-        }
-    }
-
-    /**
-     *
-     * @param {changeListener} func
-     */
-    addChangeListener(func){
-        this._changeListeners.push(func);
-    }
-
-    /**
-     *
-     * @returns {string|number}
-     */
-    get selectedValue(){
-        let theVal = this.box.val();
-
-        if (theVal == null || typeof theVal == 'undefined'){
-            return null;
-        } else if (isNaN(theVal)){
-            return theVal
-        } else {
-            if (theVal.indexOf('.') > -1){
-                return parseFloat(theVal)
-            } else {
-                return parseInt(theVal);
-            }
-        }
-    }
-
-    /**
-     *
-     * @param {string|number} v
-     * @protected
-     */
-    set selectedValue(v){
-        this.box.val(v);
-    }
-    
-    get selectedText(){
-        return this.box.find('option:selected').text();
-    }
-
-}
-
-nm.SelectBoxBase = SelectBoxBase;
-
-export default SelectBoxBase;
diff --git a/_src/gulp-helpers.js b/_src/gulp-helpers.js
deleted file mode 100644
index b5f91c5478fee5083dd00729a867711667cef5e0..0000000000000000000000000000000000000000
--- a/_src/gulp-helpers.js
+++ /dev/null
@@ -1,168 +0,0 @@
-/**
- * Created by gavorhes on 5/10/2016.
- * Helpers functions for gulp tasks
- */
-
-const gulp = require('gulp');
-const babel = require('gulp-babel');
-const babelify = require('babelify');
-const browserify = require('browserify');
-const buffer = require('vinyl-buffer');
-const source = require('vinyl-source-stream');
-const sourcemaps = require('gulp-sourcemaps');
-const minify = require('gulp-minify');
-const less = require('gulp-less');
-const cssmin = require('gulp-cssmin');
-const rename = require('gulp-rename');
-const glob = require('glob');
-const watchify = require('watchify');
-const gulpUtil = require('gulp-util');
-
-
-/**
- * @typedef {object} dirNameFilePath
- * @property {string} dirName - directory name
- * @property {string} fileName - file name
- */
-
-/**
- * get directory and file name from output path
- * @param {string} outputFile - output file path
- * @returns {dirNameFilePath} file directory and path
- * @private
- */
-function _processOutDir(outputFile) {
-    "use strict";
-
-    let pathParts = outputFile.split('/');
-    let outFileName = pathParts[pathParts.length - 1];
-    pathParts.splice(pathParts.length - 1, 1);
-    let outDir = pathParts.length === 0 ? '.' : pathParts.join('/');
-
-    return {dirName: outDir, fileName: outFileName};
-}
-
-/**
- *
- * @param {string} inputFile - input file set to null to bundle everything in 'test' directory
- * @param {dirNameFilePath|string} outFile - output file as string or path object
- * @param {boolean} [production=false] if production, minify and don't watch
- * @returns {*} the stream
- * @private
- */
-export function bundleEs2015(inputFile, outFile, production) {
-    "use strict";
-
-
-
-    if (typeof outFile == 'string') {
-        outFile = _processOutDir(outFile);
-    }
-
-    production = typeof production == 'boolean' ? production : false;
-
-    if (inputFile.indexOf('*') > -1) {
-        inputFile = glob.sync(inputFile);
-    }
-
-
-    let bundler = browserify({
-        entries: inputFile,
-        cache: {},
-        packageCache: {},
-        debug: true
-    });
-
-    
-    bundler.transform(babelify.configure({
-        presets: ["es2015"],
-        ignore: /ol\-build\.js|jquery\.min/
-        // ignore: /ol\-build\.js|jquery\.min|\/node_modules\/(?!webmapsjs\/)|\/node_modules\/webmapsjs\/(?!lib\/)/
-    }));
-
-    if (!production) {
-        bundler = watchify(bundler);
-    }
-
-
-    function runBundle() {
-        console.log(inputFile);
-        let stream = bundler.bundle()
-            .on('error', function (err) {
-                console.error(err);
-            })
-            .pipe(source(outFile.fileName))
-            .pipe(buffer())
-            .pipe(sourcemaps.init({loadMaps: true}));
-
-        if (production) {
-            stream = stream.pipe(minify({
-                ext: {
-                    src: '-debug.js',
-                    min: '.js'
-                },
-                exclude: ['tasks'],
-                ignoreFiles: ['.combo.js', '-min.js']
-            }));
-        }
-
-        return stream.pipe(sourcemaps.write('./')).pipe(gulp.dest(outFile.dirName));
-    }
-
-    if (!production) {
-        bundler.on('update', runBundle);
-        bundler.on('log', gulpUtil.log);
-    }
-
-    return runBundle();
-}
-
-
-/**
- * convert less file
- * @param {string} inputFile - input less file
- * @param {string} outputFile - output css file
- * @returns {*} stream
- */
-export function processLessFile(inputFile, outputFile) {
-    "use strict";
-
-    let pathParts = outputFile.split('/');
-    let outFileName = pathParts[pathParts.length - 1];
-    pathParts.splice(pathParts.length - 1, 1);
-    let outDir = pathParts.length === 0 ? '.' : pathParts.join('/');
-
-    let fileNameParts = outFileName.split('.');
-
-    return gulp.src(inputFile)
-        .pipe(less().on('error', function (err) {
-            console.log(err);
-        }))
-        .pipe(cssmin().on('error', function (err) {
-            console.log(err);
-        }))
-        .pipe(rename({
-            basename: fileNameParts[0],
-            extname: '.' + fileNameParts[1],
-            suffix: '.min'
-        }))
-        .pipe(gulp.dest(outDir));
-}
-
-/**
- * make multiple bundles
- * @param {Array<Array<string>>} fileArray - array with elements [input file, output file]
- * @param {boolean} production - if is production
- * @returns {*} output stream
- */
-export function bundleEs2015Multiple(fileArray, production) {
-    "use strict";
-
-    let outStream = undefined;
-
-    for (let f of fileArray) {
-        outStream = bundleEs2015(f[0], f[1], production);
-    }
-
-    return outStream;
-}
diff --git a/_src/jquery-plugin/animate-buttons.js b/_src/jquery-plugin/animate-buttons.js
deleted file mode 100644
index c5fcecda6d7f88811c3e132f5d8de40ce8e22907..0000000000000000000000000000000000000000
--- a/_src/jquery-plugin/animate-buttons.js
+++ /dev/null
@@ -1,236 +0,0 @@
-
-
-/**
- * Created by gavorhes on 11/2/2015.
- */
-
-import $ from '../jquery/jquery';
-import provide from '../util/provide';
-import {} from './range-change';
-
-
-let nm = provide('jQueryPlugin');
-
-/**
- * @callback mediaCallback
- * @param {number} tm
- */
-
-function timeToLocalDateString(tm) {
-    "use strict";
-    let d = new Date(tm);
-    let p1 = d.toLocaleTimeString().split(' ');
-    let p2 = p1[0].split(':');
-    p2 = p2.slice(0, 2);
-
-    return d.toLocaleDateString() + '<br>' + p2.join(':') + ' ' + p1[1];
-}
-
-
-class MediaControl {
-    constructor(jQueryElement, min, max, val, step, func, playInterval, dateFormat) {
-
-        this._container = jQueryElement;
-        this._playInterval = playInterval;
-        this._interval = undefined;
-        this._func = func;
-
-        this._dateFormat = dateFormat;
-
-        this._currentValue = undefined;
-        this._min = undefined;
-        this._max = undefined;
-        this._step = undefined;
-        this._playing = false;
-
-        let htmlStr =
-            '<span class="media-player-button media-back"></span>' +
-            '<span class="media-player-button media-play"></span>' +
-            '<span class="media-player-button media-pause media-disabled"></span>' +
-            '<span class="media-player-button media-stop media-disabled" ></span>' +
-            '<span class="media-player-button media-ahead"></span>' +
-            `<input type="range">` +
-            `<div class="media-control-value-label-container">` +
-            `<span class="media-control-value-label-min"></span>` +
-            `<span class="media-control-value-label-val"></span>` +
-            `<span class="media-control-value-label-max"></span>` +
-            `</div>`;
-
-        this._container.append(htmlStr);
-
-        let btnPause = this._container.find('.media-pause');
-        let btnPlay = this._container.find('.media-play');
-        this._$btnStop = this._container.find('.media-stop');
-        let btnAhead = this._container.find('.media-ahead');
-        let btnBack = this._container.find('.media-back');
-        this._$slider = this._container.find('input[type=range]');
-
-        this._$valLabelMin = this._container.find('.media-control-value-label-min');
-        this._$valLabelVal = this._container.find('.media-control-value-label-val');
-        this._$valLabelMax = this._container.find('.media-control-value-label-max');
-
-        this.setMinMaxValueStep(min, max, val, step);
-
-
-        let _this = this;
-
-        this._$slider.rangeChange(function (newVal, ratio, evt) {
-            _this.currentValue = newVal;
-        }, 100);
-
-        btnPlay.click(function () {
-            let $this = $(this);
-            $this.addClass('media-disabled');
-            _this._$btnStop.removeClass('media-disabled');
-            btnAhead.addClass('media-locked');
-            btnBack.addClass('media-locked');
-            _this._$slider.prop('disabled', true);
-            _this._playing = true;
-
-            _this._interval = setInterval(function () {
-                _this.currentValue += _this._step;
-            }, _this._playInterval);
-        });
-
-        this._$btnStop.click(function () {
-            clearInterval(_this._interval);
-            let $this = $(this);
-            $this.addClass('media-disabled');
-            btnPlay.removeClass('media-disabled');
-            btnAhead.removeClass('media-locked');
-            btnBack.removeClass('media-locked');
-            _this._$slider.prop('disabled', false);
-            _this._playing = false;
-        });
-
-        btnAhead.click(function () {
-            _this.currentValue = _this.currentValue + _this._step;
-        });
-
-        btnBack.click(function () {
-            _this.currentValue = _this.currentValue - _this._step;
-        });
-    }
-
-    stopPlaying(){
-        if (this._playing){
-            this._$btnStop.trigger('click');
-        }
-    }
-
-    get playing(){
-        return this._playing;
-    }
-
-    get min() {
-        return this._min;
-    }
-
-    get max() {
-        return this._max;
-    }
-
-    get step() {
-        return this._step;
-    }
-
-    get currentValue() {
-        return this._currentValue;
-    }
-
-    set currentValue(newValue) {
-        if (newValue > this._max) {
-            newValue = this._min;
-        } else if (newValue < this._min) {
-            newValue = this._max;
-        }
-        this._currentValue = newValue;
-        this._$slider.val(this._currentValue.toFixed(2));
-
-        if (this._dateFormat) {
-            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
-        } else {
-            this._$valLabelVal.html(this.currentValue.toString());
-        }
-
-        this._func(newValue);
-    }
-
-    /**
-     * set min and max value with step
-     * @param {number} newMin the new min
-     * @param {number} newMax the new mas
-     * @param {number} [newValue=newMin] the value to set
-     * @param {number} [newStep=(newMax-newMin)/20] step value
-     */
-    setMinMaxValueStep(newMin, newMax, newValue, newStep) {
-        this._min = newMin;
-        this._max = newMax;
-
-        newValue = typeof newValue == 'number' ? newValue : newMin;
-        newStep = typeof newStep == 'number' ? newStep : (newMax-newMin)/20;
-
-        this._currentValue = newValue;
-        this._step = newStep;
-
-        this._$slider.prop('min', this.min.toString());
-        this._$slider.prop('max', this.max.toString());
-        this._$slider.prop('step', this.step.toString());
-        this._$slider.val(this.currentValue.toString());
-
-        if (this._dateFormat) {
-            this._$valLabelMin.html(timeToLocalDateString(this._min));
-            this._$valLabelVal.html(timeToLocalDateString(this.currentValue));
-            this._$valLabelMax.html(timeToLocalDateString(this._max));
-        } else {
-            this._$valLabelMin.html(this._min.toString());
-            this._$valLabelVal.html(this.currentValue.toString());
-            this._$valLabelMax.html(this._max.toString());
-        }
-    }
-
-    /**
-     *
-     * @param {mediaCallback} newFunc the callback on change
-     */
-    set changeFunction(newFunc) {
-        this._func = newFunc;
-    }
-}
-
-nm.MediaControl = MediaControl;
-
-
-/**
- * Adds a media control to a container
- * @param {number} [min=0] the min
- * @param {number} [max=100] the max
- * @param {number} [val=0] the val
- * @param {number} [step=1] the step
- * @param {mediaCallback} [func=function (n) {console.log('default function', n);}] media change callback function
- * @param {number} [playInterval=500] play interval
- * @param {boolean} [dateFormat=false] date format
- * @this {jQuery}
- * @returns {MediaControl} the Media control object
- */
-$.fn.mediaControl = function (min, max, val, step, func, playInterval, dateFormat) {
-
-    min = typeof min == 'number' ? min : 0;
-    max = typeof max == 'number' ? max : 100;
-    val = typeof val == 'number' ? val : 0;
-    step = typeof step == 'number' ? step : 1;
-    func = typeof func == 'function' ? func : function (n) {
-        console.log('default function', n);
-    };
-
-    playInterval = typeof playInterval == 'number' ? playInterval : 500;
-    dateFormat = typeof dateFormat == 'boolean' ? dateFormat : false;
-
-    this.addClass('media-control-container');
-
-    return new MediaControl(this, min, max, val, step, func, playInterval, dateFormat);
-};
-
-
-
-export default undefined;
diff --git a/_src/jquery-plugin/day-range.js b/_src/jquery-plugin/day-range.js
deleted file mode 100644
index af416ea9ee5e3b7433882693e2347b4f214624c8..0000000000000000000000000000000000000000
--- a/_src/jquery-plugin/day-range.js
+++ /dev/null
@@ -1,102 +0,0 @@
-import $ from '../jquery/jquery';
-import '../jquery/jquery-ui';
-import provide from '../util/provide';
-let nm = provide('jQueryPlugin');
-
-
-
-class DayRange {
-
-    /**
-     * constructor for the date range
-     * @param {number} dayRange number of days
-     * @param {jQuery|HTMLElement|*} jQueryRef reference to the jquery element
-     */
-    constructor(dayRange, jQueryRef) {
-        this._workingDayRange = dayRange - 1;
-
-        let pickerHtml = '<label for="start-date" style="width: 78px; display: inline-block; margin:5px;">Start Date</label>' +
-            '<input type="text" readonly id="start-date" class="date-pick"  style="width: 90px;">' +
-            '<br><label for="end-date" style="width: 78px; display: inline-block;  margin:5px;">End Date</label>' +
-            '<input type="text" readonly id="end-date" class="date-pick" style="width: 90px;">';
-
-        jQueryRef.append(pickerHtml);
-
-        this._$startDate = $('#start-date');
-        this._$endDate = $('#end-date');
-
-        this._$startDate.datepicker();
-        this._$endDate.datepicker();
-
-        this._startDate = null;
-        this._endDate = null;
-
-        let dte1 = new Date();
-        dte1.setHours(0, 0, 0, 0);
-        let dte2 = new Date(dte1.getTime());
-        dte2.setDate(dte2.getDate() + dayRange);
-        dte2.setHours(23, 59, 59, 0);
-        this._maxDateRange = dte2 - dte1;
-
-        let _this = this;
-
-        //add event listeners
-        this._$startDate.change(function () {
-            _this.startDate = this.value;
-        });
-
-        this._$endDate.change(function () {
-            _this.endDate = this.value;
-        });
-
-        // initialize
-        this.endDate = (new Date()).getTime();
-    }
-
-    get startDate() {
-        return this._startDate;
-    }
-
-    set startDate(val) {
-        this._startDate = new Date(val);
-        this._startDate.setHours(0, 0, 0, 0);
-        this._$startDate.val(this._startDate.toLocaleDateString());
-
-        if (this.endDate == null || this._endDate - this._startDate > this._maxDateRange || this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {
-            let tmpDate = new Date(this._startDate.getTime());
-            tmpDate.setDate(tmpDate.getDate() + this._workingDayRange);
-            this.endDate = tmpDate.getTime();
-        }
-    }
-
-    get endDate() {
-        return this._endDate;
-    }
-
-
-    set endDate(val) {
-        this._endDate = new Date(val);
-        this._endDate.setHours(23, 59, 59, 0);
-        this._$endDate.val(this._endDate.toLocaleDateString());
-        if (this._startDate == null || this._endDate - this.startDate > this._maxDateRange || this._endDate.getTime() - this._startDate.getTime() < 24 * 60 * 60 * 1000) {
-            let tmpDate = new Date(this._endDate.getTime());
-            tmpDate.setDate(tmpDate.getDate() - this._workingDayRange);
-            this.startDate = tmpDate.getTime();
-        }
-    }
-}
-
-nm.DayRange = DayRange;
-let jQuery = $;
-
-/**
- * Adds day range control
- * @param {number} dayRange the number of days
- * @returns {DayRange} the day range object
- */
-jQuery.fn.dayRange = function (dayRange) {
-    return new DayRange(dayRange, this);
-};
-
-export default DayRange;
-
diff --git a/_src/jquery-plugin/range-change.js b/_src/jquery-plugin/range-change.js
deleted file mode 100644
index a3bc9d20e23ff79af14c4e3c392757cf1e95b897..0000000000000000000000000000000000000000
--- a/_src/jquery-plugin/range-change.js
+++ /dev/null
@@ -1,127 +0,0 @@
-
-
-import $ from '../jquery/jquery';
-let mouseIn = false;
-let mouseDown = false;
-let timeout = null;
-let dragged = false;
-let lastVal;
-
-
-
-/**
- * Created by gavorhes on 11/2/2015.
- */
-
-function triggerCallback(callback, evt) {
-    "use strict";
-
-    let val = parseFloat(this.value);
-    let min = parseFloat(this.min);
-    let max = parseFloat(this.max);
-    let step = parseFloat(this.step);
-
-    if (max - val < step){
-        val = max;
-    }
-
-    let percent =  (val - min) / (max - min);
-
-    if (typeof lastVal == 'number' && val ==  lastVal){
-        return;
-    }
-    lastVal = val;
-    callback(val, percent, evt);
-}
-
-/**
- * callback on range change interaction, context of this is the firing dom element
- * @callback rangeChangeCallback
- * @param {number} newValue
- * @param {number} ratio value from 0 to 1 relative of the value to the min and max
- * @param {object} evt
- */
-
-/**
- * Add a variety of listeners for range inputs applied to a common callback
- * @param {rangeChangeCallback} callback - the callback
- * @param {number} [changeTimeout=75] before the callback is called
- * @this {jQuery}
- * @returns {jQuery} the jQuery object
- */
-$.fn.rangeChange = function (callback, changeTimeout) {
-
-    changeTimeout = typeof  changeTimeout == 'number' ? changeTimeout : 75;
-
-    this.mouseenter(function () {
-        mouseIn = true;
-    });
-
-    this.mouseleave(function () {
-        mouseIn = false;
-        mouseDown = false;
-    });
-
-    this.mousedown(function () {
-        mouseDown = true;
-    });
-
-    this.mouseup(function () {
-        mouseDown = false;
-    });
-
-    this.mousemove(
-        /**
-         *
-         * @param {object} evt - event properties
-         * @this {HTMLElement}
-         */
-        function (evt) {
-        if (!(mouseIn && mouseDown)) {
-            return;
-        }
-
-        dragged = true;
-
-        if (lastVal == this['value']) {
-            return;
-        }
-        lastVal = this['value'];
-
-        if (timeout != null) {
-            clearTimeout(timeout);
-        }
-
-        let _this = this;
-
-        timeout = setTimeout(function () {
-            triggerCallback.call(_this, callback, evt);
-            timeout = null;
-
-        }, changeTimeout);
-    });
-
-    this.keyup(
-        /**
-         *
-         * @param {object} evt - event properties
-         */
-        function (evt) {
-        if (evt.keyCode == 37 || evt.keyCode == 39) {
-            triggerCallback.call(this, callback, evt);
-        }
-    });
-
-    this.change(function (evt) {
-        if (dragged) {
-            dragged = false;
-
-            return;
-        }
-        triggerCallback.call(this, callback, evt);
-    });
-
-    return this;
-};
-
-export default undefined;
diff --git a/_src/jquery/floatthead.js b/_src/jquery/floatthead.js
deleted file mode 100644
index 2bafd50ace2d3a6524548b419b742ff5080a85c4..0000000000000000000000000000000000000000
--- a/_src/jquery/floatthead.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Created by gavorhes on 6/22/2016.
- */
-const $ = require('jquery');
-global.jQuery = $;
-
-require('floatthead');
-
-
-/**
- * implement the default window scroll
- * @param {jQuery} $table - jquery reference to table
- * @param {object} [options={}] float options
- */
-export function windowScroll($table, options){
-    "use strict";
-    options = options || {};
-
-    $table.floatThead(options);
-}
-
-/**
- *
- * @param {jQuery} $table - jquery reference to table
- * @param {jQuery} $tableContainer - jquery reference to table
- * @param {object} [options={}] float options
- */
-export function overflowScroll($table, $tableContainer, options){
-    "use strict";
-    options = options || {};
-
-    options.scrollContainer = (t) => {
-        return $tableContainer;
-    };
-
-    $table.floatThead(options);
-}
-
-/**
- *
- * @param {jQuery} $table - jquery reference to table
- * @param {jQuery} $responsiveContainer - jquery reference to table
- * @param {object} [options={}] float options
- */
-export function responsiveScroll($table, $responsiveContainer, options){
-    "use strict";
-    options = options || {};
-
-    options.responsiveContainer = (t) => {
-        return $responsiveContainer;
-    };
-
-    $table.floatThead(options);
-}
diff --git a/_src/jquery/jquery-layout.js b/_src/jquery/jquery-layout.js
deleted file mode 100644
index 26469b07059e17e3d16531d4c5184def92e96620..0000000000000000000000000000000000000000
--- a/_src/jquery/jquery-layout.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Created by gavorhes on 5/23/2016.
- */
-
-
-require('jquery-layout');
-
-export default undefined;
\ No newline at end of file
diff --git a/_src/jquery/jquery-ui.js b/_src/jquery/jquery-ui.js
deleted file mode 100644
index f72c312e45d9eb97b2ca2467b0420a6897e05646..0000000000000000000000000000000000000000
--- a/_src/jquery/jquery-ui.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * Created by gavorhes on 5/23/2016.
- */
-
-require('jquery-ui');
-
-export default undefined;
diff --git a/_src/jquery/jquery.js b/_src/jquery/jquery.js
deleted file mode 100644
index 2cf83a378acb2717b23f1d6641edb57e40567924..0000000000000000000000000000000000000000
--- a/_src/jquery/jquery.js
+++ /dev/null
@@ -1,6 +0,0 @@
-const jQuery = require('jquery');
-
-export default jQuery;
-
-
-
diff --git a/_src/layers/LayerBase.js b/_src/layers/LayerBase.js
deleted file mode 100644
index ff34db4b4ad80275be6e82a05365912f2893fa1d..0000000000000000000000000000000000000000
--- a/_src/layers/LayerBase.js
+++ /dev/null
@@ -1,373 +0,0 @@
-import $ from '../jquery/jquery';
-import makeGuid from '../util/makeGuid';
-import * as zoomResolutionConvert from '../olHelpers/zoomResolutionConvert';
-import provide from '../util/provide';
-const nm = provide('layers');
-
-/**
- * The base layer class
- * @abstract
- */
-class LayerBase {
-    /**
-     * The base layer for all others
-     * @param {string} url - url for source
-     * @param {object} options - config
-     * @param {string} [options.id=makeGuid()] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] - the z index for the layer
-     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend
-     */
-    constructor(url, options) {
-        options = options || {};
-
-        if (typeof url !== 'string') {
-            throw 'Invalid URL';
-        }
-        this._url = url;
-        
-        
-        
-        this._params = typeof options.params == 'object' ? options.params : {};
-        this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;
-        this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;
-
-        this.id = options.id || makeGuid();
-        this._name = options.name || 'Unnamed Layer';
-        this.animate = false;
-        this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;
-
-        if (this._opacity > 1) {
-            this._opacity = 1;
-        } else if (this._opacity < 0) {
-            this._opacity = 0;
-        }
-
-        this._visible = typeof options.visible === 'boolean' ? options.visible : true;
-        
-        this._source = undefined;
-
-        /**
-         * 
-         * @protected
-         */
-        this._olLayer = undefined;
-        this._loaded = false;
-
-        this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);
-        if (typeof this._maxResolution !== 'undefined') {
-            this._maxResolution += 0.00001;
-        }
-        this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);
-
-        this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;
-        this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;
-        this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;
-
-        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {
-        };
-
-
-        this._legendContent = '';
-
-        if (this._legendCheckbox) {
-            this._legendContent += `<input type="checkbox" ${this.visible ? 'checked' : ''} ` +
-                `class="legend-check" id="${this.id}-legend-layer-check"><span></span>`;
-            this._legendContent += `<label for="${this.id}-legend-layer-check" class="legend-layer-name">${this.name}</label>`;
-        } else {
-            this._legendContent += `<label class="legend-layer-name">${this.name}</label>`;
-        }
-
-        this._$legendDiv = null;
-        this._applyCollapseCalled = false;
-        this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);
-    }
-
-    /**
-     * base load function, sets _loaded = true if it is not already
-     * @protected
-     * @returns {boolean} if already loaded
-     */
-    _load() {
-        if (this.loaded == true) {
-            return true;
-        } else {
-            this._loaded = true;
-
-            return false;
-        }
-    }
-
-    /**
-     * Get the legend html, be sure to only add to the DOM once
-     * @returns {string} html for layer wrapped in a div
-     */
-    getLegendDiv() {
-        return `<div class="legend-layer-div" id="${this.id}-legend-layer-div">${this._legendContent}</div>`;
-    }
-
-    /**
-     *
-     * @param {string|undefined} additionalContent - additional content to add to legend
-     * @private
-     */
-    _addLegendContent(additionalContent) {
-        additionalContent = typeof additionalContent == 'string' ? additionalContent : '';
-
-        let addCollapse = additionalContent.indexOf('<ul>') > -1;
-
-        if (addCollapse) {
-            additionalContent = '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span>' + additionalContent;
-        }
-
-        this._legendContent += additionalContent;
-
-        this._$legendDiv = $(`#${this.id}-legend-layer-div`);
-
-        if (this._$legendDiv.length > 0) {
-            this._$legendDiv.append(additionalContent);
-            this.applyCollapse();
-        }
-    }
-
-    /**
-     * add additional content to the legend
-     * @param {string} [additionalContent=] - additonal content to add
-     */
-    addLegendContent(additionalContent) {
-        this._addLegendContent(additionalContent);
-    }
-
-    applyCollapse() {
-        if (this._applyCollapseCalled) {
-            console.log('collapse already applied');
-
-            return undefined;
-        }
-
-        this._$legendDiv = $(`#${this.id}-legend-layer-div`);
-
-        if (this._$legendDiv.length > 0) {
-
-            let $expander = this._$legendDiv.find('.legend-items-expander');
-
-            if ($expander.length > 0) {
-                this._applyCollapseCalled = true;
-
-                $expander.click(function () {
-                    let $this = $(this);
-
-                    $this.siblings('ul').slideToggle();
-
-                    if ($this.hasClass('legend-layer-group-collapsed')) {
-                        $this.removeClass('legend-layer-group-collapsed');
-                        $this.html('&#9660;');
-                    } else {
-                        $this.addClass('legend-layer-group-collapsed');
-                        $this.html('&#9654;');
-                    }
-                });
-
-                if (this._legendCollapse) {
-                    $expander.trigger('click');
-                }
-            }
-        }
-    }
-
-    /**
-     * trick to refresh the layer
-     */
-    refresh(){
-        if (this.source){
-            this.source.refresh();
-            //let src = this.source;
-            //this.olLayer.setSource(undefined);
-            //this.olLayer.setSource(src);
-        }
-    }
-
-
-    /**
-     * get the legend content
-     * @type {string}
-     */
-    get legendContent() {
-        return this._legendContent;
-    }
-
-    /**
-     * set the legend content directly
-     * @param {string} newVal - new content
-     * @protected
-     */
-    set legendContent(newVal) {
-        this._legendContent = newVal;
-    }
-
-    /**
-     * get the map get params
-     * @type {object}
-     */
-    get params() {
-        return this._params;
-    }
-
-    /**
-     * set the map get params
-     * @param {object} newParams - new get params
-     * @protected
-     */
-    set params(newParams){
-        this._params = newParams;
-    }
-
-    /**
-     * get the minimum resolution
-     * @type {number|*}
-     */
-    get minResolution() {
-        return this._minResolution;
-    }
-
-    /**
-     * get the maximum resolution
-     * @type {number|*}
-     */
-    get maxResolution() {
-        return this._maxResolution;
-    }
-
-    /**
-     * get min zoom
-     * @type {number|*}
-     */
-    get minZoom() {
-        return this._minZoom;
-    }
-
-    /**
-     * get max zoom
-     * @type {number|*}
-     */
-    get maxZoom() {
-        return this._maxZoom;
-    }
-
-    /**
-     * get the url
-     * @type {string}
-     */
-    get url() {
-        return this._url;
-    }
-
-    /**
-     * Get the layer visibility
-     * @type {boolean}
-     */
-    get visible() {
-        return this._visible;
-    }
-
-    /**
-     * Set the layer visibility
-     * @param {boolean} visibility - layer visibility
-     */
-    set visible(visibility) {
-        this._visible = visibility;
-        if (this.olLayer) {
-            this.olLayer.setVisible(this._visible);
-            if (visibility && !this._loaded) {
-                this._load();
-            }
-        }
-    }
-
-    /**
-     * Get the layer opacity
-     * @type {number}
-     */
-    get opacity() {
-        return this._opacity;
-    }
-
-    /**
-     * Set the layer opacity
-     * @param {number} opacity - layer opacity
-     */
-    set opacity(opacity) {
-        this._opacity = opacity;
-        if (this.olLayer) {
-            this.olLayer.setOpacity(this._opacity);
-        }
-    }
-
-    /**
-     * Get the layer name
-     * @type {string}
-     */
-    get name() {
-        return this._name;
-    }
-
-    /**
-     * set the layer name
-     * @param {string} newName - the new name
-     */
-    set name(newName) {
-        this._name = newName;
-    }
-
-    /**
-     * Check if the layer is loaded
-     * @type {boolean}
-     */
-    get loaded() {
-        return this._loaded;
-    }
-
-    /**
-     * get the layer source
-     * @type {*}
-     */
-    get source() {
-        return this._source;
-    }
-
-    /**
-     * get the z index
-     * @type {number}
-     */
-    get zIndex(){
-        return this._zIndex;
-    }
-
-    /**
-     * set the z index
-     * @param {number} newZ - new Z index
-     */
-    set zIndex(newZ){
-        this._zIndex = newZ;
-        this.olLayer.setZIndex(this.zIndex);
-    }
-
-    /**
-     * 
-     * @returns {ol.layer.Base|undefined} the ol layer
-     */
-    get olLayer(){
-        return this._olLayer;
-    }
-}
-
-nm.LayerBase = LayerBase;
-export default LayerBase;
diff --git a/_src/layers/LayerBaseVector.js b/_src/layers/LayerBaseVector.js
deleted file mode 100644
index 4c50a8feb947ce4174ed1e485b5ca536394cdd87..0000000000000000000000000000000000000000
--- a/_src/layers/LayerBaseVector.js
+++ /dev/null
@@ -1,282 +0,0 @@
-import $ from '../jquery/jquery';
-import LayerBase from './LayerBase';
-import mapMove from '../olHelpers/mapMove';
-import provide from '../util/provide';
-import ol from '../ol/ol';
-const nm = provide('layers');
-
-/**
- * The make mapMoveGetParams function takes the extent and the zoom level
- * context is 'this' object, probably want to do something with this.mapMoveParams
- * @callback mapMoveMakeGetParams
- * @param {LayerBaseVector} lyr
- * @param {object} extent
- * @param {number} extent.minX
- * @param {number} extent.minY
- * @param {number} extent.maxX
- * @param {number} extent.maxY
- * @param {number} zoomLevel
- */
-
-
-/**
- * The Vector layer base
- * @augments LayerBase
- * @abstract
- */
-class LayerBaseVector extends LayerBase {
-
-    /**
-     * The base vector layer
-     * @param {string} url - pass an empty string to prevent default load and add from a json source
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
-     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
-     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
-     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
-     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
-     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
-     *
-     */
-    constructor(url, options) {
-        super(url, options);
-
-        //prevent regular load if no url has been provided
-        if (this.url.trim() == '') {
-            this._loaded = true;
-        }
-
-        this._style = typeof options.style == 'undefined' ? undefined : options.style;
-
-        if (this.visible) {
-            this._autoLoad = true;
-        } else {
-            this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);
-        }
-
-        this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;
-        this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;
-
-        if (options.mapMoveObj){
-            this._mapMove = options.mapMoveObj;
-        } else {
-            this._mapMove = this._onDemand ? mapMove : undefined;
-        }
-
-        this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :
-            function(lyr, extent, zoomLevel){
-                return {};
-            };
-
-        if (this._onDemand) {
-            this._loaded = true;
-            this._mapMoveParams = {};
-            this._mapMove.checkInit();
-            this._mapMove.addVectorLayer(this);
-        }
-
-        this._source = new ol.source.Vector();
-
-        /**
-         *
-         * @type {ol.layer.Vector|ol.layer.Base}
-         */
-        this._olLayer = new ol.layer.Vector(
-            {
-                source: this._source,
-                visible: this.visible,
-                style: this.style,
-                minResolution: this._minResolution,
-                maxResolution: this._maxResolution,
-                zIndex: this._zIndex
-            }
-        );
-    }
-
-    /**
-     * dummy to be overridden
-     * @param {object} featureCollection - geojson or esrijson object
-     */
-    addFeatures(featureCollection) {
-        console.log('Layer vector base addFeatures is a placeholder and does nothing');
-    }
-
-    /**
-     * Before call to map move callback, can prevent call by returning false
-     * @param {number} zoom - zoom level
-     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
-     * @returns {boolean} if the call should proceed
-     */
-    mapMoveBefore(zoom, evtType) {
-        if (this.minZoom !== undefined) {
-            if (zoom < this.minZoom) {
-                return false;
-            }
-        }
-
-        if (this.maxZoom !== undefined) {
-            if (zoom > this.maxZoom) {
-                return false;
-            }
-        }
-
-        return this.visible;
-    }
-
-    /**
-     * callback to generate the parameters passed in the get request
-     * @param {object} extent - extent object
-     * @param {number} extent.minX - minX
-     * @param {number} extent.minY - minY
-     * @param {number} extent.maxX - maxX
-     * @param {number} extent.maxY - maxY
-     * @param {number} zoomLevel - zoom level
-     */
-    mapMoveMakeGetParams(extent, zoomLevel) {
-        this._mapMoveParams = {};
-        $.extend(this._mapMoveParams, this.params);
-        $.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));
-    }
-
-    /**
-     * callback function on map move
-     * @param {object} d - the json response
-     */
-    mapMoveCallback(d) {
-        if (this.source) {
-            this._source.clear();
-        }
-    }
-
-    /**
-     * clear features in the layer
-     */
-    clear() {
-        if (this._source) {
-            this._source.clear();
-        }
-    }
-
-    /**
-     * get on demand delay in miliseconds
-     * @type {number|*}
-     */
-    get onDemandDelay() {
-        return this._onDemandDelay;
-    }
-
-    /**
-     * get if the layer is autoloaded
-     * @type {boolean}
-     */
-    get autoLoad() {
-        return this._autoLoad;
-    }
-
-    /**
-     * get the style definition
-     * @type {ol.Style|styleFunc}
-     */
-    get style() {
-        return this._style;
-    }
-
-    /**
-     * set the style
-     * @param {ol.Style|styleFunc} style - the style or function
-     */
-    set style(style) {
-        this._style = style;
-        this.olLayer.setStyle(this._style);
-    }
-
-    /**
-     * get the map CRS if it is defined by the map move object
-     * @type {string|*}
-     */
-    get mapCrs() {
-        if (this._mapMove) {
-            return this._mapMove.map.getView().getProjection().getCode();
-        } else {
-            return undefined;
-        }
-    }
-
-    /**
-     * get the map move object
-     * @type {MapMoveCls|*}
-     */
-    get mapMove() {
-        return this._mapMove;
-    }
-
-    /**
-     * map move params
-     * @type {object}
-     */
-    get mapMoveParams() {
-        return this._mapMoveParams;
-    }
-
-        /**
-     * Get the layer visibility
-     * @type {boolean}
-     */
-    get visible() {
-        return super.visible;
-    }
-
-    /**
-     * Set the layer visibility
-     * @type {boolean}
-     * @override
-     */
-    set visible(visibility) {
-        super.visible = visibility;
-
-        if (this._onDemand) {
-            this.mapMove.triggerLyrLoad(this);
-        }
-    }
-
-    /**
-     * get the layer vector source
-     * @override
-     * @type {ol.source.Vector}
-     */
-    get source(){
-        return super.source;
-    }
-
-    /**
-     * array of ol features
-     * @type {Array.<ol.Feature>}
-     */
-    get features(){
-        return this.source.getFeatures();
-    }
-
-    /**
-     * 
-     * @returns {ol.layer|Vector|ol.layer.Base|undefined} the ol layer
-     */
-    get olLayer(){
-        return super.olLayer;
-    }
-}
-
-nm.LayerBaseVector = LayerBaseVector;
-export default LayerBaseVector;
diff --git a/_src/layers/LayerBaseVectorEsri.js b/_src/layers/LayerBaseVectorEsri.js
deleted file mode 100644
index 3bc94e3b1e216b5073ee9cb079211ffabb9535d0..0000000000000000000000000000000000000000
--- a/_src/layers/LayerBaseVectorEsri.js
+++ /dev/null
@@ -1,181 +0,0 @@
-/**
- * Created by gavorhes on 11/2/2015.
- */
-
-import $ from '../jquery/jquery';
-import LayerBaseVector from './LayerBaseVector';
-import * as esriToOl from '../olHelpers/esriToOlStyle';
-import provide from '../util/provide';
-import ol from '../ol/ol';
-
-let nm = provide('layers');
-
-/**
- * Base layer for esri vector layers
- * @augments LayerBaseVector
- */
-class LayerBaseVectorEsri extends LayerBaseVector {
-
-    /**
-     * The base vector layer
-     * @param {string} url - url for source
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
-     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
-     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
-     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
-     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
-     *
-     * @param {string} [options.where=1=1] the layer filter clause
-     * @param {string} [options.outFields=*] comma separated list of output fields, defaults to all
-     * @param {string} [options.format=pjson] the format the retrieve the data
-     * @param {number} [options.outSR=3857] the output spatial reference, defaults to web mercator
-     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used
-     * @param {boolean} [options.collapseLegend=false] if the legend should be initially collapsed
-     * @param {number} [options.mapMoveMakeGetParams=function(extent, zoomLevel){}] function to create additional map move params
-     */
-    constructor(url, options) {
-
-        if (typeof options.params != 'object') {
-            options.params = {};
-        }
-        options.params['where'] = options.where || '1=1';
-        options.params['outFields'] = options.outFields || '*';
-        options.params['f'] = options.format || 'pjson';
-        options.params['outSR'] = options.outSR || 3857;
-
-        super(url, options);
-        this._outSR = this.params['outSR'];
-        this._esriFormat = new ol.format.EsriJSON();
-
-        if (this._url[this._url.length - 1] !== '/') {
-            this._url += '/';
-        }
-
-        this._urlCopy = this.url;
-        this._url += 'query?callback=?';
-
-        if (this.autoLoad || this.visible) {
-            this._load();
-        }
-
-        this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;
-
-        if (this._useEsriStyle) {
-            this.addLegendContent();
-        }
-    }
-
-    /**
-     * add additional content to the legend
-     * @param {string} [additionalContent=''] additional content to add to legend
-     */
-    addLegendContent(additionalContent) {
-        if (!this._useEsriStyle) {
-            super.addLegendContent(additionalContent);
-        } else {
-            $.get(this._urlCopy + '?f=pjson&callback=?', {}, (d) => {
-                if (d['subLayers'].length > 0) {
-                    alert('should only use single feature layers, not groups');
-
-                    return;
-                }
-
-                let newStyleAndLegend = esriToOl.makeFeatureServiceLegendAndSymbol(d);
-                this.style = newStyleAndLegend.style;
-                super.addLegendContent(newStyleAndLegend.legend);
-            }, 'json');
-        }
-    }
-
-
-    /**
-     * add feature collection
-     * @param {object} featureCollection - features as esrijson
-     */
-    addFeatures(featureCollection) {
-        let feats = this._esriFormat.readFeatures(featureCollection);
-        this.source.addFeatures(feats);
-    }
-
-    /**
-     * trigger load features
-     * @protected
-     * @returns {boolean} if already loaded
-     */
-    _load() {
-        if (super._load()) {
-            return true;
-        }
-        $.get(this._url, this.params, (d) => {
-            this.addFeatures(d);
-            this.loadCallback(this);
-        }, 'json').fail(() => {
-                this._loaded = false;
-            });
-
-        return false;
-    }
-
-    /**
-     * callback to generate the parameters passed in the get request
-     * @param {object} extent - extent object
-     * @param {number} extent.minX - minX
-     * @param {number} extent.minY - minY
-     * @param {number} extent.maxX - maxX
-     * @param {number} extent.maxY - maxY
-     * @param {number} zoomLevel - zoom level
-     */
-    mapMoveMakeGetParams(extent, zoomLevel) {
-        super.mapMoveMakeGetParams(extent, zoomLevel);
-        this.mapMoveParams['geometry'] = `${extent.minX},${extent.minY},${extent.maxX},${extent.maxY}`;
-        this.mapMoveParams['geometryType'] = 'esriGeometryEnvelope';
-        this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';
-        this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';
-        this.mapMoveParams['inSR'] = 3857;
-        if (this._outSR == 3857) {
-            this.mapMoveParams['geometryPrecision'] = 1;
-        }
-    }
-
-    /**
-     * Before call to map move callback, can prevent call by returning false
-     * @param {number} zoom - zoom level
-     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
-     * @returns {boolean} if the call should proceed
-     */
-    mapMoveBefore(zoom, evtType) {
-        return super.mapMoveBefore(zoom, evtType);
-        //if (super.mapMoveBefore(zoom, evtType)){
-        //    //place holder for additional processing
-        //    return true;
-        //} else {
-        //    return false;
-        //}
-    }
-
-    /**
-     * callback function on map move
-     * @param {object} d - the json response
-     */
-    mapMoveCallback(d) {
-        super.mapMoveCallback(d);
-        this.source.addFeatures(this._esriFormat.readFeatures(d));
-    }
-}
-
-nm.LayerBaseVectorEsri = LayerBaseVectorEsri;
-export default LayerBaseVectorEsri;
diff --git a/_src/layers/LayerBaseVectorGeoJson.js b/_src/layers/LayerBaseVectorGeoJson.js
deleted file mode 100644
index 6c2bfa429602c5169f033ee1c097687d8a0e5a05..0000000000000000000000000000000000000000
--- a/_src/layers/LayerBaseVectorGeoJson.js
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- * Created by gavorhes on 11/2/2015.
- */
-
-import $ from '../jquery/jquery';
-import LayerBaseVector from './LayerBaseVector';
-import provide from '../util/provide';
-import ol from '../ol/ol';
-let nm = provide('layers');
-
-/**
- * The Vector GeoJson Layer
- * @augments LayerBaseVector
- */
-class LayerBaseVectorGeoJson extends LayerBaseVector {
-
-    /**
-     * @param {string|undefined|null} url - resource url, set to '' to make blank layer
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
-     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
-     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
-     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
-     *
-     * @param {object} [options.transform={}] SR transform, set as false for no transform
-     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS
-     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS
-     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
-     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
-     */
-    constructor(url, options) {
-        url = typeof url == 'string' ? url : '';
-        super(url, options);
-
-        this._geoJsonFormat = new ol.format.GeoJSON();
-
-        this._transform = options.transform || {};
-        this._transform.dataProjection = this._transform.dataProjection || "EPSG:4326";
-        this._transform.featureProjection = this._transform.featureProjection || "EPSG:3857";
-
-        if (this.autoLoad || this.visible) {
-            this._load();
-        }
-    }
-
-    /**
-     * add feature collection
-     * @param {object} featureCollection - as geojson object
-     */
-    addFeatures(featureCollection) {
-        if (this._transform.dataProjection == 'EPSG:3857' && this._transform.featureProjection == 'EPSG:3857') {
-            this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection));
-        } else {
-            this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection, this._transform));
-        }
-    }
-
-    /**
-     * trigger load features
-     * @protected
-     * @returns {boolean} if already loaded
-     */
-    _load() {
-
-        if (super._load()) {
-            return true;
-        }
-
-        $.get(this._url,
-            this._params,
-            (d) => {
-                this.addFeatures(d);
-                this.loadCallback(this);
-            }, 'json').fail(
-            function () {
-                this._loaded = false;
-            }
-        );
-
-        return false;
-    }
-
-    /**
-     * callback function on map move
-     * @param {object} d the json response
-     * @override
-     */
-    mapMoveCallback(d) {
-        super.mapMoveCallback(d);
-        this._source.addFeatures(this._geoJsonFormat.readFeatures(d, this._transform));
-    }
-}
-
-nm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;
-export default LayerBaseVectorGeoJson;
diff --git a/_src/layers/LayerBaseXyzTile.js b/_src/layers/LayerBaseXyzTile.js
deleted file mode 100644
index 88c58565cdb33fa6dd690e9d2748f5802c2175cf..0000000000000000000000000000000000000000
--- a/_src/layers/LayerBaseXyzTile.js
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- * Created by gavorhes on 12/4/2015.
- */
-import $ from '../jquery/jquery';
-import LayerBase from './LayerBase';
-import * as esriToOl from '../olHelpers/esriToOlStyle';
-import provide from '../util/provide';
-import ol from '../ol/ol';
-const nm = provide('layers');
-
-/**
- * XYZ tile
- * @augments LayerBase
- */
-class LayerBaseXyzTile extends LayerBase {
-
-    /**
-     * The XYZ tile layer
-     * @param {string} url - url for source
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used
-     */
-    constructor(url, options) {
-        super(url, options);
-        this._source = new ol.source.XYZ({url: this.url == '' ? undefined : this.url});
-        this._olLayer = new ol.layer.Tile({
-            source: this._source,
-            visible: this.visible,
-            opacity: this.opacity,
-            minResolution: this._minResolution,
-            maxResolution: this._maxResolution,
-            zIndex: this._zIndex
-        });
-
-
-        this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;
-
-        if (this._useEsriStyle) {
-            this.addLegendContent();
-        }
-    }
-
-    /**
-     * add additional content to the legend
-     * @param {string} [additionalContent=''] additional content for legend
-     */
-    addLegendContent(additionalContent) {
-        if (!this._useEsriStyle) {
-            super.addLegendContent(additionalContent);
-        } else {
-            let urlCopy = this.url;
-
-            let mapServerIndex = urlCopy.toLowerCase().indexOf('mapserver');
-            if (mapServerIndex > -1) {
-                urlCopy = urlCopy.slice(0, mapServerIndex + 9);
-            } else {
-                return;
-            }
-
-            if (urlCopy[urlCopy.length - 1] !== '/') {
-                urlCopy += '/';
-            }
-
-            urlCopy += 'legend?f=pjson&callback=?';
-
-            let _this = this;
-            let superAddLegend = super.addLegendContent;
-
-            $.get(urlCopy, {}, function (d) {
-                let newHtml = esriToOl.makeMapServiceLegend(d);
-                superAddLegend.call(_this, newHtml);
-            }, 'json');
-        }
-    }
-
-    /**
-     *
-     * @returns {ol.source.XYZ} the vector source
-     */
-    get source() {
-        return super.source;
-    }
-
-    /**
-     *
-     * @returns {ol.layer.Tile|ol.layer.Base|undefined} the ol layer
-     */
-    get olLayer() {
-        return super.olLayer;
-    }
-}
-
-nm.LayerBaseXyzTile = LayerBaseXyzTile;
-export default LayerBaseXyzTile;
diff --git a/_src/layers/LayerEsriMapServer.js b/_src/layers/LayerEsriMapServer.js
deleted file mode 100644
index db799ab2a894b321217854f7591129181231e3d9..0000000000000000000000000000000000000000
--- a/_src/layers/LayerEsriMapServer.js
+++ /dev/null
@@ -1,163 +0,0 @@
-/**
- * Created by gavorhes on 12/7/2015.
- */
-import $ from '../jquery/jquery';
-import LayerBase from './LayerBase';
-import * as esriToOl from '../olHelpers/esriToOlStyle';
-import mapPopup from '../olHelpers/mapPopup';
-import provide from '../util/provide';
-import ol from '../ol/ol';
-const nm = provide('layers');
-
-/**
- * esri mapserver layer
- * @augments LayerBase
- */
-class LayerEsriMapServer extends LayerBase {
-    /**
-     * The base layer for all others
-     * @param {string} url - resource url
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     * @param {boolean} [options.addPopup=false] if a popup should be added
-     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added
-     */
-    constructor(url, options) {
-        super(url, options);
-        this._source = new ol.source.TileArcGISRest(
-            {
-                url: this.url == '' ? undefined : this.url,
-                params: typeof options.showLayers == 'undefined' ? undefined : {layers: 'show:' + options.showLayers.join(',')}
-            }
-        );
-
-        this._olLayer = new ol.layer.Tile({
-            source: this._source,
-            visible: this.visible,
-            opacity: this.opacity,
-            minResolution: this._minResolution,
-            maxResolution: this._maxResolution,
-            zIndex: this._zIndex
-        });
-
-        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;
-
-        this._esriFormat = new ol.format.EsriJSON();
-        this._popupRequest = null;
-
-        this.addLegendContent();
-
-        if (options.addPopup) {
-            mapPopup.addMapServicePopup(this);
-        }
-    }
-
-    /**
-     * add additional content to the legend
-     * @param {string} [additionalContent=''] additional content for legend
-     */
-    addLegendContent(additionalContent) {
-        let urlCopy = this.url;
-
-        if (urlCopy[urlCopy.length - 1] !== '/') {
-            urlCopy += '/';
-        }
-
-        urlCopy += 'legend?f=pjson&callback=?';
-
-        let _this = this;
-        let superAddLegend = super.addLegendContent;
-
-        $.get(urlCopy, {}, function (d) {
-            let newHtml = esriToOl.makeMapServiceLegend(d);
-            superAddLegend.call(_this, newHtml);
-        }, 'json');
-    }
-
-
-    getPopupInfo(queryParams) {
-        if (!this.visible) {
-            return;
-        }
-
-        let urlCopy = this.url;
-
-        if (urlCopy[urlCopy.length - 1] != '/') {
-            urlCopy += '/';
-        }
-
-        urlCopy += 'identify?callback=?';
-
-        let _this = this;
-
-        if (this._popupRequest != null) {
-            this._popupRequest.abort();
-        }
-
-        this._popupRequest = $.get(urlCopy, queryParams, function (d) {
-            for (let r of d['results']) {
-
-                let popupHtml = '<table class="esri-popup-table">';
-
-                for (let a in r['attributes']) {
-                    if (r['attributes'].hasOwnProperty(a)) {
-                        let attrVal = r['attributes'][a];
-
-                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {
-                            continue;
-                        }
-
-                        let attr = a;
-                        if (attr.length > 14) {
-                            attr = attr.slice(0, 11) + '...';
-                        }
-
-                        popupHtml += `<tr><td>${attr}</td><td>${attrVal}</td></tr>`;
-                    }
-                }
-
-                popupHtml += '</table>';
-
-                mapPopup.addMapServicePopupContent(_this._esriFormat.readFeature(r), _this, popupHtml, r['layerName']);
-            }
-        }, 'json').always(function () {
-            _this._popupRequest = null;
-        });
-    }
-
-    /**
-     * overwrite the base load
-     * @protected
-     */
-    _load() {
-    }
-
-    /**
-     *
-     * @returns {ol.source.TileArcGISRest} the vector source
-     */
-    get source() {
-        return super.source;
-    }
-
-    /**
-     *
-     * @returns {ol.layer.Tile|ol.layer.Base|undefined} the ol layer
-     */
-    get olLayer() {
-        return super.olLayer;
-    }
-}
-nm.LayerEsriMapServer = LayerEsriMapServer;
-export default LayerEsriMapServer;
diff --git a/_src/layers/LayerItsInventory.js b/_src/layers/LayerItsInventory.js
deleted file mode 100644
index f41a62417954cc5d9f79d62eda4f604be3f0296c..0000000000000000000000000000000000000000
--- a/_src/layers/LayerItsInventory.js
+++ /dev/null
@@ -1,337 +0,0 @@
-/**
- * Created by gavorhes on 12/8/2015.
- */
-
-import $ from '../jquery/jquery';
-import LayerBaseVectorGeoJson from './LayerBaseVectorGeoJson';
-import mapPopup from '../olHelpers/mapPopup';
-import provide from '../util/provide';
-import ol from '../ol/ol';
-let nm = provide('layers');
-
-
-function checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
-    "use strict";
-
-    //make sure one and only one configuration is defined;
-    let configCount = 0;
-    if (typeof itsIcon == 'string') {
-        configCount++;
-    }
-
-    if (typeof itsLineStyle == 'object') {
-        itsLineStyle.width = typeof itsLineStyle.width == 'number' ? itsLineStyle.width : 5;
-        itsLineStyle.color = typeof itsLineStyle.color == 'string' ? itsLineStyle.color : 'red';
-        configCount++;
-    }
-
-    if (typeof itsIconConfig == 'object') {
-        itsIconConfig.defaultName = itsIconConfig.defaultName || 'Other';
-
-        if (typeof itsIconConfig.iconArray == 'undefined') {
-            itsIconConfig.iconArray = [];
-        }
-
-        configCount++;
-    }
-
-    if (typeof itsLineConfig == 'object') {
-        itsLineConfig.defaultName = itsLineConfig.defaultName || 'Other';
-        itsLineConfig.defaultWidth = itsLineConfig.defaultWidth || 5;
-        itsLineConfig.defaultColor = itsLineConfig.defaultColor || 'red';
-
-
-        if (typeof itsLineConfig.lineArray == 'undefined') {
-            itsLineConfig.lineArray = [];
-        }
-
-        // set the width if not defined
-        for (let i = 0; i < itsLineConfig.lineArray.length; i++) {
-            if (itsLineConfig.lineArray[i].length == 3) {
-                itsLineConfig.lineArray[i].push(5);
-            }
-        }
-
-        configCount++;
-    }
-
-    if (configCount > 1) {
-        throw 'Only one style config can be defined';
-    }
-}
-
-/**
- *
- * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/
- *
- * @param {object} [itsLineStyle=undefined] A single line style
- * @param {string} itsLineStyle.color the line color as rgb or hex
- * @param {number} [itsLineStyle.width=5] the line width
- *
- * @param {object} [itsIconConfig=undefined] The icon subtype configuration
- * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization
- * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found
- * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches
- * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]
- *
- * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization
- * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization
- * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found
- * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches
- * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches
- * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]
- * @returns {*} undefined, style, or style function
- */
-function defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
-    "use strict";
-    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);
-
-    let _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';
-
-    if (itsIcon) {
-        return new ol.style.Style({
-            image: new ol.style.Icon(
-                {
-                    src: _iconUrlRoot + itsIcon,
-                    crossOrigin: 'anonymous'
-                }
-            )
-        });
-    } else if (itsLineStyle) {
-        return new ol.style.Style({
-            stroke: new ol.style.Stroke({
-                color: itsLineStyle.color,
-                width: itsLineStyle.width
-            })
-        });
-    } else if (itsIconConfig) {
-        return function (feature) {
-            let symbolProp = feature.getProperties()[itsIconConfig.prop];
-            let iconUrl = _iconUrlRoot + itsIconConfig.defaultIcon;
-
-            for (let i = 0; i < itsIconConfig.iconArray.length; i++) {
-                let thisProp = itsIconConfig.iconArray[i];
-
-                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {
-                    iconUrl = _iconUrlRoot + thisProp[2];
-                    break;
-                }
-            }
-
-            return [new ol.style.Style({
-                image: new ol.style.Icon(
-                    {
-                        src: iconUrl,
-                        crossOrigin: 'anonymous'
-                    }
-                )
-            })];
-        };
-    } else if (itsLineConfig) {
-        return function (feature) {
-            let symbolProp = feature.getProperties()[itsLineConfig.prop];
-            let colr = itsLineConfig.defaultColor || 'red';
-            let width = itsLineConfig.defaultWidth || 5;
-
-            for (let i = 0; i < itsLineConfig.lineArray.length; i++) {
-                let thisProp = itsLineConfig.lineArray[i];
-
-                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {
-                    colr = thisProp[2];
-                    width = thisProp[3];
-                    break;
-                }
-            }
-
-            return [new ol.style.Style({
-                stroke: new ol.style.Stroke({
-                    color: colr,
-                    width: width
-                })
-            })];
-        };
-    } else {
-        return undefined;
-    }
-}
-
-/**
- *
- * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/
- *
- * @param {object} [itsLineStyle=undefined] A single line style
- * @param {string} itsLineStyle.color the line color as rgb or hex
- * @param {number} [itsLineStyle.width=5] the line width
- *
- * @param {object} [itsIconConfig=undefined] The icon subtype configuration
- * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization
- * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found
- * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches
- * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]
- *
- * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization
- * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization
- * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found
- * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches
- * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches
- * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]
- * @returns {string} html to be added to the legend
- */
-function defineLegend(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {
-    "use strict";
-
-    let iconHeight = 17;
-
-    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);
-
-    let _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';
-
-    if (itsIcon) {
-        return `<img src="${_iconUrlRoot + itsIcon}" class="legend-layer-icon" height="${iconHeight}">`;
-    } else if (itsLineStyle) {
-        return `<hr style="height: ${itsLineStyle.width}px; background-color: ${itsLineStyle.color}">`;
-    } else if (itsIconConfig) {
-        let outHtml = '';
-        outHtml += '<ul>';
-
-        for (let a of itsIconConfig.iconArray) {
-            outHtml += `<li><span class="legend-layer-subitem">${a[1]}</span><img src="${_iconUrlRoot + a[2]}" class="legend-layer-icon" height="${iconHeight}">`;
-        }
-        outHtml += `<li><span class="legend-layer-subitem">${itsIconConfig.defaultName}</span>` +
-            `<img src="${_iconUrlRoot + itsIconConfig.defaultIcon}" class="legend-layer-icon" height="${iconHeight}"></li>`;
-        outHtml += '</ul>';
-
-        return outHtml;
-    } else if (itsLineConfig) {
-        let outHtml = '';
-        outHtml += '<ul>';
-        for (let ls of itsLineConfig.lineArray) {
-            outHtml += `<li><span class="legend-layer-subitem">${ls[1]}</span>` +
-                `<hr style="height: ${ls[3]}px; background-color: ${ls[2]}">`;
-        }
-        outHtml += `<li><span class="legend-layer-subitem">${itsLineConfig.defaultName}</span>` +
-            `<hr style="height: ${itsLineConfig.defaultWidth}px; background-color: ${itsLineConfig.defaultColor}"></li>`;
-        outHtml += '</ul>';
-
-        return outHtml;
-    } else {
-        return '';
-    }
-}
-
-/**
- * Its Layer class
- * @augments LayerBaseVectorGeoJson
- */
-class LayerItsInventory extends LayerBaseVectorGeoJson {
-
-    /**
-     * ITS device layer, types available at http://transportal.cee.wisc.edu/its/inventory/
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
-     * @param {object|*} [options.style=undefined] the layer style, use openlayers default style if not defined
-     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
-     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
-     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
-     *
-     * @param {string} options.itsType the ITS device type, use the url flag at http://transportal.cee.wisc.edu/its/inventory/
-     * @param {boolean} [options.addPopup=true] if the popup should be added automatically
-     *
-     * @param {string} [options.itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/
-     *
-     * @param {object} [options.itsLineStyle=undefined] A single line style
-     * @param {string} options.itsLineStyle.color the line color as rgb or hex
-     * @param {number} [options.itsLineStyle.width=5] the line width
-     *
-     * @param {object} [options.itsIconConfig=undefined] The icon subtype configuration
-     * @param {string} options.itsIconConfig.prop The property used to define icon attribute symbolization
-     * @param {string} options.itsIconConfig.defaultName The default name to be used if no other match is found
-     * @param {string} options.itsIconConfig.defaultIcon The default icon to be used for no other matches
-     * @param {object} [options.itsIconConfig.iconArray=[]] an array, items with format [property, name, img]
-     *
-     * @param {object} [options.itsLineConfig=undefined] The property used to define icon attribute symbolization
-     * @param {string} options.itsLineConfig.prop The property used to define icon attribute symbolization
-     * @param {string} [options.itsLineConfig.defaultName=Other] The default name to be used if no other match is found
-     * @param {string} [options.itsLineConfig.defaultColor=red] The default line color to be used for no other matches
-     * @param {number} [options.itsLineConfig.defaultWidth] The default line width to be used for no other matches
-     * @param {object} [options.itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width = 5]
-     */
-    constructor(options) {
-        if (typeof options.itsType !== 'string') {
-            throw 'its type must be defined';
-        }
-
-        let addToLegend = '';
-
-        // define a style with the helper function if it is not explicitly defined
-        if (typeof options.style == 'undefined') {
-            options.style = defineStyle(
-                options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig
-            );
-            addToLegend = defineLegend(
-                options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig
-            );
-        }
-
-        options.params = typeof options.params == 'object' ? options.params : {};
-        $.extend(options.params, {format: 'JSON', resource: options.itsType});
-
-        super('http://transportal.cee.wisc.edu/its/inventory/', options);
-
-        //add any additional content to the legend
-        this.addLegendContent(addToLegend);
-
-        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : true;
-
-        if (options.addPopup) {
-            mapPopup.addVectorPopup(this, function (props) {
-                return `<iframe src="http://transportal.cee.wisc.edu/its/inventory/?feature=${props['featureGuid']}" ` +
-                    `height="250" width="350"></iframe>`;
-            });
-        }
-    }
-
-    /**
-     * callback to generate the parameters passed in the get request
-     * @callback makeGetParams
-     * @param {object} extent - extent object
-     * @param {number} extent.minX - minX
-     * @param {number} extent.minY - minY
-     * @param {number} extent.maxX - maxX
-     * @param {number} extent.maxY - maxY
-     * @param {number} zoomLevel - zoom level
-     */
-    mapMoveMakeGetParams(extent, zoomLevel) {
-        super.mapMoveMakeGetParams(extent, zoomLevel);
-        let lowerLeft = new ol.geom.Point([extent.minX, extent.minY]);
-        lowerLeft.transform(this.mapCrs, "EPSG:4326");
-        let lowerLeftCoordinates = lowerLeft.getCoordinates();
-        let upperRight = new ol.geom.Point([extent.maxX, extent.maxY]);
-        upperRight.transform(this.mapCrs, "EPSG:4326");
-        let upperRightCoordinates = upperRight.getCoordinates();
-
-        $.extend(this.mapMoveParams,
-            {
-                L: lowerLeftCoordinates[0],
-                R: upperRightCoordinates[0],
-                B: lowerLeftCoordinates[1],
-                T: upperRightCoordinates[1]
-            });
-    }
-}
-
-nm.LayerItsInventory = LayerItsInventory;
-export default LayerItsInventory;
diff --git a/_src/layers/LayerRealEarthTile.js b/_src/layers/LayerRealEarthTile.js
deleted file mode 100644
index 46eb2a906e7be5b262e57d526a4c95f0414238d5..0000000000000000000000000000000000000000
--- a/_src/layers/LayerRealEarthTile.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Created by gavorhes on 11/4/2015.
- */
-
-import $ from '../jquery/jquery';
-import LayerBaseXyzTile from './LayerBaseXyzTile';
-import RealEarthAnimateTile from '../mixin/RealEarthAnimateTile';
-import provide from '../util/provide';
-const mixIns = require('es6-mixins');
-const nm = provide('layers');
-
-/**
- * Real earth tile
- * @augments LayerBaseXyzTile
- */
-class LayerRealEarthTile extends LayerBaseXyzTile {
-    /**
-     * The base layer for all others
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {string} options.products - the products to request
-     * @param {boolean} [options.hasTimes=false] If the layer is time dependent, fixed set of dates
-     * @param {boolean} [options.animate=false] if the layer should be animated
-     */
-    constructor(options) {
-        options.animate = typeof options.animate == 'boolean' ? options.animate : false;
-        if (!options.animate) {
-            super(`http://realearth.ssec.wisc.edu/api/image?products=${options.products}&x={x}&y={y}&z={z}`, options);
-            this._products = options.products;
-        } else {
-            super('', options);
-            this._products = options.products;
-
-            if (!this.timeInit){
-                mixIns([RealEarthAnimateTile], this);
-            }
-            this.timeInit();
-        }
-    }
-}
-
-nm.LayerRealEarthTile = LayerRealEarthTile;
-export default LayerRealEarthTile;
diff --git a/_src/mixin/RealEarthAnimate.js b/_src/mixin/RealEarthAnimate.js
deleted file mode 100644
index 949a867e9c98407e2c5f6dc6d23f9dc011026ce0..0000000000000000000000000000000000000000
--- a/_src/mixin/RealEarthAnimate.js
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
- * Created by gavorhes on 12/4/2015.
- */
-import provide from '../util/provide';
-import mapPopup from '../olHelpers/mapPopup';
-import $ from '../jquery/jquery';
-const nm = provide('mixin');
-
-
-/**
- * The GMT offset time in minutes
- * @type {number}
- */
-let offsetMinutes = (new Date()).getTimezoneOffset();
-
-/**
- * Mixin to get the product times
- * Be sure to call getTimeInit after the mixin has been applied
- */
-class RealEarthAnimate {
-
-    /**
-     * override base layer load
-     */
-    load(){};
-
-    /**
-     * Call this after the mixin has been applied
-     */
-    timeInit() {
-        if (!this._products) {
-            throw 'this mixin must be applied to one of the RealEarth layer objects with this.products defined';
-        }
-
-        this._rawDateStrings = [];
-        this._localDates = [];
-        this.localTimes = [];
-        this._animateEnabled = true;
-        this._loaded = true;
-        this._currentTime = undefined;
-        this._currentIndex = undefined;
-
-        let _this = this;
-
-        $.get('http://realearth.ssec.wisc.edu/api/products', {products: this._products}, function (d) {
-            if (d.length == 0) {
-                console.log(`${this._products} layer not available or does not have times`);
-
-                return;
-            }
-            d = d[0];
-            for (let i = 0; i < d['times'].length; i++) {
-                _this._loadDates.call(_this, d['times'][i]);
-            }
-            _this.loadCallback.call(_this);
-            _this._loadLatest.call(_this);
-        }, 'json');
-    }
-
-
-    /**
-     *
-     * @returns {boolean} if animation enabled
-     */
-    get animationEnabled(){
-        return this._animateEnabled;
-    }
-
-    /**
-     * Given the raw time string, add to the arrays to keep track of dates and cache
-     * @param {string} inString - input string to parse
-     * @returns {string} the converted string
-     * @protected
-     */
-    _loadDates(inString) {
-        let yr = inString.slice(0, 4);
-        let month = inString.slice(4, 6);
-        let d = inString.slice(6, 8);
-        let hr = inString.slice(9, 11);
-        let mn = inString.slice(11, 13);
-        let sec = inString.slice(13, 15);
-
-        let rawDateStr = inString.replace('.', '_');
-        this._rawDateStrings.push(rawDateStr);
-
-        let dteStr = `${month}/${d}/${yr} ${hr}:${mn}:${sec}`;
-        let newDte = new Date(dteStr);
-        newDte.setMinutes(newDte.getMinutes() - offsetMinutes);
-        this._localDates.push(newDte);
-        this.localTimes.push(newDte.getTime());
-
-        return rawDateStr;
-    }
-
-    /**
-     *
-     * @protected
-     * @returns {boolean} if should continue
-     */
-    _loadLatest(){
-        mapPopup.closePopup();
-        if (this.localTimes.length > 0){
-            this._currentIndex = this.localTimes.length -1;
-
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     *
-     * @param {number} theTime - the time
-     * @returns {boolean} true if new index, false if the same or below lowest value
-     */
-    setLayerTime(theTime){
-        if (!this.visible){
-            return false;
-        }
-
-        this._currentTime = theTime;
-
-        let newIndex;
-
-        if (theTime < this.localTimes[0]){
-            return false;
-        } else if (theTime > this.localTimes[this.localTimes.length - 1]){
-            newIndex = this.localTimes.length - 1;
-        }
-
-        for (let i = 0; i < this.localTimes.length; i++){
-            if (this.localTimes[i] >= theTime){
-                newIndex = i;
-                break;
-            }
-        }
-
-        if (newIndex == this._currentIndex){
-            return false;
-        } else {
-            this._currentIndex = newIndex;
-            mapPopup.closePopup();
-
-            return true;
-        }
-    }
-}
-
-nm.RealEarthAnimate = RealEarthAnimate;
-export default RealEarthAnimate;
-
diff --git a/_src/mixin/RealEarthAnimateVector.js b/_src/mixin/RealEarthAnimateVector.js
deleted file mode 100644
index 944223884ae7e5af602fa2c34ceb6c5c8ee4d587..0000000000000000000000000000000000000000
--- a/_src/mixin/RealEarthAnimateVector.js
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * Created by gavorhes on 12/4/2015.
- */
-import RealEarthAnimate from './RealEarthAnimate';
-import provide from '../util/provide';
-const nm = provide('mixin');
-const $ = require('jquery');
-
-
-/**
- * class mixin to animate RealEarth vector layers
- * @augments RealEarthAnimate
- */
-class RealEarthAnimateVector extends RealEarthAnimate {
-
-    /**
-     * override base layer load
-     */
-    load() {
-        super.load();
-    };
-
-    /**
-     * Call this after the mixin has been applied
-     */
-    timeInit() {
-        super.timeInit();
-        this._rawTimesLookup = {};
-        this._dataCache = [];
-    }
-
-    /**
-     * Given the raw time string, add to the arrays to keep track of dates and cache
-     * @param {string} inString - input date string
-     * @protected
-     */
-    _loadDates(inString) {
-        let rawDte = super._loadDates(inString);
-        this._dataCache.push(null);
-        this._rawTimesLookup[rawDte] = null;
-    }
-
-    /**
-     * @protected
-     */
-    _loadLatest() {
-        if(super._loadLatest()){
-            this._loadAtTimeIndex.call(this, this._currentIndex);
-        }
-    }
-    //
-    //http://realearth.ssec.wisc.edu/api/image?products=nexrhres_20160108_212500&x=1&y=5&z=4
-    //
-    //    20160108.205500
-    //    http://realearth.ssec.wisc.edu/api/image?products=nexrhres_20160108_205500&x=34&y=46&z=7
-
-    /**
-     * Load the features at the date index specified
-     * @param {number} i the index of the features to be loaded by date
-     * @param {boolean} [setAsSource=true] set to false to trigger cache load only
-     * @private
-     */
-    _loadAtTimeIndex(i, setAsSource) {
-        setAsSource = typeof setAsSource == 'boolean' ? setAsSource : true;
-        if (this._dataCache[i] != null) {
-            this.source.clear();
-            this._loadFeatures(this._dataCache[i]);
-        } else {
-            let _this = this;
-            $.get('http://realearth.ssec.wisc.edu:80/api/shapes',
-                {products: `${this._products}_${this._rawDateStrings[i]}`},
-                function (d) {
-                    _this._dataCache[i] = d;
-                    _this._rawTimesLookup[_this._rawDateStrings[i]] = d;
-                    if (setAsSource) {
-                        _this.source.clear();
-                        _this._loadFeatures.call(_this, _this._dataCache[i]);
-                    }
-                }, 'json'
-            );
-        }
-    }
-
-    /**
-     * helper to load the features at the index specified
-     * @param {object} geojObj - the geojson object
-     * @private
-     */
-    _loadFeatures(geojObj) {
-        this.source.addFeatures(this._geoJsonFormat.readFeatures(geojObj, this._transform));
-    }
-
-    setLayerTime(theTime) {
-        if (super.setLayerTime(theTime)){
-            this._loadAtTimeIndex(this._currentIndex);
-        } else {
-            this.source.clear();
-        }
-    }
-}
-
-nm.RealEarthAnimateVector = RealEarthAnimateVector;
-export default RealEarthAnimateVector;
diff --git a/_src/ol/ol-build.js b/_src/ol/ol-build.js
deleted file mode 100644
index a7280d86053c612d07ede905dc79b1760667a729..0000000000000000000000000000000000000000
--- a/_src/ol/ol-build.js
+++ /dev/null
@@ -1,408 +0,0 @@
-// OpenLayers 3. See http://openlayers.org/
-// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md
-(function (root, factory) {
-  if (typeof exports === "object") {
-    module.exports = factory();
-  } else if (typeof define === "function" && define.amd) {
-    define([], factory);
-  } else {
-    root.ol = factory();
-  }
-}(this, function () {
-  var OPENLAYERS = {};
-  var n,x=this;function E(b,c,d){b=b.split(".");d=d||x;b[0]in d||!d.execScript||d.execScript("var "+b[0]);for(var e;b.length&&(e=b.shift());)b.length||void 0===c?d[e]?d=d[e]:d=d[e]={}:d[e]=c}function aa(b){b.qa=function(){return b.rc?b.rc:b.rc=new b}}
-function ba(b){var c=typeof b;if("object"==c)if(b){if(b instanceof Array)return"array";if(b instanceof Object)return c;var d=Object.prototype.toString.call(b);if("[object Window]"==d)return"object";if("[object Array]"==d||"number"==typeof b.length&&"undefined"!=typeof b.splice&&"undefined"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable("splice"))return"array";if("[object Function]"==d||"undefined"!=typeof b.call&&"undefined"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable("call"))return"function"}else return"null";
-else if("function"==c&&"undefined"==typeof b.call)return"object";return c}function ca(b){var c=ba(b);return"array"==c||"object"==c&&"number"==typeof b.length}function da(b){return"string"==typeof b}function ea(b){return"number"==typeof b}function ga(b){return"function"==ba(b)}function ha(b){var c=typeof b;return"object"==c&&null!=b||"function"==c}function I(b){return b[ia]||(b[ia]=++ja)}var ia="closure_uid_"+(1E9*Math.random()>>>0),ja=0;function ka(b,c,d){return b.call.apply(b.bind,arguments)}
-function la(b,c,d){if(!b)throw Error();if(2<arguments.length){var e=Array.prototype.slice.call(arguments,2);return function(){var d=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(d,e);return b.apply(c,d)}}return function(){return b.apply(c,arguments)}}function ma(b,c,d){ma=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ka:la;return ma.apply(null,arguments)}
-function na(b,c){var d=Array.prototype.slice.call(arguments,1);return function(){var c=d.slice();c.push.apply(c,arguments);return b.apply(this,c)}}function M(b,c){function d(){}d.prototype=c.prototype;b.Y=c.prototype;b.prototype=new d;b.prototype.constructor=b;b.Me=function(b,d,g){for(var h=Array(arguments.length-2),k=2;k<arguments.length;k++)h[k-2]=arguments[k];return c.prototype[d].apply(b,h)}};var oa;function N(){};var pa;var qa=String.prototype.trim?function(b){return b.trim()}:function(b){return b.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};function sa(b){if(!ta.test(b))return b;-1!=b.indexOf("&")&&(b=b.replace(ua,"&amp;"));-1!=b.indexOf("<")&&(b=b.replace(va,"&lt;"));-1!=b.indexOf(">")&&(b=b.replace(wa,"&gt;"));-1!=b.indexOf('"')&&(b=b.replace(xa,"&quot;"));-1!=b.indexOf("'")&&(b=b.replace(ya,"&#39;"));-1!=b.indexOf("\x00")&&(b=b.replace(za,"&#0;"));return b}var ua=/&/g,va=/</g,wa=/>/g,xa=/"/g,ya=/'/g,za=/\x00/g,ta=/[\x00&<>"']/;
-function Aa(b,c){return b<c?-1:b>c?1:0};function Ba(b,c,d){return Math.min(Math.max(b,c),d)}var Ca=function(){var b;"cosh"in Math?b=Math.cosh:b=function(b){b=Math.exp(b);return(b+1/b)/2};return b}();function Da(b,c){var d=b%c;return 0>d*c?d+c:d};function Ea(b){return function(c){if(c)return[Ba(c[0],b[0],b[2]),Ba(c[1],b[1],b[3])]}}function Fa(b){return b};function Ga(b,c){return b>c?1:b<c?-1:0}function Ha(b,c,d){var e=b.length;if(b[0]<=c)return 0;if(!(c<=b[e-1]))if(0<d)for(d=1;d<e;++d){if(b[d]<c)return d-1}else if(0>d)for(d=1;d<e;++d){if(b[d]<=c)return d}else for(d=1;d<e;++d){if(b[d]==c)return d;if(b[d]<c)return b[d-1]-c<c-b[d]?d-1:d}return e-1}function Ia(b){return b.reduce(function(b,d){return Array.isArray(d)?b.concat(Ia(d)):b.concat(d)},[])}function Ja(b,c){var d,e=ca(c)?c:[c],f=e.length;for(d=0;d<f;d++)b[b.length]=e[d]}
-function Ka(b,c){var d=b.indexOf(c),e=-1<d;e&&b.splice(d,1);return e}function La(b,c){var d=b.length;if(d!==c.length)return!1;for(var e=0;e<d;e++)if(b[e]!==c[e])return!1;return!0}function Ma(b){var c=Na,d=b.length,e=Array(b.length),f;for(f=0;f<d;f++)e[f]={index:f,value:b[f]};e.sort(function(b,d){return c(b.value,d.value)||b.index-d.index});for(f=0;f<b.length;f++)b[f]=e[f].value};function Oa(b){return function(c,d,e){if(void 0!==c)return c=Ha(b,c,e),c=Ba(c+d,0,b.length-1),b[c]}}function Pa(b,c,d){return function(e,f,g){if(void 0!==e)return e=Math.max(Math.floor(Math.log(c/e)/Math.log(b)+(0<g?0:0>g?1:.5))+f,0),void 0!==d&&(e=Math.min(e,d)),c/Math.pow(b,e)}};function Qa(b){if(void 0!==b)return 0}function Ra(b,c){if(void 0!==b)return b+c}function Sa(b){var c=2*Math.PI/b;return function(b,e){if(void 0!==b)return b=Math.floor((b+e)/c+.5)*c}}function Ta(){var b=5*Math.PI/180;return function(c,d){if(void 0!==c)return Math.abs(c+d)<=b?0:c+d}};function Ua(b,c,d){this.center=b;this.resolution=c;this.rotation=d};var Va="function"===typeof Object.assign?Object.assign:function(b,c){if(void 0===b||null===b)throw new TypeError("Cannot convert undefined or null to object");for(var d=Object(b),e=1,f=arguments.length;e<f;++e){var g=arguments[e];if(void 0!==g&&null!==g)for(var h in g)g.hasOwnProperty(h)&&(d[h]=g[h])}return d};function Wa(b){for(var c in b)delete b[c]}function Xa(b){var c=[],d;for(d in b)c.push(b[d]);return c}function Za(b){for(var c in b)return!1;return!c};var $a="olm_"+(1E4*Math.random()|0);function ab(b){function c(c){var e=b.listener,f=b.bc||b.target;b.ec&&P(b);return e.call(f,c)}return b.cc=c}function bb(b,c,d,e){for(var f,g=0,h=b.length;g<h;++g)if(f=b[g],f.listener===c&&f.bc===d)return e&&(f.deleteIndex=g),f}function cb(b,c){var d=b[$a];return d?d[c]:void 0}function db(b){var c=b[$a];c||(c=b[$a]={});return c}
-function eb(b,c){var d=cb(b,c);if(d){for(var e=0,f=d.length;e<f;++e)b.removeEventListener(c,d[e].cc),Wa(d[e]);d.length=0;if(d=b[$a])delete d[c],0===Object.keys(d).length&&delete b[$a]}}function R(b,c,d,e,f){var g=db(b),h=g[c];h||(h=g[c]=[]);(g=bb(h,d,e,!1))?f||(g.ec=!1):(g={bc:e,ec:!!f,listener:d,target:b,type:c},b.addEventListener(c,ab(g)),h.push(g));return g}function fb(b,c,d,e){(b=cb(b,c))&&(d=bb(b,d,e,!0))&&P(d)}
-function P(b){if(b&&b.target){b.target.removeEventListener(b.type,b.cc);var c=cb(b.target,b.type);if(c){var d="deleteIndex"in b?b.deleteIndex:c.indexOf(b);-1!==d&&c.splice(d,1);0===c.length&&eb(b.target,b.type)}Wa(b)}}function gb(b){var c=db(b),d;for(d in c)eb(b,d)};function hb(){}hb.prototype.ha=!1;function ib(b){b.ha||(b.ha=!0,b.K())}hb.prototype.K=N;function S(b,c){this.type=b;this.target=c||null}S.prototype.preventDefault=S.prototype.stopPropagation=function(){this.me=!0};function jb(b){b.stopPropagation()}function kb(b){b.preventDefault()};function lb(){this.H={};this.B={}}M(lb,hb);lb.prototype.addEventListener=function(b,c){var d=this.B[b];d||(d=this.B[b]=[]);-1===d.indexOf(c)&&d.push(c)};function T(b,c){var d="string"===typeof c?new S(c):c,e=d.type;d.target=b;var f=b.B[e],g;if(f){e in b.H||(b.H[e]=0);for(var h=0,k=f.length;h<k;++h)if(!1===f[h].call(b,d)||d.me){g=!1;break}d=b.H[e];for(delete b.H[e];d--;)b.removeEventListener(e,N);return g}}lb.prototype.K=function(){gb(this)};
-function mb(b,c){return c?c in b.B:0<Object.keys(b.B).length}lb.prototype.removeEventListener=function(b,c){var d=this.B[b];if(d){var e=d.indexOf(c);b in this.H?(d[e]=N,++this.H[b]):(d.splice(e,1),0===d.length&&delete this.B[b])}};function nb(){lb.call(this);this.f=0}M(nb,lb);nb.prototype.w=function(){++this.f;T(this,"change")};nb.prototype.V=function(b,c,d){if(Array.isArray(b)){for(var e=b.length,f=Array(e),g=0;g<e;++g)f[g]=R(this,b[g],c,d);return f}return R(this,b,c,d)};nb.prototype.Rc=function(b,c,d){if(Array.isArray(b)){for(var e=b.length,f=Array(e),g=0;g<e;++g)f[g]=R(this,b[g],c,d,!0);return f}return R(this,b,c,d,!0)};function ob(b,c,d){S.call(this,b);this.key=c;this.oldValue=d}M(ob,S);function U(b){nb.call(this);I(this);this.I={};void 0!==b&&this.l(b)}M(U,nb);var pb={};function qb(b){return pb.hasOwnProperty(b)?pb[b]:pb[b]="change:"+b}U.prototype.get=function(b){var c;this.I.hasOwnProperty(b)&&(c=this.I[b]);return c};U.prototype.ua=function(){return Va({},this.I)};U.prototype.set=function(b,c,d){d?this.I[b]=c:(d=this.I[b],this.I[b]=c,d!==c&&(c=qb(b),T(this,new ob(c,b,d)),T(this,new ob("propertychange",b,d))))};
-U.prototype.l=function(b,c){for(var d in b)this.set(d,b[d],c)};function rb(b,c,d){void 0===d&&(d=[0,0]);d[0]=b[0]*c+.5|0;d[1]=b[1]*c+.5|0;return d}function sb(b,c){if(Array.isArray(b))return b;void 0===c?c=[b,b]:(c[0]=b,c[1]=b);return c};function tb(b,c){b[0]+=c[0];b[1]+=c[1]}function ub(b,c){var d=Math.cos(c),e=Math.sin(c),f=b[1]*d+b[0]*e;b[0]=b[0]*d-b[1]*e;b[1]=f};function vb(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}vb.prototype.BYTES_PER_ELEMENT=4;vb.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};vb.prototype.toString=Array.prototype.join;"undefined"==typeof Float32Array&&(vb.BYTES_PER_ELEMENT=4,vb.prototype.BYTES_PER_ELEMENT=vb.prototype.BYTES_PER_ELEMENT,vb.prototype.set=vb.prototype.set,vb.prototype.toString=vb.prototype.toString,E("Float32Array",vb,void 0));function wb(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}wb.prototype.BYTES_PER_ELEMENT=8;wb.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};wb.prototype.toString=Array.prototype.join;if("undefined"==typeof Float64Array){try{wb.BYTES_PER_ELEMENT=8}catch(b){}wb.prototype.BYTES_PER_ELEMENT=wb.prototype.BYTES_PER_ELEMENT;wb.prototype.set=wb.prototype.set;wb.prototype.toString=wb.prototype.toString;E("Float64Array",wb,void 0)};function xb(b,c,d,e,f){b[0]=c;b[1]=d;b[2]=e;b[3]=f};function yb(){var b=Array(16);zb(b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);return b}function Ab(){var b=Array(16);zb(b,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return b}function zb(b,c,d,e,f,g,h,k,l,m,p,q,r,u,w,y,z){b[0]=c;b[1]=d;b[2]=e;b[3]=f;b[4]=g;b[5]=h;b[6]=k;b[7]=l;b[8]=m;b[9]=p;b[10]=q;b[11]=r;b[12]=u;b[13]=w;b[14]=y;b[15]=z}
-function Bb(b,c){b[0]=c[0];b[1]=c[1];b[2]=c[2];b[3]=c[3];b[4]=c[4];b[5]=c[5];b[6]=c[6];b[7]=c[7];b[8]=c[8];b[9]=c[9];b[10]=c[10];b[11]=c[11];b[12]=c[12];b[13]=c[13];b[14]=c[14];b[15]=c[15]}function Cb(b){b[0]=1;b[1]=0;b[2]=0;b[3]=0;b[4]=0;b[5]=1;b[6]=0;b[7]=0;b[8]=0;b[9]=0;b[10]=1;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1}
-function Db(b,c){var d=b[0],e=b[1],f=b[2],g=b[3],h=b[4],k=b[5],l=b[6],m=b[7],p=b[8],q=b[9],r=b[10],u=b[11],w=b[12],y=b[13],z=b[14],D=b[15],t=d*k-e*h,v=d*l-f*h,B=d*m-g*h,F=e*l-f*k,C=e*m-g*k,G=f*m-g*l,J=p*y-q*w,A=p*z-r*w,H=p*D-u*w,O=q*z-r*y,Q=q*D-u*y,L=r*D-u*z,K=t*L-v*Q+B*O+F*H-C*A+G*J;0!=K&&(K=1/K,c[0]=(k*L-l*Q+m*O)*K,c[1]=(-e*L+f*Q-g*O)*K,c[2]=(y*G-z*C+D*F)*K,c[3]=(-q*G+r*C-u*F)*K,c[4]=(-h*L+l*H-m*A)*K,c[5]=(d*L-f*H+g*A)*K,c[6]=(-w*G+z*B-D*v)*K,c[7]=(p*G-r*B+u*v)*K,c[8]=(h*Q-k*H+m*J)*K,c[9]=(-d*Q+
-e*H-g*J)*K,c[10]=(w*C-y*B+D*t)*K,c[11]=(-p*C+q*B-u*t)*K,c[12]=(-h*O+k*A-l*J)*K,c[13]=(d*O-e*A+f*J)*K,c[14]=(-w*F+y*v-z*t)*K,c[15]=(p*F-q*v+r*t)*K)}function Eb(b,c,d){var e=b[1]*c+b[5]*d+0*b[9]+b[13],f=b[2]*c+b[6]*d+0*b[10]+b[14],g=b[3]*c+b[7]*d+0*b[11]+b[15];b[12]=b[0]*c+b[4]*d+0*b[8]+b[12];b[13]=e;b[14]=f;b[15]=g}function Fb(b,c,d){zb(b,b[0]*c,b[1]*c,b[2]*c,b[3]*c,b[4]*d,b[5]*d,b[6]*d,b[7]*d,1*b[8],1*b[9],1*b[10],1*b[11],b[12],b[13],b[14],b[15])}
-function Gb(b,c){var d=b[0],e=b[1],f=b[2],g=b[3],h=b[4],k=b[5],l=b[6],m=b[7],p=Math.cos(c),q=Math.sin(c);b[0]=d*p+h*q;b[1]=e*p+k*q;b[2]=f*p+l*q;b[3]=g*p+m*q;b[4]=d*-q+h*p;b[5]=e*-q+k*p;b[6]=f*-q+l*p;b[7]=g*-q+m*p}new Float64Array(3);new Float64Array(3);new Float64Array(4);new Float64Array(4);new Float64Array(4);new Float64Array(16);function Hb(b){for(var c=Ib(),d=0,e=b.length;d<e;++d)Jb(c,b[d]);return c}function Kb(b,c,d){return d?(d[0]=b[0]-c,d[1]=b[1]-c,d[2]=b[2]+c,d[3]=b[3]+c,d):[b[0]-c,b[1]-c,b[2]+c,b[3]+c]}function Lb(b,c){return c?(c[0]=b[0],c[1]=b[1],c[2]=b[2],c[3]=b[3],c):b.slice()}function Mb(b,c){return b[0]<=c[0]&&c[2]<=b[2]&&b[1]<=c[1]&&c[3]<=b[3]}function Ib(){return[Infinity,Infinity,-Infinity,-Infinity]}function Nb(b,c,d,e,f){return f?(f[0]=b,f[1]=c,f[2]=d,f[3]=e,f):[b,c,d,e]}
-function Ob(b){return Nb(Infinity,Infinity,-Infinity,-Infinity,b)}function Pb(b,c){var d=b[0],e=b[1];return Nb(d,e,d,e,c)}function Qb(b,c){return b[0]==c[0]&&b[2]==c[2]&&b[1]==c[1]&&b[3]==c[3]}function Rb(b,c){c[0]<b[0]&&(b[0]=c[0]);c[2]>b[2]&&(b[2]=c[2]);c[1]<b[1]&&(b[1]=c[1]);c[3]>b[3]&&(b[3]=c[3])}function Jb(b,c){c[0]<b[0]&&(b[0]=c[0]);c[0]>b[2]&&(b[2]=c[0]);c[1]<b[1]&&(b[1]=c[1]);c[1]>b[3]&&(b[3]=c[1])}
-function Sb(b,c,d,e,f){for(;d<e;d+=f){var g=b,h=c[d],k=c[d+1];g[0]=Math.min(g[0],h);g[1]=Math.min(g[1],k);g[2]=Math.max(g[2],h);g[3]=Math.max(g[3],k)}return b}function Tb(b){var c=0;b[2]<b[0]||b[3]<b[1]||(c=Ub(b)*Vb(b));return c}function Wb(b){return[b[0],b[1]]}function Xb(b){return[(b[0]+b[2])/2,(b[1]+b[3])/2]}
-function Yb(b,c,d,e){var f=c*e[0]/2;e=c*e[1]/2;c=Math.cos(d);var g=Math.sin(d);d=f*c;f*=g;c*=e;var h=e*g,k=b[0],l=b[1];b=k-d+h;e=k-d-h;g=k+d-h;d=k+d+h;var h=l-f-c,k=l-f+c,m=l+f+c,f=l+f-c;return Nb(Math.min(b,e,g,d),Math.min(h,k,m,f),Math.max(b,e,g,d),Math.max(h,k,m,f),void 0)}function Vb(b){return b[3]-b[1]}function Zb(b,c){var d=Ib();$b(b,c)&&(d[0]=b[0]>c[0]?b[0]:c[0],d[1]=b[1]>c[1]?b[1]:c[1],d[2]=b[2]<c[2]?b[2]:c[2],d[3]=b[3]<c[3]?b[3]:c[3]);return d}function ac(b){return[b[0],b[3]]}
-function Ub(b){return b[2]-b[0]}function $b(b,c){return b[0]<=c[2]&&b[2]>=c[0]&&b[1]<=c[3]&&b[3]>=c[1]};function bc(){return!0}function cc(){return!1};/*
-
- Latitude/longitude spherical geodesy formulae taken from
- http://www.movable-type.co.uk/scripts/latlong.html
- Licensed under CC-BY-3.0.
-*/
-function dc(b){this.radius=b}function ec(b,c){var d=b[1]*Math.PI/180,e=c[1]*Math.PI/180,f=(e-d)/2,g=(c[0]-b[0])*Math.PI/180/2,d=Math.sin(f)*Math.sin(f)+Math.sin(g)*Math.sin(g)*Math.cos(d)*Math.cos(e);return 2*fc.radius*Math.atan2(Math.sqrt(d),Math.sqrt(1-d))}
-dc.prototype.offset=function(b,c,d){var e=b[1]*Math.PI/180;c/=this.radius;var f=Math.asin(Math.sin(e)*Math.cos(c)+Math.cos(e)*Math.sin(c)*Math.cos(d));return[180*(b[0]*Math.PI/180+Math.atan2(Math.sin(d)*Math.sin(c)*Math.cos(e),Math.cos(c)-Math.sin(e)*Math.sin(f)))/Math.PI,180*f/Math.PI]};var fc=new dc(6370997);var gc={};gc.degrees=2*Math.PI*fc.radius/360;gc.ft=.3048;gc.m=1;gc["us-ft"]=1200/3937;
-function hc(b){this.na=b.code;this.b=b.units;this.h=void 0!==b.extent?b.extent:null;this.f=void 0!==b.global?b.global:!1;this.a=!(!this.f||!this.h);this.i=void 0!==b.getPointResolution?b.getPointResolution:this.j;this.c=null;this.g=b.metersPerUnit;var c=ic,d=b.code,e=jc||x.proj4;if("function"==typeof e&&void 0===c[d]){var f=e.defs(d);if(void 0!==f){void 0===b.metersPerUnit&&(this.g=f.to_meter);void 0===b.units&&(this.b=f.units);var g,h;for(g in c)if(b=e.defs(g),void 0!==b)if(c=kc(g),b===f)lc([c,this]);
-else{h=e(g,d);b=h.forward;h=h.inverse;var c=kc(c),k=kc(this);mc(c,k,nc(b));mc(k,c,nc(h))}}}}hc.prototype.l=function(){return this.na};hc.prototype.C=function(){return this.h};function oc(b){return b.g||gc[b.b]}hc.prototype.j=function(b,c){if("degrees"==this.b)return b;var d=pc(this,kc("EPSG:4326")),e=[c[0]-b/2,c[1],c[0]+b/2,c[1],c[0],c[1]-b/2,c[0],c[1]+b/2],e=d(e,e,2),d=(ec(e.slice(0,2),e.slice(2,4))+ec(e.slice(4,6),e.slice(6,8)))/2,e=oc(this);void 0!==e&&(d/=e);return d};
-hc.prototype.getPointResolution=function(b,c){return this.i(b,c)};var ic={},qc={},jc=null;function lc(b){rc(b);b.forEach(function(c){b.forEach(function(b){c!==b&&mc(c,b,sc)})})}function tc(b){ic[b.na]=b;mc(b,b,sc)}function rc(b){var c=[];b.forEach(function(b){c.push(tc(b))})}function uc(b){return b?"string"===typeof b?kc(b):b:kc("EPSG:3857")}function mc(b,c,d){b=b.na;c=c.na;b in qc||(qc[b]={});qc[b][c]=d}
-function nc(b){return function(c,d,e){var f=c.length;e=void 0!==e?e:2;d=void 0!==d?d:Array(f);var g,h;for(h=0;h<f;h+=e)for(g=b([c[h],c[h+1]]),d[h]=g[0],d[h+1]=g[1],g=e-1;2<=g;--g)d[h+g]=c[h+g];return d}}function kc(b){var c;if(b instanceof hc)c=b;else if("string"===typeof b){c=ic[b];var d=jc||x.proj4;void 0===c&&"function"==typeof d&&void 0!==d.defs(b)&&(c=new hc({code:b}),tc(c))}else c=null;return c}function vc(b,c){if(b===c)return!0;var d=b.b===c.b;return b.na===c.na?d:pc(b,c)===sc&&d}
-function wc(b,c){var d=kc(b),e=kc(c);return pc(d,e)}function pc(b,c){var d=b.na,e=c.na,f;d in qc&&e in qc[d]&&(f=qc[d][e]);void 0===f&&(f=xc);return f}function xc(b,c){if(void 0!==c&&b!==c){for(var d=0,e=b.length;d<e;++d)c[d]=b[d];b=c}return b}function sc(b,c){var d;if(void 0!==c){d=0;for(var e=b.length;d<e;++d)c[d]=b[d];d=c}else d=b.slice();return d};function yc(){U.call(this);this.u=Ib();this.v=-1;this.h={};this.s=this.i=0}M(yc,U);yc.prototype.C=function(b){this.v!=this.f&&(this.u=this.ab(this.u),this.v=this.f);var c=this.u;b?(b[0]=c[0],b[1]=c[1],b[2]=c[2],b[3]=c[3]):b=c;return b};yc.prototype.o=function(b,c){this.wb(wc(b,c));return this};function zc(b,c,d,e,f,g){var h=f[0],k=f[1],l=f[4],m=f[5],p=f[12];f=f[13];for(var q=g?g:[],r=0;c<d;c+=e){var u=b[c],w=b[c+1];q[r++]=h*u+l*w+p;q[r++]=k*u+m*w+f}g&&q.length!=r&&(q.length=r);return q};function Ac(){yc.call(this);this.g="XY";this.b=2;this.a=null}M(Ac,yc);function Bc(b){if("XY"==b)return 2;if("XYZ"==b||"XYM"==b)return 3;if("XYZM"==b)return 4}n=Ac.prototype;n.ab=function(b){var c=this.a,d=this.a.length,e=this.b;b=Ob(b);return Sb(b,c,0,d,e)};
-n.Hb=function(b){this.s!=this.f&&(Wa(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<=this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=this.Ea(b);if(d.a.length<this.a.length)return this.h[c]=d;this.i=b;return this};n.Ea=function(){return this};function V(b,c,d){b.b=Bc(c);b.g=c;b.a=d}function Cc(b,c,d,e){if(c)d=Bc(c);else{for(c=0;c<e;++c){if(0===d.length){b.g="XY";b.b=2;return}d=d[0]}d=d.length;c=2==d?"XY":3==d?"XYZ":4==d?"XYZM":void 0}b.g=c;b.b=d}
-n.wb=function(b){this.a&&(b(this.a,this.a,this.b),this.w())};n.rotate=function(b,c){var d=this.a;if(d){for(var e=d.length,f=this.b,g=d?d:[],h=Math.cos(b),k=Math.sin(b),l=c[0],m=c[1],p=0,q=0;q<e;q+=f){var r=d[q]-l,u=d[q+1]-m;g[p++]=l+r*h-u*k;g[p++]=m+r*k+u*h;for(r=q+2;r<q+f;++r)g[p++]=d[r]}d&&g.length!=p&&(g.length=p);this.w()}};function Dc(b,c){var d=0,e,f;e=0;for(f=c.length;e<f;++e)b[d++]=c[e];return d}function Ec(b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k;for(k=0;k<e;++k)b[c++]=h[k]}return c}function Fc(b,c,d,e,f){f=f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h)c=Ec(b,c,d[h],e),f[g++]=c;f.length=g;return f};function Gc(b,c,d,e,f){f=void 0!==f?f:[];for(var g=0;c<d;c+=e)f[g++]=b.slice(c,c+e);f.length=g;return f}function Hc(b,c,d,e,f){f=void 0!==f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h){var l=d[h];f[g++]=Gc(b,c,l,e,f[g]);c=l}f.length=g;return f};function Ic(b,c,d,e,f,g,h){var k=(d-c)/e;if(3>k){for(;c<d;c+=e)g[h++]=b[c],g[h++]=b[c+1];return h}var l=Array(k);l[0]=1;l[k-1]=1;d=[c,d-e];for(var m=0,p;0<d.length;){var q=d.pop(),r=d.pop(),u=0,w=b[r],y=b[r+1],z=b[q],D=b[q+1];for(p=r+e;p<q;p+=e){var t,v=b[p];t=b[p+1];var B=w,F=y,C=z-B,G=D-F;if(0!==C||0!==G){var J=((v-B)*C+(t-F)*G)/(C*C+G*G);1<J?(B=z,F=D):0<J&&(B+=C*J,F+=G*J)}v=B-v;t=F-t;t=v*v+t*t;t>u&&(m=p,u=t)}u>f&&(l[(m-c)/e]=1,r+e<m&&d.push(r,m),m+e<q&&d.push(m,q))}for(p=0;p<k;++p)l[p]&&(g[h++]=
-b[c+p*e],g[h++]=b[c+p*e+1]);return h}
-function Jc(b,c,d,e,f,g,h,k){var l,m;l=0;for(m=d.length;l<m;++l){var p=d[l];a:{var q=b,r=p,u=e,w=f,y=g;if(c!=r){var z=w*Math.round(q[c]/w),D=w*Math.round(q[c+1]/w);c+=u;y[h++]=z;y[h++]=D;var t=void 0,v=void 0;do if(t=w*Math.round(q[c]/w),v=w*Math.round(q[c+1]/w),c+=u,c==r){y[h++]=t;y[h++]=v;break a}while(t==z&&v==D);for(;c<r;){var B,F;B=w*Math.round(q[c]/w);F=w*Math.round(q[c+1]/w);c+=u;if(B!=t||F!=v){var C=t-z,G=v-D,J=B-z,A=F-D;C*A==G*J&&(0>C&&J<C||C==J||0<C&&J>C)&&(0>G&&A<G||G==A||0<G&&A>G)||(y[h++]=
-t,y[h++]=v,z=t,D=v);t=B;v=F}}y[h++]=t;y[h++]=v}}k.push(h);c=p}return h};function Kc(b,c){Ac.call(this);this.X(b,c)}M(Kc,Ac);n=Kc.prototype;n.clone=function(){var b=new Kc(null);V(b,this.g,this.a.slice());b.w();return b};n.oa=function(){return Gc(this.a,0,this.a.length,this.b)};n.Ea=function(b){var c=[];c.length=Ic(this.a,0,this.a.length,this.b,b,c,0);b=new Kc(null);V(b,"XY",c);b.w();return b};n.U=function(){return"LinearRing"};n.X=function(b,c){b?(Cc(this,c,b,1),this.a||(this.a=[]),this.a.length=Ec(this.a,0,b,this.b)):V(this,"XY",null);this.w()};function Lc(b,c){Ac.call(this);this.X(b,c)}M(Lc,Ac);n=Lc.prototype;n.clone=function(){var b=new Lc(null);V(b,this.g,this.a.slice());b.w();return b};n.oa=function(){return this.a?this.a.slice():[]};n.ab=function(b){return Pb(this.a,b)};n.U=function(){return"Point"};n.X=function(b,c){b?(Cc(this,c,b,0),this.a||(this.a=[]),this.a.length=Dc(this.a,b)):V(this,"XY",null);this.w()};function Mc(b,c,d,e,f,g){for(var h=!1,k=b[d-e],l=b[d-e+1];c<d;c+=e){var m=b[c],p=b[c+1];l>g!=p>g&&f<(m-k)*(g-l)/(p-l)+k&&(h=!h);k=m;l=p}return h};function Nc(b,c,d,e,f,g,h){var k,l,m,p,q,r=f[g+1],u=[],w=d[0];m=b[w-e];q=b[w-e+1];for(k=c;k<w;k+=e){p=b[k];l=b[k+1];if(r<=q&&l<=r||q<=r&&r<=l)m=(r-q)/(l-q)*(p-m)+m,u.push(m);m=p;q=l}w=NaN;q=-Infinity;u.sort(Ga);m=u[0];k=1;for(l=u.length;k<l;++k){p=u[k];var y=Math.abs(p-m);if(y>q){m=(m+p)/2;var z;a:if(0!==d.length&&Mc(b,c,d[0],e,m,r)){var D=z=void 0;z=1;for(D=d.length;z<D;++z)if(Mc(b,d[z-1],d[z],e,m,r)){z=!1;break a}z=!0}else z=!1;z&&(w=m,q=y)}m=p}isNaN(w)&&(w=f[g]);return h?(h.push(w,r),h):[w,r]}
-;function Oc(b,c,d,e){for(var f=0,g=b[d-e],h=b[d-e+1];c<d;c+=e)var k=b[c],l=b[c+1],f=f+(k-g)*(l+h),g=k,h=l;return 0<f}function Pc(b,c,d,e){var f=0;e=void 0!==e?e:!1;var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g],f=Oc(b,f,k,d);if(0===g){if(e&&f||!e&&!f)return!1}else if(e&&!f||!e&&f)return!1;f=k}return!0}
-function Qc(b,c,d,e,f){f=void 0!==f?f:!1;var g,h;g=0;for(h=d.length;g<h;++g){var k=d[g],l=Oc(b,c,k,e);if(0===g?f&&l||!f&&!l:f&&!l||!f&&l)for(var l=b,m=k,p=e;c<m-p;){var q;for(q=0;q<p;++q){var r=l[c+q];l[c+q]=l[m-p+q];l[m-p+q]=r}c+=p;m-=p}c=k}return c}function Rc(b,c,d,e){var f=0,g,h;g=0;for(h=c.length;g<h;++g)f=Qc(b,f,c[g],d,e);return f};function Sc(b,c){Ac.call(this);this.c=[];this.A=-1;this.D=null;this.G=-1;this.j=null;this.X(b,c)}M(Sc,Ac);n=Sc.prototype;n.clone=function(){var b=new Sc(null);Tc(b,this.g,this.a.slice(),this.c.slice());return b};n.oa=function(b){var c;void 0!==b?(c=Uc(this).slice(),Qc(c,0,this.c,this.b,b)):c=this.a;return Hc(c,0,this.c,this.b)};n.Ta=function(){return this.c};function Vc(b){if(b.A!=b.f){var c=Xb(b.C());b.D=Nc(Uc(b),0,b.c,b.b,c,0);b.A=b.f}return b.D}
-function Uc(b){if(b.G!=b.f){var c=b.a;Pc(c,b.c,b.b)?b.j=c:(b.j=c.slice(),b.j.length=Qc(b.j,0,b.c,b.b));b.G=b.f}return b.j}n.Ea=function(b){var c=[],d=[];c.length=Jc(this.a,0,this.c,this.b,Math.sqrt(b),c,0,d);b=new Sc(null);Tc(b,"XY",c,d);return b};n.U=function(){return"Polygon"};n.X=function(b,c){if(b){Cc(this,c,b,2);this.a||(this.a=[]);var d=Fc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1];this.w()}else Tc(this,"XY",null,this.c)};function Tc(b,c,d,e){V(b,c,d);b.c=e;b.w()};function Wc(b){U.call(this);b=b||{};this.g=[0,0];var c={};c.center=void 0!==b.center?b.center:null;this.h=uc(b.projection);var d,e,f,g=void 0!==b.minZoom?b.minZoom:0;d=void 0!==b.maxZoom?b.maxZoom:28;var h=void 0!==b.zoomFactor?b.zoomFactor:2;if(void 0!==b.resolutions)d=b.resolutions,e=d[0],f=d[d.length-1],d=Oa(d);else{e=uc(b.projection);f=e.C();var k=(f?Math.max(Ub(f),Vb(f)):360*gc.degrees/oc(e))/256/Math.pow(2,0),l=k/Math.pow(2,28);e=b.maxResolution;void 0!==e?g=0:e=k/Math.pow(h,g);f=b.minResolution;
-void 0===f&&(f=void 0!==b.maxZoom?void 0!==b.maxResolution?e/Math.pow(h,d):k/Math.pow(h,d):l);d=g+Math.floor(Math.log(e/f)/Math.log(h));f=e/Math.pow(h,d-g);d=Pa(h,e,d-g)}this.b=e;this.i=f;this.c=g;g=void 0!==b.extent?Ea(b.extent):Fa;(void 0!==b.enableRotation?b.enableRotation:1)?(e=b.constrainRotation,e=void 0===e||!0===e?Ta():!1===e?Ra:ea(e)?Sa(e):Ra):e=Qa;this.a=new Ua(g,d,e);void 0!==b.resolution?c.resolution=b.resolution:void 0!==b.zoom&&(c.resolution=this.constrainResolution(this.b,b.zoom-this.c));
-c.rotation=void 0!==b.rotation?b.rotation:0;this.l(c)}M(Wc,U);n=Wc.prototype;n.constrainResolution=function(b,c,d){return this.a.resolution(b,c||0,d||0)};n.constrainRotation=function(b,c){return this.a.rotation(b,c||0)};n.ga=function(){return this.get("center")};n.dc=function(b){var c=this.ga(),d=this.J(),e=Xc(this);return Yb(c,d,e,b)};n.ae=function(){return this.h};n.J=function(){return this.get("resolution")};function Yc(b,c){return Math.max(Ub(b)/c[0],Vb(b)/c[1])}
-function Xc(b){return b.get("rotation")}n.N=function(){var b=this.ga(),c=this.h,d=this.J(),e=Xc(this);return{center:[Math.round(b[0]/d)*d,Math.round(b[1]/d)*d],projection:void 0!==c?c:null,resolution:d,rotation:e}};n.kd=function(){var b,c=this.J();if(void 0!==c){var d,e=0;do{d=this.constrainResolution(this.b,e);if(d==c){b=e;break}++e}while(d>this.i)}return void 0!==b?this.c+b:b};
-n.fd=function(b,c,d){if(!(b instanceof Ac)){var e=b[0],f=b[1],g=b[2],h=b[3],e=[e,f,e,h,g,h,g,f,e,f],f=new Sc(null);Tc(f,"XY",e,[e.length]);b=f}e=d||{};d=void 0!==e.padding?e.padding:[0,0,0,0];var h=void 0!==e.constrainResolution?e.constrainResolution:!0,f=void 0!==e.nearest?e.nearest:!1,k;void 0!==e.minResolution?k=e.minResolution:void 0!==e.maxZoom?k=this.constrainResolution(this.b,e.maxZoom-this.c,0):k=0;var l=b.a,g=Xc(this),e=Math.cos(-g),g=Math.sin(-g),m=Infinity,p=Infinity,q=-Infinity,r=-Infinity;
-b=b.b;for(var u=0,w=l.length;u<w;u+=b)var y=l[u]*e-l[u+1]*g,z=l[u]*g+l[u+1]*e,m=Math.min(m,y),p=Math.min(p,z),q=Math.max(q,y),r=Math.max(r,z);c=Yc([m,p,q,r],[c[0]-d[1]-d[3],c[1]-d[0]-d[2]]);c=isNaN(c)?k:Math.max(c,k);h&&(k=this.constrainResolution(c,0,0),!f&&k<c&&(k=this.constrainResolution(k,-1,0)),c=k);Zc(this,c);g=-g;k=(m+q)/2+(d[1]-d[3])/2*c;c=(p+r)/2+(d[0]-d[2])/2*c;this.ma([k*e-c*g,c*e+k*g])};
-n.rotate=function(b,c){if(void 0!==c){var d,e=this.ga();void 0!==e&&(d=[e[0]-c[0],e[1]-c[1]],ub(d,b-Xc(this)),tb(d,c));this.ma(d)}this.set("rotation",b)};n.ma=function(b){this.set("center",b)};function $c(b,c){b.g[1]+=c}function Zc(b,c){b.set("resolution",c)}n.ue=function(b){b=this.constrainResolution(this.b,b-this.c,0);Zc(this,b)};function ad(b){return 1-Math.pow(1-b,3)}function bd(b){return 3*b*b-2*b*b*b}function cd(b){return b};function dd(b){var c=b.source,d=b.start?b.start:Date.now(),e=c[0],f=c[1],g=void 0!==b.duration?b.duration:1E3,h=b.easing?b.easing:bd;return function(b,c){if(c.time<d)return c.animate=!0,c.viewHints[0]+=1,!0;if(c.time<d+g){var m=1-h((c.time-d)/g),p=e-c.viewState.center[0],q=f-c.viewState.center[1];c.animate=!0;c.viewState.center[0]+=m*p;c.viewState.center[1]+=m*q;c.viewHints[0]+=1;return!0}return!1}}
-function ed(b){var c=b.rotation?b.rotation:0,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:bd,g=b.anchor?b.anchor:null;return function(b,k){if(k.time<d)return k.animate=!0,k.viewHints[0]+=1,!0;if(k.time<d+e){var l=1-f((k.time-d)/e),l=(c-k.viewState.rotation)*l;k.animate=!0;k.viewState.rotation+=l;if(g){var m=k.viewState.center;m[0]-=g[0];m[1]-=g[1];ub(m,l);tb(m,g)}k.viewHints[0]+=1;return!0}return!1}}
-function fd(b){var c=b.resolution,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:bd;return function(b,h){if(h.time<d)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<d+e){var k=1-f((h.time-d)/e),l=c-h.viewState.resolution;h.animate=!0;h.viewState.resolution+=k*l;h.viewHints[0]+=1;return!0}return!1}};function gd(b,c,d,e){this.a=b;this.b=c;this.f=d;this.c=e}function hd(b,c,d){return b.a<=c&&c<=b.b&&b.f<=d&&d<=b.c}function id(b,c){return b.a==c.a&&b.f==c.f&&b.b==c.b&&b.c==c.c}function jd(b,c){return b.a<=c.b&&b.b>=c.a&&b.f<=c.c&&b.c>=c.f};function kd(b){this.b=b.html;this.a=b.tileRanges?b.tileRanges:null};function ld(b,c,d){S.call(this,b,d);this.element=c}M(ld,S);function md(b){U.call(this);this.a=b?b:[];nd(this)}M(md,U);n=md.prototype;n.clear=function(){for(;0<this.get("length");)this.pop()};function od(b,c,d){b.a.forEach(c,d)}n.item=function(b){return this.a[b]};n.pop=function(){return pd(this,this.get("length")-1)};n.push=function(b){var c=this.a.length;this.a.splice(c,0,b);nd(this);T(this,new ld("add",b,this));return c};
-n.remove=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)if(c[d]===b)return pd(this,d)};function pd(b,c){var d=b.a[c];b.a.splice(c,1);nd(b);T(b,new ld("remove",d,b));return d}function nd(b){b.set("length",b.a.length)};function qd(b,c){Array.prototype.forEach.call(b,c,void 0)}function rd(b){var c=b.length;if(0<c){for(var d=Array(c),e=0;e<c;e++)d[e]=b[e];return d}return[]}function sd(b,c,d){return 2>=arguments.length?Array.prototype.slice.call(b,c):Array.prototype.slice.call(b,c,d)};var td=/^#(?:[0-9a-f]{3}){1,2}$/i,ud=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,vd=/^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i;function wd(b){if("string"!==typeof b){var c=b[0];c!=(c|0)&&(c=c+.5|0);var d=b[1];d!=(d|0)&&(d=d+.5|0);var e=b[2];e!=(e|0)&&(e=e+.5|0);b="rgba("+c+","+d+","+e+","+(void 0===b[3]?1:b[3])+")"}return b}
-var yd=function(){var b={},c=0;return function(d){var e;if(b.hasOwnProperty(d))e=b[d];else{if(1024<=c){e=0;for(var f in b)0===(e++&3)&&(delete b[f],--c)}var g,h;td.exec(d)?(h=3==d.length-1?1:2,e=parseInt(d.substr(1+0*h,h),16),f=parseInt(d.substr(1+1*h,h),16),g=parseInt(d.substr(1+2*h,h),16),1==h&&(e=(e<<4)+e,f=(f<<4)+f,g=(g<<4)+g),e=[e,f,g,1]):(h=vd.exec(d))?(e=Number(h[1]),f=Number(h[2]),g=Number(h[3]),h=Number(h[4]),e=[e,f,g,h],e=xd(e,e)):(h=ud.exec(d))?(e=Number(h[1]),f=Number(h[2]),g=Number(h[3]),
-e=[e,f,g,1],e=xd(e,e)):e=void 0;b[d]=e;++c}return e}}();function xd(b,c){var d=c||[];d[0]=Ba(b[0]+.5|0,0,255);d[1]=Ba(b[1]+.5|0,0,255);d[2]=Ba(b[2]+.5|0,0,255);d[3]=Ba(b[3],0,1);return d};function zd(b){return"string"===typeof b||b instanceof CanvasPattern||b instanceof CanvasGradient?b:wd(b)};var Ad;a:{var Bd=x.navigator;if(Bd){var Cd=Bd.userAgent;if(Cd){Ad=Cd;break a}}Ad=""}function W(b){return-1!=Ad.indexOf(b)};function Dd(b,c){for(var d in b)c.call(void 0,b[d],d,b)}var Ed="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function Fd(b,c){for(var d,e,f=1;f<arguments.length;f++){e=arguments[f];for(d in e)b[d]=e[d];for(var g=0;g<Ed.length;g++)d=Ed[g],Object.prototype.hasOwnProperty.call(e,d)&&(b[d]=e[d])}};var Gd=W("Opera")||W("OPR"),Hd=W("Trident")||W("MSIE"),Id=W("Edge"),Jd=W("Gecko")&&!(-1!=Ad.toLowerCase().indexOf("webkit")&&!W("Edge"))&&!(W("Trident")||W("MSIE"))&&!W("Edge"),Kd=-1!=Ad.toLowerCase().indexOf("webkit")&&!W("Edge");function Ld(){var b=x.document;return b?b.documentMode:void 0}var Md;
-a:{var Nd="",Od=function(){var b=Ad;if(Jd)return/rv\:([^\);]+)(\)|;)/.exec(b);if(Id)return/Edge\/([\d\.]+)/.exec(b);if(Hd)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(b);if(Kd)return/WebKit\/(\S+)/.exec(b);if(Gd)return/(?:Version)[ \/]?(\S+)/.exec(b)}();Od&&(Nd=Od?Od[1]:"");if(Hd){var Pd=Ld();if(null!=Pd&&Pd>parseFloat(Nd)){Md=String(Pd);break a}}Md=Nd}var Qd={};
-function Rd(b){var c;if(!(c=Qd[b])){c=0;for(var d=qa(String(Md)).split("."),e=qa(String(b)).split("."),f=Math.max(d.length,e.length),g=0;0==c&&g<f;g++){var h=d[g]||"",k=e[g]||"",l=RegExp("(\\d*)(\\D*)","g"),m=RegExp("(\\d*)(\\D*)","g");do{var p=l.exec(h)||["","",""],q=m.exec(k)||["","",""];if(0==p[0].length&&0==q[0].length)break;c=Aa(0==p[1].length?0:parseInt(p[1],10),0==q[1].length?0:parseInt(q[1],10))||Aa(0==p[2].length,0==q[2].length)||Aa(p[2],q[2])}while(0==c)}c=Qd[b]=0<=c}return c}
-var Sd=x.document,Td=Sd&&Hd?Ld()||("CSS1Compat"==Sd.compatMode?parseInt(Md,10):5):void 0;var Ud=!Hd||9<=Number(Td);!Jd&&!Hd||Hd&&9<=Number(Td)||Jd&&Rd("1.9.1");Hd&&Rd("9");function Vd(b,c){this.x=void 0!==b?b:0;this.y=void 0!==c?c:0}n=Vd.prototype;n.clone=function(){return new Vd(this.x,this.y)};n.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};n.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};n.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};n.scale=function(b,c){var d=ea(c)?c:b;this.x*=b;this.y*=d;return this};function Wd(b,c){this.width=b;this.height=c}n=Wd.prototype;n.clone=function(){return new Wd(this.width,this.height)};n.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};n.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};n.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};n.scale=function(b,c){var d=ea(c)?c:b;this.width*=b;this.height*=d;return this};function Xd(b){return b?new Yd(Zd(b)):pa||(pa=new Yd)}function $d(b){var c=document;return da(b)?c.getElementById(b):b}function ae(b,c){Dd(c,function(c,e){"style"==e?b.style.cssText=c:"class"==e?b.className=c:"for"==e?b.htmlFor=c:be.hasOwnProperty(e)?b.setAttribute(be[e],c):0==e.lastIndexOf("aria-",0)||0==e.lastIndexOf("data-",0)?b.setAttribute(e,c):b[e]=c})}
-var be={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",frameborder:"frameBorder",height:"height",maxlength:"maxLength",nonce:"nonce",role:"role",rowspan:"rowSpan",type:"type",usemap:"useMap",valign:"vAlign",width:"width"};
-function ce(b,c,d){var e=arguments,f=document,g=e[0],h=e[1];if(!Ud&&h&&(h.name||h.type)){g=["<",g];h.name&&g.push(' name="',sa(h.name),'"');if(h.type){g.push(' type="',sa(h.type),'"');var k={};Fd(k,h);delete k.type;h=k}g.push(">");g=g.join("")}g=f.createElement(g);h&&(da(h)?g.className=h:"array"==ba(h)?g.className=h.join(" "):ae(g,h));2<e.length&&de(f,g,e);return g}
-function de(b,c,d){function e(d){d&&c.appendChild(da(d)?b.createTextNode(d):d)}for(var f=2;f<d.length;f++){var g=d[f];!ca(g)||ha(g)&&0<g.nodeType?e(g):qd(ee(g)?rd(g):g,e)}}function fe(b){for(var c;c=b.firstChild;)b.removeChild(c)}function ge(b,c,d){b.insertBefore(c,b.childNodes[d]||null)}function he(b){b&&b.parentNode&&b.parentNode.removeChild(b)}function ie(b,c){var d=c.parentNode;d&&d.replaceChild(b,c)}
-function je(b,c){if(!b||!c)return!1;if(b.contains&&1==c.nodeType)return b==c||b.contains(c);if("undefined"!=typeof b.compareDocumentPosition)return b==c||!!(b.compareDocumentPosition(c)&16);for(;c&&b!=c;)c=c.parentNode;return c==b}function Zd(b){return 9==b.nodeType?b:b.ownerDocument||b.document}function ee(b){if(b&&"number"==typeof b.length){if(ha(b))return"function"==typeof b.item||"string"==typeof b.item;if(ga(b))return"function"==typeof b.item}return!1}
-function Yd(b){this.a=b||x.document||document}Yd.prototype.appendChild=function(b,c){b.appendChild(c)};function ke(b,c,d,e){this.top=b;this.right=c;this.bottom=d;this.left=e}n=ke.prototype;n.clone=function(){return new ke(this.top,this.right,this.bottom,this.left)};n.ceil=function(){this.top=Math.ceil(this.top);this.right=Math.ceil(this.right);this.bottom=Math.ceil(this.bottom);this.left=Math.ceil(this.left);return this};n.floor=function(){this.top=Math.floor(this.top);this.right=Math.floor(this.right);this.bottom=Math.floor(this.bottom);this.left=Math.floor(this.left);return this};
-n.round=function(){this.top=Math.round(this.top);this.right=Math.round(this.right);this.bottom=Math.round(this.bottom);this.left=Math.round(this.left);return this};n.scale=function(b,c){var d=ea(c)?c:b;this.left*=b;this.right*=b;this.top*=d;this.bottom*=d;return this};function le(b,c){var d=Zd(b);return d.defaultView&&d.defaultView.getComputedStyle&&(d=d.defaultView.getComputedStyle(b,null))?d[c]||d.getPropertyValue(c)||"":""}function me(b){var c;try{c=b.getBoundingClientRect()}catch(d){return{left:0,top:0,right:0,bottom:0}}Hd&&b.ownerDocument.body&&(b=b.ownerDocument,c.left-=b.documentElement.clientLeft+b.body.clientLeft,c.top-=b.documentElement.clientTop+b.body.clientTop);return c}
-function ne(b){var c=oe;if("none"!=(le(b,"display")||(b.currentStyle?b.currentStyle.display:null)||b.style&&b.style.display))return c(b);var d=b.style,e=d.display,f=d.visibility,g=d.position;d.visibility="hidden";d.position="absolute";d.display="inline";b=c(b);d.display=e;d.position=g;d.visibility=f;return b}function oe(b){var c=b.offsetWidth,d=b.offsetHeight,e=Kd&&!c&&!d;return(void 0===c||e)&&b.getBoundingClientRect?(b=me(b),new Wd(b.right-b.left,b.bottom-b.top)):new Wd(c,d)}
-function pe(b,c){b.style.display=c?"":"none"}function qe(b,c,d,e){if(/^\d+px?$/.test(c))return parseInt(c,10);var f=b.style[d],g=b.runtimeStyle[d];b.runtimeStyle[d]=b.currentStyle[d];b.style[d]=c;c=b.style[e];b.style[d]=f;b.runtimeStyle[d]=g;return c}function re(b,c){var d=b.currentStyle?b.currentStyle[c]:null;return d?qe(b,d,"left","pixelLeft"):0}var se={thin:2,medium:4,thick:6};
-function te(b,c){if("none"==(b.currentStyle?b.currentStyle[c+"Style"]:null))return 0;var d=b.currentStyle?b.currentStyle[c+"Width"]:null;return d in se?se[d]:qe(b,d,"left","pixelLeft")};function ue(b,c,d){S.call(this,b);this.map=c;this.frameState=void 0!==d?d:null}M(ue,S);function ve(b){U.call(this);this.element=b.element?b.element:null;this.c=this.A=null;this.h=[];this.render=b.render?b.render:N;b.target&&(this.A=$d(b.target))}M(ve,U);ve.prototype.K=function(){he(this.element);ve.Y.K.call(this)};ve.prototype.setMap=function(b){this.c&&he(this.element);for(var c=0,d=this.h.length;c<d;++c)P(this.h[c]);this.h.length=0;if(this.c=b)(this.A?this.A:b.j).appendChild(this.element),this.render!==N&&this.h.push(R(b,"postrender",this.render,this)),b.render()};function we(){this.f=0;this.c={};this.b=this.a=null}n=we.prototype;n.clear=function(){this.f=0;this.c={};this.b=this.a=null};function xe(b,c){return b.c.hasOwnProperty(c)}function ye(b,c){for(var d=b.a;d;)c.call(void 0,d.Ba,d.Kb,b),d=d.ja}n.get=function(b){b=this.c[b];if(b===this.b)return b.Ba;b===this.a?(this.a=this.a.ja,this.a.Ia=null):(b.ja.Ia=b.Ia,b.Ia.ja=b.ja);b.ja=null;b.Ia=this.b;this.b=this.b.ja=b;return b.Ba};
-n.pop=function(){var b=this.a;delete this.c[b.Kb];b.ja&&(b.ja.Ia=null);this.a=b.ja;this.a||(this.b=null);--this.f;return b.Ba};n.replace=function(b,c){this.get(b);this.c[b].Ba=c};n.set=function(b,c){var d={Kb:b,ja:null,Ia:this.b,Ba:c};this.b?this.b.ja=d:this.a=d;this.b=d;this.c[b]=d;++this.f};function ze(b){we.call(this);this.g=void 0!==b?b:2048}M(ze,we);function Ae(b){return b.f>b.g}function Be(b,c){for(var d,e;Ae(b);){d=b.a.Ba;e=d.L[0].toString();var f;if(f=e in c)d=d.L,f=hd(c[e],d[1],d[2]);if(f)break;else ib(b.pop())}};function Ce(b,c){lb.call(this);this.L=b;this.state=c;this.a=null;this.key=""}M(Ce,lb);function De(b){T(b,"change")}Ce.prototype.getKey=function(){return I(this).toString()};Ce.prototype.N=function(){return this.state};function Ee(b){U.call(this);this.c=kc(b.projection);this.i=Fe(b.attributions);this.v=b.logo;this.A=void 0!==b.state?b.state:"ready";this.j=void 0!==b.wrapX?b.wrapX:!1}M(Ee,U);function Fe(b){if("string"===typeof b)return[new kd({html:b})];if(b instanceof kd)return[b];if(Array.isArray(b)){for(var c=b.length,d=Array(c),e=0;e<c;e++){var f=b[e];d[e]="string"===typeof f?new kd({html:f}):f}return d}return null}Ee.prototype.N=function(){return this.A};Ee.prototype.ra=function(){this.w()};function Ge(b){this.minZoom=void 0!==b.minZoom?b.minZoom:0;this.b=b.resolutions;this.maxZoom=this.b.length-1;this.f=void 0!==b.origin?b.origin:null;this.g=null;void 0!==b.origins&&(this.g=b.origins);var c=b.extent;void 0===c||this.f||this.g||(this.f=ac(c));this.h=null;void 0!==b.tileSizes&&(this.h=b.tileSizes);this.l=void 0!==b.tileSize?b.tileSize:this.h?null:256;this.i=void 0!==c?c:null;this.a=null;void 0!==b.sizes?this.a=b.sizes.map(function(b){return new gd(Math.min(0,b[0]),Math.max(b[0]-1,-1),
-Math.min(0,b[1]),Math.max(b[1]-1,-1))},this):c&&He(this,c);this.c=[0,0]}var Ie=[0,0,0];function Je(b,c,d,e,f){f=Ke(b,c,f);for(c=c[0]-1;c>=b.minZoom;){if(d.call(null,c,Le(b,f,c,e)))return!0;--c}return!1}Ge.prototype.C=function(){return this.i};Ge.prototype.fa=function(b){return this.f?this.f:this.g[b]};Ge.prototype.J=function(b){return this.b[b]};Ge.prototype.Gb=function(){return this.b};function Me(b,c,d,e){return c[0]<b.maxZoom?(e=Ke(b,c,e),Le(b,e,c[0]+1,d)):null}
-function Ne(b,c,d,e){Oe(b,c[0],c[1],d,!1,Ie);var f=Ie[1],g=Ie[2];Oe(b,c[2],c[3],d,!0,Ie);b=Ie[1];c=Ie[2];void 0!==e?(e.a=f,e.b=b,e.f=g,e.c=c):e=new gd(f,b,g,c);return e}function Le(b,c,d,e){d=b.J(d);return Ne(b,c,d,e)}function Pe(b,c){var d=b.fa(c[0]),e=b.J(c[0]),f=sb(Qe(b,c[0]),b.c);return[d[0]+(c[1]+.5)*f[0]*e,d[1]+(c[2]+.5)*f[1]*e]}function Ke(b,c,d){var e=b.fa(c[0]),f=b.J(c[0]);b=sb(Qe(b,c[0]),b.c);var g=e[0]+c[1]*b[0]*f;c=e[1]+c[2]*b[1]*f;return Nb(g,c,g+b[0]*f,c+b[1]*f,d)}
-function Oe(b,c,d,e,f,g){var h=Re(b,e),k=e/b.J(h),l=b.fa(h);b=sb(Qe(b,h),b.c);c=k*Math.floor((c-l[0])/e+(f?.5:0))/b[0];d=k*Math.floor((d-l[1])/e+(f?0:.5))/b[1];f?(c=Math.ceil(c)-1,d=Math.ceil(d)-1):(c=Math.floor(c),d=Math.floor(d));f=c;void 0!==g?(g[0]=h,g[1]=f,g[2]=d):g=[h,f,d];return g}function Se(b,c,d){d=b.J(d);return Oe(b,c[0],c[1],d,!1,void 0)}function Qe(b,c){return b.l?b.l:b.h[c]}function Re(b,c){var d=Ha(b.b,c,0);return Ba(d,b.minZoom,b.maxZoom)}
-function He(b,c){for(var d=b.b.length,e=Array(d),f=b.minZoom;f<d;++f)e[f]=Le(b,c,f);b.a=e}function Te(b){var c=b.c;if(!c){var c=Ue(b),d=Ve(c,void 0,void 0),c=new Ge({extent:c,origin:ac(c),resolutions:d,tileSize:void 0});b.c=c}return c}function Ve(b,c,d){c=void 0!==c?c:42;var e=Vb(b);b=Ub(b);d=sb(void 0!==d?d:256);d=Math.max(b/d[0],e/d[1]);c+=1;e=Array(c);for(b=0;b<c;++b)e[b]=d/Math.pow(2,b);return e}function Ue(b){b=kc(b);var c=b.C();c||(b=180*gc.degrees/oc(b),c=Nb(-b,-b,b,b));return c};function We(b){Ee.call(this,{attributions:b.attributions,extent:b.extent,logo:b.logo,projection:b.projection,state:b.state,wrapX:b.wrapX});this.G=void 0!==b.opaque?b.opaque:!1;this.Z=void 0!==b.tilePixelRatio?b.tilePixelRatio:1;this.tileGrid=void 0!==b.tileGrid?b.tileGrid:null;this.a=new ze(b.cacheSize);this.h=[0,0]}M(We,Ee);n=We.prototype;n.Gc=function(){return Ae(this.a)};n.Hc=function(b,c){var d=this.Ua(b);d&&Be(d,c)};
-function Xe(b,c,d,e,f){c=b.Ua(c);if(!c)return!1;for(var g=!0,h,k,l=e.a;l<=e.b;++l)for(var m=e.f;m<=e.c;++m)h=b.cb(d,l,m),k=!1,xe(c,h)&&(h=c.get(h),(k=2===h.N())&&(k=!1!==f(h))),k||(g=!1);return g}n.bb=function(){return 0};n.cb=function(b,c,d){return b+"/"+c+"/"+d};n.Fb=function(){return this.G};n.Gb=function(){return this.tileGrid.Gb()};n.ia=function(b){return this.tileGrid?this.tileGrid:Te(b)};n.Ua=function(b){var c=this.c;return c&&!vc(c,b)?null:this.a};n.eb=function(){return this.Z};
-function Ye(b,c,d,e){e=b.ia(e);d=b.eb(d);c=sb(Qe(e,c),b.h);return 1==d?c:rb(c,d,b.h)}function Ze(b,c,d){var e=void 0!==d?d:b.c;d=b.ia(e);if(b.j&&e.f){var f=c;c=f[0];b=Pe(d,f);var e=Ue(e),g=b[0],h=b[1];e[0]<=g&&g<=e[2]&&e[1]<=h&&h<=e[3]?c=f:(f=Ub(e),b[0]+=f*Math.ceil((e[0]-b[0])/f),c=Se(d,b,c))}e=c[0];b=c[1];f=c[2];d=d.minZoom>e||e>d.maxZoom?!1:(d=(g=d.C())?Le(d,g,e):d.a?d.a[e]:null)?hd(d,b,f):!0;return d?c:null}n.ra=function(){this.a.clear();this.w()};n.Qc=N;
-function $e(b,c){S.call(this,b);this.tile=c}M($e,S);function af(b){b=b?b:{};this.s=document.createElement("UL");this.j=document.createElement("LI");this.s.appendChild(this.j);pe(this.j,!1);this.g=void 0!==b.collapsed?b.collapsed:!0;this.i=void 0!==b.collapsible?b.collapsible:!0;this.i||(this.g=!1);var c=void 0!==b.className?b.className:"ol-attribution",d=void 0!==b.tipLabel?b.tipLabel:"Attributions",e=void 0!==b.collapseLabel?b.collapseLabel:"\u00bb";this.u="string"===typeof e?ce("SPAN",{},e):e;e=void 0!==b.label?b.label:"i";this.v="string"===typeof e?
-ce("SPAN",{},e):e;d=ce("BUTTON",{type:"button",title:d},this.i&&!this.g?this.u:this.v);R(d,"click",this.G,this);c=ce("DIV",c+" ol-unselectable ol-control"+(this.g&&this.i?" ol-collapsed":"")+(this.i?"":" ol-uncollapsible"),this.s,d);ve.call(this,{element:c,render:b.render?b.render:bf,target:b.target});this.o=!0;this.b={};this.a={};this.D={}}M(af,ve);
-function bf(b){if(b=b.frameState){var c,d,e,f,g,h,k,l,m,p,q,r=b.layerStatesArray,u=Va({},b.attributions),w={},y=b.viewState.projection;d=0;for(c=r.length;d<c;d++)if(h=r[d].layer.W())if(p=I(h).toString(),m=h.i)for(e=0,f=m.length;e<f;e++)if(k=m[e],l=I(k).toString(),!(l in u)){if(g=b.usedTiles[p]){var z=h.ia(y);a:{q=k;var D=y;if(q.a){var t=void 0,v=void 0,B=void 0,F=void 0;for(F in g)if(F in q.a)for(var B=g[F],C,t=0,v=q.a[F].length;t<v;++t){C=q.a[F][t];if(jd(C,B)){q=!0;break a}var G=Le(z,Ue(D),parseInt(F,
-10)),J=G.b-G.a+1;if(B.a<G.a||B.b>G.b)if(jd(C,new gd(Da(B.a,J),Da(B.b,J),B.f,B.c))||B.b-B.a+1>J&&jd(C,G)){q=!0;break a}}q=!1}else q=!0}}else q=!1;q?(l in w&&delete w[l],u[l]=k):w[l]=k}c=[u,w];d=c[0];c=c[1];for(var A in this.b)A in d?(this.a[A]||(pe(this.b[A],!0),this.a[A]=!0),delete d[A]):A in c?(this.a[A]&&(pe(this.b[A],!1),delete this.a[A]),delete c[A]):(he(this.b[A]),delete this.b[A],delete this.a[A]);for(A in d)e=document.createElement("LI"),e.innerHTML=d[A].b,this.s.appendChild(e),this.b[A]=e,
-this.a[A]=!0;for(A in c)e=document.createElement("LI"),e.innerHTML=c[A].b,pe(e,!1),this.s.appendChild(e),this.b[A]=e;A=!Za(this.a)||!Za(b.logos);this.o!=A&&(pe(this.element,A),this.o=A);A&&Za(this.a)?this.element.classList.add("ol-logo-only"):this.element.classList.remove("ol-logo-only");var H;b=b.logos;A=this.D;for(H in A)H in b||(he(A[H]),delete A[H]);for(var O in b)O in A||(H=new Image,H.src=O,d=b[O],""===d?d=H:(d=ce("A",{href:d}),d.appendChild(H)),this.j.appendChild(d),A[O]=d);pe(this.j,!Za(b))}else this.o&&
-(pe(this.element,!1),this.o=!1)}af.prototype.G=function(b){b.preventDefault();this.element.classList.toggle("ol-collapsed");this.g?ie(this.u,this.v):ie(this.v,this.u);this.g=!this.g};function cf(b){b=b?b:{};var c=void 0!==b.className?b.className:"ol-rotate",d=void 0!==b.label?b.label:"\u21e7";this.a=null;"string"===typeof d?this.a=ce("SPAN","ol-compass",d):(this.a=d,this.a.classList.add(this.a,"ol-compass"));d=ce("BUTTON",{"class":c+"-reset",type:"button",title:b.tipLabel?b.tipLabel:"Reset rotation"},this.a);R(d,"click",cf.prototype.o,this);c=ce("DIV",c+" ol-unselectable ol-control",d);d=b.render?b.render:df;this.g=b.resetNorth?b.resetNorth:void 0;ve.call(this,{element:c,render:d,
-target:b.target});this.i=void 0!==b.duration?b.duration:250;this.b=void 0!==b.autoHide?b.autoHide:!0;this.j=void 0;this.b&&this.element.classList.add("ol-hidden")}M(cf,ve);cf.prototype.o=function(b){b.preventDefault();if(void 0!==this.g)this.g();else{b=this.c;var c=b.O();if(c){var d=Xc(c);void 0!==d&&(0<this.i&&(d%=2*Math.PI,d<-Math.PI&&(d+=2*Math.PI),d>Math.PI&&(d-=2*Math.PI),b.ea(ed({rotation:d,duration:this.i,easing:ad}))),c.set("rotation",0))}}};
-function df(b){if(b=b.frameState){b=b.viewState.rotation;if(b!=this.j){var c="rotate("+b+"rad)";if(this.b){var d=this.element.classList.contains("ol-hidden");d||0!==b?d&&0!==b&&this.element.classList.remove("ol-hidden"):this.element.classList.add("ol-hidden")}this.a.style.msTransform=c;this.a.style.webkitTransform=c;this.a.style.transform=c}this.j=b}};function ef(b){b=b?b:{};var c=void 0!==b.className?b.className:"ol-zoom",d=void 0!==b.delta?b.delta:1,e=void 0!==b.zoomOutLabel?b.zoomOutLabel:"\u2212",f=void 0!==b.zoomOutTipLabel?b.zoomOutTipLabel:"Zoom out",g=ce("BUTTON",{"class":c+"-in",type:"button",title:void 0!==b.zoomInTipLabel?b.zoomInTipLabel:"Zoom in"},void 0!==b.zoomInLabel?b.zoomInLabel:"+");R(g,"click",na(ef.prototype.b,d),this);e=ce("BUTTON",{"class":c+"-out",type:"button",title:f},e);R(e,"click",na(ef.prototype.b,-d),this);c=ce("DIV",
-c+" ol-unselectable ol-control",g,e);ve.call(this,{element:c,target:b.target});this.a=void 0!==b.duration?b.duration:250}M(ef,ve);ef.prototype.b=function(b,c){c.preventDefault();var d=this.c,e=d.O();if(e){var f=e.J();f&&(0<this.a&&d.ea(fd({resolution:f,duration:this.a,easing:ad})),d=e.constrainResolution(f,b),Zc(e,d))}};function ff(b){b=b?b:{};var c=new md;(void 0!==b.zoom?b.zoom:1)&&c.push(new ef(b.zoomOptions));(void 0!==b.rotate?b.rotate:1)&&c.push(new cf(b.rotateOptions));(void 0!==b.attribution?b.attribution:1)&&c.push(new af(b.attributionOptions));return c};var gf=Kd?"webkitfullscreenchange":Jd?"mozfullscreenchange":Hd?"MSFullscreenChange":"fullscreenchange";function hf(){var b=Xd().a,c=b.body;return!!(c.webkitRequestFullscreen||c.mozRequestFullScreen&&b.mozFullScreenEnabled||c.msRequestFullscreen&&b.msFullscreenEnabled||c.requestFullscreen&&b.fullscreenEnabled)}
-function jf(b){b.webkitRequestFullscreen?b.webkitRequestFullscreen():b.mozRequestFullScreen?b.mozRequestFullScreen():b.msRequestFullscreen?b.msRequestFullscreen():b.requestFullscreen&&b.requestFullscreen()}function kf(){var b=Xd().a;return!!(b.webkitIsFullScreen||b.mozFullScreen||b.msFullscreenElement||b.fullscreenElement)};function lf(b){b=b?b:{};this.a=void 0!==b.className?b.className:"ol-full-screen";var c=void 0!==b.label?b.label:"\u2922";this.b="string"===typeof c?document.createTextNode(c):c;c=void 0!==b.labelActive?b.labelActive:"\u00d7";this.g="string"===typeof c?document.createTextNode(c):c;c=b.tipLabel?b.tipLabel:"Toggle full-screen";c=ce("BUTTON",{"class":this.a+"-"+kf(),type:"button",title:c},this.b);R(c,"click",this.s,this);var d=this.a+" ol-unselectable ol-control "+(hf()?"":"ol-unsupported"),c=ce("DIV",
-d,c);ve.call(this,{element:c,target:b.target});this.o=void 0!==b.keys?b.keys:!1;this.i=b.source}M(lf,ve);
-lf.prototype.s=function(b){b.preventDefault();hf()&&(b=this.c)&&(kf()?(b=Xd().a,b.webkitCancelFullScreen?b.webkitCancelFullScreen():b.mozCancelFullScreen?b.mozCancelFullScreen():b.msExitFullscreen?b.msExitFullscreen():b.exitFullscreen&&b.exitFullscreen()):(b=this.i?$d(this.i):b.Fa(),this.o?b.mozRequestFullScreenWithKeys?b.mozRequestFullScreenWithKeys():b.webkitRequestFullscreen?b.webkitRequestFullscreen():jf(b):jf(b)))};
-lf.prototype.j=function(){var b=this.element.firstElementChild,c=this.c;kf()?(b.className=this.a+"-true",ie(this.g,this.b)):(b.className=this.a+"-false",ie(this.b,this.g));c&&c.nb()};lf.prototype.setMap=function(b){lf.Y.setMap.call(this,b);b&&this.h.push(R(x.document,gf,this.j,this))};var mf;
-function nf(){var b=x.MessageChannel;"undefined"===typeof b&&"undefined"!==typeof window&&window.postMessage&&window.addEventListener&&!W("Presto")&&(b=function(){var b=document.createElement("IFRAME");b.style.display="none";b.src="";document.documentElement.appendChild(b);var c=b.contentWindow,b=c.document;b.open();b.write("");b.close();var d="callImmediate"+Math.random(),e="file:"==c.location.protocol?"*":c.location.protocol+"//"+c.location.host,b=ma(function(b){if(("*"==e||b.origin==e)&&b.data==
-d)this.port1.onmessage()},this);c.addEventListener("message",b,!1);this.port1={};this.port2={postMessage:function(){c.postMessage(d,e)}}});if("undefined"!==typeof b&&!W("Trident")&&!W("MSIE")){var c=new b,d={},e=d;c.port1.onmessage=function(){if(void 0!==d.next){d=d.next;var b=d.fc;d.fc=null;b()}};return function(b){e.next={fc:b};e=e.next;c.port2.postMessage(0)}}return"undefined"!==typeof document&&"onreadystatechange"in document.createElement("SCRIPT")?function(b){var c=document.createElement("SCRIPT");
-c.onreadystatechange=function(){c.onreadystatechange=null;c.parentNode.removeChild(c);c=null;b();b=null};document.documentElement.appendChild(c)}:function(b){x.setTimeout(b,0)}};function of(b,c,d){S.call(this,b);this.a=c;b=d?d:{};this.buttons=pf(b);this.pressure=qf(b,this.buttons);this.bubbles="bubbles"in b?b.bubbles:!1;this.cancelable="cancelable"in b?b.cancelable:!1;this.view="view"in b?b.view:null;this.detail="detail"in b?b.detail:null;this.screenX="screenX"in b?b.screenX:0;this.screenY="screenY"in b?b.screenY:0;this.clientX="clientX"in b?b.clientX:0;this.clientY="clientY"in b?b.clientY:0;this.button="button"in b?b.button:0;this.relatedTarget="relatedTarget"in b?b.relatedTarget:
-null;this.pointerId="pointerId"in b?b.pointerId:0;this.width="width"in b?b.width:0;this.height="height"in b?b.height:0;this.pointerType="pointerType"in b?b.pointerType:"";this.isPrimary="isPrimary"in b?b.isPrimary:!1;c.preventDefault&&(this.preventDefault=function(){c.preventDefault()})}M(of,S);function pf(b){if(b.buttons||rf)b=b.buttons;else switch(b.which){case 1:b=1;break;case 2:b=4;break;case 3:b=2;break;default:b=0}return b}function qf(b,c){var d=0;b.pressure?d=b.pressure:d=c?.5:0;return d}
-var rf=!1;try{rf=1===(new MouseEvent("click",{buttons:1})).buttons}catch(b){};function sf(b,c){var d=document.createElement("CANVAS");b&&(d.width=b);c&&(d.height=c);return d.getContext("2d")}
-var tf=function(){var b;return function(){if(void 0===b){var c=document.createElement("P"),d,e={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]="translate(1px,1px)",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&"none"!==d}return b}}(),uf=function(){var b;return function(){if(void 0===b){var c=document.createElement("P"),
-d,e={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]="translate3d(1px,1px,1px)",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&"none"!==d}return b}}();
-function vf(b,c){var d=b.style;d.WebkitTransform=c;d.MozTransform=c;d.a=c;d.msTransform=c;d.transform=c;Hd&&Rd("9.0")&&(b.style.transformOrigin="0 0")}function wf(b,c){var d;if(uf()){var e=Array(16);for(d=0;16>d;++d)e[d]=c[d].toFixed(6);vf(b,"matrix3d("+e.join(",")+")")}else if(tf()){var e=[c[0],c[1],c[4],c[5],c[12],c[13]],f=Array(6);for(d=0;6>d;++d)f[d]=e[d].toFixed(6);vf(b,"matrix("+f.join(",")+")")}else b.style.left=Math.round(c[12])+"px",b.style.top=Math.round(c[13])+"px"};var xf=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function yf(b,c){var d,e,f=xf.length;for(e=0;e<f;++e)try{if(d=b.getContext(xf[e],c))return d}catch(g){}return null};var zf,Af="undefined"!==typeof navigator?navigator.userAgent.toLowerCase():"",Bf=-1!==Af.indexOf("firefox"),Cf=-1!==Af.indexOf("safari")&&-1===Af.indexOf("chrom"),Df=-1!==Af.indexOf("macintosh"),Ef=x.devicePixelRatio||1,Ff=!1,Gf=function(){if(!("HTMLCanvasElement"in x))return!1;try{var b=sf();return b?(void 0!==b.setLineDash&&(Ff=!0),!0):!1}catch(c){return!1}}(),Hf="ontouchstart"in x,If="PointerEvent"in x,Jf=!!x.navigator.msPointerEnabled,Kf=!1,Lf=[];
-if("WebGLRenderingContext"in x)try{var Mf=yf(document.createElement("CANVAS"),{failIfMajorPerformanceCaveat:!0});Mf&&(Kf=!0,Lf=Mf.getSupportedExtensions())}catch(b){}zf=Kf;oa=Lf;function Nf(b,c){this.a=b;this.g=c};function Of(b){Nf.call(this,b,{mousedown:this.Kd,mousemove:this.Ld,mouseup:this.Od,mouseover:this.Nd,mouseout:this.Md});this.b=b.b;this.f=[]}M(Of,Nf);function Pf(b,c){for(var d=b.f,e=c.clientX,f=c.clientY,g=0,h=d.length,k;g<h&&(k=d[g]);g++){var l=Math.abs(f-k[1]);if(25>=Math.abs(e-k[0])&&25>=l)return!0}return!1}function Qf(b){var c=Rf(b,b),d=c.preventDefault;c.preventDefault=function(){b.preventDefault();d()};c.pointerId=1;c.isPrimary=!0;c.pointerType="mouse";return c}n=Of.prototype;
-n.Kd=function(b){if(!Pf(this,b)){if((1).toString()in this.b){var c=Qf(b);Sf(this.a,Tf,c,b);delete this.b[(1).toString()]}c=Qf(b);this.b[(1).toString()]=b;Sf(this.a,Uf,c,b)}};n.Ld=function(b){if(!Pf(this,b)){var c=Qf(b);Sf(this.a,Vf,c,b)}};n.Od=function(b){if(!Pf(this,b)){var c=this.b[(1).toString()];c&&c.button===b.button&&(c=Qf(b),Sf(this.a,Wf,c,b),delete this.b[(1).toString()])}};n.Nd=function(b){if(!Pf(this,b)){var c=Qf(b);Xf(this.a,c,b)}};
-n.Md=function(b){if(!Pf(this,b)){var c=Qf(b);Yf(this.a,c,b)}};function Zf(b){Nf.call(this,b,{MSPointerDown:this.Td,MSPointerMove:this.Ud,MSPointerUp:this.Xd,MSPointerOut:this.Vd,MSPointerOver:this.Wd,MSPointerCancel:this.Sd,MSGotPointerCapture:this.Qd,MSLostPointerCapture:this.Rd});this.b=b.b;this.f=["","unavailable","touch","pen","mouse"]}M(Zf,Nf);function $f(b,c){var d=c;ea(c.pointerType)&&(d=Rf(c,c),d.pointerType=b.f[c.pointerType]);return d}n=Zf.prototype;n.Td=function(b){this.b[b.pointerId.toString()]=b;var c=$f(this,b);Sf(this.a,Uf,c,b)};
-n.Ud=function(b){var c=$f(this,b);Sf(this.a,Vf,c,b)};n.Xd=function(b){var c=$f(this,b);Sf(this.a,Wf,c,b);delete this.b[b.pointerId.toString()]};n.Vd=function(b){var c=$f(this,b);Yf(this.a,c,b)};n.Wd=function(b){var c=$f(this,b);Xf(this.a,c,b)};n.Sd=function(b){var c=$f(this,b);Sf(this.a,Tf,c,b);delete this.b[b.pointerId.toString()]};n.Rd=function(b){T(this.a,new of("lostpointercapture",b,b))};n.Qd=function(b){T(this.a,new of("gotpointercapture",b,b))};function ag(b){Nf.call(this,b,{pointerdown:this.he,pointermove:this.ie,pointerup:this.le,pointerout:this.je,pointerover:this.ke,pointercancel:this.ge,gotpointercapture:this.ld,lostpointercapture:this.Jd})}M(ag,Nf);n=ag.prototype;n.he=function(b){bg(this.a,b)};n.ie=function(b){bg(this.a,b)};n.le=function(b){bg(this.a,b)};n.je=function(b){bg(this.a,b)};n.ke=function(b){bg(this.a,b)};n.ge=function(b){bg(this.a,b)};n.Jd=function(b){bg(this.a,b)};n.ld=function(b){bg(this.a,b)};function cg(b,c){Nf.call(this,b,{touchstart:this.ye,touchmove:this.xe,touchend:this.we,touchcancel:this.ve});this.b=b.b;this.l=c;this.f=void 0;this.h=0;this.c=void 0}M(cg,Nf);n=cg.prototype;n.Pc=function(){this.h=0;this.c=void 0};
-function dg(b,c,d){c=Rf(c,d);c.pointerId=d.identifier+2;c.bubbles=!0;c.cancelable=!0;c.detail=b.h;c.button=0;c.buttons=1;c.width=d.webkitRadiusX||d.radiusX||0;c.height=d.webkitRadiusY||d.radiusY||0;c.pressure=d.webkitForce||d.force||.5;c.isPrimary=b.f===d.identifier;c.pointerType="touch";c.clientX=d.clientX;c.clientY=d.clientY;c.screenX=d.screenX;c.screenY=d.screenY;return c}
-function eg(b,c,d){function e(){c.preventDefault()}var f=Array.prototype.slice.call(c.changedTouches),g=f.length,h,k;for(h=0;h<g;++h)k=dg(b,c,f[h]),k.preventDefault=e,d.call(b,c,k)}
-n.ye=function(b){var c=b.touches,d=Object.keys(this.b),e=d.length;if(e>=c.length){var f=[],g,h,k;for(g=0;g<e;++g){h=d[g];k=this.b[h];var l;if(!(l=1==h))a:{l=c.length;for(var m=void 0,p=0;p<l;p++)if(m=c[p],m.identifier===h-2){l=!0;break a}l=!1}l||f.push(k.out)}for(g=0;g<f.length;++g)this.xb(b,f[g])}c=b.changedTouches[0];d=Object.keys(this.b).length;if(0===d||1===d&&(1).toString()in this.b)this.f=c.identifier,void 0!==this.c&&x.clearTimeout(this.c);fg(this,b);this.h++;eg(this,b,this.fe)};
-n.fe=function(b,c){this.b[c.pointerId]={target:c.target,out:c,Mc:c.target};var d=this.a;c.bubbles=!0;Sf(d,gg,c,b);d=this.a;c.bubbles=!1;Sf(d,hg,c,b);Sf(this.a,Uf,c,b)};n.xe=function(b){b.preventDefault();eg(this,b,this.Pd)};n.Pd=function(b,c){var d=this.b[c.pointerId];if(d){var e=d.out,f=d.Mc;Sf(this.a,Vf,c,b);e&&f!==c.target&&(e.relatedTarget=c.target,c.relatedTarget=f,e.target=f,c.target?(Yf(this.a,e,b),Xf(this.a,c,b)):(c.target=f,c.relatedTarget=null,this.xb(b,c)));d.out=c;d.Mc=c.target}};
-n.we=function(b){fg(this,b);eg(this,b,this.ze)};n.ze=function(b,c){Sf(this.a,Wf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Sf(d,ig,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Pc.bind(this),200))};n.ve=function(b){eg(this,b,this.xb)};n.xb=function(b,c){Sf(this.a,Tf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Sf(d,ig,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Pc.bind(this),200))};
-function fg(b,c){var d=b.l.f,e=c.changedTouches[0];if(b.f===e.identifier){var f=[e.clientX,e.clientY];d.push(f);x.setTimeout(function(){Ka(d,f)},2500)}};function jg(b){lb.call(this);this.g=b;this.b={};this.c={};this.a=[];If?kg(this,new ag(this)):Jf?kg(this,new Zf(this)):(b=new Of(this),kg(this,b),Hf&&kg(this,new cg(this,b)));b=this.a.length;for(var c,d=0;d<b;d++)c=this.a[d],lg(this,Object.keys(c.g))}M(jg,lb);function kg(b,c){var d=Object.keys(c.g);d&&(d.forEach(function(b){var d=c.g[b];d&&(this.c[b]=d.bind(c))},b),b.a.push(c))}jg.prototype.f=function(b){var c=this.c[b.type];c&&c(b)};
-function lg(b,c){c.forEach(function(b){R(this.g,b,this.f,this)},b)}function mg(b,c){c.forEach(function(b){fb(this.g,b,this.f,this)},b)}function Rf(b,c){for(var d={},e,f=0,g=ng.length;f<g;f++)e=ng[f][0],d[e]=b[e]||c[e]||ng[f][1];return d}jg.prototype.out=function(b,c){b.bubbles=!0;Sf(this,og,b,c)};function Yf(b,c,d){b.out(c,d);var e=c.relatedTarget;e&&je(c.target,e)||(c.bubbles=!1,Sf(b,ig,c,d))}
-function Xf(b,c,d){c.bubbles=!0;Sf(b,gg,c,d);var e=c.relatedTarget;e&&je(c.target,e)||(c.bubbles=!1,Sf(b,hg,c,d))}function Sf(b,c,d,e){T(b,new of(c,e,d))}function bg(b,c){T(b,new of(c.type,c,c))}jg.prototype.K=function(){for(var b=this.a.length,c,d=0;d<b;d++)c=this.a[d],mg(this,Object.keys(c.g));jg.Y.K.call(this)};
-var Vf="pointermove",Uf="pointerdown",Wf="pointerup",gg="pointerover",og="pointerout",hg="pointerenter",ig="pointerleave",Tf="pointercancel",ng=[["bubbles",!1],["cancelable",!1],["view",null],["detail",null],["screenX",0],["screenY",0],["clientX",0],["clientY",0],["ctrlKey",!1],["altKey",!1],["shiftKey",!1],["metaKey",!1],["button",0],["relatedTarget",null],["buttons",0],["pointerId",0],["width",0],["height",0],["pressure",0],["tiltX",0],["tiltY",0],["pointerType",""],["hwTimestamp",0],["isPrimary",
-!1],["type",""],["target",null],["currentTarget",null],["which",0]];function pg(b,c,d,e,f){ue.call(this,b,c,f);this.originalEvent=d;this.pixel=c.nc(d);this.coordinate=c.pa(this.pixel);this.dragging=void 0!==e?e:!1}M(pg,ue);pg.prototype.preventDefault=function(){pg.Y.preventDefault.call(this);this.originalEvent.preventDefault()};pg.prototype.stopPropagation=function(){pg.Y.stopPropagation.call(this);this.originalEvent.stopPropagation()};function qg(b,c,d,e,f){pg.call(this,b,c,d.a,e,f);this.a=d}M(qg,pg);
-function rg(b){lb.call(this);this.f=b;this.h=0;this.l=!1;this.c=[];this.b=null;b=this.f.a;this.s=0;this.o={};this.g=new jg(b);this.a=null;this.i=R(this.g,Uf,this.xd,this);this.j=R(this.g,Vf,this.ne,this)}M(rg,lb);function sg(b,c){var d;d=new qg(tg,b.f,c);T(b,d);0!==b.h?(x.clearTimeout(b.h),b.h=0,d=new qg(ug,b.f,c),T(b,d)):b.h=x.setTimeout(function(){this.h=0;var b=new qg(vg,this.f,c);T(this,b)}.bind(b),250)}
-function wg(b,c){c.type==xg||c.type==yg?delete b.o[c.pointerId]:c.type==zg&&(b.o[c.pointerId]=!0);b.s=Object.keys(b.o).length}n=rg.prototype;n.qc=function(b){wg(this,b);var c=new qg(xg,this.f,b);T(this,c);!this.l&&0===b.button&&sg(this,this.b);0===this.s&&(this.c.forEach(P),this.c.length=0,this.l=!1,this.b=null,ib(this.a),this.a=null)};
-n.xd=function(b){wg(this,b);var c=new qg(zg,this.f,b);T(this,c);this.b=b;0===this.c.length&&(this.a=new jg(document),this.c.push(R(this.a,Ag,this.$d,this),R(this.a,xg,this.qc,this),R(this.g,yg,this.qc,this)))};n.$d=function(b){if(b.clientX!=this.b.clientX||b.clientY!=this.b.clientY){this.l=!0;var c=new qg(Bg,this.f,b,this.l);T(this,c)}b.preventDefault()};n.ne=function(b){T(this,new qg(b.type,this.f,b,!(!this.b||b.clientX==this.b.clientX&&b.clientY==this.b.clientY)))};
-n.K=function(){this.j&&(P(this.j),this.j=null);this.i&&(P(this.i),this.i=null);this.c.forEach(P);this.c.length=0;this.a&&(ib(this.a),this.a=null);this.g&&(ib(this.g),this.g=null);rg.Y.K.call(this)};var vg="singleclick",tg="click",ug="dblclick",Bg="pointerdrag",Ag="pointermove",zg="pointerdown",xg="pointerup",yg="pointercancel",Cg={Le:vg,Ae:tg,Be:ug,Ee:Bg,He:Ag,De:zg,Ke:xg,Je:"pointerover",Ie:"pointerout",Fe:"pointerenter",Ge:"pointerleave",Ce:yg};function Dg(b){U.call(this);var c=Va({},b);c.opacity=void 0!==b.opacity?b.opacity:1;c.visible=void 0!==b.visible?b.visible:!0;c.zIndex=void 0!==b.zIndex?b.zIndex:0;c.maxResolution=void 0!==b.maxResolution?b.maxResolution:Infinity;c.minResolution=void 0!==b.minResolution?b.minResolution:0;this.l(c)}M(Dg,U);
-function Eg(b){var c=b.Ob(),d=b.Ib(),e=b.Va(),f=b.C(),g=b.Pb(),h=b.get("maxResolution"),k=b.get("minResolution");return{layer:b,opacity:Ba(c,0,1),Tb:d,visible:e,Wa:!0,extent:f,zIndex:g,maxResolution:h,minResolution:Math.max(k,0)}}n=Dg.prototype;n.C=function(){return this.get("extent")};n.Ob=function(){return this.get("opacity")};n.Va=function(){return this.get("visible")};n.Pb=function(){return this.get("zIndex")};n.vc=function(b){this.set("opacity",b)};n.wc=function(b){this.set("visible",b)};
-n.xc=function(b){this.set("zIndex",b)};function Fg(){};function Gg(b,c,d,e,f,g){S.call(this,b,c);this.vectorContext=d;this.frameState=e;this.context=f;this.glContext=g}M(Gg,S);function Hg(b){var c=Va({},b);delete c.source;Dg.call(this,c);this.h=this.c=this.b=null;b.map&&this.setMap(b.map);R(this,qb("source"),this.Cd,this);this.Sb(b.source?b.source:null)}M(Hg,Dg);function Ig(b,c){return b.visible&&c>=b.minResolution&&c<b.maxResolution}n=Hg.prototype;n.Eb=function(b){b=b?b:[];b.push(Eg(this));return b};n.W=function(){return this.get("source")||null};n.Ib=function(){var b=this.W();return b?b.N():"undefined"};n.be=function(){this.w()};
-n.Cd=function(){this.h&&(P(this.h),this.h=null);var b=this.W();b&&(this.h=R(b,"change",this.be,this));this.w()};n.setMap=function(b){this.b&&(P(this.b),this.b=null);b||this.w();this.c&&(P(this.c),this.c=null);b&&(this.b=R(b,"precompose",function(b){var d=Eg(this);d.Wa=!1;d.zIndex=Infinity;b.frameState.layerStatesArray.push(d);b.frameState.layerStates[I(this)]=d},this),this.c=R(this,"change",b.render,b),this.w())};n.Sb=function(b){this.set("source",b)};function Jg(b,c,d,e,f,g,h,k){Cb(b);0===c&&0===d||Eb(b,c,d);1==e&&1==f||Fb(b,e,f);0!==g&&Gb(b,g);0===h&&0===k||Eb(b,h,k);return b}function Kg(b,c){return b[0]==c[0]&&b[1]==c[1]&&b[4]==c[4]&&b[5]==c[5]&&b[12]==c[12]&&b[13]==c[13]}function Lg(b,c,d){var e=b[1],f=b[5],g=b[13],h=c[0];c=c[1];d[0]=b[0]*h+b[4]*c+b[12];d[1]=e*h+f*c+g;return d};function Mg(b){nb.call(this);this.a=b}M(Mg,nb);Mg.prototype.Xa=N;Mg.prototype.yc=cc;Mg.prototype.l=function(b,c,d){return function(e,f){return Xe(b,c,e,f,function(b){d[e]||(d[e]={});d[e][b.L.toString()]=b})}};function Ng(b){var c=b.a;c.Va()&&"ready"==c.Ib()&&b.w()}function Og(b,c){c.Gc()&&b.postRenderFunctions.push(na(function(b,c,f){c=I(b).toString();b.Hc(f.viewState.projection,f.usedTiles[c])},c))}function Pg(b,c){if(c){var d,e,f;e=0;for(f=c.length;e<f;++e)d=c[e],b[I(d).toString()]=d}}
-function Qg(b,c){var d=c.v;void 0!==d&&("string"===typeof d?b.logos[d]="":ha(d)&&(b.logos[d.src]=d.href))}function Rg(b,c,d,e){c=I(c).toString();d=d.toString();c in b?d in b[c]?(b=b[c][d],e.a<b.a&&(b.a=e.a),e.b>b.b&&(b.b=e.b),e.f<b.f&&(b.f=e.f),e.c>b.c&&(b.c=e.c)):b[c][d]=e:(b[c]={},b[c][d]=e)}function Sg(b,c,d){return[c*(Math.round(b[0]/c)+d[0]%2/2),c*(Math.round(b[1]/c)+d[1]%2/2)]}
-function Tg(b,c,d,e,f,g,h,k,l,m){var p=I(c).toString();p in b.wantedTiles||(b.wantedTiles[p]={});var q=b.wantedTiles[p];b=b.tileQueue;var r=d.minZoom,u,w,y,z,D,t;for(t=h;t>=r;--t)for(w=Le(d,g,t,w),y=d.J(t),z=w.a;z<=w.b;++z)for(D=w.f;D<=w.c;++D)h-t<=k?(u=Ug(c,t,z,D,e,f),0==u.N()&&(q[u.L.toString()]=!0,u.getKey()in b.f||b.c([u,p,Pe(d,u.L),y])),void 0!==l&&l.call(m,u)):c.Qc(t,z,D,f)};function Vg(b){this.B=b.opacity;this.o=b.rotateWithView;this.s=b.rotation;this.u=b.scale;this.v=b.snapToPixel};function Wg(b){b=b||{};this.g=void 0!==b.anchor?b.anchor:[.5,.5];this.c=null;this.b=void 0!==b.anchorOrigin?b.anchorOrigin:"top-left";this.l=void 0!==b.anchorXUnits?b.anchorXUnits:"fraction";this.i=void 0!==b.anchorYUnits?b.anchorYUnits:"fraction";var c=void 0!==b.crossOrigin?b.crossOrigin:null,d=void 0!==b.img?b.img:null,e=void 0!==b.imgSize?b.imgSize:null,f=b.src;void 0!==f&&0!==f.length||!d||(f=d.src||I(d).toString());var g=void 0!==b.src?0:2,h;void 0!==b.color?(h=b.color,h=Array.isArray(h)?h:
-yd(h)):h=null;var k=Xg.qa(),l=k.get(f,c,h);l||(l=new Yg(d,f,e,c,g,h),k.set(f,c,h,l));this.a=l;this.H=void 0!==b.offset?b.offset:[0,0];this.f=void 0!==b.offsetOrigin?b.offsetOrigin:"top-left";this.h=null;this.j=void 0!==b.size?b.size:null;Vg.call(this,{opacity:void 0!==b.opacity?b.opacity:1,rotation:void 0!==b.rotation?b.rotation:0,scale:void 0!==b.scale?b.scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0,rotateWithView:void 0!==b.rotateWithView?b.rotateWithView:!1})}M(Wg,Vg);n=Wg.prototype;
-n.Sa=function(){if(this.c)return this.c;var b=this.g,c=this.ya();if("fraction"==this.l||"fraction"==this.i){if(!c)return null;b=this.g.slice();"fraction"==this.l&&(b[0]*=c[0]);"fraction"==this.i&&(b[1]*=c[1])}if("top-left"!=this.b){if(!c)return null;b===this.g&&(b=this.g.slice());if("top-right"==this.b||"bottom-right"==this.b)b[0]=-b[0]+c[0];if("bottom-left"==this.b||"bottom-right"==this.b)b[1]=-b[1]+c[1]}return this.c=b};n.S=function(b){return this.a.S(b)};n.Db=function(){return this.a.b};n.Ya=function(){return this.a.f};
-n.jb=function(){var b=this.a;if(!b.l)if(b.i){var c=b.b[0],d=b.b[1],e=sf(c,d);e.fillRect(0,0,c,d);b.l=e.canvas}else b.l=b.a;return b.l};n.fa=function(){if(this.h)return this.h;var b=this.H;if("top-left"!=this.f){var c=this.ya(),d=this.a.b;if(!c||!d)return null;b=b.slice();if("top-right"==this.f||"bottom-right"==this.f)b[0]=d[0]-c[0]-b[0];if("bottom-left"==this.f||"bottom-right"==this.f)b[1]=d[1]-c[1]-b[1]}return this.h=b};n.ya=function(){return this.j?this.j:this.a.b};
-n.Mb=function(b,c){return R(this.a,"change",b,c)};n.load=function(){this.a.load()};n.Ub=function(b,c){fb(this.a,"change",b,c)};function Yg(b,c,d,e,f,g){lb.call(this);this.l=null;this.a=b?b:new Image;null!==e&&(this.a.crossOrigin=e);this.c=g?document.createElement("CANVAS"):null;this.h=g;this.g=null;this.f=f;this.b=d;this.o=c;this.i=!1;2==this.f&&Zg(this)}M(Yg,lb);function Zg(b){var c=sf(1,1);try{c.drawImage(b.a,0,0),c.getImageData(0,0,1,1)}catch(d){b.i=!0}}
-Yg.prototype.j=function(){this.f=3;this.g.forEach(P);this.g=null;T(this,"change")};
-Yg.prototype.s=function(){this.f=2;this.b&&(this.a.width=this.b[0],this.a.height=this.b[1]);this.b=[this.a.width,this.a.height];this.g.forEach(P);this.g=null;Zg(this);if(!this.i&&null!==this.h){this.c.width=this.a.width;this.c.height=this.a.height;var b=this.c.getContext("2d");b.drawImage(this.a,0,0);for(var c=b.getImageData(0,0,this.a.width,this.a.height),d=c.data,e=this.h[0]/255,f=this.h[1]/255,g=this.h[2]/255,h=0,k=d.length;h<k;h+=4)d[h]*=e,d[h+1]*=f,d[h+2]*=g;b.putImageData(c,0,0)}T(this,"change")};
-Yg.prototype.S=function(){return this.c?this.c:this.a};Yg.prototype.load=function(){if(0==this.f){this.f=1;this.g=[R(this.a,"error",this.j,this,!0),R(this.a,"load",this.s,this,!0)];try{this.a.src=this.o}catch(b){this.j()}}};function Xg(){this.a={};this.b=0}aa(Xg);Xg.prototype.clear=function(){this.a={};this.b=0};Xg.prototype.get=function(b,c,d){b=c+":"+b+":"+(d?wd(d):"null");return b in this.a?this.a[b]:null};Xg.prototype.set=function(b,c,d,e){this.a[c+":"+b+":"+(d?wd(d):"null")]=e;++this.b};function $g(b,c){this.h=c;this.f={};this.B={}}M($g,hb);function ah(b){var c=b.viewState,d=b.coordinateToPixelMatrix;Jg(d,b.size[0]/2,b.size[1]/2,1/c.resolution,-1/c.resolution,-c.rotation,-c.center[0],-c.center[1]);Db(d,b.pixelToCoordinateMatrix)}n=$g.prototype;n.K=function(){for(var b in this.f)ib(this.f[b])};function bh(){var b=Xg.qa();if(32<b.b){var c=0,d,e;for(d in b.a)e=b.a[d],0!==(c++&3)||mb(e)||(delete b.a[d],--b.b)}}
-n.Qb=function(b,c,d,e,f,g){function h(b,f){var g=I(b).toString(),h=c.layerStates[I(f)].Wa;if(!(g in c.skippedFeatureUids)||h)return d.call(e,b,h?f:null)}var k,l=c.viewState,m=l.resolution,p=l.projection,l=b;if(p.a){var p=p.C(),q=Ub(p),r=b[0];if(r<p[0]||r>p[2])l=[r+q*Math.ceil((p[0]-r)/q),b[1]]}p=c.layerStatesArray;for(q=p.length-1;0<=q;--q){var u=p[q],r=u.layer;if(Ig(u,m)&&f.call(g,r)&&(u=ch(this,r),r.W()&&(k=u.Xa(r.W().j?l:b,c,h,e)),k))return k}};
-n.zc=function(b,c,d,e){return void 0!==this.Qb(b,c,bc,this,d,e)};function ch(b,c){var d=I(c).toString();if(d in b.f)return b.f[d];var e=b.Bb(c);b.f[d]=e;b.B[d]=R(e,"change",b.rd,b);return e}n.rd=function(){this.h.render()};n.kb=N;n.qe=function(b,c){for(var d in this.f)if(!(c&&d in c.layerStates)){var e=d,f=this.f[e];delete this.f[e];P(this.B[e]);delete this.B[e];ib(f)}};function dh(b,c){for(var d in b.f)if(!(d in c.layerStates)){c.postRenderFunctions.push(b.qe.bind(b));break}}
-function Na(b,c){return b.zIndex-c.zIndex};function eh(b,c){this.j=b;this.l=c;this.a=[];this.b=[];this.f={}}eh.prototype.clear=function(){this.a.length=0;this.b.length=0;Wa(this.f)};function fh(b){var c=b.a,d=b.b,e=c[0];1==c.length?(c.length=0,d.length=0):(c[0]=c.pop(),d[0]=d.pop(),gh(b,0));c=b.l(e);delete b.f[c];return e}eh.prototype.c=function(b){var c=this.j(b);return Infinity!=c?(this.a.push(b),this.b.push(c),this.f[this.l(b)]=!0,hh(this,0,this.a.length-1),!0):!1};
-function gh(b,c){for(var d=b.a,e=b.b,f=d.length,g=d[c],h=e[c],k=c;c<f>>1;){var l=2*c+1,m=2*c+2,l=m<f&&e[m]<e[l]?m:l;d[c]=d[l];e[c]=e[l];c=l}d[c]=g;e[c]=h;hh(b,k,c)}function hh(b,c,d){var e=b.a;b=b.b;for(var f=e[d],g=b[d];d>c;){var h=d-1>>1;if(b[h]>g)e[d]=e[h],b[d]=b[h],d=h;else break}e[d]=f;b[d]=g}function ih(b){var c=b.j,d=b.a,e=b.b,f=0,g=d.length,h,k,l;for(k=0;k<g;++k)h=d[k],l=c(h),Infinity==l?delete b.f[b.l(h)]:(e[f]=l,d[f++]=h);d.length=f;e.length=f;for(c=(b.a.length>>1)-1;0<=c;c--)gh(b,c)};function jh(b,c){eh.call(this,function(c){return b.apply(null,c)},function(b){return b[0].getKey()});this.B=c;this.h=0;this.g={}}M(jh,eh);jh.prototype.c=function(b){var c=jh.Y.c.call(this,b);c&&R(b[0],"change",this.i,this);return c};jh.prototype.i=function(b){b=b.target;var c=b.N();if(2===c||3===c||4===c||5===c)fb(b,"change",this.i,this),b=b.getKey(),b in this.g&&(delete this.g[b],--this.h),this.B()};function kh(){this.a=[];this.b=this.f=0}function lh(b,c){var d=b.b,e=.05-d,f=Math.log(.05/b.b)/-.005;return dd({source:c,duration:f,easing:function(b){return d*(Math.exp(-.005*b*f)-1)/e}})};function mh(b){U.call(this);this.T=null;this.set("active",!0);this.handleEvent=b.handleEvent}M(mh,U);mh.prototype.setMap=function(b){this.T=b};function nh(b,c,d,e,f){if(void 0!==d){var g=Xc(c),h=c.ga();void 0!==g&&h&&f&&0<f&&(b.ea(ed({rotation:g,duration:f,easing:ad})),e&&b.ea(dd({source:h,duration:f,easing:ad})));c.rotate(d,e)}}function oh(b,c,d,e,f){var g=c.J();d=c.constrainResolution(g,d,0);ph(b,c,d,e,f)}
-function ph(b,c,d,e,f){if(d){var g=c.J(),h=c.ga();void 0!==g&&h&&d!==g&&f&&0<f&&(b.ea(fd({resolution:g,duration:f,easing:ad})),e&&b.ea(dd({source:h,duration:f,easing:ad})));if(e){var k;b=c.ga();f=c.J();void 0!==b&&void 0!==f&&(k=[e[0]-d*(e[0]-b[0])/f,e[1]-d*(e[1]-b[1])/f]);c.ma(k)}Zc(c,d)}};function qh(b){b=b?b:{};this.a=b.delta?b.delta:1;mh.call(this,{handleEvent:rh});this.b=void 0!==b.duration?b.duration:250}M(qh,mh);function rh(b){var c=!1,d=b.originalEvent;if(b.type==ug){var c=b.map,e=b.coordinate,d=d.shiftKey?-this.a:this.a,f=c.O();oh(c,f,d,e,this.b);b.preventDefault();c=!0}return!c};function sh(b){b=b.originalEvent;return b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function th(b){b=b.originalEvent;return 0==b.button&&!(Kd&&Df&&b.ctrlKey)}function uh(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&!b.shiftKey}function vh(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function wh(b){b=b.originalEvent.target.tagName;return"INPUT"!==b&&"SELECT"!==b&&"TEXTAREA"!==b}function xh(b){return"mouse"==b.a.pointerType};function yh(b){b=b?b:{};mh.call(this,{handleEvent:b.handleEvent?b.handleEvent:zh});this.ob=b.handleDownEvent?b.handleDownEvent:cc;this.pb=b.handleDragEvent?b.handleDragEvent:N;this.qb=b.handleMoveEvent?b.handleMoveEvent:N;this.rb=b.handleUpEvent?b.handleUpEvent:cc;this.s=!1;this.G={};this.c=[]}M(yh,mh);function Ah(b){for(var c=b.length,d=0,e=0,f=0;f<c;f++)d+=b[f].clientX,e+=b[f].clientY;return[d/c,e/c]}
-function zh(b){if(!(b instanceof qg))return!0;var c=!1,d=b.type;if(d===zg||d===Bg||d===xg)d=b.a,b.type==xg?delete this.G[d.pointerId]:b.type==zg?this.G[d.pointerId]=d:d.pointerId in this.G&&(this.G[d.pointerId]=d),this.c=Xa(this.G);this.s&&(b.type==Bg?this.pb(b):b.type==xg&&(this.s=this.rb(b)));b.type==zg?(this.s=b=this.ob(b),c=this.v(b)):b.type==Ag&&this.qb(b);return!c}yh.prototype.v=function(b){return b};function Bh(b){yh.call(this,{handleDownEvent:Ch,handleDragEvent:Dh,handleUpEvent:Eh});b=b?b:{};this.a=b.kinetic;this.b=this.g=null;this.i=b.condition?b.condition:uh;this.h=!1}M(Bh,yh);function Dh(b){var c=Ah(this.c);this.a&&this.a.a.push(c[0],c[1],Date.now());if(this.b){var d=this.b[0]-c[0],e=c[1]-this.b[1];b=b.map;var f=b.O(),g=f.N(),e=d=[d,e],h=g.resolution;e[0]*=h;e[1]*=h;ub(d,g.rotation);tb(d,g.center);d=f.a.center(d);b.render();f.ma(d)}this.b=c}
-function Eh(b){b=b.map;var c=b.O();if(0===this.c.length){var d;if(d=!this.h&&this.a)if(d=this.a,6>d.a.length)d=!1;else{var e=Date.now()-100,f=d.a.length-3;if(d.a[f+2]<e)d=!1;else{for(var g=f-3;0<g&&d.a[g+2]>e;)g-=3;var e=d.a[f+2]-d.a[g+2],h=d.a[f]-d.a[g],f=d.a[f+1]-d.a[g+1];d.f=Math.atan2(f,h);d.b=Math.sqrt(h*h+f*f)/e;d=.05<d.b}}d&&(d=(.05-this.a.b)/-.005,f=this.a.f,g=c.ga(),this.g=lh(this.a,g),b.ea(this.g),g=Fh(b,g),d=b.pa([g[0]-d*Math.cos(f),g[1]-d*Math.sin(f)]),d=c.a.center(d),c.ma(d));$c(c,-1);
-b.render();return!1}this.b=null;return!0}function Ch(b){if(0<this.c.length&&this.i(b)){var c=b.map,d=c.O();this.b=null;this.s||$c(d,1);c.render();this.g&&Ka(c.A,this.g)&&(d.ma(b.frameState.viewState.center),this.g=null);this.a&&(b=this.a,b.a.length=0,b.f=0,b.b=0);this.h=1<this.c.length;return!0}return!1}Bh.prototype.v=cc;function Gh(b){b=b?b:{};yh.call(this,{handleDownEvent:Hh,handleDragEvent:Ih,handleUpEvent:Jh});this.b=b.condition?b.condition:sh;this.a=void 0;this.g=void 0!==b.duration?b.duration:250}M(Gh,yh);function Ih(b){if(xh(b)){var c=b.map,d=c.Ha();b=b.pixel;d=Math.atan2(d[1]/2-b[1],b[0]-d[0]/2);if(void 0!==this.a){b=d-this.a;var e=c.O(),f=Xc(e);c.render();nh(c,e,f-b)}this.a=d}}
-function Jh(b){if(!xh(b))return!0;b=b.map;var c=b.O();$c(c,-1);var d=Xc(c),e=this.g,d=c.constrainRotation(d,0);nh(b,c,d,void 0,e);return!1}function Hh(b){return xh(b)&&th(b)&&this.b(b)?(b=b.map,$c(b.O(),1),b.render(),this.a=void 0,!0):!1}Gh.prototype.v=cc;function Kh(b){this.c=null;this.b=document.createElement("div");this.b.style.position="absolute";this.b.className="ol-box "+b;this.f=this.g=this.a=null}M(Kh,hb);Kh.prototype.K=function(){this.setMap(null)};function Lh(b){var c=b.g,d=b.f;b=b.b.style;b.left=Math.min(c[0],d[0])+"px";b.top=Math.min(c[1],d[1])+"px";b.width=Math.abs(d[0]-c[0])+"px";b.height=Math.abs(d[1]-c[1])+"px"}
-Kh.prototype.setMap=function(b){if(this.a){this.a.o.removeChild(this.b);var c=this.b.style;c.left=c.top=c.width=c.height="inherit"}(this.a=b)&&this.a.o.appendChild(this.b)};function Mh(b){var c=b.g,d=b.f,c=[c,[c[0],d[1]],d,[d[0],c[1]]].map(b.a.pa,b.a);c[4]=c[0].slice();b.c?b.c.X([c]):b.c=new Sc([c])}Kh.prototype.M=function(){return this.c};function Nh(b,c,d){S.call(this,b);this.coordinate=c;this.mapBrowserEvent=d}M(Nh,S);function Oh(b){yh.call(this,{handleDownEvent:Ph,handleDragEvent:Qh,handleUpEvent:Rh});b=b?b:{};this.a=new Kh(b.className||"ol-dragbox");this.b=null;this.j=b.condition?b.condition:bc;this.i=b.boxEndCondition?b.boxEndCondition:Sh}M(Oh,yh);function Sh(b,c,d){b=d[0]-c[0];c=d[1]-c[1];return 64<=b*b+c*c}
-function Qh(b){if(xh(b)){var c=this.a,d=b.pixel;c.g=this.b;c.f=d;Mh(c);Lh(c);T(this,new Nh("boxdrag",b.coordinate,b))}}Oh.prototype.M=function(){return this.a.M()};Oh.prototype.h=N;function Rh(b){if(!xh(b))return!0;this.a.setMap(null);this.i(b,this.b,b.pixel)&&(this.h(b),T(this,new Nh("boxend",b.coordinate,b)));return!1}
-function Ph(b){if(xh(b)&&th(b)&&this.j(b)){this.b=b.pixel;this.a.setMap(b.map);var c=this.a,d=this.b;c.g=this.b;c.f=d;Mh(c);Lh(c);T(this,new Nh("boxstart",b.coordinate,b));return!0}return!1};function Th(b){b=b?b:{};var c=b.condition?b.condition:vh;this.g=void 0!==b.duration?b.duration:200;this.o=void 0!==b.out?b.out:!1;Oh.call(this,{condition:c,className:b.className||"ol-dragzoom"})}M(Th,Oh);
-Th.prototype.h=function(){var b=this.T,c=b.O(),d=b.Ha(),e=this.M().C();if(this.o){var f=c.dc(d),e=[Fh(b,Wb(e)),Fh(b,[e[2],e[3]])],g=Ob(void 0),h,k;h=0;for(k=e.length;h<k;++h)Jb(g,e[h]);g=1/Yc(g,d);e=(f[2]-f[0])/2*(g-1);g=(f[3]-f[1])/2*(g-1);f[0]-=e;f[2]+=e;f[1]-=g;f[3]+=g;e=f}d=c.constrainResolution(Yc(e,d));f=c.J();g=c.ga();b.ea(fd({resolution:f,duration:this.g,easing:ad}));b.ea(dd({source:g,duration:this.g,easing:ad}));c.ma(Xb(e));Zc(c,d)};function Uh(b){mh.call(this,{handleEvent:Vh});b=b||{};this.a=function(b){return uh.call(this,b)&&wh.call(this,b)};this.b=void 0!==b.condition?b.condition:this.a;this.c=void 0!==b.duration?b.duration:100;this.g=void 0!==b.pixelDelta?b.pixelDelta:128}M(Uh,mh);
-function Vh(b){var c=!1;if("keydown"==b.type){var d=b.originalEvent.keyCode;if(this.b(b)&&(40==d||37==d||39==d||38==d)){var e=b.map,c=e.O(),f=c.J()*this.g,g=0,h=0;40==d?h=-f:37==d?g=-f:39==d?g=f:h=f;d=[g,h];ub(d,Xc(c));f=this.c;if(g=c.ga())f&&0<f&&e.ea(dd({source:g,duration:f,easing:cd})),e=c.a.center([g[0]+d[0],g[1]+d[1]]),c.ma(e);b.preventDefault();c=!0}}return!c};function Wh(b){mh.call(this,{handleEvent:Xh});b=b?b:{};this.b=b.condition?b.condition:wh;this.a=b.delta?b.delta:1;this.c=void 0!==b.duration?b.duration:100}M(Wh,mh);function Xh(b){var c=!1;if("keydown"==b.type||"keypress"==b.type){var d=b.originalEvent.charCode;if(this.b(b)&&(43==d||45==d)){c=b.map;d=43==d?this.a:-this.a;c.render();var e=c.O();oh(c,e,d,void 0,this.c);b.preventDefault();c=!0}}return!c};function Yh(b){mh.call(this,{handleEvent:Zh});b=b||{};this.a=0;this.i=void 0!==b.duration?b.duration:250;this.j=void 0!==b.useAnchor?b.useAnchor:!0;this.c=null;this.g=this.b=void 0}M(Yh,mh);
-function Zh(b){var c=!1;if("wheel"==b.type||"mousewheel"==b.type){var c=b.map,d=b.originalEvent;this.j&&(this.c=b.coordinate);var e;"wheel"==b.type?(e=d.deltaY,Bf&&d.deltaMode===x.WheelEvent.DOM_DELTA_PIXEL&&(e/=Ef),d.deltaMode===x.WheelEvent.DOM_DELTA_LINE&&(e*=40)):"mousewheel"==b.type&&(e=-d.wheelDeltaY,Cf&&(e/=3));this.a+=e;void 0===this.b&&(this.b=Date.now());e=Math.max(80-(Date.now()-this.b),0);x.clearTimeout(this.g);this.g=x.setTimeout(this.h.bind(this,c),e);b.preventDefault();c=!0}return!c}
-Yh.prototype.h=function(b){var c=Ba(this.a,-1,1),d=b.O();b.render();oh(b,d,-c,this.c,this.i);this.a=0;this.c=null;this.g=this.b=void 0};function $h(b){yh.call(this,{handleDownEvent:ai,handleDragEvent:bi,handleUpEvent:ci});b=b||{};this.b=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==b.threshold?b.threshold:.3;this.i=void 0!==b.duration?b.duration:250}M($h,yh);
-function bi(b){var c=0,d=this.c[0],e=this.c[1],d=Math.atan2(e.clientY-d.clientY,e.clientX-d.clientX);void 0!==this.g&&(c=d-this.g,this.h+=c,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=d;b=b.map;d=b.a.getBoundingClientRect();e=Ah(this.c);e[0]-=d.left;e[1]-=d.top;this.b=b.pa(e);this.a&&(d=b.O(),e=Xc(d),b.render(),nh(b,d,e+c,this.b))}
-function ci(b){if(2>this.c.length){b=b.map;var c=b.O();$c(c,-1);if(this.a){var d=Xc(c),e=this.b,f=this.i,d=c.constrainRotation(d,0);nh(b,c,d,e,f)}return!1}return!0}function ai(b){return 2<=this.c.length?(b=b.map,this.b=null,this.g=void 0,this.a=!1,this.h=0,this.s||$c(b.O(),1),b.render(),!0):!1}$h.prototype.v=cc;function di(b){yh.call(this,{handleDownEvent:ei,handleDragEvent:fi,handleUpEvent:gi});b=b?b:{};this.b=null;this.h=void 0!==b.duration?b.duration:400;this.a=void 0;this.g=1}M(di,yh);function fi(b){var c=1,d=this.c[0],e=this.c[1],f=d.clientX-e.clientX,d=d.clientY-e.clientY,f=Math.sqrt(f*f+d*d);void 0!==this.a&&(c=this.a/f);this.a=f;1!=c&&(this.g=c);b=b.map;var f=b.O(),d=f.J(),e=b.a.getBoundingClientRect(),g=Ah(this.c);g[0]-=e.left;g[1]-=e.top;this.b=b.pa(g);b.render();ph(b,f,d*c,this.b)}
-function gi(b){if(2>this.c.length){b=b.map;var c=b.O();$c(c,-1);var d=c.J(),e=this.b,f=this.h,d=c.constrainResolution(d,0,this.g-1);ph(b,c,d,e,f);return!1}return!0}function ei(b){return 2<=this.c.length?(b=b.map,this.b=null,this.a=void 0,this.g=1,this.s||$c(b.O(),1),b.render(),!0):!1}di.prototype.v=cc;function hi(b){var c=b||{};b=Va({},c);delete b.layers;c=c.layers;Dg.call(this,b);this.b=[];this.a={};R(this,qb("layers"),this.td,this);c?Array.isArray(c)&&(c=new md(c.slice())):c=new md;this.set("layers",c)}M(hi,Dg);n=hi.prototype;n.gb=function(){this.Va()&&this.w()};
-n.td=function(){this.b.forEach(P);this.b.length=0;var b=this.get("layers");this.b.push(R(b,"add",this.sd,this),R(b,"remove",this.ud,this));for(var c in this.a)this.a[c].forEach(P);Wa(this.a);var b=b.a,d,e;c=0;for(d=b.length;c<d;c++)e=b[c],this.a[I(e).toString()]=[R(e,"propertychange",this.gb,this),R(e,"change",this.gb,this)];this.w()};n.sd=function(b){b=b.element;var c=I(b).toString();this.a[c]=[R(b,"propertychange",this.gb,this),R(b,"change",this.gb,this)];this.w()};
-n.ud=function(b){b=I(b.element).toString();this.a[b].forEach(P);delete this.a[b];this.w()};n.Eb=function(b){var c=void 0!==b?b:[],d=c.length;od(this.get("layers"),function(b){b.Eb(c)});b=Eg(this);var e,f;for(e=c.length;d<e;d++)f=c[d],f.opacity*=b.opacity,f.visible=f.visible&&b.visible,f.maxResolution=Math.min(f.maxResolution,b.maxResolution),f.minResolution=Math.max(f.minResolution,b.minResolution),void 0!==b.extent&&(f.extent=void 0!==f.extent?Zb(f.extent,b.extent):b.extent);return c};n.Ib=function(){return"ready"};function ii(b){hc.call(this,{code:b,units:"m",extent:ji,global:!0,worldExtent:ki})}M(ii,hc);ii.prototype.getPointResolution=function(b,c){return b/Ca(c[1]/6378137)};var li=6378137*Math.PI,ji=[-li,-li,li,li],ki=[-180,-85,180,85],mi="EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" ").map(function(b){return new ii(b)});
-function ni(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=6378137*Math.PI*b[f]/180,c[f+1]=6378137*Math.log(Math.tan(Math.PI*(b[f+1]+90)/360));return c}function oi(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=180*b[f]/(6378137*Math.PI),c[f+1]=360*Math.atan(Math.exp(b[f+1]/6378137))/Math.PI-90;return c};var pi=new dc(6378137);function qi(b,c){hc.call(this,{code:b,units:"degrees",extent:ri,axisOrientation:c,global:!0,metersPerUnit:si,worldExtent:ri})}M(qi,hc);qi.prototype.getPointResolution=function(b){return b};
-var ri=[-180,-90,180,90],si=Math.PI*pi.radius/180,ti=[new qi("CRS:84"),new qi("EPSG:4326","neu"),new qi("urn:ogc:def:crs:EPSG::4326","neu"),new qi("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new qi("urn:ogc:def:crs:OGC:1.3:CRS84"),new qi("urn:ogc:def:crs:OGC:2:84"),new qi("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new qi("urn:x-ogc:def:crs:EPSG:4326","neu")];function X(b){b=b?b:{};var c=Va({},b);delete c.preload;delete c.useInterimTilesOnError;Hg.call(this,c);this.set("preload",void 0!==b.preload?b.preload:0);this.set("useInterimTilesOnError",void 0!==b.useInterimTilesOnError?b.useInterimTilesOnError:!0)}M(X,Hg);function ui(b){return b.get("useInterimTilesOnError")};var vi=[0,0,0,1],wi=[],xi=[0,0,0,1];function yi(b,c,d,e){0!==c&&(b.translate(d,e),b.rotate(c),b.translate(-d,-e))};function zi(b){b=b||{};this.a=void 0!==b.color?b.color:null;this.b=void 0}function Ai(b){void 0===b.b&&(b.b=b.a instanceof CanvasPattern||b.a instanceof CanvasGradient?I(b.a).toString():"f"+(b.a?wd(b.a):"-"));return b.b};function Bi(){this.b=-1};function Ci(){this.b=-1;this.b=64;this.a=Array(4);this.g=Array(this.b);this.c=this.f=0;this.a[0]=1732584193;this.a[1]=4023233417;this.a[2]=2562383102;this.a[3]=271733878;this.c=this.f=0}M(Ci,Bi);
-function Di(b,c,d){d||(d=0);var e=Array(16);if(da(c))for(var f=0;16>f;++f)e[f]=c.charCodeAt(d++)|c.charCodeAt(d++)<<8|c.charCodeAt(d++)<<16|c.charCodeAt(d++)<<24;else for(f=0;16>f;++f)e[f]=c[d++]|c[d++]<<8|c[d++]<<16|c[d++]<<24;c=b.a[0];d=b.a[1];var f=b.a[2],g=b.a[3],h=0,h=c+(g^d&(f^g))+e[0]+3614090360&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[1]+3905402710&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[2]+606105819&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^
-c))+e[3]+3250441966&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[4]+4118548399&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[5]+1200080426&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[6]+2821735955&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[7]+4249261313&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[8]+1770035416&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[9]+2336552879&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+
-(d^g&(c^d))+e[10]+4294925233&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[11]+2304563134&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[12]+1804603682&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[13]+4254626195&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[14]+2792965006&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[15]+1236535329&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(f^g&(d^f))+e[1]+4129170786&4294967295;c=d+(h<<5&4294967295|
-h>>>27);h=g+(d^f&(c^d))+e[6]+3225465664&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[11]+643717713&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[0]+3921069994&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[5]+3593408605&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[10]+38016083&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[15]+3634488961&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[4]+3889429448&4294967295;d=f+(h<<20&4294967295|
-h>>>12);h=c+(f^g&(d^f))+e[9]+568446438&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[14]+3275163606&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[3]+4107603335&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[8]+1163531501&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[13]+2850285829&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[2]+4243563512&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[7]+1735328473&4294967295;f=g+(h<<14&4294967295|
-h>>>18);h=d+(g^c&(f^g))+e[12]+2368359562&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(d^f^g)+e[5]+4294588738&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[8]+2272392833&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[11]+1839030562&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[14]+4259657740&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[1]+2763975236&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[4]+1272893353&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^
-c^d)+e[7]+4139469664&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[10]+3200236656&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[13]+681279174&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[0]+3936430074&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[3]+3572445317&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[6]+76029189&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[9]+3654602809&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[12]+3873151461&4294967295;
-g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[15]+530742520&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[2]+3299628645&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(f^(d|~g))+e[0]+4096336452&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[7]+1126891415&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[14]+2878612391&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[5]+4237533241&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[12]+1700485571&4294967295;c=d+
-(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[3]+2399980690&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[10]+4293915773&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[1]+2240044497&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[8]+1873313359&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[15]+4264355552&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[6]+2734768916&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[13]+1309151649&4294967295;
-d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[4]+4149444226&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[11]+3174756917&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[2]+718787259&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[9]+3951481745&4294967295;b.a[0]=b.a[0]+c&4294967295;b.a[1]=b.a[1]+(f+(h<<21&4294967295|h>>>11))&4294967295;b.a[2]=b.a[2]+f&4294967295;b.a[3]=b.a[3]+g&4294967295}
-function Ei(b,c){var d;void 0===d&&(d=c.length);for(var e=d-b.b,f=b.g,g=b.f,h=0;h<d;){if(0==g)for(;h<=e;)Di(b,c,h),h+=b.b;if(da(c))for(;h<d;){if(f[g++]=c.charCodeAt(h++),g==b.b){Di(b,f);g=0;break}}else for(;h<d;)if(f[g++]=c[h++],g==b.b){Di(b,f);g=0;break}}b.f=g;b.c+=d};function Fi(b){b=b||{};this.b=void 0!==b.color?b.color:null;this.c=b.lineCap;this.a=void 0!==b.lineDash?b.lineDash:null;this.g=b.lineJoin;this.h=b.miterLimit;this.f=b.width;this.l=void 0}
-function Gi(b){if(void 0===b.l){var c="s"+(b.b?wd(b.b):"-")+","+(void 0!==b.c?b.c.toString():"-")+","+(b.a?b.a.toString():"-")+","+(void 0!==b.g?b.g:"-")+","+(void 0!==b.h?b.h.toString():"-")+","+(void 0!==b.f?b.f.toString():"-"),d=new Ci;Ei(d,c);var e=Array((56>d.f?d.b:2*d.b)-d.f);e[0]=128;for(c=1;c<e.length-8;++c)e[c]=0;for(var f=8*d.c,c=e.length-8;c<e.length;++c)e[c]=f&255,f/=256;Ei(d,e);e=Array(16);for(c=f=0;4>c;++c)for(var g=0;32>g;g+=8)e[f++]=d.a[c]>>>g&255;if(8192>=e.length)d=String.fromCharCode.apply(null,
-e);else for(d="",c=0;c<e.length;c+=8192)d+=String.fromCharCode.apply(null,sd(e,c,c+8192));b.l=d}return b.l};function Hi(b){b=b||{};this.h=this.a=this.c=null;this.g=void 0!==b.fill?b.fill:null;this.b=void 0!==b.stroke?b.stroke:null;this.f=b.radius;this.j=[0,0];this.i=this.H=this.l=null;var c=b.atlasManager,d,e=null,f,g=0;this.b&&(f=wd(this.b.b),g=this.b.f,void 0===g&&(g=1),e=this.b.a,Ff||(e=null));var h=2*(this.f+g)+1;f={strokeStyle:f,Za:g,size:h,lineDash:e};if(void 0===c)this.a=document.createElement("CANVAS"),this.a.height=h,this.a.width=h,d=h=this.a.width,c=this.a.getContext("2d"),this.Jc(f,c,0,0),this.g?
-this.h=this.a:(c=this.h=document.createElement("CANVAS"),c.height=f.size,c.width=f.size,c=c.getContext("2d"),this.Ic(f,c,0,0));else{h=Math.round(h);(e=!this.g)&&(d=this.Ic.bind(this,f));var g=this.b?Gi(this.b):"-",k=this.g?Ai(this.g):"-";this.c&&g==this.c[1]&&k==this.c[2]&&this.f==this.c[3]||(this.c=["c"+g+k+(void 0!==this.f?this.f.toString():"-"),g,k,this.f]);f=c.add(this.c[0],h,h,this.Jc.bind(this,f),d);this.a=f.image;this.j=[f.offsetX,f.offsetY];d=f.image.width;this.h=e?f.Id:this.a}this.l=[h/2,
-h/2];this.H=[h,h];this.i=[d,d];Vg.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0})}M(Hi,Vg);n=Hi.prototype;n.Sa=function(){return this.l};n.jb=function(){return this.h};n.S=function(){return this.a};n.Ya=function(){return 2};n.Db=function(){return this.i};n.fa=function(){return this.j};n.ya=function(){return this.H};n.Mb=N;n.load=N;n.Ub=N;
-n.Jc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.f,0,2*Math.PI,!0);this.g&&(c.fillStyle=zd(this.g.a),c.fill());this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Za,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};
-n.Ic=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.f,0,2*Math.PI,!0);c.fillStyle=wd(vi);c.fill();this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Za,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};function Ii(b){b=b||{};this.h=null;this.f=Ji;void 0!==b.geometry&&Ki(this,b.geometry);this.g=void 0!==b.fill?b.fill:null;this.l=void 0!==b.image?b.image:null;this.c=void 0!==b.stroke?b.stroke:null;this.b=void 0!==b.text?b.text:null;this.a=b.zIndex}Ii.prototype.M=function(){return this.h};Ii.prototype.S=function(){return this.l};function Ki(b,c){ga(c)?b.f=c:"string"===typeof c?b.f=function(b){return b.get(c)}:c?void 0!==c&&(b.f=function(){return c}):b.f=Ji;b.h=c}
-function Li(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b}var Mi=null;function Ni(){if(!Mi){var b=new zi({color:"rgba(255,255,255,0.4)"}),c=new Fi({color:"#3399CC",width:1.25});Mi=[new Ii({image:new Hi({fill:b,stroke:c,radius:5}),fill:b,stroke:c})]}return Mi}
-function Oi(){var b={},c=[255,255,255,1],d=[0,153,255,1];b.Polygon=[new Ii({fill:new zi({color:[255,255,255,.5]})})];b.MultiPolygon=b.Polygon;b.LineString=[new Ii({stroke:new Fi({color:c,width:5})}),new Ii({stroke:new Fi({color:d,width:3})})];b.MultiLineString=b.LineString;b.Circle=b.Polygon.concat(b.LineString);b.Point=[new Ii({image:new Hi({radius:6,fill:new zi({color:d}),stroke:new Fi({color:c,width:1.5})}),zIndex:Infinity})];b.MultiPoint=b.Point;b.GeometryCollection=b.Polygon.concat(b.LineString,
-b.Point);return b}function Ji(b){return b.M()};function Y(b){b=b?b:{};var c=Va({},b);delete c.style;delete c.renderBuffer;delete c.updateWhileAnimating;delete c.updateWhileInteracting;Hg.call(this,c);this.a=void 0!==b.renderBuffer?b.renderBuffer:100;this.o=null;this.g=void 0;this.s(b.style);this.i=void 0!==b.updateWhileAnimating?b.updateWhileAnimating:!1;this.j=void 0!==b.updateWhileInteracting?b.updateWhileInteracting:!1}M(Y,Hg);Y.prototype.s=function(b){this.o=void 0!==b?b:Ni;this.g=null===b?void 0:Li(this.o);this.w()};function Pi(b,c,d,e,f){this.c=b;this.u=c;this.l=d;this.v=e;this.Ca=f;this.g=this.a=this.b=this.Z=this.T=this.R=null;this.aa=this.ha=this.o=this.D=this.I=this.A=0;this.da=!1;this.h=this.ka=0;this.ua=!1;this.V=0;this.f="";this.j=this.H=this.va=this.la=0;this.G=this.B=this.i=null;this.s=[];this.wa=yb()}M(Pi,Fg);
-function Qi(b,c,d){if(b.g){c=zc(c,0,d,2,b.v,b.s);d=b.c;var e=b.wa,f=d.globalAlpha;1!=b.o&&(d.globalAlpha=f*b.o);var g=b.ka;b.da&&(g+=b.Ca);var h,k;h=0;for(k=c.length;h<k;h+=2){var l=c[h]-b.A,m=c[h+1]-b.I;b.ua&&(l=Math.round(l),m=Math.round(m));if(0!==g||1!=b.h){var p=l+b.A,q=m+b.I;Jg(e,p,q,b.h,b.h,g,-p,-q);d.setTransform(e[0],e[1],e[4],e[5],e[12],e[13])}d.drawImage(b.g,b.ha,b.aa,b.V,b.D,l,m,b.V,b.D)}0===g&&1==b.h||d.setTransform(1,0,0,1,0,0);1!=b.o&&(d.globalAlpha=f)}}
-function Ri(b,c,d,e){var f=0;if(b.G&&""!==b.f){b.i&&Si(b,b.i);b.B&&Ti(b,b.B);var g=b.G,h=b.c,k=b.Z;k?(k.font!=g.font&&(k.font=h.font=g.font),k.textAlign!=g.textAlign&&(k.textAlign=h.textAlign=g.textAlign),k.textBaseline!=g.textBaseline&&(k.textBaseline=h.textBaseline=g.textBaseline)):(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline,b.Z={font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});c=zc(c,f,d,e,b.v,b.s);for(g=b.c;f<d;f+=e){h=c[f]+b.la;k=c[f+1]+b.va;if(0!==b.H||
-1!=b.j){var l=Jg(b.wa,h,k,b.j,b.j,b.H,-h,-k);g.setTransform(l[0],l[1],l[4],l[5],l[12],l[13])}b.B&&g.strokeText(b.f,h,k);b.i&&g.fillText(b.f,h,k)}0===b.H&&1==b.j||g.setTransform(1,0,0,1,0,0)}}function Ui(b,c,d,e,f,g){var h=b.c;b=zc(c,d,e,f,b.v,b.s);h.moveTo(b[0],b[1]);c=b.length;g&&(c-=2);for(d=2;d<c;d+=2)h.lineTo(b[d],b[d+1]);g&&h.closePath();return e}function Vi(b,c,d,e,f){var g,h;g=0;for(h=e.length;g<h;++g)d=Ui(b,c,d,e[g],f,!0);return d}n=Pi.prototype;
-n.hc=function(b){if($b(this.l,b.C())){if(this.b||this.a){this.b&&Si(this,this.b);this.a&&Ti(this,this.a);var c;c=this.v;var d=this.s,e=b.a;c=e?zc(e,0,e.length,b.b,c,d):null;d=c[2]-c[0];e=c[3]-c[1];d=Math.sqrt(d*d+e*e);e=this.c;e.beginPath();e.arc(c[0],c[1],d,0,2*Math.PI);this.b&&e.fill();this.a&&e.stroke()}""!==this.f&&Ri(this,b.a.slice(0,b.b),2,2)}};n.Ra=function(b){var c=b.a;b=b.b;this.g&&Qi(this,c,c.length);""!==this.f&&Ri(this,c,c.length,b)};
-n.Qa=function(b){var c=b.a;b=b.b;this.g&&Qi(this,c,c.length);""!==this.f&&Ri(this,c,c.length,b)};n.ic=function(b){if($b(this.l,b.C())){if(this.a){Ti(this,this.a);var c=this.c,d=b.a;c.beginPath();Ui(this,d,0,d.length,b.b,!1);c.stroke()}""!==this.f&&(b=Wi(b),Ri(this,b,2,2))}};
-n.jc=function(b){var c=b.C();if($b(this.l,c)){if(this.a){Ti(this,this.a);var c=this.c,d=b.a,e=0,f=b.Ta(),g=b.b;c.beginPath();var h,k;h=0;for(k=f.length;h<k;++h)e=Ui(this,d,e,f[h],g,!1);c.stroke()}""!==this.f&&(b=Xi(b),Ri(this,b,b.length,2))}};n.lc=function(b){if($b(this.l,b.C())){if(this.a||this.b){this.b&&Si(this,this.b);this.a&&Ti(this,this.a);var c=this.c;c.beginPath();Vi(this,Uc(b),0,b.Ta(),b.b);this.b&&c.fill();this.a&&c.stroke()}""!==this.f&&(b=Vc(b),Ri(this,b,2,2))}};
-n.kc=function(b){if($b(this.l,b.C())){if(this.a||this.b){this.b&&Si(this,this.b);this.a&&Ti(this,this.a);var c=this.c,d=Yi(b),e=0,f=b.c,g=b.b,h,k;h=0;for(k=f.length;h<k;++h){var l=f[h];c.beginPath();e=Vi(this,d,e,l,g);this.b&&c.fill();this.a&&c.stroke()}}""!==this.f&&(b=Zi(b),Ri(this,b,b.length,2))}};function Si(b,c){var d=b.c,e=b.R;e?e.fillStyle!=c.fillStyle&&(e.fillStyle=d.fillStyle=c.fillStyle):(d.fillStyle=c.fillStyle,b.R={fillStyle:c.fillStyle})}
-function Ti(b,c){var d=b.c,e=b.T;e?(e.lineCap!=c.lineCap&&(e.lineCap=d.lineCap=c.lineCap),Ff&&!La(e.lineDash,c.lineDash)&&d.setLineDash(e.lineDash=c.lineDash),e.lineJoin!=c.lineJoin&&(e.lineJoin=d.lineJoin=c.lineJoin),e.lineWidth!=c.lineWidth&&(e.lineWidth=d.lineWidth=c.lineWidth),e.miterLimit!=c.miterLimit&&(e.miterLimit=d.miterLimit=c.miterLimit),e.strokeStyle!=c.strokeStyle&&(e.strokeStyle=d.strokeStyle=c.strokeStyle)):(d.lineCap=c.lineCap,Ff&&d.setLineDash(c.lineDash),d.lineJoin=c.lineJoin,d.lineWidth=
-c.lineWidth,d.miterLimit=c.miterLimit,d.strokeStyle=c.strokeStyle,b.T={lineCap:c.lineCap,lineDash:c.lineDash,lineJoin:c.lineJoin,lineWidth:c.lineWidth,miterLimit:c.miterLimit,strokeStyle:c.strokeStyle})}
-n.za=function(b,c){if(b){var d=b.a;this.b={fillStyle:zd(d?d:vi)}}else this.b=null;if(c){var d=c.b,e=c.c,f=c.a,g=c.g,h=c.f,k=c.h;this.a={lineCap:void 0!==e?e:"round",lineDash:f?f:wi,lineJoin:void 0!==g?g:"round",lineWidth:this.u*(void 0!==h?h:1),miterLimit:void 0!==k?k:10,strokeStyle:wd(d?d:xi)}}else this.a=null};
-n.Aa=function(b){if(b){var c=b.Sa(),d=b.S(1),e=b.fa(),f=b.ya();this.A=c[0];this.I=c[1];this.D=f[1];this.g=d;this.o=b.B;this.ha=e[0];this.aa=e[1];this.da=b.o;this.ka=b.s;this.h=b.u;this.ua=b.v;this.V=f[0]}else this.g=null};
-n.sa=function(b){if(b){var c=b.c;c?(c=c.a,this.i={fillStyle:zd(c?c:vi)}):this.i=null;var d=b.l;if(d){var c=d.b,e=d.c,f=d.a,g=d.g,h=d.f,d=d.h;this.B={lineCap:void 0!==e?e:"round",lineDash:f?f:wi,lineJoin:void 0!==g?g:"round",lineWidth:void 0!==h?h:1,miterLimit:void 0!==d?d:10,strokeStyle:wd(c?c:xi)}}else this.B=null;var c=b.a,e=b.b,f=b.f,g=b.g,h=b.h,d=b.i,k=b.j;b=b.B;this.G={font:void 0!==c?c:"10px sans-serif",textAlign:void 0!==k?k:"center",textBaseline:void 0!==b?b:"middle"};this.f=void 0!==d?d:
-"";this.la=void 0!==e?this.u*e:0;this.va=void 0!==f?this.u*f:0;this.H=void 0!==g?g:0;this.j=this.u*(void 0!==h?h:1)}else this.f=""};function $i(b){Mg.call(this,b);this.I=yb()}M($i,Mg);
-$i.prototype.g=function(b,c,d){aj(this,"precompose",d,b,void 0);var e=this.S();if(e){var f=c.extent,g=void 0!==f;if(g){var h=b.pixelRatio,k=b.size[0]*h,l=b.size[1]*h,m=b.viewState.rotation,p=ac(f),q=[f[2],f[3]],r=[f[2],f[1]],f=Wb(f);Lg(b.coordinateToPixelMatrix,p,p);Lg(b.coordinateToPixelMatrix,q,q);Lg(b.coordinateToPixelMatrix,r,r);Lg(b.coordinateToPixelMatrix,f,f);d.save();yi(d,-m,k/2,l/2);d.beginPath();d.moveTo(p[0]*h,p[1]*h);d.lineTo(q[0]*h,q[1]*h);d.lineTo(r[0]*h,r[1]*h);d.lineTo(f[0]*h,f[1]*
-h);d.clip();yi(d,m,k/2,l/2)}h=this.D;k=d.globalAlpha;d.globalAlpha=c.opacity;d.drawImage(e,0,0,+e.width,+e.height,Math.round(h[12]),Math.round(h[13]),Math.round(e.width*h[0]),Math.round(e.height*h[5]));d.globalAlpha=k;g&&d.restore()}aj(this,"postcompose",d,b,void 0)};
-function aj(b,c,d,e,f){var g=b.a;if(mb(g,c)){var h=e.size[0]*e.pixelRatio,k=e.size[1]*e.pixelRatio,l=e.viewState.rotation;yi(d,-l,h/2,k/2);b=void 0!==f?f:bj(b,e,0);b=new Pi(d,e.pixelRatio,e.extent,b,e.viewState.rotation);T(g,new Gg(c,g,b,e,d,null));yi(d,l,h/2,k/2)}}function bj(b,c,d){var e=c.viewState,f=c.pixelRatio;return Jg(b.I,f*c.size[0]/2,f*c.size[1]/2,f/e.resolution,-f/e.resolution,-e.rotation,-e.center[0]+d,-e.center[1])};var cj=["Polygon","LineString","Image","Text"];function dj(b,c,d){this.aa=b;this.G=c;this.c=null;this.g=0;this.resolution=d;this.D=this.I=null;this.b=[];this.coordinates=[];this.T=yb();this.a=[];this.R=[];this.Z=yb();this.ha=yb()}M(dj,Fg);
-function ej(b,c,d,e,f,g){var h=b.coordinates.length,k=b.Cb(),l=[c[d],c[d+1]],m=[NaN,NaN],p=!0,q,r,u;for(q=d+f;q<e;q+=f){m[0]=c[q];m[1]=c[q+1];u=k[1];var w=k[2],y=k[3],z=m[0],D=m[1],t=0;z<k[0]?t=t|16:z>w&&(t=t|4);D<u?t|=8:D>y&&(t|=2);0===t&&(t=1);u=t;u!==r?(p&&(b.coordinates[h++]=l[0],b.coordinates[h++]=l[1]),b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],p=!1):1===u?(b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],p=!1):p=!0;l[0]=m[0];l[1]=m[1];r=u}q===d+f&&(b.coordinates[h++]=l[0],b.coordinates[h++]=
-l[1]);g&&(b.coordinates[h++]=c[d],b.coordinates[h++]=c[d+1]);return h}function fj(b,c){b.I=[0,c,0];b.b.push(b.I);b.D=[0,c,0];b.a.push(b.D)}
-function gj(b,c,d,e,f,g,h,k,l){var m;Kg(e,b.T)?m=b.R:(m=zc(b.coordinates,0,b.coordinates.length,2,e,b.R),Bb(b.T,e));e=!Za(g);var p=0,q=h.length,r=0,u,w=b.Z;b=b.ha;for(var y,z,D,t;p<q;){var v=h[p],B,F,C,G;switch(v[0]){case 0:r=v[1];e&&g[I(r).toString()]||!r.M()?p=v[2]:void 0===l||$b(l,r.M().C())?++p:p=v[2];break;case 1:c.beginPath();++p;break;case 2:r=v[1];u=m[r];v=m[r+1];D=m[r+2]-u;r=m[r+3]-v;c.arc(u,v,Math.sqrt(D*D+r*r),0,2*Math.PI,!0);++p;break;case 3:c.closePath();++p;break;case 4:r=v[1];u=v[2];
-B=v[3];C=v[4]*d;var J=v[5]*d,A=v[6];F=v[7];var H=v[8],O=v[9];D=v[11];t=v[12];var Q=v[13],L=v[14];for(v[10]&&(D+=f);r<u;r+=2){v=m[r]-C;G=m[r+1]-J;Q&&(v=Math.round(v),G=Math.round(G));if(1!=t||0!==D){var K=v+C,fa=G+J;Jg(w,K,fa,t,t,D,-K,-fa);c.transform(w[0],w[1],w[4],w[5],w[12],w[13])}K=c.globalAlpha;1!=F&&(c.globalAlpha=K*F);var fa=L+H>B.width?B.width-H:L,ra=A+O>B.height?B.height-O:A;c.drawImage(B,H,O,fa,ra,v,G,fa*d,ra*d);1!=F&&(c.globalAlpha=K);if(1!=t||0!==D)Db(w,b),c.transform(b[0],b[1],b[4],b[5],
-b[12],b[13])}++p;break;case 5:r=v[1];u=v[2];C=v[3];J=v[4]*d;A=v[5]*d;D=v[6];t=v[7]*d;B=v[8];for(F=v[9];r<u;r+=2){v=m[r]+J;G=m[r+1]+A;if(1!=t||0!==D)Jg(w,v,G,t,t,D,-v,-G),c.transform(w[0],w[1],w[4],w[5],w[12],w[13]);H=C.split("\n");O=H.length;1<O?(Q=Math.round(1.5*c.measureText("M").width),G-=(O-1)/2*Q):Q=0;for(L=0;L<O;L++)K=H[L],F&&c.strokeText(K,v,G),B&&c.fillText(K,v,G),G+=Q;if(1!=t||0!==D)Db(w,b),c.transform(b[0],b[1],b[4],b[5],b[12],b[13])}++p;break;case 6:if(void 0!==k&&(r=v[1],r=k(r)))return r;
-++p;break;case 7:c.fill();++p;break;case 8:r=v[1];u=v[2];v=m[r];G=m[r+1];D=v+.5|0;t=G+.5|0;if(D!==y||t!==z)c.moveTo(v,G),y=D,z=t;for(r+=2;r<u;r+=2)if(v=m[r],G=m[r+1],D=v+.5|0,t=G+.5|0,D!==y||t!==z)c.lineTo(v,G),y=D,z=t;++p;break;case 9:c.fillStyle=v[1];++p;break;case 10:y=void 0!==v[7]?v[7]:!0;z=v[2];c.strokeStyle=v[1];c.lineWidth=y?z*d:z;c.lineCap=v[3];c.lineJoin=v[4];c.miterLimit=v[5];Ff&&c.setLineDash(v[6]);z=y=NaN;++p;break;case 11:c.font=v[1];c.textAlign=v[2];c.textBaseline=v[3];++p;break;case 12:c.stroke();
-++p;break;default:++p}}}function hj(b){var c=b.a;c.reverse();var d,e=c.length,f,g,h=-1;for(d=0;d<e;++d)if(f=c[d],g=f[0],6==g)h=d;else if(0==g){f[2]=d;f=b.a;for(g=d;h<g;){var k=f[h];f[h]=f[g];f[g]=k;++h;--g}h=-1}}function ij(b,c){b.I[2]=b.b.length;b.I=null;b.D[2]=b.a.length;b.D=null;var d=[6,c];b.b.push(d);b.a.push(d)}dj.prototype.ib=N;dj.prototype.Cb=function(){return this.G};
-function jj(b,c,d){dj.call(this,b,c,d);this.i=this.V=null;this.A=this.v=this.H=this.u=this.s=this.o=this.B=this.j=this.l=this.h=this.f=void 0}M(jj,dj);jj.prototype.Ra=function(b,c){if(this.i){fj(this,c);var d=b.a,e=this.coordinates.length,d=ej(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.B,this.o,this.s,this.u,this.H,this.v,this.A]);this.a.push([4,e,d,this.V,this.f,this.h,this.l,this.j,this.B,this.o,this.s,this.u,this.H,this.v,this.A]);ij(this,c)}};
-jj.prototype.Qa=function(b,c){if(this.i){fj(this,c);var d=b.a,e=this.coordinates.length,d=ej(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.B,this.o,this.s,this.u,this.H,this.v,this.A]);this.a.push([4,e,d,this.V,this.f,this.h,this.l,this.j,this.B,this.o,this.s,this.u,this.H,this.v,this.A]);ij(this,c)}};jj.prototype.ib=function(){hj(this);this.h=this.f=void 0;this.i=this.V=null;this.A=this.v=this.u=this.s=this.o=this.B=this.j=this.H=this.l=void 0};
-jj.prototype.Aa=function(b){var c=b.Sa(),d=b.ya(),e=b.jb(1),f=b.S(1),g=b.fa();this.f=c[0];this.h=c[1];this.V=e;this.i=f;this.l=d[1];this.j=b.B;this.B=g[0];this.o=g[1];this.s=b.o;this.u=b.s;this.H=b.u;this.v=b.v;this.A=d[0]};function kj(b,c,d){dj.call(this,b,c,d);this.f={Pa:void 0,Ka:void 0,La:null,Ma:void 0,Na:void 0,Oa:void 0,Lb:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(kj,dj);
-function lj(b,c,d,e,f){var g=b.coordinates.length;c=ej(b,c,d,e,f,!1);g=[8,g,c];b.b.push(g);b.a.push(g);return e}n=kj.prototype;n.Cb=function(){this.c||(this.c=Lb(this.G),0<this.g&&Kb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};
-function mj(b){var c=b.f,d=c.strokeStyle,e=c.lineCap,f=c.lineDash,g=c.lineJoin,h=c.lineWidth,k=c.miterLimit;c.Pa==d&&c.Ka==e&&La(c.La,f)&&c.Ma==g&&c.Na==h&&c.Oa==k||(c.Lb!=b.coordinates.length&&(b.b.push([12]),c.Lb=b.coordinates.length),b.b.push([10,d,h,e,g,k,f],[1]),c.Pa=d,c.Ka=e,c.La=f,c.Ma=g,c.Na=h,c.Oa=k)}
-n.ic=function(b,c){var d=this.f,e=d.lineWidth;void 0!==d.strokeStyle&&void 0!==e&&(mj(this),fj(this,c),this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]),d=b.a,lj(this,d,0,d.length,b.b),this.a.push([12]),ij(this,c))};
-n.jc=function(b,c){var d=this.f,e=d.lineWidth;if(void 0!==d.strokeStyle&&void 0!==e){mj(this);fj(this,c);this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]);var d=b.Ta(),e=b.a,f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=lj(this,e,g,d[h],f);this.a.push([12]);ij(this,c)}};n.ib=function(){this.f.Lb!=this.coordinates.length&&this.b.push([12]);hj(this);this.f=null};
-n.za=function(b,c){var d=c.b;this.f.strokeStyle=wd(d?d:xi);d=c.c;this.f.lineCap=void 0!==d?d:"round";d=c.a;this.f.lineDash=d?d:wi;d=c.g;this.f.lineJoin=void 0!==d?d:"round";d=c.f;this.f.lineWidth=void 0!==d?d:1;d=c.h;this.f.miterLimit=void 0!==d?d:10;this.f.lineWidth>this.g&&(this.g=this.f.lineWidth,this.c=null)};
-function nj(b,c,d){dj.call(this,b,c,d);this.f={gc:void 0,Pa:void 0,Ka:void 0,La:null,Ma:void 0,Na:void 0,Oa:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(nj,dj);
-function oj(b,c,d,e,f){var g=b.f,h=[1];b.b.push(h);b.a.push(h);var k,h=0;for(k=e.length;h<k;++h){var l=e[h],m=b.coordinates.length;d=ej(b,c,d,l,f,!0);d=[8,m,d];m=[3];b.b.push(d,m);b.a.push(d,m);d=l}c=[7];b.a.push(c);void 0!==g.fillStyle&&b.b.push(c);void 0!==g.strokeStyle&&(g=[12],b.b.push(g),b.a.push(g));return d}n=nj.prototype;
-n.hc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){pj(this);fj(this,c);this.a.push([9,wd(vi)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var f=b.a,e=this.coordinates.length;ej(this,f,0,f.length,b.b,!1);f=[1];e=[2,e];this.b.push(f,e);this.a.push(f,e);e=[7];this.a.push(e);void 0!==d.fillStyle&&this.b.push(e);void 0!==d.strokeStyle&&(d=[12],this.b.push(d),this.a.push(d));ij(this,c)}};
-n.lc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e)pj(this),fj(this,c),this.a.push([9,wd(vi)]),void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]),d=b.Ta(),e=Uc(b),oj(this,e,0,d,b.b),ij(this,c)};
-n.kc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){pj(this);fj(this,c);this.a.push([9,wd(vi)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var d=b.c,e=Yi(b),f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=oj(this,e,g,d[h],f);ij(this,c)}};n.ib=function(){hj(this);this.f=null;var b=this.aa;if(0!==b){var c=this.coordinates,d,e;d=0;for(e=c.length;d<e;++d)c[d]=b*Math.round(c[d]/b)}};
-n.Cb=function(){this.c||(this.c=Lb(this.G),0<this.g&&Kb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};
-n.za=function(b,c){var d=this.f;if(b){var e=b.a;d.fillStyle=zd(e?e:vi)}else d.fillStyle=void 0;c?(e=c.b,d.strokeStyle=wd(e?e:xi),e=c.c,d.lineCap=void 0!==e?e:"round",e=c.a,d.lineDash=e?e.slice():wi,e=c.g,d.lineJoin=void 0!==e?e:"round",e=c.f,d.lineWidth=void 0!==e?e:1,e=c.h,d.miterLimit=void 0!==e?e:10,d.lineWidth>this.g&&(this.g=d.lineWidth,this.c=null)):(d.strokeStyle=void 0,d.lineCap=void 0,d.lineDash=null,d.lineJoin=void 0,d.lineWidth=void 0,d.miterLimit=void 0)};
-function pj(b){var c=b.f,d=c.fillStyle,e=c.strokeStyle,f=c.lineCap,g=c.lineDash,h=c.lineJoin,k=c.lineWidth,l=c.miterLimit;void 0!==d&&c.gc!=d&&(b.b.push([9,d]),c.gc=c.fillStyle);void 0===e||c.Pa==e&&c.Ka==f&&c.La==g&&c.Ma==h&&c.Na==k&&c.Oa==l||(b.b.push([10,e,k,f,h,l,g]),c.Pa=e,c.Ka=f,c.La=g,c.Ma=h,c.Na=k,c.Oa=l)}function qj(b,c,d){dj.call(this,b,c,d);this.v=this.H=this.u=null;this.i="";this.s=this.o=this.B=this.j=0;this.l=this.h=this.f=null}M(qj,dj);
-function rj(b,c,d,e,f){if(""!==b.i&&b.l&&(b.f||b.h)){if(b.f){var g=b.f,h=b.u;if(!h||h.fillStyle!=g.fillStyle){var k=[9,g.fillStyle];b.b.push(k);b.a.push(k);h?h.fillStyle=g.fillStyle:b.u={fillStyle:g.fillStyle}}}b.h&&(g=b.h,h=b.H,h&&h.lineCap==g.lineCap&&h.lineDash==g.lineDash&&h.lineJoin==g.lineJoin&&h.lineWidth==g.lineWidth&&h.miterLimit==g.miterLimit&&h.strokeStyle==g.strokeStyle||(k=[10,g.strokeStyle,g.lineWidth,g.lineCap,g.lineJoin,g.miterLimit,g.lineDash,!1],b.b.push(k),b.a.push(k),h?(h.lineCap=
-g.lineCap,h.lineDash=g.lineDash,h.lineJoin=g.lineJoin,h.lineWidth=g.lineWidth,h.miterLimit=g.miterLimit,h.strokeStyle=g.strokeStyle):b.H={lineCap:g.lineCap,lineDash:g.lineDash,lineJoin:g.lineJoin,lineWidth:g.lineWidth,miterLimit:g.miterLimit,strokeStyle:g.strokeStyle}));g=b.l;h=b.v;h&&h.font==g.font&&h.textAlign==g.textAlign&&h.textBaseline==g.textBaseline||(k=[11,g.font,g.textAlign,g.textBaseline],b.b.push(k),b.a.push(k),h?(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline):b.v=
-{font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});fj(b,f);g=b.coordinates.length;c=ej(b,c,0,d,e,!1);c=[5,g,c,b.i,b.j,b.B,b.o,b.s,!!b.f,!!b.h];b.b.push(c);b.a.push(c);ij(b,f)}}
-qj.prototype.sa=function(b){if(b){var c=b.c;c?(c=c.a,c=zd(c?c:vi),this.f?this.f.fillStyle=c:this.f={fillStyle:c}):this.f=null;var d=b.l;if(d){var c=d.b,e=d.c,f=d.a,g=d.g,h=d.f,d=d.h,e=void 0!==e?e:"round",f=f?f.slice():wi,g=void 0!==g?g:"round",h=void 0!==h?h:1,d=void 0!==d?d:10,c=wd(c?c:xi);if(this.h){var k=this.h;k.lineCap=e;k.lineDash=f;k.lineJoin=g;k.lineWidth=h;k.miterLimit=d;k.strokeStyle=c}else this.h={lineCap:e,lineDash:f,lineJoin:g,lineWidth:h,miterLimit:d,strokeStyle:c}}else this.h=null;
-var l=b.a,c=b.b,e=b.f,f=b.g,h=b.h,d=b.i,g=b.j,k=b.B;b=void 0!==l?l:"10px sans-serif";g=void 0!==g?g:"center";k=void 0!==k?k:"middle";this.l?(l=this.l,l.font=b,l.textAlign=g,l.textBaseline=k):this.l={font:b,textAlign:g,textBaseline:k};this.i=void 0!==d?d:"";this.j=void 0!==c?c:0;this.B=void 0!==e?e:0;this.o=void 0!==f?f:0;this.s=void 0!==h?h:1}else this.i=""};function sj(b,c,d,e){this.o=b;this.h=c;this.B=d;this.l=e;this.b={};this.i=sf(1,1);this.j=yb()}
-function tj(b){for(var c in b.b){var d=b.b[c],e;for(e in d)d[e].ib()}}sj.prototype.g=function(b,c,d,e,f){var g=this.j;Jg(g,.5,.5,1/c,-1/c,-d,-b[0],-b[1]);var h=this.i;h.clearRect(0,0,1,1);var k;void 0!==this.l&&(k=Ib(),Jb(k,b),Kb(k,c*this.l,k));return uj(this,h,g,d,e,function(b){if(0<h.getImageData(0,0,1,1).data[3]){if(b=f(b))return b;h.clearRect(0,0,1,1)}},k)};
-sj.prototype.a=function(b,c){var d=void 0!==b?b.toString():"0",e=this.b[d];void 0===e&&(e={},this.b[d]=e);d=e[c];void 0===d&&(d=new vj[c](this.o,this.h,this.B),e[c]=d);return d};sj.prototype.c=function(){return Za(this.b)};
-sj.prototype.f=function(b,c,d,e,f,g){var h=Object.keys(this.b).map(Number);h.sort(Ga);if(!1!==g){var k=this.h;g=k[0];var l=k[1],m=k[2],k=k[3];g=[g,l,g,k,m,k,m,l];zc(g,0,8,2,d,g);b.save();b.beginPath();b.moveTo(g[0],g[1]);b.lineTo(g[2],g[3]);b.lineTo(g[4],g[5]);b.lineTo(g[6],g[7]);b.closePath();b.clip()}var p,q;g=0;for(l=h.length;g<l;++g)for(p=this.b[h[g].toString()],m=0,k=cj.length;m<k;++m)q=p[cj[m]],void 0!==q&&gj(q,b,c,d,e,f,q.b,void 0);b.restore()};
-function uj(b,c,d,e,f,g,h){var k=Object.keys(b.b).map(Number);k.sort(function(b,c){return c-b});var l,m,p,q,r;l=0;for(m=k.length;l<m;++l)for(q=b.b[k[l].toString()],p=cj.length-1;0<=p;--p)if(r=q[cj[p]],void 0!==r&&(r=gj(r,c,1,d,e,f,r.a,g,h)))return r}var vj={Image:jj,LineString:kj,Polygon:nj,Text:qj};function wj(b,c){return I(b)-I(c)}function xj(b,c){var d=.5*b/c;return d*d}function yj(b,c,d,e,f,g){var h=!1,k,l;if(k=d.S())l=k.Ya(),2==l||3==l?k.Ub(f,g):(0==l&&k.load(),k.Mb(f,g),h=!0);if(f=(0,d.f)(c))e=f.Hb(e),(0,zj[e.U()])(b,e,d,c);return h}
-var zj={Point:function(b,c,d,e){var f=d.S();if(f){if(2!=f.Ya())return;var g=b.a(d.a,"Image");g.Aa(f);g.Ra(c,e)}if(f=d.b)b=b.a(d.a,"Text"),b.sa(f),rj(b,c.a,2,2,e)},LineString:function(b,c,d,e){var f=d.c;if(f){var g=b.a(d.a,"LineString");g.za(null,f);g.ic(c,e)}if(f=d.b)b=b.a(d.a,"Text"),b.sa(f),rj(b,Wi(c),2,2,e)},Polygon:function(b,c,d,e){var f=d.g,g=d.c;if(f||g){var h=b.a(d.a,"Polygon");h.za(f,g);h.lc(c,e)}if(f=d.b)b=b.a(d.a,"Text"),b.sa(f),rj(b,Vc(c),2,2,e)},MultiPoint:function(b,c,d,e){var f=d.S();
-if(f){if(2!=f.Ya())return;var g=b.a(d.a,"Image");g.Aa(f);g.Qa(c,e)}if(f=d.b)b=b.a(d.a,"Text"),b.sa(f),d=c.a,rj(b,d,d.length,c.b,e)},MultiLineString:function(b,c,d,e){var f=d.c;if(f){var g=b.a(d.a,"LineString");g.za(null,f);g.jc(c,e)}if(f=d.b)b=b.a(d.a,"Text"),b.sa(f),c=Xi(c),rj(b,c,c.length,2,e)},MultiPolygon:function(b,c,d,e){var f=d.g,g=d.c;if(g||f){var h=b.a(d.a,"Polygon");h.za(f,g);h.kc(c,e)}if(f=d.b)b=b.a(d.a,"Text"),b.sa(f),c=Zi(c),rj(b,c,c.length,2,e)},GeometryCollection:function(b,c,d,e){c=
-c.a;var f,g;f=0;for(g=c.length;f<g;++f)(0,zj[c[f].U()])(b,c[f],d,e)},Circle:function(b,c,d,e){var f=d.g,g=d.c;if(f||g){var h=b.a(d.a,"Polygon");h.za(f,g);h.hc(c,e)}if(f=d.b)b=b.a(d.a,"Text"),b.sa(f),rj(b,c.a.slice(0,c.b),2,2,e)}};var Aj=!((W("Chrome")||W("CriOS"))&&!W("Opera")&&!W("OPR")&&!W("Edge"))||W("iPhone")&&!W("iPod")&&!W("iPad")||W("iPad")||W("iPod");function Bj(b,c,d,e){b=d-b;c=e-c;var f=Math.sqrt(b*b+c*c);return[Math.round(d+b/f),Math.round(e+c/f)]}
-function Cj(b,c,d,e,f,g,h,k,l,m,p){var q=sf(Math.round(d*b),Math.round(d*c));if(0===l.length)return q.canvas;q.scale(d,d);var r=Ib();l.forEach(function(b){Rb(r,b.extent)});var u=sf(Math.round(d*Ub(r)/e),Math.round(d*Vb(r)/e)),w=d/e;l.forEach(function(b){u.drawImage(b.image,m,m,b.image.width-2*m,b.image.height-2*m,(b.extent[0]-r[0])*w,-(b.extent[3]-r[3])*w,Ub(b.extent)*w,Vb(b.extent)*w)});var y=ac(h);k.c.forEach(function(b){var c=b.source,f=b.target,h=c[1][0],k=c[1][1],l=c[2][0],m=c[2][1];b=(f[0][0]-
-y[0])/g;var w=-(f[0][1]-y[1])/g,p=(f[1][0]-y[0])/g,A=-(f[1][1]-y[1])/g,H=(f[2][0]-y[0])/g,O=-(f[2][1]-y[1])/g,f=c[0][0],c=c[0][1],h=h-f,k=k-c,l=l-f,m=m-c;a:{h=[[h,k,0,0,p-b],[l,m,0,0,H-b],[0,0,h,k,A-w],[0,0,l,m,O-w]];k=h.length;for(l=0;l<k;l++){for(var m=l,Q=Math.abs(h[l][l]),L=l+1;L<k;L++){var K=Math.abs(h[L][l]);K>Q&&(Q=K,m=L)}if(0===Q){h=null;break a}Q=h[m];h[m]=h[l];h[l]=Q;for(m=l+1;m<k;m++)for(Q=-h[m][l]/h[l][l],L=l;L<k+1;L++)h[m][L]=l==L?0:h[m][L]+Q*h[l][L]}l=Array(k);for(m=k-1;0<=m;m--)for(l[m]=
-h[m][k]/h[m][m],Q=m-1;0<=Q;Q--)h[Q][k]-=h[Q][m]*l[m];h=l}h&&(q.save(),q.beginPath(),Aj?(l=(b+p+H)/3,m=(w+A+O)/3,k=Bj(l,m,b,w),p=Bj(l,m,p,A),H=Bj(l,m,H,O),q.moveTo(k[0],k[1]),q.lineTo(p[0],p[1]),q.lineTo(H[0],H[1])):(q.moveTo(b,w),q.lineTo(p,A),q.lineTo(H,O)),q.closePath(),q.clip(),q.transform(h[0],h[2],h[1],h[3],b,w),q.translate(r[0]-f,r[3]-c),q.scale(e/d,-e/d),q.drawImage(u.canvas,0,0),q.restore())});p&&(q.save(),q.strokeStyle="black",q.lineWidth=1,k.c.forEach(function(b){var c=b.target;b=(c[0][0]-
-y[0])/g;var d=-(c[0][1]-y[1])/g,e=(c[1][0]-y[0])/g,f=-(c[1][1]-y[1])/g,h=(c[2][0]-y[0])/g,c=-(c[2][1]-y[1])/g;q.beginPath();q.moveTo(b,d);q.lineTo(e,f);q.lineTo(h,c);q.closePath();q.stroke()}),q.restore());return q.canvas};function Dj(b,c,d,e,f){this.f=b;this.g=c;var g={},h=wc(this.g,this.f);this.b=function(b){var c=b[0]+"/"+b[1];g[c]||(g[c]=h(b));return g[c]};this.h=e;this.B=f*f;this.c=[];this.i=!1;this.j=this.f.a&&!!e&&!!this.f.C()&&Ub(e)==Ub(this.f.C());this.a=this.f.C()?Ub(this.f.C()):null;this.l=this.g.C()?Ub(this.g.C()):null;b=ac(d);c=[d[2],d[3]];e=[d[2],d[1]];d=Wb(d);f=this.b(b);var k=this.b(c),l=this.b(e),m=this.b(d);Ej(this,b,c,e,d,f,k,l,m,10);if(this.i){var p=Infinity;this.c.forEach(function(b){p=Math.min(p,
-b.source[0][0],b.source[1][0],b.source[2][0])});this.c.forEach(function(b){if(Math.max(b.source[0][0],b.source[1][0],b.source[2][0])-p>this.a/2){var c=[[b.source[0][0],b.source[0][1]],[b.source[1][0],b.source[1][1]],[b.source[2][0],b.source[2][1]]];c[0][0]-p>this.a/2&&(c[0][0]-=this.a);c[1][0]-p>this.a/2&&(c[1][0]-=this.a);c[2][0]-p>this.a/2&&(c[2][0]-=this.a);Math.max(c[0][0],c[1][0],c[2][0])-Math.min(c[0][0],c[1][0],c[2][0])<this.a/2&&(b.source=c)}},this)}g={}}
-function Ej(b,c,d,e,f,g,h,k,l,m){var p=Hb([g,h,k,l]),q=b.a?Ub(p)/b.a:null,r=b.f.a&&.5<q&&1>q,u=!1;if(0<m){if(b.g.f&&b.l)var w=Hb([c,d,e,f]),u=u|.25<Ub(w)/b.l;!r&&b.f.f&&q&&(u|=.25<q)}if(u||!b.h||$b(p,b.h)){if(!(u||isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])&&isFinite(l[0])&&isFinite(l[1])))if(0<m)u=!0;else return;if(0<m&&(u||(q=b.b([(c[0]+e[0])/2,(c[1]+e[1])/2]),p=r?(Da(g[0],b.a)+Da(k[0],b.a))/2-Da(q[0],b.a):(g[0]+k[0])/2-q[0],q=(g[1]+k[1])/2-q[1],
-u=p*p+q*q>b.B),u)){Math.abs(c[0]-e[0])<=Math.abs(c[1]-e[1])?(r=[(d[0]+e[0])/2,(d[1]+e[1])/2],p=b.b(r),q=[(f[0]+c[0])/2,(f[1]+c[1])/2],u=b.b(q),Ej(b,c,d,r,q,g,h,p,u,m-1),Ej(b,q,r,e,f,u,p,k,l,m-1)):(r=[(c[0]+d[0])/2,(c[1]+d[1])/2],p=b.b(r),q=[(e[0]+f[0])/2,(e[1]+f[1])/2],u=b.b(q),Ej(b,c,r,q,f,g,p,u,l,m-1),Ej(b,r,d,e,q,p,h,k,u,m-1));return}if(r){if(!b.j)return;b.i=!0}b.c.push({source:[g,k,l],target:[c,e,f]});b.c.push({source:[g,h,k],target:[c,d,e]})}}
-function Fj(b){var c=Ib();b.c.forEach(function(b){b=b.source;Jb(c,b[0]);Jb(c,b[1]);Jb(c,b[2])});return c};function Gj(b){U.call(this);this.g=void 0;this.a="geometry";this.h=null;this.c=void 0;this.b=null;R(this,qb(this.a),this.fb,this);void 0!==b&&(b instanceof yc||!b?Hj(this,b):this.l(b))}M(Gj,U);n=Gj.prototype;n.clone=function(){var b=new Gj(this.ua());Ij(b,this.a);var c=this.M();c&&Hj(b,c.clone());if(c=this.h)b.h=c,b.c=c?Jj(c):void 0,b.w();return b};n.M=function(){return this.get(this.a)};n.Da=function(){return this.g};n.nd=function(){this.w()};
-n.fb=function(){this.b&&(P(this.b),this.b=null);var b=this.M();b&&(this.b=R(b,"change",this.nd,this));this.w()};function Hj(b,c){b.set(b.a,c)}function Ij(b,c){fb(b,qb(b.a),b.fb,b);b.a=c;R(b,qb(b.a),b.fb,b);b.fb()}function Jj(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b};function Kj(b,c,d){return function(e,f,g){var h=new XMLHttpRequest;h.open("GET",ga(b)?b(e,f,g):b,!0);"arraybuffer"==c.U()&&(h.responseType="arraybuffer");h.onload=function(){if(200<=h.status&&300>h.status){var b=c.U(),e;"json"==b||"text"==b?e=h.responseText:"xml"==b?(e=h.responseXML,e||(b=h.responseText,e=(new DOMParser).parseFromString(b,"application/xml"))):"arraybuffer"==b&&(e=h.response);e&&d.call(this,c.b(e,{featureProjection:g}),c.f(Lj(e)))}}.bind(this);h.send()}}
-function Mj(b,c){return Kj(b,c,function(b){this.vb(b)})};function Nj(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Oj;
-(function(){var b={mc:{}};(function(){function c(b,d){if(!(this instanceof c))return new c(b,d);this.tb=Math.max(4,b||9);this.Zb=Math.max(2,Math.ceil(.4*this.tb));d&&this.Xc(d);this.clear()}function d(b,c){b.bbox=e(b,0,b.children.length,c)}function e(b,c,d,e){for(var g=[Infinity,Infinity,-Infinity,-Infinity],h;c<d;c++)h=b.children[c],f(g,b.$?e(h):h.bbox);return g}function f(b,c){b[0]=Math.min(b[0],c[0]);b[1]=Math.min(b[1],c[1]);b[2]=Math.max(b[2],c[2]);b[3]=Math.max(b[3],c[3])}function g(b,c){return b.bbox[0]-
-c.bbox[0]}function h(b,c){return b.bbox[1]-c.bbox[1]}function k(b){return(b[2]-b[0])*(b[3]-b[1])}function l(b){return b[2]-b[0]+(b[3]-b[1])}function m(b,c){return b[0]<=c[0]&&b[1]<=c[1]&&c[2]<=b[2]&&c[3]<=b[3]}function p(b,c){return c[0]<=b[2]&&c[1]<=b[3]&&c[2]>=b[0]&&c[3]>=b[1]}function q(b,c,d,e,f){for(var g=[c,d],h;g.length;)d=g.pop(),c=g.pop(),d-c<=e||(h=c+Math.ceil((d-c)/e/2)*e,r(b,c,d,h,f),g.push(c,h,h,d))}function r(b,c,d,e,f){for(var g,h,k,l,m;d>c;){600<d-c&&(g=d-c+1,h=e-c+1,k=Math.log(g),
-l=.5*Math.exp(2*k/3),m=.5*Math.sqrt(k*l*(g-l)/g)*(0>h-g/2?-1:1),k=Math.max(c,Math.floor(e-h*l/g+m)),h=Math.min(d,Math.floor(e+(g-h)*l/g+m)),r(b,k,h,e,f));g=b[e];h=c;l=d;u(b,c,e);for(0<f(b[d],g)&&u(b,c,d);h<l;){u(b,h,l);h++;for(l--;0>f(b[h],g);)h++;for(;0<f(b[l],g);)l--}0===f(b[c],g)?u(b,c,l):(l++,u(b,l,d));l<=e&&(c=l+1);e<=l&&(d=l-1)}}function u(b,c,d){var e=b[c];b[c]=b[d];b[d]=e}c.prototype={all:function(){return this.Vb(this.data,[])},search:function(b){var c=this.data,d=[],e=this.ca;if(!p(b,c.bbox))return d;
-for(var f=[],g,h,k,l;c;){g=0;for(h=c.children.length;g<h;g++)k=c.children[g],l=c.$?e(k):k.bbox,p(b,l)&&(c.$?d.push(k):m(b,l)?this.Vb(k,d):f.push(k));c=f.pop()}return d},load:function(b){if(!b||!b.length)return this;if(b.length<this.Zb){for(var c=0,d=b.length;c<d;c++)this.xa(b[c]);return this}b=this.Xb(b.slice(),0,b.length-1,0);this.data.children.length?this.data.height===b.height?this.$b(this.data,b):(this.data.height<b.height&&(c=this.data,this.data=b,b=c),this.Yb(b,this.data.height-b.height-1,!0)):
-this.data=b;return this},xa:function(b){b&&this.Yb(b,this.data.height-1);return this},clear:function(){this.data={children:[],height:1,bbox:[Infinity,Infinity,-Infinity,-Infinity],$:!0};return this},remove:function(b){if(!b)return this;for(var c=this.data,d=this.ca(b),e=[],f=[],g,h,k,l;c||e.length;){c||(c=e.pop(),h=e[e.length-1],g=f.pop(),l=!0);if(c.$&&(k=c.children.indexOf(b),-1!==k)){c.children.splice(k,1);e.push(c);this.Wc(e);break}l||c.$||!m(c.bbox,d)?h?(g++,c=h.children[g],l=!1):c=null:(e.push(c),
-f.push(g),g=0,h=c,c=c.children[0])}return this},ca:function(b){return b},zb:function(b,c){return b[0]-c[0]},Ab:function(b,c){return b[1]-c[1]},toJSON:function(){return this.data},Vb:function(b,c){for(var d=[];b;)b.$?c.push.apply(c,b.children):d.push.apply(d,b.children),b=d.pop();return c},Xb:function(b,c,e,f){var g=e-c+1,h=this.tb,k;if(g<=h)return k={children:b.slice(c,e+1),height:1,bbox:null,$:!0},d(k,this.ca),k;f||(f=Math.ceil(Math.log(g)/Math.log(h)),h=Math.ceil(g/Math.pow(h,f-1)));k={children:[],
-height:f,bbox:null,$:!1};var g=Math.ceil(g/h),h=g*Math.ceil(Math.sqrt(h)),l,m,p;for(q(b,c,e,h,this.zb);c<=e;c+=h)for(m=Math.min(c+h-1,e),q(b,c,m,g,this.Ab),l=c;l<=m;l+=g)p=Math.min(l+g-1,m),k.children.push(this.Xb(b,l,p,f-1));d(k,this.ca);return k},Vc:function(b,c,d,e){for(var f,g,h,l,m,p,q,r;;){e.push(c);if(c.$||e.length-1===d)break;q=r=Infinity;f=0;for(g=c.children.length;f<g;f++)h=c.children[f],m=k(h.bbox),p=h.bbox,p=(Math.max(p[2],b[2])-Math.min(p[0],b[0]))*(Math.max(p[3],b[3])-Math.min(p[1],
-b[1]))-m,p<r?(r=p,q=m<q?m:q,l=h):p===r&&m<q&&(q=m,l=h);c=l}return c},Yb:function(b,c,d){var e=this.ca;d=d?b.bbox:e(b);var e=[],g=this.Vc(d,this.data,c,e);g.children.push(b);for(f(g.bbox,d);0<=c;)if(e[c].children.length>this.tb)this.Yc(e,c),c--;else break;this.Sc(d,e,c)},Yc:function(b,c){var e=b[c],f=e.children.length,g=this.Zb;this.Tc(e,g,f);f=this.Uc(e,g,f);f={children:e.children.splice(f,e.children.length-f),height:e.height,bbox:null,$:!1};e.$&&(f.$=!0);d(e,this.ca);d(f,this.ca);c?b[c-1].children.push(f):
-this.$b(e,f)},$b:function(b,c){this.data={children:[b,c],height:b.height+1,bbox:null,$:!1};d(this.data,this.ca)},Uc:function(b,c,d){var f,g,h,l,m,p,q;m=p=Infinity;for(f=c;f<=d-c;f++)g=e(b,0,f,this.ca),h=e(b,f,d,this.ca),l=Math.max(0,Math.min(g[2],h[2])-Math.max(g[0],h[0]))*Math.max(0,Math.min(g[3],h[3])-Math.max(g[1],h[1])),g=k(g)+k(h),l<m?(m=l,q=f,p=g<p?g:p):l===m&&g<p&&(p=g,q=f);return q},Tc:function(b,c,d){var e=b.$?this.zb:g,f=b.$?this.Ab:h,k=this.Wb(b,c,d,e);c=this.Wb(b,c,d,f);k<c&&b.children.sort(e)},
-Wb:function(b,c,d,g){b.children.sort(g);g=this.ca;var h=e(b,0,c,g),k=e(b,d-c,d,g),m=l(h)+l(k),p,q;for(p=c;p<d-c;p++)q=b.children[p],f(h,b.$?g(q):q.bbox),m+=l(h);for(p=d-c-1;p>=c;p--)q=b.children[p],f(k,b.$?g(q):q.bbox),m+=l(k);return m},Sc:function(b,c,d){for(;0<=d;d--)f(c[d].bbox,b)},Wc:function(b){for(var c=b.length-1,e;0<=c;c--)0===b[c].children.length?0<c?(e=b[c-1].children,e.splice(e.indexOf(b[c]),1)):this.clear():d(b[c],this.ca)},Xc:function(b){var c=["return a"," - b",";"];this.zb=new Function("a",
-"b",c.join(b[0]));this.Ab=new Function("a","b",c.join(b[1]));this.ca=new Function("a","return [a"+b.join(", a")+"];")}};"undefined"!==typeof b?b.mc=c:"undefined"!==typeof self?self.a=c:window.a=c})();Oj=b.mc})();function Pj(b){this.a=Oj(b);this.b={}}n=Pj.prototype;n.xa=function(b,c){var d=[b[0],b[1],b[2],b[3],c];this.a.xa(d);this.b[I(c)]=d};n.load=function(b,c){for(var d=Array(c.length),e=0,f=c.length;e<f;e++){var g=b[e],h=c[e],g=[g[0],g[1],g[2],g[3],h];d[e]=g;this.b[I(h)]=g}this.a.load(d)};n.remove=function(b){b=I(b);var c=this.b[b];delete this.b[b];return null!==this.a.remove(c)};function Qj(b){return b.a.all().map(function(b){return b[4]})}
-function Rj(b,c){return b.a.search(c).map(function(b){return b[4]})}function Sj(b,c,d,e){return Tj(Rj(b,c),d,e)}function Tj(b,c,d){for(var e,f=0,g=b.length;f<g&&!(e=c.call(d,b[f]));f++);return e}n.clear=function(){this.a.clear();this.b={}};n.C=function(){return this.a.data.bbox};function Uj(b){b=b||{};Ee.call(this,{attributions:b.attributions,logo:b.logo,projection:void 0,state:"ready",wrapX:void 0!==b.wrapX?b.wrapX:!0});this.o=N;this.D=b.format;this.u=b.url;void 0!==b.loader?this.o=b.loader:void 0!==this.u&&(this.o=Mj(this.u,this.D));this.G=void 0!==b.strategy?b.strategy:Nj;var c=void 0!==b.useSpatialIndex?b.useSpatialIndex:!0;this.P=c?new Pj:null;this.s=new Pj;this.ba={};this.b={};this.g={};this.h={};this.a=null;var d,e;b.features instanceof md?(d=b.features,e=d.a):Array.isArray(b.features)&&
-(e=b.features);c||void 0!==d||(d=new md(e));void 0!==e&&Vj(this,e);void 0!==d&&Wj(this,d)}M(Uj,Ee);n=Uj.prototype;n.ub=function(b){var c=I(b).toString();if(Xj(this,c,b)){Yj(this,c,b);var d=b.M();d?(c=d.C(),this.P&&this.P.xa(c,b)):this.ba[c]=b;T(this,new Zj("addfeature",b))}this.w()};function Yj(b,c,d){b.h[c]=[R(d,"change",b.oc,b),R(d,"propertychange",b.oc,b)]}function Xj(b,c,d){var e=!0,f=d.Da();void 0!==f?f.toString()in b.b?e=!1:b.b[f.toString()]=d:b.g[c]=d;return e}n.vb=function(b){Vj(this,b);this.w()};
-function Vj(b,c){var d,e,f,g,h=[],k=[],l=[];e=0;for(f=c.length;e<f;e++)g=c[e],d=I(g).toString(),Xj(b,d,g)&&k.push(g);e=0;for(f=k.length;e<f;e++){g=k[e];d=I(g).toString();Yj(b,d,g);var m=g.M();m?(d=m.C(),h.push(d),l.push(g)):b.ba[d]=g}b.P&&b.P.load(h,l);e=0;for(f=k.length;e<f;e++)T(b,new Zj("addfeature",k[e]))}
-function Wj(b,c){var d=!1;R(b,"addfeature",function(b){d||(d=!0,c.push(b.feature),d=!1)});R(b,"removefeature",function(b){d||(d=!0,c.remove(b.feature),d=!1)});R(c,"add",function(b){d||(b=b.element,d=!0,this.ub(b),d=!1)},b);R(c,"remove",function(b){if(!d){b=b.element;d=!0;var c=I(b).toString();c in this.ba?delete this.ba[c]:this.P&&this.P.remove(b);this.Rb(b);this.w();d=!1}},b);b.a=c}
-n.clear=function(b){if(b){for(var c in this.h)this.h[c].forEach(P);this.a||(this.h={},this.b={},this.g={})}else if(this.P){b=this.Rb;Tj(Qj(this.P),b,this);for(var d in this.ba)this.Rb(this.ba[d])}this.a&&this.a.clear();this.P&&this.P.clear();this.s.clear();this.ba={};T(this,new Zj("clear"));this.w()};n.gd=function(b,c){if(this.P)return Tj(Qj(this.P),b,c);if(this.a)return od(this.a,b,c)};function ak(b,c,d,e){b.P?Sj(b.P,c,d,e):b.a&&od(b.a,d,e)}
-n.ee=function(){var b;this.a?b=this.a.a:this.P&&(b=Qj(this.P),Za(this.ba)||Ja(b,Xa(this.ba)));return b};n.C=function(){return this.P.C()};
-n.oc=function(b){b=b.target;var c=I(b).toString(),d=b.M();if(d)if(d=d.C(),c in this.ba)delete this.ba[c],this.P&&this.P.xa(d,b);else{if(this.P){var e=this.P,f=I(b);Qb(e.b[f].slice(0,4),d)||(e.remove(b),e.xa(d,b))}}else c in this.ba||(this.P&&this.P.remove(b),this.ba[c]=b);d=b.Da();void 0!==d?(d=d.toString(),c in this.g?(delete this.g[c],this.b[d]=b):this.b[d]!==b&&(bk(this,b),this.b[d]=b)):c in this.g||(bk(this,b),this.g[c]=b);this.w();T(this,new Zj("changefeature",b))};
-function ck(b,c,d,e){var f=b.s;c=b.G(c,d);var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];Sj(f,k,function(b){return Mb(b.extent,k)})||(b.o.call(b,k,d,e),f.xa(k,{extent:k.slice()}))}}n.Rb=function(b){var c=I(b).toString();this.h[c].forEach(P);delete this.h[c];var d=b.Da();void 0!==d?delete this.b[d.toString()]:delete this.g[c];T(this,new Zj("removefeature",b))};function bk(b,c){for(var d in b.b)if(b.b[d]===c){delete b.b[d];break}}function Zj(b,c){S.call(this,b);this.feature=c}M(Zj,S);function dk(b){$i.call(this,b);this.c=sf();this.b=null;this.j=Ib();this.h=yb()}M(dk,$i);
-dk.prototype.g=function(b,c,d){var e=b.pixelRatio,f=b.viewState,g=f.center,h=f.projection,k=f.rotation,l=b.size,m=Math.round(e*l[0]/2),p=Math.round(e*l[1]/2),q=e/f.resolution,r=this.a,u=r.W(),w=u.bb(h),f=bj(this,b,0);aj(this,"precompose",d,b,f);var l=d,r=mb(r,"render"),y,z,D,t;if(k||r){l=this.c;y=l.canvas;D=u.eb(e)/e;var v=d.canvas.width*D;z=d.canvas.height*D;t=Math.round(Math.sqrt(v*v+z*z));y.width!=t?y.width=y.height=t:l.clearRect(0,0,t,t);y=(t-v)/2/D;z=(t-z)/2/D;q*=D;m=Math.round(D*(m+y));p=Math.round(D*
-(p+z))}v=l.globalAlpha;l.globalAlpha=c.opacity;var B=u.ia(h),F=this.b,C;c=u.Fb(h)&&1==c.opacity;c||(F.reverse(),C=[]);for(var G=0,J=F.length;G<J;++G){var A=F[G],H=A.L,O=Ke(B,H,this.j),Q=H[0],L=Wb(Ke(B,Se(B,g,Q))),H=Math.round(Ub(O)*q),K=Math.round(Vb(O)*q),fa=Math.round((O[0]-L[0])*q/H)*H+m+Math.round((L[0]-g[0])*q),O=Math.round((L[1]-O[3])*q/K)*K+p+Math.round((g[1]-L[1])*q);if(!c){L=[fa,O,fa+H,O+K];l.save();for(var ra=0,$l=C.length;ra<$l;++ra){var Ya=C[ra];$b(L,Ya)&&(l.beginPath(),l.moveTo(L[0],
-L[1]),l.lineTo(L[0],L[3]),l.lineTo(L[2],L[3]),l.lineTo(L[2],L[1]),l.moveTo(Ya[0],Ya[1]),l.lineTo(Ya[2],Ya[1]),l.lineTo(Ya[2],Ya[3]),l.lineTo(Ya[0],Ya[3]),l.closePath(),l.clip())}C.push(L)}Q=Ye(u,Q,e,h);l.drawImage(A.S(),w,w,Q[0],Q[1],fa,O,H,K);c||l.restore()}r&&(e=y-m/D+m,h=z-p/D+p,g=Jg(this.h,t/2-e,t/2-h,q,-q,-k,-g[0]+e/q,-g[1]-h/q),aj(this,"render",l,b,g));(k||r)&&d.drawImage(l.canvas,-Math.round(y),-Math.round(z),t/D,t/D);l.globalAlpha=v;aj(this,"postcompose",d,b,f)};
-dk.prototype.i=function(b,c){function d(b){b=b.N();return 2==b||4==b||3==b&&!u}var e=b.pixelRatio,f=b.viewState,g=f.projection,h=this.a,k=h.W(),l=k.ia(g),m=Re(l,f.resolution),p=l.J(m),q=f.center;p==f.resolution?(q=Sg(q,p,b.size),f=Yb(q,p,f.rotation,b.size)):f=b.extent;void 0!==c.extent&&(f=Zb(f,c.extent));if(f[2]<f[0]||f[3]<f[1])return!1;p=Ne(l,f,p);q={};q[m]={};var r=this.l(k,g,q),u=ui(h),w=Ib(),y=new gd(0,0,0,0),z,D,t,v;for(t=p.a;t<=p.b;++t)for(v=p.f;v<=p.c;++v)z=Ug(k,m,t,v,e,g),!d(z)&&z.a&&(z=
-z.a),d(z)?q[m][z.L.toString()]=z:(D=Je(l,z.L,r,y,w),D||(z=Me(l,z.L,y,w))&&r(m+1,z));r=Object.keys(q).map(Number);r.sort(Ga);var w=[],B,y=0;for(t=r.length;y<t;++y)for(B in z=r[y],v=q[z],v)z=v[B],2==z.N()&&w.push(z);this.b=w;Rg(b.usedTiles,k,m,p);Tg(b,k,l,e,g,f,m,h.get("preload"));Og(b,k);Qg(b,k);return!0};function ek(b){$i.call(this,b);this.b=!1;this.v=-1;this.u=NaN;this.j=Ib();this.c=this.o=null;this.h=sf()}M(ek,$i);
-ek.prototype.g=function(b,c,d){var e=b.extent,f=b.pixelRatio,g=c.Wa?b.skippedFeatureUids:{},h=b.viewState,k=h.projection,h=h.rotation,l=k.C(),m=this.a.W(),p=bj(this,b,0);aj(this,"precompose",d,b,p);var q=this.c;if(q&&!q.c()){var r;mb(this.a,"render")?(this.h.canvas.width=d.canvas.width,this.h.canvas.height=d.canvas.height,r=this.h):r=d;var u=r.globalAlpha;r.globalAlpha=c.opacity;c=b.size[0]*f;var w=b.size[1]*f;yi(r,-h,c/2,w/2);q.f(r,f,p,h,g);if(m.j&&k.a&&!Mb(l,e)){for(var k=e[0],m=Ub(l),y=0;k<l[0];)--y,
-p=m*y,p=bj(this,b,p),q.f(r,f,p,h,g),k+=m;y=0;for(k=e[2];k>l[2];)++y,p=m*y,p=bj(this,b,p),q.f(r,f,p,h,g),k-=m;p=bj(this,b,0)}yi(r,h,c/2,w/2);r!=d&&(aj(this,"render",r,b,p),d.drawImage(r.canvas,0,0));r.globalAlpha=u}aj(this,"postcompose",d,b,p)};ek.prototype.Xa=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};ek.prototype.A=function(){Ng(this)};
-ek.prototype.i=function(b){function c(b){var c,e=b.c;e?c=e.call(b,m):(e=d.g)&&(c=e(b,m));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=yj(r,b,c[f],xj(m,p),this.A,this)||e;else e=yj(r,b,c,xj(m,p),this.A,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.W();Pg(b.attributions,e.i);Qg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var l=b.extent,k=b.viewState,f=k.projection,m=k.resolution,p=b.pixelRatio,g=d.f,q=d.a,h=d.get("renderOrder");
-void 0===h&&(h=wj);l=Kb(l,q*m);q=k.projection.C();e.j&&k.projection.a&&!Mb(q,b.extent)&&(b=Math.max(Ub(l)/2,Ub(q)),l[0]=q[0]-b,l[2]=q[2]+b);if(!this.b&&this.u==m&&this.v==g&&this.o==h&&Mb(this.j,l))return!0;this.c=null;this.b=!1;var r=new sj(.5*m/p,l,m,d.a);ck(e,l,m,f);if(h){var u=[];ak(e,l,function(b){u.push(b)},this);u.sort(h);u.forEach(c,this)}else ak(e,l,c,this);tj(r);this.u=m;this.v=g;this.o=h;this.j=l;this.c=r;return!0};function fk(b,c){var d=/\{z\}/g,e=/\{x\}/g,f=/\{y\}/g,g=/\{-y\}/g;return function(h){if(h)return b.replace(d,h[0].toString()).replace(e,h[1].toString()).replace(f,function(){return(-h[2]-1).toString()}).replace(g,function(){var b=c.a?c.a[h[0]]:null;return(b.c-b.f+1+h[2]).toString()})}}function gk(b,c){for(var d=b.length,e=Array(d),f=0;f<d;++f)e[f]=fk(b[f],c);return hk(e)}function hk(b){return 1===b.length?b[0]:function(c,d,e){if(c)return b[Da((c[1]<<c[0])+c[2],b.length)](c,d,e)}}function ik(){};function jk(b){We.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tilePixelRatio:b.tilePixelRatio,wrapX:b.wrapX});this.tileLoadFunction=b.tileLoadFunction;this.tileUrlFunction=this.g?this.g.bind(this):ik;this.urls=null;if(b.urls){var c=b.urls;this.urls=c;kk(this,this.g?this.g.bind(this):gk(c,this.tileGrid))}else b.url&&this.s(b.url);b.tileUrlFunction&&kk(this,b.tileUrlFunction)}
-M(jk,We);jk.prototype.D=function(b){b=b.target;switch(b.N()){case 1:T(this,new $e("tileloadstart",b));break;case 2:T(this,new $e("tileloadend",b));break;case 3:T(this,new $e("tileloaderror",b))}};function kk(b,c){b.a.clear();b.tileUrlFunction=c;b.w()}
-jk.prototype.s=function(b){var c=[],d=/\{(\d)-(\d)\}/.exec(b)||/\{([a-z])-([a-z])\}/.exec(b);if(d){var e=d[2].charCodeAt(0),f;for(f=d[1].charCodeAt(0);f<=e;++f)c.push(b.replace(d[0],String.fromCharCode(f)))}else c.push(b);b=this.urls=c;kk(this,this.g?this.g.bind(this):gk(b,this.tileGrid))};jk.prototype.Qc=function(b,c,d){b=this.cb(b,c,d);xe(this.a,b)&&this.a.get(b)};function lk(b,c){$g.call(this,0,c);this.c=sf();sf();this.a=this.c.canvas;this.a.style.width="100%";this.a.style.height="100%";this.a.className="ol-unselectable";ge(b,this.a,0);this.b=!0;this.g=yb()}M(lk,$g);lk.prototype.Bb=function(b){return b instanceof X?new dk(b):b instanceof Y?new ek(b):null};
-function mk(b,c,d){var e=b.h,f=b.c;if(mb(e,c)){var g=d.extent,h=d.pixelRatio,k=d.viewState.rotation,l=d.pixelRatio,m=d.viewState,p=m.resolution;b=Jg(b.g,b.a.width/2,b.a.height/2,l/p,-l/p,-m.rotation,-m.center[0],-m.center[1]);g=new Pi(f,h,g,b,k);T(e,new Gg(c,e,g,d,f,null))}}lk.prototype.U=function(){return"canvas"};
-lk.prototype.kb=function(b){if(b){var c=this.c,d=b.pixelRatio,e=Math.round(b.size[0]*d),d=Math.round(b.size[1]*d);this.a.width!=e||this.a.height!=d?(this.a.width=e,this.a.height=d):c.clearRect(0,0,e,d);var f=b.viewState.rotation;ah(b);mk(this,"precompose",b);var g=b.layerStatesArray;Ma(g);yi(c,f,e/2,d/2);var h=b.viewState.resolution,k,l,m,p;k=0;for(l=g.length;k<l;++k)p=g[k],m=p.layer,m=ch(this,m),Ig(p,h)&&"ready"==p.Tb&&m.i(b,p)&&m.g(b,p,c);yi(c,-f,e/2,d/2);mk(this,"postcompose",b);this.b||(pe(this.a,
-!0),this.b=!0);dh(this,b);b.postRenderFunctions.push(bh)}else this.b&&(pe(this.a,!1),this.b=!1)};function nk(b,c){Mg.call(this,b);this.target=c}M(nk,Mg);nk.prototype.yb=N;nk.prototype.Ac=N;function ok(b){var c=document.createElement("DIV");c.style.position="absolute";nk.call(this,b,c);this.c=!0;this.h=1;this.g=0;this.b={}}M(ok,nk);ok.prototype.yb=function(){fe(this.target);this.g=0};
-ok.prototype.Bc=function(b,c){if(!c.visible)return this.c&&(pe(this.target,!1),this.c=!1),!0;var d=b.pixelRatio,e=b.viewState,f=e.projection,g=this.a,h=g.W(),k=h.ia(f),l=h.bb(f),m=Re(k,e.resolution),p=k.J(m),q=e.center,r;p==e.resolution?(q=Sg(q,p,b.size),r=Yb(q,p,e.rotation,b.size)):r=b.extent;void 0!==c.extent&&(r=Zb(r,c.extent));var p=Ne(k,r,p),u={};u[m]={};var w=this.l(h,f,u),y=ui(g),z=Ib(),D=new gd(0,0,0,0),t,v,B,F;for(B=p.a;B<=p.b;++B)for(F=p.f;F<=p.c;++F)t=Ug(h,m,B,F,d,f),v=t.N(),v=2==v||4==
-v||3==v&&!y,!v&&t.a&&(t=t.a),v=t.N(),2==v?u[m][t.L.toString()]=t:4==v||3==v&&!y||(v=Je(k,t.L,w,D,z),v||(t=Me(k,t.L,D,z))&&w(m+1,t));var C;if(this.g!=h.f){for(C in this.b)y=this.b[+C],he(y.target);this.b={};this.g=h.f}z=Object.keys(u).map(Number);z.sort(Ga);var w={},G;B=0;for(F=z.length;B<F;++B){C=z[B];C in this.b?y=this.b[C]:(y=Se(k,q,C),y=new pk(k,y),w[C]=!0,this.b[C]=y);C=u[C];for(G in C){t=y;v=C[G];var J=l,A=v.L,H=A[0],O=A[1],Q=A[2],A=A.toString();if(!(A in t.b)){var H=sb(Qe(t.g,H),t.i),L=v.S(t),
-K=L.style;K.maxWidth="none";var fa=void 0,ra=void 0;0<J?(fa=document.createElement("DIV"),ra=fa.style,ra.overflow="hidden",ra.width=H[0]+"px",ra.height=H[1]+"px",K.position="absolute",K.left=-J+"px",K.top=-J+"px",K.width=H[0]+2*J+"px",K.height=H[1]+2*J+"px",fa.appendChild(L)):(K.width=H[0]+"px",K.height=H[1]+"px",fa=L,ra=K);ra.position="absolute";ra.left=(O-t.f[1])*H[0]+"px";ra.top=(t.f[2]-Q)*H[1]+"px";t.a||(t.a=document.createDocumentFragment());t.a.appendChild(fa);t.b[A]=v}}y.a&&(y.target.appendChild(y.a),
-y.a=null)}l=Object.keys(this.b).map(Number);l.sort(Ga);B=yb();G=0;for(z=l.length;G<z;++G)if(C=l[G],y=this.b[C],C in u)if(t=y.J(),F=y.fa(),Jg(B,b.size[0]/2,b.size[1]/2,t/e.resolution,t/e.resolution,e.rotation,(F[0]-q[0])/t,(q[1]-F[1])/t),y.setTransform(B),C in w){for(--C;0<=C;--C)if(C in this.b){F=this.b[C].target;F.parentNode&&F.parentNode.insertBefore(y.target,F.nextSibling);break}0>C&&ge(this.target,y.target,0)}else{if(!b.viewHints[0]&&!b.viewHints[1]){v=Le(y.g,r,y.f[0],D);C=[];t=F=void 0;for(t in y.b)F=
-y.b[t],J=F.L,hd(v,J[1],J[2])||C.push(F);J=v=void 0;v=0;for(J=C.length;v<J;++v)F=C[v],t=F.L.toString(),he(F.S(y)),delete y.b[t]}}else he(y.target),delete this.b[C];c.opacity!=this.h&&(this.h=this.target.style.opacity=c.opacity);c.visible&&!this.c&&(pe(this.target,!0),this.c=!0);Rg(b.usedTiles,h,m,p);Tg(b,h,k,d,f,r,m,g.get("preload"));Og(b,h);Qg(b,h);return!0};
-function pk(b,c){this.target=document.createElement("DIV");this.target.style.position="absolute";this.target.style.width="100%";this.target.style.height="100%";this.g=b;this.f=c;this.h=ac(Ke(b,c));this.l=b.J(c[0]);this.b={};this.a=null;this.c=Ab();this.i=[0,0]}pk.prototype.fa=function(){return this.h};pk.prototype.J=function(){return this.l};pk.prototype.setTransform=function(b){Kg(b,this.c)||(wf(this.target,b),Bb(this.c,b))};function qk(b){this.g=sf();var c=this.g.canvas;c.style.maxWidth="none";c.style.position="absolute";nk.call(this,b,c);this.b=!1;this.h=-1;this.o=NaN;this.i=Ib();this.c=this.j=null;this.v=yb();this.u=yb()}M(qk,nk);n=qk.prototype;n.yb=function(){var b=this.g.canvas;b.width=b.width;this.h=0};
-n.Ac=function(b,c){var d=b.viewState,e=d.center,f=d.rotation,g=d.resolution,d=b.pixelRatio,h=b.size[0],k=b.size[1],l=h*d,m=k*d,e=Jg(this.v,d*h/2,d*k/2,d/g,-d/g,-f,-e[0],-e[1]),g=this.g;g.canvas.width=l;g.canvas.height=m;h=Jg(this.u,0,0,1/d,1/d,0,-(l-h)/2*d,-(m-k)/2*d);wf(g.canvas,h);rk(this,"precompose",b,e);(h=this.c)&&!h.c()&&(g.globalAlpha=c.opacity,h.f(g,d,e,f,c.Wa?b.skippedFeatureUids:{}),rk(this,"render",b,e));rk(this,"postcompose",b,e)};
-function rk(b,c,d,e){var f=b.g;b=b.a;mb(b,c)&&(e=new Pi(f,d.pixelRatio,d.extent,e,d.viewState.rotation),T(b,new Gg(c,b,e,d,f,null)))}n.Xa=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};n.Cc=function(){Ng(this)};
-n.Bc=function(b){function c(b){var c,e=b.c;e?c=e.call(b,l):(e=d.g)&&(c=e(b,l));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=yj(p,b,c[f],xj(l,m),this.Cc,this)||e;else e=yj(p,b,c,xj(l,m),this.Cc,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.W();Pg(b.attributions,e.i);Qg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var g=b.extent,h=b.viewState,f=h.projection,l=h.resolution,m=b.pixelRatio;b=d.f;k=d.a;h=d.get("renderOrder");
-void 0===h&&(h=wj);g=Kb(g,k*l);if(!this.b&&this.o==l&&this.h==b&&this.j==h&&Mb(this.i,g))return!0;this.c=null;this.b=!1;var p=new sj(.5*l/m,g,l,d.a);ck(e,g,l,f);if(h){var q=[];ak(e,g,function(b){q.push(b)},this);q.sort(h);q.forEach(c,this)}else ak(e,g,c,this);tj(p);this.o=l;this.h=b;this.j=h;this.i=g;this.c=p;return!0};function sk(b,c){$g.call(this,0,c);this.c=sf();var d=this.c.canvas;d.style.position="absolute";d.style.width="100%";d.style.height="100%";d.className="ol-unselectable";ge(b,d,0);this.g=yb();this.a=document.createElement("DIV");this.a.className="ol-unselectable";d=this.a.style;d.position="absolute";d.width="100%";d.height="100%";R(this.a,"touchstart",kb);ge(b,this.a,0);this.b=!0}M(sk,$g);sk.prototype.K=function(){he(this.a);sk.Y.K.call(this)};
-sk.prototype.Bb=function(b){if(b instanceof X)b=new ok(b);else if(b instanceof Y)b=new qk(b);else return null;return b};function tk(b,c,d){var e=b.h;if(mb(e,c)){var f=d.extent,g=d.pixelRatio,h=d.viewState,k=h.rotation,l=b.c,m=l.canvas;Jg(b.g,m.width/2,m.height/2,g/h.resolution,-g/h.resolution,-h.rotation,-h.center[0],-h.center[1]);b=new Pi(l,g,f,b.g,k);T(e,new Gg(c,e,b,d,l,null))}}sk.prototype.U=function(){return"dom"};
-sk.prototype.kb=function(b){if(b){var c=this.h;if(mb(c,"precompose")||mb(c,"postcompose")){var c=this.c.canvas,d=b.pixelRatio;c.width=b.size[0]*d;c.height=b.size[1]*d}tk(this,"precompose",b);c=b.layerStatesArray;Ma(c);var d=b.viewState.resolution,e,f,g,h;e=0;for(f=c.length;e<f;++e)h=c[e],g=h.layer,g=ch(this,g),ge(this.a,g.target,e),Ig(h,d)&&"ready"==h.Tb?g.Bc(b,h)&&g.Ac(b,h):g.yb();var c=b.layerStates,k;for(k in this.f)k in c||(g=this.f[k],he(g.target));this.b||(pe(this.a,!0),this.b=!0);ah(b);dh(this,
-b);b.postRenderFunctions.push(bh);tk(this,"postcompose",b)}else this.b&&(pe(this.a,!1),this.b=!1)};function uk(b){this.a=b}function vk(b){this.a=b}M(vk,uk);vk.prototype.U=function(){return 35632};function wk(b){this.a=b}M(wk,uk);wk.prototype.U=function(){return 35633};function xk(){this.a="precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}M(xk,vk);aa(xk);
-function yk(){this.a="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"}M(yk,wk);aa(yk);
-function zk(b,c){this.i=b.getUniformLocation(c,"j");this.j=b.getUniformLocation(c,"i");this.h=b.getUniformLocation(c,"k");this.l=b.getUniformLocation(c,"h");this.a=b.getAttribLocation(c,"e");this.b=b.getAttribLocation(c,"f");this.c=b.getAttribLocation(c,"c");this.f=b.getAttribLocation(c,"g");this.g=b.getAttribLocation(c,"d")};function Ak(b){this.a=void 0!==b?b:[]};function Bk(b,c){this.B=b;this.a=c;this.b={};this.g={};this.c={};this.i=this.j=this.h=this.l=null;(this.f=0<=oa.indexOf("OES_element_index_uint"))&&c.getExtension("OES_element_index_uint");R(this.B,"webglcontextlost",this.o,this);R(this.B,"webglcontextrestored",this.s,this)}M(Bk,hb);
-function Ck(b,c,d){var e=b.a,f=d.a,g=String(I(d));if(g in b.b)e.bindBuffer(c,b.b[g].buffer);else{var h=e.createBuffer();e.bindBuffer(c,h);var k;34962==c?k=new Float32Array(f):34963==c&&(k=b.f?new Uint32Array(f):new Uint16Array(f));e.bufferData(c,k,35044);b.b[g]={Ne:d,buffer:h}}}function Dk(b,c){var d=b.a,e=String(I(c)),f=b.b[e];d.isContextLost()||d.deleteBuffer(f.buffer);delete b.b[e]}
-Bk.prototype.K=function(){gb(this.B);var b=this.a;if(!b.isContextLost()){for(var c in this.b)b.deleteBuffer(this.b[c].buffer);for(c in this.c)b.deleteProgram(this.c[c]);for(c in this.g)b.deleteShader(this.g[c]);b.deleteFramebuffer(this.h);b.deleteRenderbuffer(this.i);b.deleteTexture(this.j)}};
-function Ek(b){if(!b.h){var c=b.a,d=c.createFramebuffer();c.bindFramebuffer(c.FRAMEBUFFER,d);var e=Fk(c,1,1),f=c.createRenderbuffer();c.bindRenderbuffer(c.RENDERBUFFER,f);c.renderbufferStorage(c.RENDERBUFFER,c.DEPTH_COMPONENT16,1,1);c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,e,0);c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT,c.RENDERBUFFER,f);c.bindTexture(c.TEXTURE_2D,null);c.bindRenderbuffer(c.RENDERBUFFER,null);c.bindFramebuffer(c.FRAMEBUFFER,null);b.h=d;
-b.j=e;b.i=f}return b.h}function Gk(b,c){var d=String(I(c));if(d in b.g)return b.g[d];var e=b.a,f=e.createShader(c.U());e.shaderSource(f,c.a);e.compileShader(f);return b.g[d]=f}function Hk(b,c,d){var e=I(c)+"/"+I(d);if(e in b.c)return b.c[e];var f=b.a,g=f.createProgram();f.attachShader(g,Gk(b,c));f.attachShader(g,Gk(b,d));f.linkProgram(g);return b.c[e]=g}Bk.prototype.o=function(){Wa(this.b);Wa(this.g);Wa(this.c);this.i=this.j=this.h=this.l=null};Bk.prototype.s=function(){};
-function Ik(b,c){if(c==b.l)return!1;b.a.useProgram(c);b.l=c;return!0}function Jk(b,c,d){var e=b.createTexture();b.bindTexture(b.TEXTURE_2D,e);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR);void 0!==c&&b.texParameteri(3553,10242,c);void 0!==d&&b.texParameteri(3553,10243,d);return e}function Fk(b,c,d){var e=Jk(b,void 0,void 0);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,c,d,0,b.RGBA,b.UNSIGNED_BYTE,null);return e};function Kk(b,c){this.H=this.u=void 0;this.j=Xb(c);this.s=[];this.h=[];this.A=void 0;this.g=[];this.c=[];this.D=this.I=void 0;this.b=[];this.v=this.i=null;this.V=void 0;this.ka=Ab();this.ua=Ab();this.R=this.G=void 0;this.la=Ab();this.ha=this.Z=this.T=void 0;this.da=[];this.l=[];this.a=[];this.o=null;this.f=[];this.B=[];this.aa=void 0}M(Kk,Fg);
-function Lk(b,c){var d=b.o,e=b.i,f=b.da,g=b.l,h=c.a;return function(){if(!h.isContextLost()){var b,l;b=0;for(l=f.length;b<l;++b)h.deleteTexture(f[b]);b=0;for(l=g.length;b<l;++b)h.deleteTexture(g[b])}Dk(c,d);Dk(c,e)}}
-function Mk(b,c,d,e){var f=b.u,g=b.H,h=b.A,k=b.I,l=b.D,m=b.V,p=b.G,q=b.R,r=b.T?1:0,u=b.Z,w=b.ha,y=b.aa,z=Math.cos(u),u=Math.sin(u),D=b.b.length,t=b.a.length,v,B,F,C,G,J;for(v=0;v<d;v+=e)G=c[v]-b.j[0],J=c[v+1]-b.j[1],B=t/8,F=-w*f,C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=F*z-C*u,b.a[t++]=F*u+C*z,b.a[t++]=p/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,F=w*(y-f),C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=F*z-C*u,b.a[t++]=F*u+C*z,b.a[t++]=(p+y)/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,F=w*(y-f),C=w*g,b.a[t++]=
-G,b.a[t++]=J,b.a[t++]=F*z-C*u,b.a[t++]=F*u+C*z,b.a[t++]=(p+y)/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,F=-w*f,C=w*g,b.a[t++]=G,b.a[t++]=J,b.a[t++]=F*z-C*u,b.a[t++]=F*u+C*z,b.a[t++]=p/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,b.b[D++]=B,b.b[D++]=B+1,b.b[D++]=B+2,b.b[D++]=B,b.b[D++]=B+2,b.b[D++]=B+3}Kk.prototype.Qa=function(b,c){this.f.push(this.b.length);this.B.push(c);var d=b.a;Mk(this,d,d.length,b.b)};Kk.prototype.Ra=function(b,c){this.f.push(this.b.length);this.B.push(c);var d=b.a;Mk(this,d,d.length,b.b)};
-function Nk(b,c){var d=c.a;b.s.push(b.b.length);b.h.push(b.b.length);b.o=new Ak(b.a);Ck(c,34962,b.o);b.i=new Ak(b.b);Ck(c,34963,b.i);var e={};Ok(b.da,b.g,e,d);Ok(b.l,b.c,e,d);b.u=void 0;b.H=void 0;b.A=void 0;b.g=null;b.c=null;b.I=void 0;b.D=void 0;b.b=null;b.V=void 0;b.G=void 0;b.R=void 0;b.T=void 0;b.Z=void 0;b.ha=void 0;b.a=null;b.aa=void 0}
-function Ok(b,c,d,e){var f,g,h,k,l=c.length;for(k=0;k<l;++k){g=c[k];h=I(g).toString();if(h in d)f=d[h];else{f=e;var m=Jk(f,33071,33071);f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,g);f=m;d[h]=f}b[k]=f}}
-function Pk(b,c,d,e,f,g,h,k,l,m,p){var q=c.a;Ck(c,34962,b.o);Ck(c,34963,b.i);var r=xk.qa(),u=yk.qa(),u=Hk(c,r,u);b.v?r=b.v:(r=new zk(q,u),b.v=r);Ik(c,u);q.enableVertexAttribArray(r.c);q.vertexAttribPointer(r.c,2,5126,!1,32,0);q.enableVertexAttribArray(r.a);q.vertexAttribPointer(r.a,2,5126,!1,32,8);q.enableVertexAttribArray(r.g);q.vertexAttribPointer(r.g,2,5126,!1,32,16);q.enableVertexAttribArray(r.b);q.vertexAttribPointer(r.b,1,5126,!1,32,24);q.enableVertexAttribArray(r.f);q.vertexAttribPointer(r.f,
-1,5126,!1,32,28);u=b.la;Jg(u,0,0,2/(e*g[0]),2/(e*g[1]),-f,-(d[0]-b.j[0]),-(d[1]-b.j[1]));d=b.ua;e=2/g[0];g=2/g[1];Cb(d);d[0]=e;d[5]=g;d[10]=1;d[15]=1;g=b.ka;Cb(g);0!==f&&Gb(g,-f);q.uniformMatrix4fv(r.l,!1,u);q.uniformMatrix4fv(r.j,!1,d);q.uniformMatrix4fv(r.i,!1,g);q.uniform1f(r.h,h);var w;if(void 0===l)Qk(b,q,c,k,b.da,b.s);else{if(m)a:{f=c.f?5125:5123;c=c.f?4:2;g=b.f.length-1;for(h=b.l.length-1;0<=h;--h)for(q.bindTexture(3553,b.l[h]),m=0<h?b.h[h-1]:0,u=b.h[h];0<=g&&b.f[g]>=m;){w=b.f[g];d=b.B[g];
-e=I(d).toString();if(void 0===k[e]&&d.M()&&(void 0===p||$b(p,d.M().C()))&&(q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),q.drawElements(4,u-w,f,w*c),u=l(d))){b=u;break a}u=w;g--}b=void 0}else q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),Qk(b,q,c,k,b.l,b.h),b=(b=l(null))?b:void 0;w=b}q.disableVertexAttribArray(r.c);q.disableVertexAttribArray(r.a);q.disableVertexAttribArray(r.g);q.disableVertexAttribArray(r.b);q.disableVertexAttribArray(r.f);return w}
-function Qk(b,c,d,e,f,g){var h=d.f?5125:5123;d=d.f?4:2;if(Za(e)){var k;b=0;e=f.length;for(k=0;b<e;++b){c.bindTexture(3553,f[b]);var l=g[b];c.drawElements(4,l-k,h,k*d);k=l}}else{k=0;var m,l=0;for(m=f.length;l<m;++l){c.bindTexture(3553,f[l]);for(var p=0<l?g[l-1]:0,q=g[l],r=p;k<b.f.length&&b.f[k]<=q;){var u=I(b.B[k]).toString();void 0!==e[u]?(r!==p&&c.drawElements(4,p-r,h,r*d),p=r=k===b.f.length-1?q:b.f[k+1]):p=k===b.f.length-1?q:b.f[k+1];k++}r!==p&&c.drawElements(4,p-r,h,r*d)}}}
-Kk.prototype.Aa=function(b){var c=b.Sa(),d=b.S(1),e=b.Db(),f=b.jb(1),g=b.B,h=b.fa(),k=b.o,l=b.s,m=b.ya();b=b.u;var p;0===this.g.length?this.g.push(d):(p=this.g[this.g.length-1],I(p)!=I(d)&&(this.s.push(this.b.length),this.g.push(d)));0===this.c.length?this.c.push(f):(p=this.c[this.c.length-1],I(p)!=I(f)&&(this.h.push(this.b.length),this.c.push(f)));this.u=c[0];this.H=c[1];this.A=m[1];this.I=e[1];this.D=e[0];this.V=g;this.G=h[0];this.R=h[1];this.Z=l;this.T=k;this.ha=b;this.aa=m[0]};
-function Rk(b,c,d){this.l=c;this.i=b;this.h=d;this.b={}}function Sk(b,c){var d=[],e;for(e in b.b)d.push(Lk(b.b[e],c));return function(){for(var b=d.length,c,e=0;e<b;e++)c=d[e].apply(this,arguments);return c}}function Tk(b,c){for(var d in b.b)Nk(b.b[d],c)}Rk.prototype.a=function(b,c){var d=this.b[c];void 0===d&&(d=new Uk[c](this.i,this.l),this.b[c]=d);return d};Rk.prototype.c=function(){return Za(this.b)};
-Rk.prototype.f=function(b,c,d,e,f,g,h,k){var l,m;g=0;for(l=cj.length;g<l;++g)m=this.b[cj[g]],void 0!==m&&Pk(m,b,c,d,e,f,h,k,void 0,!1)};function Vk(b,c,d,e,f,g,h,k,l,m){var p=Wk,q,r;for(q=cj.length-1;0<=q;--q)if(r=b.b[cj[q]],void 0!==r&&(r=Pk(r,c,d,e,f,p,g,h,k,l,m)))return r}
-Rk.prototype.g=function(b,c,d,e,f,g,h,k,l,m){var p=c.a;p.bindFramebuffer(p.FRAMEBUFFER,Ek(c));var q;void 0!==this.h&&(q=Kb(Pb(b),e*this.h));return Vk(this,c,b,e,f,k,l,function(b){var c=new Uint8Array(4);p.readPixels(0,0,1,1,p.RGBA,p.UNSIGNED_BYTE,c);if(0<c[3]&&(b=m(b)))return b},!0,q)};function Xk(b,c,d,e,f,g,h){var k=d.a;k.bindFramebuffer(k.FRAMEBUFFER,Ek(d));return void 0!==Vk(b,d,c,e,f,g,h,function(){var b=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,b);return 0<b[3]},!1)}
-var Uk={Image:Kk},Wk=[1,1];function Yk(b,c,d,e,f,g){this.a=b;this.f=c;this.c=g;this.l=f;this.h=e;this.g=d;this.b=null}M(Yk,Fg);Yk.prototype.Ra=function(b,c){var d=this.a,e=(new Rk(1,this.c)).a(0,"Image");e.Aa(this.b);e.Ra(b,c);Nk(e,d);Pk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Lk(e,d)()};Yk.prototype.Qa=function(b,c){var d=this.a,e=(new Rk(1,this.c)).a(0,"Image");e.Aa(this.b);e.Qa(b,c);Nk(e,d);Pk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Lk(e,d)()};Yk.prototype.Aa=function(b){this.b=b};function Zk(){this.a="precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"}M(Zk,vk);aa(Zk);function $k(){this.a="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}M($k,wk);aa($k);
-function al(b,c){this.f=b.getUniformLocation(c,"f");this.c=b.getUniformLocation(c,"e");this.h=b.getUniformLocation(c,"d");this.g=b.getUniformLocation(c,"g");this.a=b.getAttribLocation(c,"b");this.b=b.getAttribLocation(c,"c")};function bl(b,c){Mg.call(this,c);this.c=b;this.G=new Ak([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.ta=null;this.j=void 0;this.D=yb();this.R=Ab();this.o=null}M(bl,Mg);
-function cl(b,c,d){var e=b.c.c;if(void 0===b.j||b.j!=d){c.postRenderFunctions.push(na(function(b,c,d){b.isContextLost()||(b.deleteFramebuffer(c),b.deleteTexture(d))},e,b.i,b.ta));c=Fk(e,d,d);var f=e.createFramebuffer();e.bindFramebuffer(36160,f);e.framebufferTexture2D(36160,36064,3553,c,0);b.ta=c;b.i=f;b.j=d}else e.bindFramebuffer(36160,b.i)}
-bl.prototype.Dc=function(b,c,d){dl(this,"precompose",d,b);Ck(d,34962,this.G);var e=d.a,f=Zk.qa(),g=$k.qa(),f=Hk(d,f,g);this.o?g=this.o:this.o=g=new al(e,f);Ik(d,f)&&(e.enableVertexAttribArray(g.a),e.vertexAttribPointer(g.a,2,5126,!1,16,0),e.enableVertexAttribArray(g.b),e.vertexAttribPointer(g.b,2,5126,!1,16,8),e.uniform1i(g.g,0));e.uniformMatrix4fv(g.h,!1,this.D);e.uniformMatrix4fv(g.c,!1,this.R);e.uniform1f(g.f,c.opacity);e.bindTexture(3553,this.ta);e.drawArrays(5,0,4);dl(this,"postcompose",d,b)};
-function dl(b,c,d,e){b=b.a;if(mb(b,c)){var f=e.viewState;T(b,new Gg(c,b,new Yk(d,f.center,f.resolution,f.rotation,e.size,e.extent),e,null,d))}}bl.prototype.s=function(){this.i=this.ta=null;this.j=void 0};function el(){this.a="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}M(el,vk);aa(el);function fl(){this.a="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"}M(fl,wk);aa(fl);function gl(b,c){this.f=b.getUniformLocation(c,"e");this.c=b.getUniformLocation(c,"d");this.a=b.getAttribLocation(c,"b");this.b=b.getAttribLocation(c,"c")};function hl(b,c){bl.call(this,b,c);this.A=el.qa();this.T=fl.qa();this.b=null;this.v=new Ak([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.u=this.g=null;this.h=-1;this.I=[0,0]}M(hl,bl);hl.prototype.K=function(){Dk(this.c.g,this.v);hl.Y.K.call(this)};hl.prototype.l=function(b,c,d){var e=this.c;return function(f,g){return Xe(b,c,f,g,function(b){var c=xe(e.b,b.getKey());c&&(d[f]||(d[f]={}),d[f][b.L.toString()]=b);return c})}};hl.prototype.s=function(){hl.Y.s.call(this);this.b=null};
-hl.prototype.Ec=function(b,c,d){var e=this.c,f=d.a,g=b.viewState,h=g.projection,k=this.a,l=k.W(),m=l.ia(h),p=Re(m,g.resolution),q=m.J(p),r=Ye(l,p,b.pixelRatio,h),u=r[0]/sb(Qe(m,p),this.I)[0],w=q/u,y=l.bb(h),z=g.center,D;q==g.resolution?(z=Sg(z,q,b.size),D=Yb(z,q,g.rotation,b.size)):D=b.extent;q=Ne(m,D,q);if(this.g&&id(this.g,q)&&this.h==l.f)w=this.u;else{var t=[q.b-q.a+1,q.c-q.f+1],v=Math.pow(2,Math.ceil(Math.log(Math.max(t[0]*r[0],t[1]*r[1]))/Math.LN2)),t=w*v,B=m.fa(p),F=B[0]+q.a*r[0]*w,w=B[1]+q.f*
-r[1]*w,w=[F,w,F+t,w+t];cl(this,b,v);f.viewport(0,0,v,v);f.clearColor(0,0,0,0);f.clear(16384);f.disable(3042);v=Hk(d,this.A,this.T);Ik(d,v);this.b||(this.b=new gl(f,v));Ck(d,34962,this.v);f.enableVertexAttribArray(this.b.a);f.vertexAttribPointer(this.b.a,2,5126,!1,16,0);f.enableVertexAttribArray(this.b.b);f.vertexAttribPointer(this.b.b,2,5126,!1,16,8);f.uniform1i(this.b.f,0);d={};d[p]={};var C=this.l(l,h,d),G=ui(k),v=!0,F=Ib(),J=new gd(0,0,0,0),A,H,O;for(H=q.a;H<=q.b;++H)for(O=q.f;O<=q.c;++O){B=Ug(l,
-p,H,O,u,h);if(void 0!==c.extent&&(A=Ke(m,B.L,F),!$b(A,c.extent)))continue;A=B.N();A=2==A||4==A||3==A&&!G;!A&&B.a&&(B=B.a);A=B.N();if(2==A){if(xe(e.b,B.getKey())){d[p][B.L.toString()]=B;continue}}else if(4==A||3==A&&!G)continue;v=!1;A=Je(m,B.L,C,J,F);A||(B=Me(m,B.L,J,F))&&C(p+1,B)}c=Object.keys(d).map(Number);c.sort(Ga);for(var C=new Float32Array(4),Q,L,K,G=0,J=c.length;G<J;++G)for(Q in L=d[c[G]],L)B=L[Q],A=Ke(m,B.L,F),H=2*(A[2]-A[0])/t,O=2*(A[3]-A[1])/t,K=2*(A[0]-w[0])/t-1,A=2*(A[1]-w[1])/t-1,xb(C,
-H,O,K,A),f.uniform4fv(this.b.c,C),il(e,B,r,y*u),f.drawArrays(5,0,4);v?(this.g=q,this.u=w,this.h=l.f):(this.u=this.g=null,this.h=-1,b.animate=!0)}Rg(b.usedTiles,l,p,q);var fa=e.i;Tg(b,l,m,u,h,D,p,k.get("preload"),function(b){var c;(c=2!=b.N()||xe(e.b,b.getKey()))||(c=b.getKey()in fa.f);c||fa.c([b,Pe(m,b.L),m.J(b.L[0]),r,y*u])},this);Og(b,l);Qg(b,l);f=this.D;Cb(f);Eb(f,(z[0]-w[0])/(w[2]-w[0]),(z[1]-w[1])/(w[3]-w[1]));0!==g.rotation&&Gb(f,g.rotation);Fb(f,b.size[0]*g.resolution/(w[2]-w[0]),b.size[1]*
-g.resolution/(w[3]-w[1]));Eb(f,-.5,-.5);return!0};function jl(b,c){bl.call(this,b,c);this.h=!1;this.I=-1;this.A=NaN;this.u=Ib();this.g=this.b=this.v=null}M(jl,bl);n=jl.prototype;n.Dc=function(b,c,d){this.g=c;var e=b.viewState,f=this.b;f&&!f.c()&&f.f(d,e.center,e.resolution,e.rotation,b.size,b.pixelRatio,c.opacity,c.Wa?b.skippedFeatureUids:{})};n.K=function(){var b=this.b;b&&(Sk(b,this.c.g)(),this.b=null);jl.Y.K.call(this)};
-n.Xa=function(b,c,d,e){if(this.b&&this.g){var f=c.viewState,g=this.a,h={};return this.b.g(b,this.c.g,f.center,f.resolution,f.rotation,c.size,c.pixelRatio,this.g.opacity,{},function(b){var c=I(b).toString();if(!(c in h))return h[c]=!0,d.call(e,b,g)})}};n.yc=function(b,c){if(this.b&&this.g){var d=c.viewState;return Xk(this.b,b,this.c.g,d.resolution,d.rotation,this.g.opacity,c.skippedFeatureUids)}return!1};n.Fc=function(){Ng(this)};
-n.Ec=function(b,c,d){function e(b){var c,d=b.c;d?c=d.call(b,m):(d=f.g)&&(c=d(b,m));if(c){if(c){d=!1;if(Array.isArray(c))for(var e=0,g=c.length;e<g;++e)d=yj(r,b,c[e],xj(m,p),this.Fc,this)||d;else d=yj(r,b,c,xj(m,p),this.Fc,this)||d;b=d}else b=!1;this.h=this.h||b}}var f=this.a;c=f.W();Pg(b.attributions,c.i);Qg(b,c);var g=b.viewHints[0],h=b.viewHints[1],k=f.i,l=f.j;if(!this.h&&!k&&g||!l&&h)return!0;var h=b.extent,k=b.viewState,g=k.projection,m=k.resolution,p=b.pixelRatio,k=f.f,q=f.a,l=f.get("renderOrder");
-void 0===l&&(l=wj);h=Kb(h,q*m);if(!this.h&&this.A==m&&this.I==k&&this.v==l&&Mb(this.u,h))return!0;this.b&&b.postRenderFunctions.push(Sk(this.b,d));this.h=!1;var r=new Rk(.5*m/p,h,f.a);ck(c,h,m,g);if(l){var u=[];ak(c,h,function(b){u.push(b)},this);u.sort(l);u.forEach(e,this)}else ak(c,h,e,this);Tk(r,d);this.A=m;this.I=k;this.v=l;this.u=h;this.b=r;return!0};function kl(b,c){$g.call(this,0,c);this.a=document.createElement("CANVAS");this.a.style.width="100%";this.a.style.height="100%";this.a.className="ol-unselectable";ge(b,this.a,0);this.s=this.u=0;this.H=sf();this.j=!0;this.c=yf(this.a,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.g=new Bk(this.a,this.c);R(this.a,"webglcontextlost",this.ce,this);R(this.a,"webglcontextrestored",this.de,this);this.b=new we;this.o=null;this.i=new eh(function(b){var c=
-b[1];b=b[2];var f=c[0]-this.o[0],c=c[1]-this.o[1];return 65536*Math.log(b)+Math.sqrt(f*f+c*c)/b}.bind(this),function(b){return b[0].getKey()});this.v=function(){if(0!==this.i.a.length){ih(this.i);var b=fh(this.i);il(this,b[0],b[3],b[4])}return!1}.bind(this);this.l=0;ll(this)}M(kl,$g);
-function il(b,c,d,e){var f=b.c,g=c.getKey();if(xe(b.b,g))b=b.b.get(g),f.bindTexture(3553,b.ta),9729!=b.sc&&(f.texParameteri(3553,10240,9729),b.sc=9729),9729!=b.tc&&(f.texParameteri(3553,10240,9729),b.tc=9729);else{var h=f.createTexture();f.bindTexture(3553,h);if(0<e){var k=b.H.canvas,l=b.H;b.u!==d[0]||b.s!==d[1]?(k.width=d[0],k.height=d[1],b.u=d[0],b.s=d[1]):l.clearRect(0,0,d[0],d[1]);l.drawImage(c.S(),e,e,d[0],d[1],0,0,d[0],d[1]);f.texImage2D(3553,0,6408,6408,5121,k)}else f.texImage2D(3553,0,6408,
-6408,5121,c.S());f.texParameteri(3553,10240,9729);f.texParameteri(3553,10241,9729);f.texParameteri(3553,10242,33071);f.texParameteri(3553,10243,33071);b.b.set(g,{ta:h,sc:9729,tc:9729})}}n=kl.prototype;n.Bb=function(b){return b instanceof X?new hl(this,b):b instanceof Y?new jl(this,b):null};function ml(b,c,d){var e=b.h;if(mb(e,c)){b=b.g;var f=d.viewState;T(e,new Gg(c,e,new Yk(b,f.center,f.resolution,f.rotation,d.size,d.extent),d,null,b))}}
-n.K=function(){var b=this.c;b.isContextLost()||ye(this.b,function(c){c&&b.deleteTexture(c.ta)});ib(this.g);kl.Y.K.call(this)};n.ed=function(b,c){for(var d=this.c,e;1024<this.b.f-this.l;){if(e=this.b.a.Ba)d.deleteTexture(e.ta);else if(+this.b.a.Kb==c.index)break;else--this.l;this.b.pop()}};n.U=function(){return"webgl"};n.ce=function(b){b.preventDefault();this.b.clear();this.l=0;b=this.f;for(var c in b)b[c].s()};n.de=function(){ll(this);this.h.render()};
-function ll(b){b=b.c;b.activeTexture(33984);b.blendFuncSeparate(770,771,1,771);b.disable(2884);b.disable(2929);b.disable(3089);b.disable(2960)}
-n.kb=function(b){var c=this.g,d=this.c;if(d.isContextLost())return!1;if(!b)return this.j&&(pe(this.a,!1),this.j=!1),!1;this.o=b.focus;this.b.set((-b.index).toString(),null);++this.l;ml(this,"precompose",b);var e=[],f=b.layerStatesArray;Ma(f);var g=b.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],Ig(m,g)&&"ready"==m.Tb&&(l=ch(this,m.layer),l.Ec(b,m,c)&&e.push(m));f=b.size[0]*b.pixelRatio;g=b.size[1]*b.pixelRatio;if(this.a.width!=f||this.a.height!=g)this.a.width=f,this.a.height=g;d.bindFramebuffer(36160,
-null);d.clearColor(0,0,0,0);d.clear(16384);d.enable(3042);d.viewport(0,0,this.a.width,this.a.height);h=0;for(k=e.length;h<k;++h)m=e[h],l=ch(this,m.layer),l.Dc(b,m,c);this.j||(pe(this.a,!0),this.j=!0);ah(b);1024<this.b.f-this.l&&b.postRenderFunctions.push(this.ed.bind(this));0!==this.i.a.length&&(b.postRenderFunctions.push(this.v),b.animate=!0);ml(this,"postcompose",b);dh(this,b);b.postRenderFunctions.push(bh)};
-n.Qb=function(b,c,d,e,f,g){var h;if(this.c.isContextLost())return!1;var k=c.viewState,l=c.layerStatesArray,m;for(m=l.length-1;0<=m;--m){h=l[m];var p=h.layer;if(Ig(h,k.resolution)&&f.call(g,p)&&(h=ch(this,p).Xa(b,c,d,e)))return h}};n.zc=function(b,c,d,e){var f=!1;if(this.c.isContextLost())return!1;var g=c.viewState,h=c.layerStatesArray,k;for(k=h.length-1;0<=k;--k){var l=h[k],m=l.layer;if(Ig(l,g.resolution)&&d.call(e,m)&&(f=ch(this,m).yc(b,c)))return!0}return f};var nl=["canvas","webgl","dom"];
-function Z(b){U.call(this);var c=pl(b);this.Ca=void 0!==b.loadTilesWhileAnimating?b.loadTilesWhileAnimating:!1;this.ob=void 0!==b.loadTilesWhileInteracting?b.loadTilesWhileInteracting:!1;this.qb=void 0!==b.pixelRatio?b.pixelRatio:Ef;this.pb=c.logos;this.T=function(){this.g=void 0;this.re.call(this,Date.now())}.bind(this);this.va=yb();this.rb=yb();this.wa=0;this.b=null;this.ka=Ib();this.u=this.G=null;this.a=document.createElement("DIV");this.a.className="ol-viewport"+(Hf?" ol-touch":"");this.a.style.position=
-"relative";this.a.style.overflow="hidden";this.a.style.width="100%";this.a.style.height="100%";this.a.style.msTouchAction="none";this.a.style.touchAction="none";this.o=document.createElement("DIV");this.o.className="ol-overlaycontainer";this.a.appendChild(this.o);this.j=document.createElement("DIV");this.j.className="ol-overlaycontainer-stopevent";b=["click","dblclick","mousedown","touchstart","mspointerdown",zg,"mousewheel","wheel"];for(var d=0,e=b.length;d<e;++d)R(this.j,b[d],jb);this.a.appendChild(this.j);
-this.aa=new rg(this);for(var f in Cg)R(this.aa,Cg[f],this.pc,this);this.Z=c.keyboardEventTarget;this.i=null;R(this.a,"wheel",this.Ga,this);R(this.a,"mousewheel",this.Ga,this);this.s=c.controls;this.h=c.interactions;this.v=c.overlays;this.Nc={};this.D=new c.te(this.a,this);this.R=null;this.A=[];this.da=[];this.la=new jh(this.jd.bind(this),this.Ed.bind(this));this.sb={};R(this,qb("layergroup"),this.od,this);R(this,qb("view"),this.Fd,this);R(this,qb("size"),this.Bd,this);R(this,qb("target"),this.Dd,
-this);this.l(c.values);od(this.s,function(b){b.setMap(this)},this);R(this.s,"add",function(b){b.element.setMap(this)},this);R(this.s,"remove",function(b){b.element.setMap(null)},this);od(this.h,function(b){b.setMap(this)},this);R(this.h,"add",function(b){b.element.setMap(this)},this);R(this.h,"remove",function(b){b.element.setMap(null)},this);od(this.v,this.ac,this);R(this.v,"add",function(b){this.ac(b.element)},this);R(this.v,"remove",function(b){var c=b.element.Da();void 0!==c&&delete this.Nc[c.toString()];
-b.element.setMap(null)},this)}M(Z,U);n=Z.prototype;n.$c=function(b){this.s.push(b)};n.ad=function(b){this.h.push(b)};n.bd=function(b){ql(this).get("layers").push(b)};n.cd=function(b){this.v.push(b)};n.ac=function(b){var c=b.Da();void 0!==c&&(this.Nc[c.toString()]=b);b.setMap(this)};n.ea=function(b){this.render();Array.prototype.push.apply(this.A,arguments)};
-n.K=function(){ib(this.aa);ib(this.D);fb(this.a,"wheel",this.Ga,this);fb(this.a,"mousewheel",this.Ga,this);void 0!==this.c&&(x.removeEventListener("resize",this.c,!1),this.c=void 0);this.g&&(x.cancelAnimationFrame(this.g),this.g=void 0);this.set("target",null);Z.Y.K.call(this)};n.hd=function(b,c,d,e,f){if(this.b)return b=this.pa(b),this.D.Qb(b,this.b,c,void 0!==d?d:null,void 0!==e?e:bc,void 0!==f?f:null)};
-n.Hd=function(b,c,d){if(!this.b)return!1;b=this.pa(b);return this.D.zc(b,this.b,void 0!==c?c:bc,void 0!==d?d:null)};n.nc=function(b){var c=this.a.getBoundingClientRect();b=b.changedTouches?b.changedTouches[0]:b;return[b.clientX-c.left,b.clientY-c.top]};n.Nb=function(){return this.get("target")};n.Fa=function(){var b=this.Nb();return void 0!==b?$d(b):null};n.pa=function(b){var c=this.b;return c?(b=b.slice(),Lg(c.pixelToCoordinateMatrix,b,b)):null};function ql(b){return b.get("layergroup")}
-function Fh(b,c){var d=b.b;if(d){var e=c.slice(0,2);return Lg(d.coordinateToPixelMatrix,e,e)}return null}n.Ha=function(){return this.get("size")};n.O=function(){return this.get("view")};n.jd=function(b,c,d,e){var f=this.b;if(!(f&&c in f.wantedTiles&&f.wantedTiles[c][b.L.toString()]))return Infinity;b=d[0]-f.focus[0];d=d[1]-f.focus[1];return 65536*Math.log(e)+Math.sqrt(b*b+d*d)/e};n.Ga=function(b,c){var d=new pg(c||b.type,this,b);this.pc(d)};
-n.pc=function(b){if(this.b){this.R=b.coordinate;b.frameState=this.b;var c=this.h.a,d;if(!1!==T(this,b))for(d=c.length-1;0<=d;d--){var e=c[d];if(e.get("active")&&!e.handleEvent(b))break}}};
-n.Ad=function(){var b=this.b,c=this.la;if(0!==c.a.length){var d=16,e=d;if(b){var f=b.viewHints;f[0]&&(d=this.Ca?8:0,e=2);f[1]&&(d=this.ob?8:0,e=2)}if(c.h<d){ih(c);for(var f=0,g,h;c.h<d&&f<e&&0<c.a.length;)g=fh(c)[0],h=g.getKey(),0!==g.N()||h in c.g||(c.g[h]=!0,++c.h,++f,g.load())}}c=this.da;d=0;for(e=c.length;d<e;++d)c[d](this,b);c.length=0};n.Bd=function(){this.render()};
-n.Dd=function(){var b;this.Nb()&&(b=this.Fa());if(this.i){for(var c=0,d=this.i.length;c<d;++c)P(this.i[c]);this.i=null}b?(b.appendChild(this.a),b=this.Z?this.Z:b,this.i=[R(b,"keydown",this.Ga,this),R(b,"keypress",this.Ga,this)],this.c||(this.c=this.nb.bind(this),x.addEventListener("resize",this.c,!1))):(he(this.a),void 0!==this.c&&(x.removeEventListener("resize",this.c,!1),this.c=void 0));this.nb()};n.Ed=function(){this.render()};n.Gd=function(){this.render()};
-n.Fd=function(){this.G&&(P(this.G),this.G=null);var b=this.O();b&&(this.G=R(b,"propertychange",this.Gd,this));this.render()};n.pd=function(){this.render()};n.qd=function(){this.render()};n.od=function(){this.u&&(this.u.forEach(P),this.u=null);var b=ql(this);b&&(this.u=[R(b,"propertychange",this.qd,this),R(b,"change",this.pd,this)]);this.render()};n.se=function(){this.g&&x.cancelAnimationFrame(this.g);this.T()};n.render=function(){void 0===this.g&&(this.g=x.requestAnimationFrame(this.T))};n.oe=function(b){return this.h.remove(b)};
-n.pe=function(b){return ql(this).get("layers").remove(b)};
-n.re=function(b){var c,d,e,f=this.Ha(),g=this.O(),h=null;if(c=void 0!==f&&0<f[0]&&0<f[1]&&g)c=!!g.ga()&&void 0!==g.J();if(c){var h=g.g.slice(),k=ql(this).Eb(),l={};c=0;for(d=k.length;c<d;++c)l[I(k[c].layer)]=k[c];e=g.N();h={animate:!1,attributions:{},coordinateToPixelMatrix:this.va,extent:null,focus:this.R?this.R:e.center,index:this.wa++,layerStates:l,layerStatesArray:k,logos:Va({},this.pb),pixelRatio:this.qb,pixelToCoordinateMatrix:this.rb,postRenderFunctions:[],size:f,skippedFeatureUids:this.sb,
-tileQueue:this.la,time:b,usedTiles:{},viewState:e,viewHints:h,wantedTiles:{}}}if(h){b=this.A;c=f=0;for(d=b.length;c<d;++c)g=b[c],g(this,h)&&(b[f++]=g);b.length=f;h.extent=Yb(e.center,e.resolution,e.rotation,h.size)}this.b=h;this.D.kb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.da,h.postRenderFunctions),0!==this.A.length||h.viewHints[0]||h.viewHints[1]||Qb(h.extent,this.ka)||(T(this,new ue("moveend",this,h)),Lb(h.extent,this.ka)));T(this,new ue("postrender",this,h));c=e=this.Ad;
-this&&(c=ma(e,this));!ga(x.setImmediate)||x.Window&&x.Window.prototype&&!W("Edge")&&x.Window.prototype.setImmediate==x.setImmediate?(mf||(mf=nf()),mf(c)):x.setImmediate(c)};
-n.nb=function(){var b=this.Fa();if(b){var c=Zd(b),d=Hd&&b.currentStyle,e;if(e=d)Xd(c),e=!0;if(e&&"auto"!=d.width&&"auto"!=d.height&&!d.boxSizing)c=qe(b,d.width,"width","pixelWidth"),b=qe(b,d.height,"height","pixelHeight"),b=new Wd(c,b);else{d=new Wd(b.offsetWidth,b.offsetHeight);if(Hd){c=re(b,"paddingLeft");e=re(b,"paddingRight");var f=re(b,"paddingTop"),g=re(b,"paddingBottom"),c=new ke(f,e,g,c)}else c=le(b,"paddingLeft"),e=le(b,"paddingRight"),f=le(b,"paddingTop"),g=le(b,"paddingBottom"),c=new ke(parseFloat(f),
-parseFloat(e),parseFloat(g),parseFloat(c));!Hd||9<=Number(Td)?(e=le(b,"borderLeftWidth"),f=le(b,"borderRightWidth"),g=le(b,"borderTopWidth"),b=le(b,"borderBottomWidth"),b=new ke(parseFloat(g),parseFloat(f),parseFloat(b),parseFloat(e))):(e=te(b,"borderLeft"),f=te(b,"borderRight"),g=te(b,"borderTop"),b=te(b,"borderBottom"),b=new ke(g,f,b,e));b=new Wd(d.width-b.left-c.left-c.right-b.right,d.height-b.top-c.top-c.bottom-b.bottom)}this.set("size",[b.width,b.height])}else this.set("size",void 0)};
-function pl(b){var c=null;void 0!==b.keyboardEventTarget&&(c="string"===typeof b.keyboardEventTarget?document.getElementById(b.keyboardEventTarget):b.keyboardEventTarget);var d={},e={};if(void 0===b.logo||"boolean"===typeof b.logo&&b.logo)e["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"]=
-"http://openlayers.org/";else{var f=b.logo;"string"===typeof f?e[f]="":ha(f)&&(e[f.src]=f.href)}f=b.layers instanceof hi?b.layers:new hi({layers:b.layers});d.layergroup=f;d.target=b.target;d.view=void 0!==b.view?b.view:new Wc;var f=$g,g;void 0!==b.renderer?Array.isArray(b.renderer)?g=b.renderer:"string"===typeof b.renderer&&(g=[b.renderer]):g=nl;var h,k;h=0;for(k=g.length;h<k;++h){var l=g[h];if("canvas"==l){if(Gf){f=lk;break}}else if("dom"==l){f=sk;break}else if("webgl"==l&&zf){f=kl;break}}var m;
-void 0!==b.controls?m=Array.isArray(b.controls)?new md(b.controls.slice()):b.controls:m=ff();if(void 0!==b.interactions)g=Array.isArray(b.interactions)?new md(b.interactions.slice()):b.interactions;else{g={};h=new md;k=new kh;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new Gh);(void 0!==g.doubleClickZoom?g.doubleClickZoom:1)&&h.push(new qh({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new Bh({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:
-1)&&h.push(new $h);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new di({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Uh),h.push(new Wh({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Yh({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:1)&&h.push(new Th({duration:g.zoomDuration}));g=h}b=void 0!==b.overlays?Array.isArray(b.overlays)?new md(b.overlays.slice()):b.overlays:new md;return{controls:m,
-interactions:g,keyboardEventTarget:c,logos:e,overlays:b,te:f,values:d}}lc(mi);lc(ti);ti.forEach(function(b){mi.forEach(function(c){mc(b,c,ni);mc(c,b,oi)})});function rl(b){U.call(this);this.j=b.id;this.i=void 0!==b.insertFirst?b.insertFirst:!0;this.o=void 0!==b.stopEvent?b.stopEvent:!0;this.b=document.createElement("DIV");this.b.className="ol-overlay-container";this.b.style.position="absolute";this.autoPan=void 0!==b.autoPan?b.autoPan:!1;this.g=void 0!==b.autoPanAnimation?b.autoPanAnimation:{};this.h=void 0!==b.autoPanMargin?b.autoPanMargin:20;this.a={$a:"",hb:"",lb:"",mb:"",visible:!0};this.c=null;R(this,qb("element"),this.md,this);R(this,qb("map"),
-this.vd,this);R(this,qb("offset"),this.wd,this);R(this,qb("position"),this.yd,this);R(this,qb("positioning"),this.zd,this);void 0!==b.element&&this.set("element",b.element);this.set("offset",void 0!==b.offset?b.offset:[0,0]);this.set("positioning",void 0!==b.positioning?b.positioning:"top-left");void 0!==b.position&&this.uc(b.position)}M(rl,U);n=rl.prototype;n.Da=function(){return this.j};n.md=function(){fe(this.b);var b=this.get("element");b&&this.b.appendChild(b)};
-n.vd=function(){this.c&&(he(this.b),P(this.c),this.c=null);var b=this.get("map");b&&(this.c=R(b,"postrender",this.render,this),sl(this),b=this.o?b.j:b.o,this.i?ge(b,this.b,0):b.appendChild(this.b))};n.render=function(){sl(this)};n.wd=function(){sl(this)};
-n.yd=function(){sl(this);if(void 0!==this.get("position")&&this.autoPan){var b=this.get("map");if(void 0!==b&&b.Fa()){var c=tl(b.Fa(),b.Ha()),d=this.get("element"),e=d.offsetWidth,f=d.currentStyle||x.getComputedStyle(d),e=e+(parseInt(f.marginLeft,10)+parseInt(f.marginRight,10)),f=d.offsetHeight,g=d.currentStyle||x.getComputedStyle(d),f=f+(parseInt(g.marginTop,10)+parseInt(g.marginBottom,10)),h=tl(d,[e,f]),d=this.h;Mb(c,h)||(e=h[0]-c[0],f=c[2]-h[2],g=h[1]-c[1],h=c[3]-h[3],c=[0,0],0>e?c[0]=e-d:0>f&&
-(c[0]=Math.abs(f)+d),0>g?c[1]=g-d:0>h&&(c[1]=Math.abs(h)+d),0===c[0]&&0===c[1])||(d=b.O().ga(),e=Fh(b,d),c=[e[0]+c[0],e[1]+c[1]],this.g&&(this.g.source=d,b.ea(dd(this.g))),b.O().ma(b.pa(c)))}}};n.zd=function(){sl(this)};n.setMap=function(b){this.set("map",b)};n.uc=function(b){this.set("position",b)};
-function tl(b,c){var d=Zd(b),e=new Vd(0,0),f;f=d?Zd(d):document;var g;(g=!Hd||9<=Number(Td))||(Xd(f),g=!0);b!=(g?f.documentElement:f.body)&&(f=me(b),g=Xd(d).a,d=g.scrollingElement?g.scrollingElement:Kd?g.body||g.documentElement:g.documentElement,g=g.parentWindow||g.defaultView,d=Hd&&Rd("10")&&g.pageYOffset!=d.scrollTop?new Vd(d.scrollLeft,d.scrollTop):new Vd(g.pageXOffset||d.scrollLeft,g.pageYOffset||d.scrollTop),e.x=f.left+d.x,e.y=f.top+d.y);return[e.x,e.y,e.x+c[0],e.y+c[1]]}
-function ul(b,c){b.a.visible!==c&&(pe(b.b,c),b.a.visible=c)}
-function sl(b){var c=b.get("map"),d=b.get("position");if(void 0!==c&&c.b&&void 0!==d){var d=Fh(c,d),e=c.Ha(),c=b.b.style,f=b.get("offset"),g=b.get("positioning"),h=f[0],f=f[1];if("bottom-right"==g||"center-right"==g||"top-right"==g)""!==b.a.hb&&(b.a.hb=c.left=""),h=Math.round(e[0]-d[0]-h)+"px",b.a.lb!=h&&(b.a.lb=c.right=h);else{""!==b.a.lb&&(b.a.lb=c.right="");if("bottom-center"==g||"center-center"==g||"top-center"==g)h-=ne(b.b).width/2;h=Math.round(d[0]+h)+"px";b.a.hb!=h&&(b.a.hb=c.left=h)}if("bottom-left"==
-g||"bottom-center"==g||"bottom-right"==g)""!==b.a.mb&&(b.a.mb=c.top=""),d=Math.round(e[1]-d[1]-f)+"px",b.a.$a!=d&&(b.a.$a=c.bottom=d);else{""!==b.a.$a&&(b.a.$a=c.bottom="");if("center-left"==g||"center-center"==g||"center-right"==g)f-=ne(b.b).height/2;d=Math.round(d[1]+f)+"px";b.a.mb!=d&&(b.a.mb=c.top=d)}ul(b,!0)}else ul(b,!1)};function vl(){this.defaultDataProjection=null}function wl(b,c,d){var e;d&&(e={dataProjection:d.dataProjection?d.dataProjection:b.f(Lj(c)),featureProjection:d.featureProjection});var f;e&&(f={featureProjection:e.featureProjection,dataProjection:e.dataProjection?e.dataProjection:b.defaultDataProjection,rightHanded:e.rightHanded},e.decimals&&(f.decimals=e.decimals));return f}
-function xl(b,c){var d=c?kc(c.featureProjection):null,e=c?kc(c.dataProjection):null;if(d&&e&&!vc(d,e))if(b instanceof yc)d=b.o(e,d);else{e=wc(e,d);d=[b[0],b[1],b[0],b[3],b[2],b[1],b[2],b[3]];e(d,d,2);var f=[d[0],d[2],d[4],d[6]],g=[d[1],d[3],d[5],d[7]],d=Math.min.apply(null,f),e=Math.min.apply(null,g),f=Math.max.apply(null,f),g=Math.max.apply(null,g),d=Nb(d,e,f,g,void 0)}else d=b;return d};function yl(){this.defaultDataProjection=null}M(yl,vl);function Lj(b){return ha(b)?b:"string"===typeof b?(b=JSON.parse(b))?b:null:null}yl.prototype.U=function(){return"json"};yl.prototype.g=function(b,c){return this.a(Lj(b),wl(this,b,c))};yl.prototype.b=function(b,c){return this.h(Lj(b),wl(this,b,c))};function zl(b,c,d,e,f){var g=NaN,h=NaN,k=(d-c)/e;if(0!==k)if(1==k)g=b[c],h=b[c+1];else if(2==k)g=.5*b[c]+.5*b[c+e],h=.5*b[c+1]+.5*b[c+e+1];else{var h=b[c],k=b[c+1],l=0,g=[0],m;for(m=c+e;m<d;m+=e){var p=b[m],q=b[m+1],l=l+Math.sqrt((p-h)*(p-h)+(q-k)*(q-k));g.push(l);h=p;k=q}d=.5*l;l=0;m=g.length;for(p=!1;l<m;)h=l+(m-l>>1),k=+Ga(g[h],d),0>k?l=h+1:(m=h,p=!k);h=p?l:~l;0>h?(d=(d-g[-h-2])/(g[-h-1]-g[-h-2]),c+=(-h-2)*e,g=b[c],g=g+d*(b[c+e]-g),h=b[c+1],h=h+d*(b[c+e+1]-h)):(g=b[c+h*e],h=b[c+h*e+1])}return f?
-(f[0]=g,f[1]=h,f):[g,h]};function Al(b,c){Ac.call(this);this.c=null;this.j=-1;this.X(b,c)}M(Al,Ac);n=Al.prototype;n.clone=function(){var b=new Al(null);V(b,this.g,this.a.slice());b.w();return b};n.oa=function(){return Gc(this.a,0,this.a.length,this.b)};function Wi(b){if(b.j!=b.f){var c;c=zl(b.a,0,b.a.length,b.b,b.c);b.c=c;b.j=b.f}return b.c}n.Ea=function(b){var c=[];c.length=Ic(this.a,0,this.a.length,this.b,b,c,0);b=new Al(null);V(b,"XY",c);b.w();return b};n.U=function(){return"LineString"};
-n.X=function(b,c){b?(Cc(this,c,b,1),this.a||(this.a=[]),this.a.length=Ec(this.a,0,b,this.b)):V(this,"XY",null);this.w()};function Bl(b,c){Ac.call(this);this.c=[];this.X(b,c)}M(Bl,Ac);n=Bl.prototype;n.clone=function(){var b=new Bl(null),c=this.c.slice();V(b,this.g,this.a.slice());b.c=c;b.w();return b};n.oa=function(){return Hc(this.a,0,this.c,this.b)};n.Ta=function(){return this.c};function Xi(b){var c=[],d=b.a,e=0,f=b.c;b=b.b;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g],e=zl(d,e,k,b);Ja(c,e);e=k}return c}
-n.Ea=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b,h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var p=f[l],k=Ic(e,h,p,g,b,c,k);d.push(k);h=p}c.length=k;b=new Bl(null);V(b,"XY",c);b.c=d;b.w();return b};n.U=function(){return"MultiLineString"};n.X=function(b,c){if(b){Cc(this,c,b,2);this.a||(this.a=[]);var d=Fc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1]}else d=this.c,V(this,"XY",null),this.c=d;this.w()};function Cl(b,c){Ac.call(this);this.X(b,c)}M(Cl,Ac);Cl.prototype.clone=function(){var b=new Cl(null);V(b,this.g,this.a.slice());b.w();return b};Cl.prototype.oa=function(){return Gc(this.a,0,this.a.length,this.b)};Cl.prototype.U=function(){return"MultiPoint"};Cl.prototype.X=function(b,c){b?(Cc(this,c,b,1),this.a||(this.a=[]),this.a.length=Ec(this.a,0,b,this.b)):V(this,"XY",null);this.w()};function Dl(b,c){Ac.call(this);this.c=[];this.A=-1;this.D=null;this.G=-1;this.j=null;this.X(b,c)}M(Dl,Ac);n=Dl.prototype;n.clone=function(){for(var b=new Dl(null),c=this.c.length,d=Array(c),e=0;e<c;++e)d[e]=this.c[e].slice();V(b,this.g,this.a.slice());b.c=d;b.w();return b};n.oa=function(b){var c;void 0!==b?(c=Yi(this).slice(),Rc(c,this.c,this.b,b)):c=this.a;b=c;c=this.c;var d=this.b,e=0,f=[],g=0,h,k;h=0;for(k=c.length;h<k;++h){var l=c[h];f[g++]=Hc(b,e,l,d,f[g]);e=l[l.length-1]}f.length=g;return f};
-function Zi(b){if(b.A!=b.f){var c=b.a,d=b.c,e=b.b,f=0,g=[],h,k,l=Ib();h=0;for(k=d.length;h<k;++h){var m=d[h],l=c,p=m[0],q=e,r=Ob(void 0),l=Sb(r,l,f,p,q);g.push((l[0]+l[2])/2,(l[1]+l[3])/2);f=m[m.length-1]}c=Yi(b);d=b.c;e=b.b;h=0;k=[];m=0;for(l=d.length;m<l;++m)f=d[m],k=Nc(c,h,f,e,g,2*m,k),h=f[f.length-1];b.D=k;b.A=b.f}return b.D}
-function Yi(b){if(b.G!=b.f){var c=b.a,d;a:{d=b.c;var e,f;e=0;for(f=d.length;e<f;++e)if(!Pc(c,d[e],b.b,void 0)){d=!1;break a}d=!0}d?b.j=c:(b.j=c.slice(),b.j.length=Rc(b.j,b.c,b.b));b.G=b.f}return b.j}n.Ea=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b;b=Math.sqrt(b);var h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var p=f[l],q=[],k=Jc(e,h,p,g,b,c,k,q);d.push(q);h=p[p.length-1]}c.length=k;e=new Dl(null);V(e,"XY",c);e.c=d;e.w();return e};n.U=function(){return"MultiPolygon"};
-n.X=function(b,c){if(b){Cc(this,c,b,3);this.a||(this.a=[]);var d=this.a,e=this.b,f=this.c,g=0,f=f?f:[],h=0,k,l;k=0;for(l=b.length;k<l;++k)g=Fc(d,g,b[k],e,f[h]),f[h++]=g,g=g[g.length-1];f.length=h;0===f.length?this.a.length=0:(d=f[f.length-1],this.a.length=0===d.length?0:d[d.length-1])}else d=this.c,V(this,"XY",null),this.c=d;this.w()};function El(b){b=b?b:{};this.defaultDataProjection=null;this.c=b.geometryName}M(El,yl);function Fl(b){var c="XY";!0===b.hasZ&&!0===b.hasM?c="XYZM":!0===b.hasZ?c="XYZ":!0===b.hasM&&(c="XYM");return c}
-var Gl={Point:function(b){return void 0!==b.m&&void 0!==b.z?new Lc([b.x,b.y,b.z,b.m],"XYZM"):void 0!==b.z?new Lc([b.x,b.y,b.z],"XYZ"):void 0!==b.m?new Lc([b.x,b.y,b.m],"XYM"):new Lc([b.x,b.y])},LineString:function(b){return new Al(b.paths[0],Fl(b))},Polygon:function(b){return new Sc(b.rings,Fl(b))},MultiPoint:function(b){return new Cl(b.points,Fl(b))},MultiLineString:function(b){return new Bl(b.paths,Fl(b))},MultiPolygon:function(b){return new Dl(b.rings,Fl(b))}};
-El.prototype.a=function(b,c){var d;if(d=b.geometry){var e;if(ea(d.x)&&ea(d.y))e="Point";else if(d.points)e="MultiPoint";else if(d.paths)e=1===d.paths.length?"LineString":"MultiLineString";else if(d.rings){var f=d.rings,g=Fl(d),h=[];e=[];var k,l;k=0;for(l=f.length;k<l;++k){var m=Ia(f[k]);Oc(m,0,m.length,g.length)?h.push([f[k]]):e.push(f[k])}for(;e.length;){f=e.shift();g=!1;for(k=h.length-1;0<=k;k--)if(Mb((new Kc(h[k][0])).C(),(new Kc(f)).C())){h[k].push(f);g=!0;break}g||h.push([f.reverse()])}d=Va({},
-d);1===h.length?(e="Polygon",d.rings=h[0]):(e="MultiPolygon",d.rings=h)}d=xl((0,Gl[e])(d),c)}else d=null;h=new Gj;this.c&&Ij(h,this.c);Hj(h,d);c&&c.Jb&&b.attributes[c.Jb]&&(h.g=b.attributes[c.Jb],h.w());b.attributes&&h.l(b.attributes);return h};El.prototype.h=function(b,c){var d=c?c:{};if(b.features){var e=[],f=b.features,g,h;d.Jb=b.objectIdFieldName;g=0;for(h=f.length;g<h;++g)e.push(this.a(f[g],d));return e}return[this.a(b,d)]};
-El.prototype.f=function(b){return b.spatialReference&&b.spatialReference.wkid?kc("EPSG:"+b.spatialReference.wkid):null};function Hl(b){yc.call(this);this.a=b?b:null;Il(this)}M(Hl,yc);function Jl(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)fb(b.a[c],"change",b.w,b)}function Il(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)R(b.a[c],"change",b.w,b)}n=Hl.prototype;n.clone=function(){var b=new Hl(null),c=this.a,d=[],e,f;e=0;for(f=c.length;e<f;++e)d.push(c[e].clone());Jl(b);b.a=d;Il(b);b.w();return b};n.ab=function(b){Ob(b);for(var c=this.a,d=0,e=c.length;d<e;++d)Rb(b,c[d].C());return b};
-n.Hb=function(b){this.s!=this.f&&(Wa(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=[],e=this.a,f=!1,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g],l=k.Hb(b);d.push(l);l!==k&&(f=!0)}if(f)return b=new Hl(null),Jl(b),b.a=d,Il(b),b.w(),this.h[c]=b;this.i=b;return this};n.U=function(){return"GeometryCollection"};n.rotate=function(b,c){for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].rotate(b,c);this.w()};
-n.wb=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].wb(b);this.w()};n.K=function(){Jl(this);Hl.Y.K.call(this)};function Kl(b){b=b?b:{};this.defaultDataProjection=null;this.defaultDataProjection=kc(b.defaultDataProjection?b.defaultDataProjection:"EPSG:4326");this.c=b.geometryName}M(Kl,yl);function Ll(b,c){return b?xl((0,Ml[b.type])(b),c):null}
-var Ml={Point:function(b){return new Lc(b.coordinates)},LineString:function(b){return new Al(b.coordinates)},Polygon:function(b){return new Sc(b.coordinates)},MultiPoint:function(b){return new Cl(b.coordinates)},MultiLineString:function(b){return new Bl(b.coordinates)},MultiPolygon:function(b){return new Dl(b.coordinates)},GeometryCollection:function(b,c){var d=b.geometries.map(function(b){return Ll(b,c)});return new Hl(d)}};
-Kl.prototype.a=function(b,c){var d=Ll(b.geometry,c),e=new Gj;this.c&&Ij(e,this.c);Hj(e,d);void 0!==b.id&&(e.g=b.id,e.w());b.properties&&e.l(b.properties);return e};Kl.prototype.h=function(b,c){if("Feature"==b.type)return[this.a(b,c)];if("FeatureCollection"==b.type){var d=[],e=b.features,f,g;f=0;for(g=e.length;f<g;++f)d.push(this.a(e[f],c));return d}return[]};Kl.prototype.f=function(b){return(b=b.crs)?"name"==b.type?kc(b.properties.name):"EPSG"==b.type?kc("EPSG:"+b.properties.code):null:this.defaultDataProjection};function Nl(b,c,d){if("array"==ba(c))for(var e=0;e<c.length;e++)Nl(b,String(c[e]),d);else null!=c&&d.push("&",b,""===c?"":"=",encodeURIComponent(String(c)))};function Ol(b,c,d){Ac.call(this);Pl(this,b,c?c:0,d)}M(Ol,Ac);Ol.prototype.clone=function(){var b=new Ol(null);V(b,this.g,this.a.slice());b.w();return b};Ol.prototype.ab=function(b){var c=this.a,d=c[this.b]-c[0];return Nb(c[0]-d,c[1]-d,c[0]+d,c[1]+d,b)};Ol.prototype.U=function(){return"Circle"};function Pl(b,c,d,e){if(c){Cc(b,e,c,0);b.a||(b.a=[]);e=b.a;c=Dc(e,c);e[c++]=e[0]+d;var f;d=1;for(f=b.b;d<f;++d)e[c++]=e[d];e.length=c}else V(b,"XY",null);b.w()};function Ql(b,c,d,e,f){Ce.call(this,b,c);this.g=d;this.b=new Image;null!==e&&(this.b.crossOrigin=e);this.f={};this.c=null;this.h=f}M(Ql,Ce);n=Ql.prototype;n.K=function(){1==this.state&&Rl(this);this.a&&ib(this.a);this.state=5;De(this);Ql.Y.K.call(this)};n.S=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=Za(this.f)?this.b:this.b.cloneNode(!1);return this.f[c]=b}return this.b};n.getKey=function(){return this.g};n.Yd=function(){this.state=3;Rl(this);De(this)};
-n.Zd=function(){this.state=this.b.naturalWidth&&this.b.naturalHeight?2:4;Rl(this);De(this)};n.load=function(){0==this.state&&(this.state=1,De(this),this.c=[R(this.b,"error",this.Yd,this,!0),R(this.b,"load",this.Zd,this,!0)],this.h(this,this.g))};function Rl(b){b.c.forEach(P);b.c=null};function Sl(b,c){S.call(this,b);this.feature=c}M(Sl,S);
-function Tl(b){yh.call(this,{handleDownEvent:Ul,handleEvent:Vl,handleUpEvent:Wl});this.R=null;this.o=!1;this.wa=b.source?b.source:null;this.la=b.features?b.features:null;this.Zc=b.snapTolerance?b.snapTolerance:12;this.D=b.type;this.b=Xl(this.D);this.ka=b.minPoints?b.minPoints:this.b===Yl?3:2;this.da=b.maxPoints?b.maxPoints:Infinity;var c=b.geometryFunction;if(!c)if("Circle"===this.D)c=function(b,c){var d=c?c:new Ol([NaN,NaN]),h=b[0],k=b[1],l=h[0]-k[0],h=h[1]-k[1];Pl(d,b[0],Math.sqrt(l*l+h*h));return d};
-else{var d,c=this.b;c===Zl?d=Lc:c===am?d=Al:c===Yl&&(d=Sc);c=function(b,c){var g=c;g?g.X(b):g=new d(b);return g}}this.u=c;this.A=this.i=this.a=this.j=this.g=this.h=null;this.dd=b.clickTolerance?b.clickTolerance*b.clickTolerance:36;this.Z=new Y({source:new Uj({useSpatialIndex:!1,wrapX:b.wrapX?b.wrapX:!1}),style:b.style?b.style:bm()});this.va=b.geometryName;this.sb=b.condition?b.condition:uh;this.aa=b.freehandCondition?b.freehandCondition:vh;R(this,qb("active"),this.Ca,this)}M(Tl,yh);
-function bm(){var b=Oi();return function(c){return b[c.M().U()]}}Tl.prototype.setMap=function(b){Tl.Y.setMap.call(this,b);this.Ca()};function Vl(b){this.b!==am&&this.b!==Yl||!this.aa(b)||(this.o=!0);var c=!this.o;this.o&&b.type===Bg?(cm(this,b),c=!1):b.type===Ag?c=dm(this,b):b.type===ug&&(c=!1);return zh.call(this,b)&&c}function Ul(b){return this.sb(b)?(this.R=b.pixel,!0):this.o?(this.R=b.pixel,this.h||em(this,b),!0):!1}
-function Wl(b){this.o=!1;var c=this.R,d=b.pixel,e=c[0]-d[0],c=c[1]-d[1],d=!0;e*e+c*c<=this.dd&&(dm(this,b),this.h?this.b===fm?gm(this):hm(this,b)?gm(this):cm(this,b):(em(this,b),this.b===Zl&&gm(this)),d=!1);return d}
-function dm(b,c){if(b.h){var d=c.coordinate,e=b.g.M(),f;b.b===Zl?f=b.a:b.b===Yl?(f=b.a[0],f=f[f.length-1],hm(b,c)&&(d=b.h.slice())):(f=b.a,f=f[f.length-1]);f[0]=d[0];f[1]=d[1];b.u(b.a,e);b.j&&b.j.M().X(d);e instanceof Sc&&b.b!==Yl?(b.i||(b.i=new Gj(new Al(null))),0>=e.c.length?e=null:(d=new Kc(null),V(d,e.g,e.a.slice(0,e.c[0])),d.w(),e=d),d=b.i.M(),V(d,e.g,e.a),d.w()):b.A&&(d=b.i.M(),d.X(b.A));im(b)}else e=c.coordinate.slice(),b.j?b.j.M().X(e):(b.j=new Gj(new Lc(e)),im(b));return!0}
-function hm(b,c){var d=!1;if(b.g){var e=!1,f=[b.h];b.b===am?e=b.a.length>b.ka:b.b===Yl&&(e=b.a[0].length>b.ka,f=[b.a[0][0],b.a[0][b.a[0].length-2]]);if(e)for(var e=c.map,g=0,h=f.length;g<h;g++){var k=f[g],l=Fh(e,k),m=c.pixel,d=m[0]-l[0],l=m[1]-l[1],m=b.o&&b.aa(c)?1:b.Zc;if(d=Math.sqrt(d*d+l*l)<=m){b.h=k;break}}}return d}
-function em(b,c){var d=c.coordinate;b.h=d;b.b===Zl?b.a=d.slice():b.b===Yl?(b.a=[[d.slice(),d.slice()]],b.A=b.a[0]):(b.a=[d.slice(),d.slice()],b.b===fm&&(b.A=b.a));b.A&&(b.i=new Gj(new Al(b.A)));d=b.u(b.a);b.g=new Gj;b.va&&Ij(b.g,b.va);Hj(b.g,d);im(b);T(b,new Sl("drawstart",b.g))}
-function cm(b,c){var d=c.coordinate,e=b.g.M(),f,g;if(b.b===am)b.h=d.slice(),g=b.a,g.push(d.slice()),f=g.length>b.da,b.u(g,e);else if(b.b===Yl){g=b.a[0];g.push(d.slice());if(f=g.length>b.da)b.h=g[0];b.u(b.a,e)}im(b);f&&gm(b)}
-function gm(b){var c=jm(b),d=b.a,e=c.M();b.b===am?(d.pop(),b.u(d,e)):b.b===Yl&&(d[0].pop(),d[0].push(d[0][0]),b.u(d,e));"MultiPoint"===b.D?Hj(c,new Cl([d])):"MultiLineString"===b.D?Hj(c,new Bl([d])):"MultiPolygon"===b.D&&Hj(c,new Dl([d]));T(b,new Sl("drawend",c));b.la&&b.la.push(c);b.wa&&b.wa.ub(c)}function jm(b){b.h=null;var c=b.g;c&&(b.g=null,b.j=null,b.i=null,b.Z.W().clear(!0));return c}Tl.prototype.v=cc;
-function im(b){var c=[];b.g&&c.push(b.g);b.i&&c.push(b.i);b.j&&c.push(b.j);b=b.Z.W();b.clear(!0);b.vb(c)}Tl.prototype.Ca=function(){var b=this.T,c=this.get("active");b&&c||jm(this);this.Z.setMap(c?b:null)};function Xl(b){var c;"Point"===b||"MultiPoint"===b?c=Zl:"LineString"===b||"MultiLineString"===b?c=am:"Polygon"===b||"MultiPolygon"===b?c=Yl:"Circle"===b&&(c=fm);return c}var Zl="Point",am="LineString",Yl="Polygon",fm="Circle";function km(b,c,d,e,f,g,h,k,l,m,p){Ce.call(this,f,0);this.u=void 0!==p?p:!1;this.s=h;this.o=k;this.c=null;this.f={};this.g=c;this.l=e;this.i=g?g:f;this.b=[];this.Ja=null;this.h=0;g=Ke(e,this.i);k=this.l.C();f=this.g.C();g=k?Zb(g,k):g;if(0===Tb(g))this.state=4;else if((k=b.C())&&(f?f=Zb(f,k):f=k),k=e.J(this.i[0]),p=Xb(g),e=wc(d,b)(p,void 0,p.length),k=d.getPointResolution(k,p),p=oc(d),void 0!==p&&(k*=p),p=oc(b),void 0!==p&&(k/=p),e=b.getPointResolution(k,e)/k,isFinite(e)&&0<e&&(k/=e),e=k,!isFinite(e)||
-0>=e)this.state=4;else if(this.j=new Dj(b,d,g,f,e*(void 0!==m?m:.5)),0===this.j.c.length)this.state=4;else if(this.h=Re(c,e),d=Fj(this.j),f&&(b.a?(d[1]=Ba(d[1],f[1],f[3]),d[3]=Ba(d[3],f[1],f[3])):d=Zb(d,f)),Tb(d))if(b=Le(c,d,this.h),100>(b.b-b.a+1)*(b.c-b.f+1)){for(c=b.a;c<=b.b;c++)for(d=b.f;d<=b.c;d++)(m=l(this.h,c,d,h))&&this.b.push(m);0===this.b.length&&(this.state=4)}else this.state=3;else this.state=4}M(km,Ce);km.prototype.K=function(){1==this.state&&(this.Ja.forEach(P),this.Ja=null);km.Y.K.call(this)};
-km.prototype.S=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=Za(this.f)?this.c:this.c.cloneNode(!1);return this.f[c]=b}return this.c};
-km.prototype.Oc=function(){var b=[];this.b.forEach(function(c){c&&2==c.N()&&b.push({extent:Ke(this.g,c.L),image:c.S()})},this);this.b.length=0;if(0===b.length)this.state=3;else{var c=this.i[0],d=Qe(this.l,c),e=ea(d)?d:d[0],d=ea(d)?d:d[1],c=this.l.J(c),f=this.g.J(this.h),g=Ke(this.l,this.i);this.c=Cj(e,d,this.s,f,this.g.C(),c,g,this.j,b,this.o,this.u);this.state=2}De(this)};
-km.prototype.load=function(){if(0==this.state){this.state=1;De(this);var b=0;this.Ja=[];this.b.forEach(function(c){var d=c.N();if(0==d||1==d){b++;var e;e=R(c,"change",function(){var d=c.N();if(2==d||3==d||4==d)P(e),b--,0===b&&(this.Ja.forEach(P),this.Ja=null,this.Oc())},this);this.Ja.push(e)}},this);this.b.forEach(function(b){0==b.N()&&b.load()});0===b&&x.setTimeout(this.Oc.bind(this),0)}};function lm(b){jk.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction?b.tileLoadFunction:mm,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:b.wrapX});this.crossOrigin=void 0!==b.crossOrigin?b.crossOrigin:null;this.tileClass=void 0!==b.tileClass?b.tileClass:Ql;this.b={};this.o={};this.T=b.reprojectionErrorThreshold}
-M(lm,jk);n=lm.prototype;n.Gc=function(){if(Ae(this.a))return!0;for(var b in this.b)if(Ae(this.b[b]))return!0;return!1};n.Hc=function(b,c){var d=this.Ua(b);Be(this.a,this.a==d?c:{});for(var e in this.b){var f=this.b[e];Be(f,f==d?c:{})}};n.bb=function(){return 0};n.Fb=function(b){return this.c&&b&&!vc(this.c,b)?!1:lm.Y.Fb.call(this,b)};n.ia=function(b){var c=this.c;return!this.tileGrid||c&&!vc(c,b)?(c=I(b).toString(),c in this.o||(this.o[c]=Te(b)),this.o[c]):this.tileGrid};
-n.Ua=function(b){var c=this.c;if(!c||vc(c,b))return this.a;b=I(b).toString();b in this.b||(this.b[b]=new ze);return this.b[b]};function nm(b,c,d,e,f,g){c=[c,d,e];f=(d=Ze(b,c,g))?b.tileUrlFunction(d,f,g):void 0;f=new b.tileClass(c,void 0!==f?0:4,void 0!==f?f:"",b.crossOrigin,b.tileLoadFunction);f.key="";R(f,"change",b.D,b);return f}
-function Ug(b,c,d,e,f,g){if(b.c&&g&&!vc(b.c,g)){var h=b.Ua(g);d=[c,d,e];c=b.cb.apply(b,d);if(xe(h,c))return h.get(c);var k=b.c;e=b.ia(k);var l=b.ia(g),m=Ze(b,d,g);b=new km(k,e,g,l,d,m,b.eb(f),0,function(b,c,d,e){return om(this,b,c,d,e,k)}.bind(b),b.T,!1);h.set(c,b);return b}return om(b,c,d,e,f,g)}
-function om(b,c,d,e,f,g){var h=null,k=b.cb(c,d,e);if(xe(b.a,k)){if(h=b.a.get(k),""!=h.key){var l=h;h.a&&""==h.a.key?(h=h.a,2==l.N()&&(h.a=l)):(h=nm(b,c,d,e,f,g),2==l.N()?h.a=l:l.a&&2==l.a.N()&&(h.a=l.a,l.a=null));h.a&&(h.a.a=null);b.a.replace(k,h)}}else h=nm(b,c,d,e,f,g),b.a.set(k,h);return h}function mm(b,c){b.S().src=c};function pm(b){var c=void 0!==b.projection?b.projection:"EPSG:3857",d;if(void 0!==b.tileGrid)d=b.tileGrid;else{d={extent:Ue(c),maxZoom:b.maxZoom,minZoom:b.minZoom,tileSize:b.tileSize};var e={};Va(e,void 0!==d?d:{});void 0===e.extent&&(e.extent=kc("EPSG:3857").C());e.resolutions=Ve(e.extent,e.maxZoom,e.tileSize);delete e.maxZoom;d=new Ge(e)}lm.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,opaque:b.opaque,projection:c,reprojectionErrorThreshold:b.reprojectionErrorThreshold,
-tileGrid:d,tileLoadFunction:b.tileLoadFunction,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0})}M(pm,lm);function qm(b){b=b||{};var c;void 0!==b.attributions?c=b.attributions:c=[rm];pm.call(this,{attributions:c,cacheSize:b.cacheSize,crossOrigin:void 0!==b.crossOrigin?b.crossOrigin:"anonymous",opaque:void 0!==b.opaque?b.opaque:!0,maxZoom:void 0!==b.maxZoom?b.maxZoom:19,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:b.wrapX})}M(qm,pm);var rm=new kd({html:'&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});function sm(b){b=b||{};var c=tm[b.layer];this.u=b.layer;pm.call(this,{attributions:c.attributions,cacheSize:b.cacheSize,crossOrigin:"anonymous",logo:"https://developer.mapquest.com/content/osm/mq_logo.png",maxZoom:c.maxZoom,reprojectionErrorThreshold:b.reprojectionErrorThreshold,opaque:c.opaque,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:"https://otile{1-4}-s.mqcdn.com/tiles/1.0.0/"+this.u+"/{z}/{x}/{y}.jpg"})}M(sm,pm);
-var um=new kd({html:'Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a>'}),tm={osm:{maxZoom:19,opaque:!0,attributions:[um,rm]},sat:{maxZoom:18,opaque:!0,attributions:[um,new kd({html:"Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency"})]},hyb:{maxZoom:18,opaque:!1,attributions:[um,rm]}};function vm(b){b=b||{};lm.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,projection:b.projection,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0});this.R=b.params||{};this.u=Ib()}M(vm,lm);vm.prototype.eb=function(b){return b};
-vm.prototype.g=function(b,c,d){var e=this.tileGrid;e||(e=this.ia(d));if(!(e.Gb().length<=b[0])){var f=Ke(e,b,this.u),g=sb(Qe(e,b[0]),this.h);1!=c&&(g=rb(g,c,this.h));e={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};Va(e,this.R);var h;var k=this.urls;if(k){d=d.na.split(":").pop();e.SIZE=g[0]+","+g[1];e.BBOX=f.join(",");e.BBOXSR=d;e.IMAGESR=d;e.DPI=Math.round(e.DPI?e.DPI*c:90*c);b=[(1==k.length?k[0]:k[Da((b[1]<<b[0])+b[2],k.length)]).replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,
-"ImageServer/exportImage")];for(h in e)Nl(h,e[h],b);b[1]&&(h=b[0],c=h.indexOf("#"),0<=c&&(b.push(h.substr(c)),b[0]=h=h.substr(0,c)),c=h.indexOf("?"),0>c?b[1]="?":c==h.length-1&&(b[1]=void 0));h=b.join("")}else h=void 0;return h}};function wm(b){this.j=this.c=this.g=null;this.i=void 0!==b.fill?b.fill:null;this.I=[0,0];this.a=b.points;this.f=void 0!==b.radius?b.radius:b.radius1;this.h=void 0!==b.radius2?b.radius2:this.f;this.l=void 0!==b.angle?b.angle:0;this.b=void 0!==b.stroke?b.stroke:null;this.A=this.D=this.H=null;var c=b.atlasManager,d="",e="",f=0,g=null,h,k=0;this.b&&(h=wd(this.b.b),k=this.b.f,void 0===k&&(k=1),g=this.b.a,Ff||(g=null),e=this.b.g,void 0===e&&(e="round"),d=this.b.c,void 0===d&&(d="round"),f=this.b.h,void 0===
-f&&(f=10));var l=2*(this.f+k)+1,d={strokeStyle:h,Za:k,size:l,lineCap:d,lineDash:g,lineJoin:e,miterLimit:f};if(void 0===c){this.c=document.createElement("CANVAS");this.c.height=l;this.c.width=l;var c=l=this.c.width,m=this.c.getContext("2d");this.Lc(d,m,0,0);this.i?this.j=this.c:(m=this.j=document.createElement("CANVAS"),m.height=d.size,m.width=d.size,m=m.getContext("2d"),this.Kc(d,m,0,0))}else l=Math.round(l),(e=!this.i)&&(m=this.Kc.bind(this,d)),f=this.b?Gi(this.b):"-",g=this.i?Ai(this.i):"-",this.g&&
-f==this.g[1]&&g==this.g[2]&&this.f==this.g[3]&&this.h==this.g[4]&&this.l==this.g[5]&&this.a==this.g[6]||(this.g=["r"+f+g+(void 0!==this.f?this.f.toString():"-")+(void 0!==this.h?this.h.toString():"-")+(void 0!==this.l?this.l.toString():"-")+(void 0!==this.a?this.a.toString():"-"),f,g,this.f,this.h,this.l,this.a]),m=c.add(this.g[0],l,l,this.Lc.bind(this,d),m),this.c=m.image,this.I=[m.offsetX,m.offsetY],c=m.image.width,this.j=e?m.Id:this.c;this.H=[l/2,l/2];this.D=[l,l];this.A=[c,c];Vg.call(this,{opacity:1,
-rotateWithView:void 0!==b.rotateWithView?b.rotateWithView:!1,rotation:void 0!==b.rotation?b.rotation:0,scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0})}M(wm,Vg);n=wm.prototype;n.Sa=function(){return this.H};n.jb=function(){return this.j};n.S=function(){return this.c};n.Db=function(){return this.A};n.Ya=function(){return 2};n.fa=function(){return this.I};n.ya=function(){return this.D};n.Mb=N;n.load=N;n.Ub=N;
-n.Lc=function(b,c,d,e){var f;c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();this.h!==this.f&&(this.a*=2);for(d=0;d<=this.a;d++)e=2*d*Math.PI/this.a-Math.PI/2+this.l,f=0===d%2?this.f:this.h,c.lineTo(b.size/2+f*Math.cos(e),b.size/2+f*Math.sin(e));this.i&&(c.fillStyle=zd(this.i.a),c.fill());this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Za,b.lineDash&&c.setLineDash(b.lineDash),c.lineCap=b.lineCap,c.lineJoin=b.lineJoin,c.miterLimit=b.miterLimit,c.stroke());c.closePath()};
-n.Kc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();this.h!==this.f&&(this.a*=2);var f;for(d=0;d<=this.a;d++)f=2*d*Math.PI/this.a-Math.PI/2+this.l,e=0===d%2?this.f:this.h,c.lineTo(b.size/2+e*Math.cos(f),b.size/2+e*Math.sin(f));c.fillStyle=vi;c.fill();this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Za,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};E("ol.format.GeoJSON",Kl,OPENLAYERS);Kl.prototype.readFeatures=Kl.prototype.b;Kl.prototype.readFeature=Kl.prototype.g;E("ol.format.EsriJSON",El,OPENLAYERS);El.prototype.readFeatures=El.prototype.b;El.prototype.readFeature=El.prototype.g;E("ol.style.Style",Ii,OPENLAYERS);E("ol.style.Circle",Hi,OPENLAYERS);E("ol.style.RegularShape",wm,OPENLAYERS);E("ol.style.Fill",zi,OPENLAYERS);E("ol.style.Stroke",Fi,OPENLAYERS);E("ol.style.Icon",Wg,OPENLAYERS);
-E("ol.style.Text",function(b){b=b||{};this.a=b.font;this.g=b.rotation;this.h=b.scale;this.i=b.text;this.j=b.textAlign;this.B=b.textBaseline;this.c=void 0!==b.fill?b.fill:new zi({color:"#333"});this.l=void 0!==b.stroke?b.stroke:null;this.b=void 0!==b.offsetX?b.offsetX:0;this.f=void 0!==b.offsetY?b.offsetY:0},OPENLAYERS);E("ol.View",Wc,OPENLAYERS);Wc.prototype.on=Wc.prototype.V;Wc.prototype.getZoom=Wc.prototype.kd;Wc.prototype.setZoom=Wc.prototype.ue;Wc.prototype.getCenter=Wc.prototype.ga;
-Wc.prototype.setCenter=Wc.prototype.ma;Wc.prototype.calculateExtent=Wc.prototype.dc;Wc.prototype.getProjection=Wc.prototype.ae;Wc.prototype.fit=Wc.prototype.fd;E("ol.control.defaults",ff,OPENLAYERS);E("ol.layer.Tile",X,OPENLAYERS);X.prototype.getVisible=X.prototype.Va;X.prototype.setVisible=X.prototype.wc;X.prototype.getZIndex=X.prototype.Pb;X.prototype.setZIndex=X.prototype.xc;X.prototype.getOpacity=X.prototype.Ob;X.prototype.setOpacity=X.prototype.vc;X.prototype.getSource=X.prototype.W;
-X.prototype.setSource=X.prototype.Sb;X.prototype.on=X.prototype.V;E("ol.layer.Vector",Y,OPENLAYERS);Y.prototype.getVisible=Y.prototype.Va;Y.prototype.setVisible=Y.prototype.wc;Y.prototype.getSource=Y.prototype.W;Y.prototype.setStyle=Y.prototype.s;Y.prototype.getZIndex=Y.prototype.Pb;Y.prototype.setZIndex=Y.prototype.xc;Y.prototype.getOpacity=Y.prototype.Ob;Y.prototype.setOpacity=Y.prototype.vc;Y.prototype.getSource=Y.prototype.W;Y.prototype.setSource=Y.prototype.Sb;Y.prototype.on=Y.prototype.V;
-E("ol.source.OSM",qm,OPENLAYERS);qm.prototype.refresh=qm.prototype.ra;E("ol.source.MapQuest",sm,OPENLAYERS);sm.prototype.refresh=sm.prototype.ra;E("ol.source.XYZ",pm,OPENLAYERS);pm.prototype.refresh=pm.prototype.ra;pm.prototype.setUrl=pm.prototype.s;pm.prototype.refresh=pm.prototype.ra;E("ol.Map",Z,OPENLAYERS);Z.prototype.on=Z.prototype.V;Z.prototype.getTarget=Z.prototype.Nb;Z.prototype.getTargetElement=Z.prototype.Fa;Z.prototype.getView=Z.prototype.O;Z.prototype.addOverlay=Z.prototype.cd;
-Z.prototype.addLayer=Z.prototype.bd;Z.prototype.removeLayer=Z.prototype.pe;Z.prototype.getEventPixel=Z.prototype.nc;Z.prototype.hasFeatureAtPixel=Z.prototype.Hd;Z.prototype.getSize=Z.prototype.Ha;Z.prototype.updateSize=Z.prototype.nb;Z.prototype.forEachFeatureAtPixel=Z.prototype.hd;Z.prototype.addInteraction=Z.prototype.ad;Z.prototype.removeInteraction=Z.prototype.oe;Z.prototype.beforeRender=Z.prototype.ea;Z.prototype.addControl=Z.prototype.$c;Z.prototype.once=Z.prototype.Rc;
-Z.prototype.renderSync=Z.prototype.se;E("ol.source.Vector",Uj,OPENLAYERS);Uj.prototype.getFeatures=Uj.prototype.ee;Uj.prototype.getExtent=Uj.prototype.C;Uj.prototype.refresh=Uj.prototype.ra;Uj.prototype.addFeatures=Uj.prototype.vb;Uj.prototype.addFeature=Uj.prototype.ub;Uj.prototype.clear=Uj.prototype.clear;Uj.prototype.forEachFeature=Uj.prototype.gd;Uj.prototype.refresh=Uj.prototype.ra;E("ol.source.TileArcGISRest",vm,OPENLAYERS);vm.prototype.refresh=vm.prototype.ra;E("ol.Overlay",rl,OPENLAYERS);
-rl.prototype.setPosition=rl.prototype.uc;E("ol.Feature",Gj,OPENLAYERS);Gj.prototype.getProperties=Gj.prototype.ua;Gj.prototype.setProperties=Gj.prototype.l;Gj.prototype.getGeometry=Gj.prototype.M;E("ol.geom.Point",Lc,OPENLAYERS);Lc.prototype.transform=Lc.prototype.o;Lc.prototype.getCoordinates=Lc.prototype.oa;Lc.prototype.getExtent=Lc.prototype.C;E("ol.geom.Polygon",Sc,OPENLAYERS);Sc.prototype.getCoordinates=Sc.prototype.oa;Sc.prototype.getExtent=Sc.prototype.C;Sc.prototype.transform=Sc.prototype.o;
-E("ol.geom.LineString",Al,OPENLAYERS);Al.prototype.getCoordinates=Al.prototype.oa;Al.prototype.getExtent=Al.prototype.C;Al.prototype.transform=Al.prototype.o;E("ol.proj.Projection",hc,OPENLAYERS);hc.prototype.getCode=hc.prototype.l;E("ol.interaction.Draw",Tl,OPENLAYERS);Tl.prototype.on=Tl.prototype.V;E("ol.animation.pan",dd,OPENLAYERS);E("ol.control.FullScreen",lf,OPENLAYERS);
-  return OPENLAYERS.ol;
-}));
-
diff --git a/_src/ol/ol-config.json b/_src/ol/ol-config.json
deleted file mode 100644
index 7acbe7c2a47ccff8c3592f48d6501ce3f06c7658..0000000000000000000000000000000000000000
--- a/_src/ol/ol-config.json
+++ /dev/null
@@ -1,140 +0,0 @@
-{
-  "exports": [
-    "ol.format.GeoJSON",
-    "ol.format.GeoJSON#readFeatures",
-    "ol.format.GeoJSON#readFeature",
-    "ol.format.EsriJSON",
-    "ol.format.EsriJSON#readFeatures",
-    "ol.format.EsriJSON#readFeature",
-    "ol.style.Style",
-    "ol.style.Circle",
-    "ol.style.RegularShape",
-    "ol.style.Fill",
-    "ol.style.Stroke",
-    "ol.style.Icon",
-    "ol.style.Text",
-    "ol.View",
-    "ol.View#on",
-    "ol.View#getZoom",
-    "ol.View#setZoom",
-    "ol.View#getCenter",
-    "ol.View#setCenter",
-    "ol.View#calculateExtent",
-    "ol.View#getProjection",
-    "ol.View#fit",
-    "ol.control.defaults",
-    "ol.layer.Tile",
-    "ol.layer.Tile#getVisible",
-    "ol.layer.Tile#setVisible",
-    "ol.layer.Tile#getZIndex",
-    "ol.layer.Tile#setZIndex",
-    "ol.layer.Tile#getOpacity",
-    "ol.layer.Tile#setOpacity",
-    "ol.layer.Tile#getSource",
-    "ol.layer.Tile#setSource",
-    "ol.layer.Tile#on",
-    "ol.layer.Vector",
-    "ol.layer.Vector#getVisible",
-    "ol.layer.Vector#setVisible",
-    "ol.layer.Vector#getSource",
-    "ol.layer.Vector#setStyle",
-    "ol.layer.Vector#getZIndex",
-    "ol.layer.Vector#setZIndex",
-    "ol.layer.Vector#getOpacity",
-    "ol.layer.Vector#setOpacity",
-    "ol.layer.Vector#getSource",
-    "ol.layer.Vector#setSource",
-    "ol.layer.Vector#on",
-    "ol.source.OSM",
-    "ol.source.OSM#refresh",
-    "ol.source.MapQuest",
-    "ol.source.MapQuest#refresh",
-    "ol.source.XYZ",
-    "ol.source.XYZ#refresh",
-    "ol.source.XYZ#setUrl",
-    "ol.source.XYZ#refresh",
-    "ol.Map",
-    "ol.Map#on",
-    "ol.Map#getTarget",
-    "ol.Map#getTargetElement",
-    "ol.Map#getView",
-    "ol.Map#addOverlay",
-    "ol.Map#addLayer",
-    "ol.Map#removeLayer",
-    "ol.Map#getEventPixel",
-    "ol.Map#hasFeatureAtPixel",
-    "ol.Map#getSize",
-    "ol.Map#updateSize",
-    "ol.Map#forEachFeatureAtPixel",
-    "ol.Map#addInteraction",
-    "ol.Map#removeInteraction",
-    "ol.Map#beforeRender",
-    "ol.Map#addControl",
-    "ol.Map#once",
-    "ol.Map#renderSync",
-    "ol.source.Vector",
-    "ol.source.Vector#getFeatures",
-    "ol.source.Vector#getExtent",
-    "ol.source.Vector#refresh",
-    "ol.source.Vector#addFeatures",
-    "ol.source.Vector#addFeature",
-    "ol.source.Vector#clear",
-    "ol.source.Vector#forEachFeature",
-    "ol.source.Vector#refresh",
-    "ol.source.TileArcGISRest",
-    "ol.source.TileArcGISRest#refresh",
-    "ol.Overlay",
-    "ol.Overlay#setPosition",
-    "ol.Feature",
-    "ol.Feature#getProperties",
-    "ol.Feature#setProperties",
-    "ol.Feature#getGeometry",
-    "ol.geom.Point",
-    "ol.geom.Point#transform",
-    "ol.geom.Point#getCoordinates",
-    "ol.geom.Point#getExtent",
-    "ol.geom.Polygon",
-    "ol.geom.Polygon#getCoordinates",
-    "ol.geom.Polygon#getExtent",
-    "ol.geom.Polygon#transform",
-    "ol.geom.LineString",
-    "ol.geom.LineString#getCoordinates",
-    "ol.geom.LineString#getExtent",
-    "ol.geom.LineString#transform",
-    "ol.proj.Projection",
-    "ol.proj.Projection#getCode",
-    "ol.interaction.Draw",
-    "ol.interaction.Draw#on",
-    "ol.animation.pan",
-    "ol.control.FullScreen"
-  ],
-  "compile": {
-    "externs": [
-      "externs/bingmaps.js",
-      "externs/closure-compiler.js",
-      "externs/geojson.js",
-      "externs/oli.js",
-      "externs/olx.js",
-      "externs/proj4js.js",
-      "externs/tilejson.js",
-      "externs/topojson.js",
-      "externs/esrijson.js"
-    ],
-    "define": [
-      "goog.array.ASSUME_NATIVE_FUNCTIONS=true",
-      "goog.dom.ASSUME_STANDARDS_MODE=true",
-      "goog.json.USE_NATIVE_JSON=true",
-      "goog.DEBUG=false"
-    ],
-    "jscomp_off": [
-      "unknownDefines"
-    ],
-    "extra_annotation_name": [
-      "api", "observable"
-    ],
-    "compilation_level": "ADVANCED_OPTIMIZATIONS",
-    "use_types_for_optimization": true,
-    "manage_closure_dependencies": true
-  },
-  "umd": true
-}
diff --git a/_src/ol/ol.js b/_src/ol/ol.js
deleted file mode 100644
index 4cf6e5333cda3216adeda271d23613d2c9817d80..0000000000000000000000000000000000000000
--- a/_src/ol/ol.js
+++ /dev/null
@@ -1,3 +0,0 @@
-const ol = require('./ol-build');
-
-export default ol;
\ No newline at end of file
diff --git a/_src/olHelpers/SortedFeatures.js b/_src/olHelpers/SortedFeatures.js
deleted file mode 100644
index bba3f45a8a08b38a6b3c5f5df1febdde14e7dfcb..0000000000000000000000000000000000000000
--- a/_src/olHelpers/SortedFeatures.js
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- * Created by gavorhes on 12/23/2015.
- */
-import provide from '../util/provide';
-let nm = provide('olHelpers');
-
-/**
- * take an array of features and sort by a given property name
- */
-class SortedFeatures {
-
-    /**
-     *
-     * @param {Array<ol.Feature>} features array of ol features
-     * @param {string} propertyName - the property name to use for lookup
-     */
-    constructor(features, propertyName) {
-        this.sortedFeatures = features;
-        this.propertyName = propertyName;
-
-        if (this.sortedFeatures.length > 0) {
-            this._propertyType = typeof this.sortedFeatures[0].getProperties()[this.propertyName];
-
-            let _this = this;
-            this.sortedFeatures.sort(function (a, b) {
-                if (_this._propertyType == 'number'){
-                    return (a['getProperties']()[_this.propertyName] - b['getProperties']()[_this.propertyName]);
-                } else if (_this._propertyType == 'string'){
-                    return (a['getProperties']()[_this.propertyName] > b['getProperties']()[_this.propertyName]);
-                }
-            });
-        }
-    }
-
-    /**
-     * recursive search to find the value
-     * @param {number|string} propertyValue - the property value to search for
-     * @param {boolean} [exactMatch=false] if only an exact match should be returned
-     * @param {Array} [sortedFeatures=this.sortedFeatures] - the candidate features
-     * @returns {ol.Feature|undefined} the feature matching the lookup
-     */
-    getFeature(propertyValue, exactMatch, sortedFeatures) {
-        if (typeof sortedFeatures == 'undefined'){
-            sortedFeatures = this.sortedFeatures;
-        }
-
-        if (typeof exactMatch !== 'boolean'){
-            exactMatch = false;
-        }
-
-        if (sortedFeatures.length == 0){
-            return undefined;
-        }
-
-        if (sortedFeatures.length == 1){
-            if (exactMatch){
-                if (sortedFeatures[0].getProperties()[this.propertyName] == propertyValue){
-                    return sortedFeatures[0];
-                } else {
-                    return undefined;
-                }
-            } else {
-                return sortedFeatures[0];
-            }
-        }
-
-        let lowProp = sortedFeatures[0].getProperties()[this.propertyName];
-        let highProp = sortedFeatures[sortedFeatures.length - 1].getProperties()[this.propertyName];
-
-        if (exactMatch){
-            if (lowProp == propertyValue){
-                return sortedFeatures[0];
-            } else if (propertyValue < lowProp){
-                return undefined;
-            } else if (highProp == propertyValue){
-                return sortedFeatures[sortedFeatures.length - 1];
-            } else if (propertyValue >  highProp){
-                return undefined;
-            }
-        } else {
-            if (propertyValue <= lowProp){
-                return sortedFeatures[0];
-            } else if (propertyValue >= highProp){
-                return sortedFeatures[sortedFeatures.length - 1];
-            }
-        }
-
-        let midIndex = Math.floor(sortedFeatures.length / 2);
-        let midFeature = sortedFeatures[midIndex];
-        let midProperty = midFeature.getProperties()[this.propertyName];
-
-        if (midProperty ===  propertyValue){
-            return midFeature;
-        }
-
-        if (propertyValue < midProperty){
-            return this.getFeature(propertyValue, exactMatch, sortedFeatures.slice(0, midIndex));
-        } else {
-            return this.getFeature(propertyValue, exactMatch, sortedFeatures.slice(midIndex));
-        }
-    }
-}
-
-nm.SortedFeatures = SortedFeatures;
-export default SortedFeatures;
-
diff --git a/_src/olHelpers/esriToOlStyle.js b/_src/olHelpers/esriToOlStyle.js
deleted file mode 100644
index 48bacdb10b96edabe6ea5a8f079609c338d9d0f6..0000000000000000000000000000000000000000
--- a/_src/olHelpers/esriToOlStyle.js
+++ /dev/null
@@ -1,380 +0,0 @@
-/**
- * Created by gavorhes on 1/4/2016.
- */
-import provide from '../util/provide';
-import ol from '../ol/ol';
-const nm = provide('olHelpers.esriToOlStyle');
-
-/**
- * This callback is displayed as part of the Requester class.
- * @callback styleFunc
- * @param {ol.Feature} feat - openlayers feature
- * @param {number} resolution - map resolution
- */
-
-/**
- *
- * @param {Array<number>} colorArray - input color array
- * @param {number} opacity - the opacity 0 to 1
- * @returns {string} rgba string
- * @private
- */
-function _colorArrayToRgba(colorArray, opacity) {
-    "use strict";
-
-    return `rgba(${colorArray[0]},${colorArray[1]},${colorArray[2]},${opacity})`;
-}
-
-/**
- * escape html charcters
- * @param {string} str - input string
- * @returns {string} escaped string
- */
-function htmlEscape(str) {
-    return String(str)
-        .replace(/&/g, '&amp;')
-        .replace(/"/g, '&quot;')
-        .replace(/'/g, '&#39;')
-        .replace(/</g, '&lt;')
-        .replace(/>/g, '&gt;');
-}
-
-nm.htmlEscape = htmlEscape;
-
-
-class CommonSymbol {
-
-    /**
-     * 
-     * @param symbolObj
-     * @param {number} opacity
-     */
-    constructor(symbolObj, opacity) {
-        this.symbolObj = symbolObj;
-        this.opacity = opacity;
-        this.olStyle = undefined;
-        this.legendHtml = '';
-    }
-}
-
-class PointSymbol extends CommonSymbol {
-    constructor(symbolObj, opacity) {
-        super(symbolObj, opacity);
-        switch (this.symbolObj['type']) {
-            case 'esriSMS':
-                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
-                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);
-                let outlineWidth = this.symbolObj.outline.width;
-                let radius = this.symbolObj.size;
-
-
-                this.olStyle = new ol.style.Style({
-                    image: new ol.style.Circle({
-                        radius: radius,
-                        fill: new ol.style.Fill({
-                            color: innerColor
-                        }),
-                        stroke: new ol.style.Stroke({color: outerColor, width: outlineWidth})
-                    })
-                });
-                this.legendHtml = `<span class="legend-layer-icon" style="color: ${innerColor}">&#9679;</span>`;
-                break;
-            case 'esriPMS':
-                this.olStyle = new ol.style.Style({
-                    image: new ol.style.Icon({src: `data:image/png;base64,${this.symbolObj['imageData']}`})
-                });
-                this.legendHtml = `<img class="legend-layer-icon" height="17" src="data:image/png;base64,${this.symbolObj['imageData']}">`;
-                break;
-            default:
-                console.log(this.symbolObj);
-                alert('Point symbol does not handle symbol type: ' + this.symbolObj['type']);
-        }
-    }
-}
-
-class LineSymbol extends CommonSymbol {
-    constructor(symbolObj, opacity) {
-        super(symbolObj, opacity);
-        switch (this.symbolObj['type']) {
-            case 'esriSLS':
-                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
-                let lineWidth = this.symbolObj.width;
-
-                this.olStyle = new ol.style.Style({
-                    stroke: new ol.style.Stroke({
-                        color: innerColor,
-                        //lineDash: [4],
-                        width: lineWidth
-                    })
-                });
-
-                this.legendHtml = `<span class="legend-layer-icon" `;
-                this.legendHtml += `style="`;
-                this.legendHtml += `background-color: ${innerColor};`;
-                this.legendHtml += `width: 40px;`;
-                this.legendHtml += `height: 4px;`;
-                this.legendHtml += `position: relative;`;
-                this.legendHtml += `display: inline-block;`;
-                this.legendHtml += `top: -1px;`;
-                this.legendHtml += `"></span>`;
-                break;
-            default:
-                console.log(this.symbolObj);
-                alert('Line symbol does not handle symbol type: ' + this.symbolObj['type']);
-        }
-    }
-}
-
-class PolygonSymbol extends CommonSymbol {
-    constructor(symbolObj, opacity) {
-        super(symbolObj, opacity);
-        switch (this.symbolObj['type']) {
-            case 'esriSFS':
-                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);
-                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);
-                let outlineWidth = this.symbolObj.outline.width;
-
-                this.olStyle = new ol.style.Style({
-                    stroke: new ol.style.Stroke({
-                        color: outerColor,
-                        //lineDash: [4],
-                        width: outlineWidth
-                    }),
-                    fill: new ol.style.Fill({
-                        color: innerColor
-                    })
-                });
-
-                this.legendHtml = `<span class="legend-layer-icon" `;
-                this.legendHtml += `style="`;
-                this.legendHtml += `background-color: ${innerColor};`;
-                this.legendHtml += `border: solid ${outerColor} 1px;`;
-                this.legendHtml += `width: 40px;`;
-                this.legendHtml += `height: 9px;`;
-                this.legendHtml += `position: relative;`;
-                this.legendHtml += `display: inline-block;`;
-                this.legendHtml += `top: 2px;`;
-                this.legendHtml += `"></span>`;
-                break;
-
-            default:
-                console.log(this.symbolObj);
-                alert('Polygon symbol does handle symbol type: ' + this.symbolObj['type']);
-        }
-    }
-}
-
-class SymbolGenerator {
-    constructor(esriResponse) {
-        this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;
-        this.renderer = esriResponse['drawingInfo']['renderer'];
-        this.olStyle = undefined;
-        this.legendHtml = '';
-    }
-}
-
-class SingleSymbol extends SymbolGenerator {
-    /**
-     *
-     * @param {object} esriResponse - layer info
-     * @param {Constructor|*} SymbolClass - the symbol class to use
-     */
-    constructor(esriResponse, SymbolClass) {
-        super(esriResponse);
-        this.symbol = this.renderer['symbol'];
-        let symbolObj = new SymbolClass(this.symbol, this.opacity);
-        this.olStyle = symbolObj.olStyle;
-        this.legendHtml = symbolObj.legendHtml;
-    }
-}
-
-class UniqueValueSymbol extends SymbolGenerator {
-    /**
-     *
-     * @param {object} esriResponse - layer info
-     * @param {Constructor|*} SymbolClass - the Symbol class definition
-     */
-    constructor(esriResponse, SymbolClass) {
-        super(esriResponse);
-        this.uniqueValueInfos = this.renderer['uniqueValueInfos'];
-        this.propertyName = this.renderer['field1'];
-        this.defaultSymbol = this.renderer['defaultSymbol'];
-
-
-        if (this.defaultSymbol) {
-            let symbolObj = new SymbolClass(this.defaultSymbol, this.opacity);
-            this.defaultStyle = symbolObj.olStyle;
-            this.defaultLabelHtml = `<span class="legend-layer-subitem">${htmlEscape(this.renderer['defaultLabel'])}</span>` + symbolObj.legendHtml;
-        } else {
-            this.defaultStyle = undefined;
-            this.defaultLabelHtml = 'other';
-        }
-
-        this.valueArray = [];
-        this.labelArray = [];
-        this.legendArray = [];
-        this.propertyStyleLookup = {};
-
-        for (let uniqueVal of this.uniqueValueInfos) {
-            this.labelArray.push(uniqueVal['label']);
-            this.valueArray.push(uniqueVal['value']);
-            let uniqueSym = new SymbolClass(uniqueVal.symbol, this.opacity);
-            this.legendArray.push(`<span class="legend-layer-subitem">${htmlEscape(uniqueVal['label'])}</span>` + uniqueSym.legendHtml);
-            this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;
-        }
-
-        let _this = this;
-
-        this.olStyle = function (feature, resolution) {
-            let checkProperties = feature.getProperties();
-            let checkProperty = checkProperties[_this.propertyName];
-
-            let returnValue;
-            if (_this.propertyStyleLookup[checkProperty] !== undefined) {
-                returnValue = [_this.propertyStyleLookup[checkProperty]];
-            } else {
-               returnValue = [_this.defaultStyle];
-            }
-
-            return returnValue;
-        };
-
-        if (this.defaultLabelHtml !== null) {
-            this.legendArray.push(this.defaultLabelHtml);
-        }
-
-        this.legendHtml = '<ul>';
-        for (let h of this.legendArray) {
-            this.legendHtml += `<li>${h}</li>`;
-        }
-        this.legendHtml += '</ul>';
-    }
-}
-
-
-
-
-
-/**
- * style and legend object
- * @typedef {object} styleAndLegend
- * @property {styleFunc} style - style function
- * @property {string} legend - legend content
- */
-
-/**
- *
- * @param {object} esriResponse - layer info
- * @returns {styleAndLegend} style and legend object
- */
-export function makeFeatureServiceLegendAndSymbol(esriResponse) {
-    "use strict";
-    let renderer = esriResponse['drawingInfo']['renderer'];
-    let symbolLegendOut = null;
-
-    switch (renderer['type']) {
-        case 'simple':
-            switch (esriResponse['geometryType']) {
-                case 'esriGeometryPoint':
-                    symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);
-                    break;
-                case 'esriGeometryPolyline':
-                    symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol);
-                    break;
-                case 'esriGeometryPolygon':
-                    symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol);
-                    break;
-                default:
-                    console.log(esriResponse);
-                    alert(esriResponse['geometryType'] + ' not handled');
-            }
-            break;
-        case 'uniqueValue':
-            switch (esriResponse['geometryType']) {
-                case 'esriGeometryPoint':
-                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);
-                    break;
-                case 'esriGeometryPolyline':
-                    symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol);
-                    break;
-                case 'esriGeometryPolygon':
-                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol);
-                    break;
-                default:
-                    console.log(esriResponse);
-                    alert(esriResponse['geometryType'] + ' not handled');
-            }
-            break;
-        default:
-            alert('not handled renderer type: ' + renderer['type']);
-    }
-
-    if (symbolLegendOut == null) {
-        return {style: undefined, legend: ''};
-    } else {
-        return {style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml};
-    }
-}
-
-nm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;
-
-/**
- *
- * @param {object} lyrObject - the layer as defined in the response
- * @param {boolean} [iconsOnly=false] use only icons
- * @returns {string} legend html
- */
-function mapServiceLegendItem(lyrObject, iconsOnly) {
-
-
-    iconsOnly = typeof iconsOnly == 'boolean' ? iconsOnly : false;
-    let layerName = lyrObject['layerName'];
-    let legendItems = lyrObject['legend'];
-    let legendHtml = '';
-
-    if (legendItems.length == 1) {
-        legendHtml = `<img class="legend-layer-icon" height="17" src="data:image/png;base64,${legendItems[0]['imageData']}">`;
-    } else {
-        legendHtml += '<span class="legend-items-expander" title="Expand/Collapse">&#9660;</span><ul>';
-        for (let i = 0; i < legendItems.length; i++) {
-            legendHtml += `<li>`;
-            legendHtml += `<span class="legend-layer-subitem">${htmlEscape(legendItems[i]['label'])}</span>`;
-            legendHtml += `<img class="legend-layer-icon" height="17" src="data:image/png;base64,${legendItems[i]['imageData']}">`;
-            legendHtml += `</li>`;
-        }
-        legendHtml += '</ul>';
-    }
-
-    if (!iconsOnly) {
-        legendHtml = `<span class="legend-layer-subitem">${layerName}</span>` + legendHtml;
-    }
-
-    return legendHtml;
-}
-
-/**
- * make map service legent
- * @param {object} esriResponse - layer info
- * @returns {string} legend content
- */
-export function makeMapServiceLegend(esriResponse) {
-    "use strict";
-
-    let newLegendHtml = '';
-
-    let layers = esriResponse['layers'];
-
-    if (layers.length == 1) {
-        newLegendHtml += mapServiceLegendItem(layers[0], true);
-    } else {
-        newLegendHtml += '<ul>';
-        for (let i = 0; i < layers.length; i++) {
-            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';
-        }
-        newLegendHtml += '</ul>';
-    }
-
-    return newLegendHtml;
-}
-
-nm.makeMapServiceLegend = makeMapServiceLegend;
diff --git a/_src/olHelpers/extentUtil.js b/_src/olHelpers/extentUtil.js
deleted file mode 100644
index cbdea263c1ba11faefae53380cc2b3396701dba0..0000000000000000000000000000000000000000
--- a/_src/olHelpers/extentUtil.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * Created by gavorhes on 7/18/2016.
- */
-import provide from '../util/provide';
-
-
-const nm = provide('util');
-
-/**
- *
- * @param {Array<LayerBaseVector>|Array<ol.layer.Vector>|LayerBaseVector|ol.layer.Vector|*} layers - array of layers or single
- * @returns {ol.Extent|Array<number>|*} - collective extent
- */
-export function calculateExtent(layers) {
-    "use strict";
-
-    if (layers.constructor.name != 'Array'){
-        layers = [layers];
-    }
-
-    let hasExtent = false;
-
-    let minX = 10E100;
-    let minY = 10E100;
-    let maxX = -10E100;
-    let maxY = -10E100;
-
-    for (let lyr of layers) {
-
-        /**
-         * 
-         * @type {ol.layer.Vector}
-         */
-        let olLayer = lyr['olLayer'] || lyr;
-        
-        
-        if (olLayer.getSource().getFeatures().length > 0) {
-            hasExtent = true;
-            let ext = olLayer.getSource().getExtent();
-            minX = ext[0] < minX ? ext[0] : minX;
-            minY = ext[1] < minY ? ext[1] : minY;
-            maxX = ext[2] > maxX ? ext[2] : maxX;
-            maxY = ext[3] > maxY ? ext[3] : maxY;
-        }
-    }
-
-    if (hasExtent) {
-        return [minX, minY, maxX, maxY];
-    } else {
-        return undefined;
-    }
-}
-
-nm.calculateExtent = calculateExtent;
- 
-
-/**
- * given one or an array of layers, fit to the map
- * @param {Array<LayerBaseVector>|Array<ol.layer.Vector>|LayerBaseVector|ol.layer.Vector} layers - array of layers or single
- * @param {ol.Map} mp - the map to fit
- * @param {number|undefined} [zoomOut=undefined] - levels to zoom out after fit
- */
-export function fitToMap(layers, mp, zoomOut){
-    "use strict";
-
-    /**
-     * 
-     * @type {ol.Extent|undefined}
-     */
-    let ext = calculateExtent(layers);
-    
-    if (typeof ext == 'undefined'){
-        return;
-    }
-    
-    mp.getView().fit(ext, mp.getSize());
-    
-    if (typeof zoomOut == 'number'){
-        mp.getView().setZoom(mp.getView().getZoom() - zoomOut);
-    }
-    
-}
-
-nm.calculateExtent = calculateExtent;
diff --git a/_src/olHelpers/layerSwipe.js b/_src/olHelpers/layerSwipe.js
deleted file mode 100644
index 2ab84eb3b62443ef164060bfb32b823add4c067c..0000000000000000000000000000000000000000
--- a/_src/olHelpers/layerSwipe.js
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
- * Created by gavorhes on 6/1/2016.
- */
-
-
-import provide from '../util/provide';
-import $ from '../jquery/jquery';
-
-let nm = provide('collections.layerSwipe');
-
-
-class LayerSwipe {
-
-    /**
-     *
-     * @param {ol.Map} map - the map
-     * @param {string} [sliderContent=''] - additional html to be added inside the slider div
-     */
-    constructor(map, sliderContent) {
-
-        sliderContent = sliderContent || '';
-        /**
-         *
-         * @type {Array<LayerBase>}
-         */
-        this.leftLayers = [];
-
-        /**
-         *
-         * @type {Array<LayerBase>}
-         */
-        this.rightLayers = [];
-
-        this._percentRight = 50;
-        this.offset = null;
-
-        this._map = map;
-        this.$mapElement = $(map.getTargetElement());
-        this.$mapElement.append(`<div class="layer-swiper">${sliderContent}</div>`);
-
-
-        this.$swiper = this.$mapElement.find('.layer-swiper');
-        this.percentRight = this.percentRight;
-
-        this.dragging = false;
-
-        this.$mapElement.mouseleave(() => {
-            this.dragging = false;
-        });
-
-        this.$swiper.bind('mousewheel DOMMouseScroll', function(evt){
-            evt.preventDefault();
-        });
-
-        this.$swiper.mousedown((evt) => {
-            this.dragging = true;
-            this.offset = evt.offsetX;
-        });
-
-        $(window).mouseup(() => {
-            this.dragging = false;
-        });
-
-        this.$mapElement.mousemove((evt) => {
-            if (this.dragging) {
-                let mapLeft = this.$mapElement.position().left;
-                let mapWidth = this.$mapElement.width();
-
-                this.percentRight = 100 * (evt.pageX - this.offset - mapLeft) / mapWidth;
-            }
-        });
-    }
-
-    /**
-     *
-     * @param {LayerBase|*} lyr - layer to be added to left side
-     */
-    addLeftLayer(lyr) {
-
-        if (this.leftLayers.indexOf(lyr) != -1){
-            return;
-        }
-
-        lyr.olLayer.on('precompose', (event) => {
-            let ctx = event.context;
-            let width = ctx.canvas.width * (this.percentRight / 100);
-
-            ctx.save();
-            ctx.beginPath();
-            ctx.rect(0, 0, width, ctx.canvas.height);
-            ctx.clip();
-        });
-
-        lyr.olLayer.on('postcompose', function (event) {
-            let ctx = event.context;
-            ctx.restore();
-        });
-
-
-        this.leftLayers.push(lyr);
-    }
-
-    /**
-     *
-     * @param {LayerBase|*} lyr - layer to be added to right side
-     */
-    addRightLayer(lyr) {
-
-        if (this.rightLayers.indexOf(lyr) != -1){
-            return;
-        }
-
-        lyr.olLayer.on('precompose', (event) => {
-            let ctx = event.context;
-            let width = ctx.canvas.width * (this.percentRight / 100);
-
-            ctx.save();
-            ctx.beginPath();
-            ctx.rect(width, 0, ctx.canvas.width - width, ctx.canvas.height);
-            ctx.clip();
-        });
-
-        lyr.olLayer.on('postcompose', function (event) {
-            let ctx = event.context;
-            ctx.restore();
-        });
-
-        this.rightLayers.push(lyr);
-    }
-
-    get percentRight() {
-        return this._percentRight;
-    }
-
-    set percentRight(pcnt) {
-        let maxed = this.$swiper.position().left + this.$swiper.width() > this.$mapElement.width();
-
-        if (pcnt < 0) {
-            return;
-        } else if (maxed && pcnt > this.percentRight) {
-            return;
-        }
-
-        this._percentRight = pcnt;
-        this.$swiper.css('left', `${this._percentRight.toFixed(2)}%`);
-        this._map.render();
-    }
-}
-
-nm.LayerSwipe = LayerSwipe;
-export default LayerSwipe;
diff --git a/_src/olHelpers/mapInteractionBase.js b/_src/olHelpers/mapInteractionBase.js
deleted file mode 100644
index b7bf4cbc86b20c52fddc74705a91cec8fd30188c..0000000000000000000000000000000000000000
--- a/_src/olHelpers/mapInteractionBase.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Created by gavorhes on 12/8/2015.
- */
-import provide from '../util/provide';
-const nm = provide('olHelpers');
-
-
-/**
- * base interaction
- */
-class MapInteractionBase {
-
-    /**
-     * map interaction base
-     * @param {string} subtype - the interaction subtype
-     */
-    constructor(subtype) {
-        this._map = undefined;
-        this._initialized = false;
-        this._subtype = subtype;
-    }
-
-    /**
-     * base initializer, returns true for already initialized
-     * @param {ol.Map} theMap - the ol Map
-     * @returns {boolean} true for already initialized
-     */
-    init(theMap) {
-        if (!this._initialized) {
-            this._map = theMap;
-            this._initialized = true;
-
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * get reference to the ol map object
-     * @returns {ol.Map} the map object
-     */
-    get map() {
-        return this._map;
-    }
-
-    /**
-     * get if is initialized
-     * @returns {boolean} is initialized
-     */
-    get initialized() {
-        return this._initialized;
-    }
-
-    /**
-     * Check the initialization status and throw exception if not valid yet
-     * @protected
-     */
-    _checkInit() {
-        if (!this.initialized) {
-            let msg = `${this._subtype} object not initialized`;
-            alert(msg);
-            console.log(msg);
-            throw msg;
-        }
-    }
-
-    /**
-     * Check the initialization status and throw exception if not valid yet
-     */
-    checkInit(){
-        this._checkInit();
-    }
-}
-nm.MapInteractionBase = MapInteractionBase;
-export default MapInteractionBase;
diff --git a/_src/olHelpers/mapMove.js b/_src/olHelpers/mapMove.js
deleted file mode 100644
index 26f4b4898d372d7df388662026de766a5420fec6..0000000000000000000000000000000000000000
--- a/_src/olHelpers/mapMove.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-import MapMoveCls from './mapMoveCls';
-
-/**
- * The single map move object catch is that it is common to multimap pages
- * @type {MapMoveCls}
- */
-export default new MapMoveCls();
diff --git a/_src/olHelpers/mapMoveCls.js b/_src/olHelpers/mapMoveCls.js
deleted file mode 100644
index 57909104ef4eb615cdafc7a9c2e10eb927da5cc4..0000000000000000000000000000000000000000
--- a/_src/olHelpers/mapMoveCls.js
+++ /dev/null
@@ -1,282 +0,0 @@
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-
-import $ from '../jquery/jquery';
-import MapInteractionBase from './mapInteractionBase';
-import * as checkDefined from '../util/checkDefined';
-import provide from '../util/provide';
-import makeGuid from '../util/makeGuid';
-const nm = provide('olHelpers');
-
-/**
- * assists with map move interactions, trigger callback functions
- * @augments MapInteractionBase
- */
-class MapMoveCls extends MapInteractionBase {
-
-    /**
-     * constructor called implicitly
-     */
-    constructor() {
-        super('map move');
-        this._arrLyrRequest = [];
-        this._arrLyrTimeout = [];
-        this._arrLayer = [];
-        this._lookupLayer = {};
-
-        this._mapMoveCallbacks = [];
-        this._mapMoveCallbacksLookup = {};
-        this._mapMoveCallbackDelays = [];
-        this._mapMoveCallbackContext = [];
-        this._mapMoveCallbackTimeout = [];
-
-        this._mapExtent = undefined;
-        this._zoomLevel = undefined;
-    }
-
-    /**
-     * initialize the map move object
-     * @param {ol.Map} theMap - the ol map
-     */
-    init(theMap) {
-        if (super.init(theMap)) {
-            return;
-        }
-
-        let _this = this;
-
-        this.map.getView().on(['change:center', 'change:resolution'], function (e) {
-
-            _this._updateMapExtent();
-
-            // trigger the layer updates
-            for (let i = 0; i < _this._arrLayer.length; i++) {
-                _this.triggerLyrLoad(_this._arrLayer[i], i, e.type);
-            }
-
-            // trigger the map callbacks
-            for (let i = 0; i < _this._mapMoveCallbacks.length; i++) {
-                _this.triggerMoveCallback(i, e.type);
-            }
-        });
-    }
-
-    _updateMapExtent() {
-        let theView = this.map.getView();
-        this._zoomLevel = theView.getZoom();
-
-        let extentArray = theView.calculateExtent(this.map.getSize());
-
-        this._mapExtent = {
-            minX: extentArray[0],
-            minY: extentArray[1],
-            maxX: extentArray[2],
-            maxY: extentArray[3]
-        };
-    }
-
-    /**
-     * return the map extent
-     */
-    get mapExtent() {
-        if (!this._mapExtent) {
-            this._updateMapExtent();
-        }
-
-        return this._mapExtent;
-    }
-
-    /**
-     * Trigger the layer load
-     * @param {LayerBaseVector|*} lyr - the layer being acted on
-     * @param {number} [index=undefined] - index of the layer
-     * @param {string|*} [eventType=undefined] the event triggering the load, as 'change:center' or 'change:resolution'
-     */
-    triggerLyrLoad(lyr, index, eventType) {
-
-        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {
-            throw 'need to define lyr or index';
-        } else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {
-            index = this._arrLayer.indexOf(lyr);
-        } else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {
-            lyr = this._arrLayer[index];
-        }
-
-        // clear the timeout
-        if (this._arrLyrTimeout[index] != null) {
-            clearTimeout(this._arrLyrTimeout[index]);
-            this._arrLyrTimeout[index] = null;
-        }
-
-        // abort if necessary and clear the request
-        if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {
-            this._arrLyrRequest[index].abort();
-            this._arrLyrRequest[index] = null;
-        }
-
-        // dummy callback used if before load returns false
-        let callbackFunc = function () {};
-
-        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {
-            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);
-
-            let _this = this;
-
-            callbackFunc = function () {
-                function innerFunction(theLayer, theIndex) {
-                    let _innerThis = this;
-                    this._arrLyrRequest[theIndex] = $.get(
-                        theLayer.url,
-                        theLayer.mapMoveParams,
-                        function (d) {
-                            /**
-                             * @type {LayerBaseVector}
-                             */
-                            theLayer.mapMoveCallback(d);
-                            theLayer.loadCallback();
-                        }, 'json').fail(
-                        function (jqXHR) {
-                            if (jqXHR.statusText != 'abort') {
-                                console.log('failed');
-                                console.log(theLayer.url);
-                                console.log(theLayer.mapMoveParams);
-                            }
-                        }).always(
-                        function () {
-                            _innerThis._arrLyrTimeout[theIndex] = null;
-                            _innerThis._arrLyrRequest[theIndex] = null;
-                        });
-                }
-                innerFunction.call(_this, lyr, index);
-            };
-        } else {
-            lyr.clear();
-        }
-        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);
-    }
-
-    /**
-     * trigger the map move call back at the given index
-     * @param {number} ind - the index of the layer
-     * @param {string|*} [eventType=undefined] the event triggering the load as 'change:center' or 'change:resolution'
-     * @param {string} [functionId=undefined] the function id used to reference the added callback function
-     */
-    triggerMoveCallback(ind, eventType, functionId) {
-
-        if (typeof ind == 'undefined' && typeof functionId == 'undefined'){
-            throw 'either the function index or the id must be defined';
-        }
-
-        if (typeof ind !== 'number'){
-            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);
-        }
-
-        if (ind < 0){
-            console.log('function not found');
-
-            return;
-        }
-
-        // clear the timeout
-        if (this._mapMoveCallbackTimeout[ind] != null) {
-            clearTimeout(this._mapMoveCallbackTimeout[ind]);
-            this._mapMoveCallbackTimeout[ind] = null;
-        }
-
-        let ctx = this._mapMoveCallbackContext[ind];
-        let theFunc = this._mapMoveCallbacks[ind];
-
-        let _this = this;
-
-        let f = function () {
-            if (ctx !== null) {
-                theFunc.call(ctx, _this._mapExtent, _this._zoomLevel, eventType);
-            } else {
-                theFunc(_this._mapExtent, _this._zoomLevel, eventType);
-            }
-        };
-
-        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);
-    }
-
-    /**
-     * Add a layer to the interaction
-     * @param {LayerBaseVector|*} lyr - layer to add
-     * @param {boolean} [triggerOnAdd=true] - if the layer should be loaded on add
-     */
-    addVectorLayer(lyr, triggerOnAdd) {
-        if (this._arrLayer.indexOf(lyr) > -1) {
-            console.log('already added ' + lyr.name + ' to map move');
-
-            return;
-        }
-        this._checkInit();
-
-        this._arrLyrRequest.push(null);
-        this._arrLyrTimeout.push(null);
-        this._arrLayer.push(lyr);
-        this._lookupLayer[lyr.id] = lyr;
-
-        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
-
-        if (triggerOnAdd) {
-            if (this._mapExtent === undefined) {
-                this._updateMapExtent();
-            }
-            this.triggerLyrLoad(lyr, this._arrLayer.length - 1);
-        }
-    }
-
-    /**
-     * This callback is displayed as a global member.
-     * @callback mapMoveCallbackFunction
-     * @param {object} extent - extent object
-     * @param {number} extent.minX - minX
-     * @param {number} extent.minY - minY
-     * @param {number} extent.maxX - maxX
-     * @param {number} extent.maxY - maxY
-     * @param {number} zoomLevel - zoom level
-     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
-     */
-
-    /**
-     * add a callback to the map move event
-     * @param {mapMoveCallbackFunction} func - callback function
-     * @param {*} context - the context to use for this function
-     * @param {number} [delay=50] the delay before call load
-     * @param {boolean} [triggerOnAdd=true] if the layer should be loaded on add to mapMove
-     * @param {string} [functionId=undefined] optional id to reference the function later for outside triggering
-     */
-    addCallback(func, context, delay, triggerOnAdd, functionId) {
-
-        if (this._mapMoveCallbacks.indexOf(func) > -1) {
-            console.log('this function already added to map move');
-
-            return;
-        }
-        this._checkInit();
-        if (!functionId){
-            functionId = makeGuid();
-        }
-
-        this._mapMoveCallbacks.push(func);
-        this._mapMoveCallbacksLookup[functionId] = func;
-        this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);
-        this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);
-        this._mapMoveCallbackTimeout.push(null);
-
-        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;
-
-        if (triggerOnAdd) {
-            if (this._mapExtent === undefined) {
-                this._updateMapExtent();
-            }
-            this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);
-        }
-    }
-}
-
-nm.MapMoveCls = MapMoveCls;
-export default MapMoveCls;
diff --git a/_src/olHelpers/mapPopup.js b/_src/olHelpers/mapPopup.js
deleted file mode 100644
index 284e26508ccf32ec685c650ba164290258ccc77e..0000000000000000000000000000000000000000
--- a/_src/olHelpers/mapPopup.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-import MapPopupCls from './mapPopupCls';
-
-/**
- * The single popup object catch is that it is common to multimap pages
- * @type {MapPopupCls}
- */
-export default new MapPopupCls();
diff --git a/_src/olHelpers/mapPopupCls.js b/_src/olHelpers/mapPopupCls.js
deleted file mode 100644
index 55e478ccf9740cb9fc8245268c894655d375357d..0000000000000000000000000000000000000000
--- a/_src/olHelpers/mapPopupCls.js
+++ /dev/null
@@ -1,491 +0,0 @@
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-import $ from '../jquery/jquery';
-import MapInteractionBase from './mapInteractionBase';
-import propertiesZoomStyle from '../olHelpers/propertiesZoomStyle';
-import provide from '../util/provide';
-import ol from '../ol/ol';
-
-
-const nm = provide('olHelpers');
-
-
-class _FeatureLayerProperties {
-
-    /**
-     *
-     * @param {ol.Feature} feature the feature
-     * @param {LayerBaseVector|*} layer - the layer in the popup
-     * @param {number} layerIndex - index of the layer
-     * @param {ol.layer.Vector} selectionLayer - the ol selection layer
-     * @param {string} [esriLayerName=undefined] - esri layer name
-     */
-    constructor(feature, layer, layerIndex, selectionLayer, esriLayerName) {
-        this.feature = feature;
-        this.layer = layer;
-        this.layerIndex = layerIndex;
-        this.selectionLayer = selectionLayer;
-        this.popupContent = '';
-        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;
-    }
-
-    get layerName() {
-        if (typeof this.esriLayerName == 'string') {
-            return this.esriLayerName;
-        } else {
-            return this.layer.name;
-        }
-    }
-}
-
-/**
- * map popup class
- * @augments MapInteractionBase
- */
-class MapPopupCls extends MapInteractionBase {
-
-    /**
-     * Definition for openlayers style function
-     * @callback olStyleFunction
-     * &param feature the openlayers vector feature
-     * $param
-     */
-
-    /**
-     * Definition for popup changed callback functions
-     * @callback popupChangedFunction
-     * @param $popContent jquery reference to the popup content
-     */
-
-    /**
-     * map popup constructor
-     */
-    constructor() {
-        super('map popup');
-        this._arrPopupLayerIds = [];
-        this._arrPopupLayerNames = [];
-        /**
-         *
-         * @type {Array<LayerBaseVector>}
-         * @private
-         */
-        this._arrPopupLayers = [];
-        this._arrPopupOlLayers = [];
-        this._arrPopupContentFunction = [];
-        this._$popupContainer = undefined;
-        this._$popupContent = undefined;
-        this._$popupCloser = undefined;
-        this._popupOverlay = undefined;
-        this._selectionLayers = [];
-        this._selectionLayerLookup = {};
-        this._mapClickFunctions = [];
-
-        //let a = function($jqueryContent){console.log($jqueryContent)};
-        //this._popupChangedLookup = {'a': a};
-        this._popupChangedFunctions = [];
-        /**
-         *
-         * @type {Array<LayerEsriMapServer>}
-         * @private
-         */
-        this._esriMapServiceLayers = [];
-
-        this._popupOpen = false;
-        this._popupCoordinate = null;
-
-        /**
-         *
-         * @type {Array.<_FeatureLayerProperties>}
-         */
-        this._passThroughLayerFeatureArray = [];
-
-        this._currentPopupIndex = -1;
-        this._popupContentLength = 0;
-
-    }
-
-    /**
-     * map popup initialization
-     * @param {ol.Map} theMap - the ol map
-     */
-    init(theMap) {
-        if (super.init(theMap)) {
-            return;
-        }
-        let $map = $('#' + this.map.getTarget());
-
-        $map.append(
-            '<div class="ol-popup">' +
-            '<span class="ol-popup-closer">X</span>' +
-            '<div class="popup-content"></div>' +
-            '</div>'
-        );
-
-        this._$popupContainer = $map.find('.ol-popup');
-        this._$popupContent = $map.find('.popup-content');
-        this._$popupCloser = $map.find('.ol-popup-closer');
-
-        this._popupOverlay = new ol.Overlay({
-            element: this._$popupContainer[0],
-            autoPan: true,
-            autoPanAnimation: {
-                duration: 250
-            }
-        });
-
-        this._map.addOverlay(this._popupOverlay);
-
-        this._$popupCloser.click((evt) => {
-            this.closePopup();
-        });
-
-        // display popup on click
-        this._map.on('singleclick', (evt) => {
-            this.closePopup();
-            this._popupCoordinate = evt.coordinate;
-
-            if (this._esriMapServiceLayers.length > 0) {
-                let queryParams = {
-                    geometry: evt.coordinate.join(','),
-                    geometryType: 'esriGeometryPoint',
-                    layers: 'all',
-                    sr: this._map.getView().getProjection().getCode().split(':')[1],
-                    mapExtent: this._map.getView().calculateExtent(this._map.getSize()).join(','),
-                    imageDisplay: this._map.getSize().join(',') + ',96',
-                    returnGeometry: true,
-                    tolerance: 15,
-                    f: 'pjson'
-                };
-
-                for (let l of this._esriMapServiceLayers) {
-                    l.getPopupInfo(queryParams, this._selectionLayerLookup[l.id]);
-                }
-            }
-
-            let layerFeatureObjectArray = this._featuresAtPixel(evt.pixel);
-
-            /**
-             *
-             * @type {Array.<_FeatureLayerProperties>}
-             */
-            this._passThroughLayerFeatureArray = [];
-            this._currentPopupIndex = -1;
-
-            for (let i = 0; i < layerFeatureObjectArray.length; i++) {
-                let featObj = layerFeatureObjectArray[i];
-
-                let props = featObj.feature.getProperties();
-
-                let popupContentResponse = this._arrPopupContentFunction[featObj.layerIndex](props, this._$popupContent);
-
-                //skip if return was false
-                if (popupContentResponse === false) {
-                    //continue;
-                } else if (typeof popupContentResponse == 'string') {
-                    featObj.popupContent = popupContentResponse;
-                    this._passThroughLayerFeatureArray.push(featObj);
-                } else {
-                    featObj.selectionLayer.getSource().addFeature(featObj.feature);
-                }
-            }
-
-            this._popupContentLength = this._passThroughLayerFeatureArray.length;
-
-            this._currentPopupIndex = -1;
-
-            let popupHtml = '<div class="ol-popup-nav">';
-            popupHtml += '<span class="previous-popup ol-popup-nav-arrow">&#9664;</span>';
-            popupHtml += '<span class="next-popup ol-popup-nav-arrow">&#9654;</span>';
-            popupHtml += `<span class="current-popup-item-number" style="font-weight: bold;"></span>`;
-            popupHtml += `<span>&nbsp;of&nbsp;</span>`;
-            popupHtml += `<span class="popup-content-length" style="font-weight: bold;">${this._popupContentLength}</span>`;
-            popupHtml += `<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>`;
-            popupHtml += `<span class="current-popup-layer-name"></span>`;
-            popupHtml += '</div>';
-            popupHtml += '<div class="ol-popup-inner">';
-
-            popupHtml += '</div>';
-
-            this._$popupContent.html(popupHtml);
-
-            this._$popupContent.find('.previous-popup').click(() => {
-                if (this._popupContentLength == 1) {
-                    return;
-                }
-
-                if (this._currentPopupIndex == 0) {
-                    this._currentPopupIndex = this._popupContentLength - 1;
-                } else {
-                    this._currentPopupIndex--;
-                }
-                this._triggerFeatSelect();
-            });
-
-            let nextPopup = this._$popupContent.find('.next-popup');
-
-            nextPopup.click(() => {
-                if (this._popupContentLength == 1 && this._currentPopupIndex > -1) {
-                    return;
-                }
-
-                if (this._currentPopupIndex == this._popupContentLength - 1) {
-                    this._currentPopupIndex = 0;
-                } else {
-                    this._currentPopupIndex++;
-                }
-                this._triggerFeatSelect();
-            });
-
-
-            if (this._popupContentLength > 0) {
-                nextPopup.trigger('click');
-                this._popupOverlay.setPosition(this._popupCoordinate);
-                this._$popupContent.scrollTop(0);
-                this._popupOpen = true;
-            }
-        });
-
-        //change mouse cursor when over marker
-        this._map.on('pointermove', (e) => {
-            if (e.dragging) {
-                return;
-            }
-            let pixel = this.map.getEventPixel(e.originalEvent);
-            let hit = this.map.hasFeatureAtPixel(pixel, (lyrCandidate) => {
-                for (let olLayer of this._arrPopupOlLayers) {
-                    if (lyrCandidate == olLayer) {
-                        return true;
-                    }
-                }
-
-                return false;
-            });
-            this.map.getTargetElement().style.cursor = hit ? 'pointer' : '';
-        });
-    }
-
-    /**
-     * helper to select features
-     * @private
-     */
-    _triggerFeatSelect() {
-        let $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');
-        let $innerPopup = this._$popupContent.find('.ol-popup-inner');
-        let $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');
-        this.clearSelection();
-        let lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];
-        $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());
-        $layerNameSpan.html(lyrFeatObj.layerName);
-        $innerPopup.html(lyrFeatObj.popupContent);
-        lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);
-        for (let f of this._popupChangedFunctions) {
-            f(this._$popupContent);
-        }
-    }
-
-
-    /**
-     *
-     * @param {ol.Feature} feature - the ol feature
-     * @param {LayerEsriMapServer} lyr - the map server layer
-     * @param {string} popupContent - popup content
-     * @param {string} esriName - esri layer name
-     */
-    addMapServicePopupContent(feature, lyr, popupContent, esriName) {
-
-        let featLayerObject = new _FeatureLayerProperties(
-            feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName
-        );
-        featLayerObject.popupContent = popupContent;
-
-        this._passThroughLayerFeatureArray.push(featLayerObject);
-        this._popupContentLength++;
-
-        $('.popup-content-length').html(this._popupContentLength.toFixed());
-
-        if (!this._popupOpen) {
-            this._$popupContent.find('.next-popup').trigger('click');
-
-            this._popupOverlay.setPosition(this._popupCoordinate);
-            this._$popupContent.scrollTop(0);
-            this._popupOpen = true;
-        }
-    }
-
-    /**
-     *
-     * @param {ol.Pixel} pixel - the ol pixel
-     * @returns {Array.<_FeatureLayerProperties>} - feature layer properties
-     * @private
-     */
-    _featuresAtPixel(pixel) {
-        let layerFeatureObjectArray = [];
-        this.map.forEachFeatureAtPixel(pixel, (feature, layer) => {
-            let lyrIndex = this._arrPopupOlLayers.indexOf(layer);
-
-            if (lyrIndex > -1) {
-                layerFeatureObjectArray.push(new _FeatureLayerProperties(
-                    feature, this._arrPopupLayers[lyrIndex], lyrIndex, this._selectionLayers[lyrIndex]));
-            }
-        });
-
-        return layerFeatureObjectArray;
-    }
-
-    closePopup() {
-        this._checkInit();
-        this._popupOpen = false;
-        this._popupOverlay.setPosition(undefined);
-        this._$popupCloser[0].blur();
-        this.clearSelection();
-        this._$popupContent.html('');
-
-        return false;
-    };
-
-    /**
-     *
-     * @param {popupChangedFunction} chgFunction - popup change function
-     */
-    addPopupChangedFunction(chgFunction) {
-        this._popupChangedFunctions.push(chgFunction);
-    }
-
-    /**
-     *
-     * @param {LayerBase|*} lyr - the layer being acted on
-     * @param {object} [selectionStyle={}] the selection style configuration
-     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
-     * @param {number} [selectionStyle.width=10] the selection width for linear features
-     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
-     * @returns {ol.layer.Vector} the new selection layer
-     * @private
-     */
-    _addPopupLayer(lyr, selectionStyle) {
-        this._checkInit();
-
-        selectionStyle = selectionStyle || {};
-        selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';
-        selectionStyle.width = selectionStyle.width || 10;
-
-        let theStyle;
-
-        if (selectionStyle.olStyle) {
-            theStyle = selectionStyle.olStyle;
-        } else {
-            theStyle = new ol.style.Style({
-                stroke: new ol.style.Stroke({
-                    color: selectionStyle.color,
-                    width: selectionStyle.width
-                }),
-                image: new ol.style.Circle({
-                    radius: 7,
-                    fill: new ol.style.Fill({color: selectionStyle.color}),
-                    stroke: new ol.style.Stroke({color: selectionStyle.color, width: 1})
-                }),
-                fill: new ol.style.Fill({
-                    color: selectionStyle.color
-                })
-            });
-        }
-
-        let selectionLayer = new ol.layer.Vector(
-            {
-                source: new ol.source.Vector(),
-                style: theStyle,
-                zIndex: 100
-            }
-        );
-
-        this._selectionLayers.push(selectionLayer);
-        this._selectionLayerLookup[lyr.id] = selectionLayer;
-        this.map.addLayer(selectionLayer);
-
-        return selectionLayer;
-    }
-
-    /**
-     * The popup callback function
-     * @callback popupCallback
-     * @param {object} featureProperties - the feature properties
-     * @param {jQuery} jqRef reference to the div content to do some async stuff inside the div
-     * @returns {string} the html content to be added to the popup
-     */
-
-    /**
-     * Add popup to the map
-     * @param {LayerBase|*} lyr The layer that the popup with act on
-     * @param {popupCallback} popupContentFunction - popup content function that makes popup info
-     * @param {object} [selectionStyle={}] the selection style configuration
-     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
-     * @param {number} [selectionStyle.width=10] the selection width for linear features
-     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
-     * @returns {object} a reference to the ol selection layer
-     */
-    addVectorPopup(lyr, popupContentFunction, selectionStyle) {
-        let selectionLayer = this._addPopupLayer(lyr, selectionStyle);
-        this._arrPopupLayerIds.push(lyr.id);
-        this._arrPopupLayerNames.push(lyr.name);
-        this._arrPopupLayers.push(lyr);
-        this._arrPopupOlLayers.push(lyr.olLayer);
-        this._arrPopupContentFunction.push(popupContentFunction);
-
-        return selectionLayer;
-    };
-
-    /**
-     *
-     * @param {LayerBase} lyr - layer
-     */
-    removeVectorPopup(lyr) {
-        let idx = this._arrPopupLayerIds.indexOf(lyr.id);
-
-        if (idx > -1) {
-            this._arrPopupLayerIds.splice(idx, 1);
-            this._arrPopupLayerNames.splice(idx, 1);
-            this._arrPopupLayers.splice(idx, 1);
-            this._arrPopupOlLayers.splice(idx, 1);
-            this._arrPopupContentFunction.splice(idx, 1);
-            this._selectionLayers.splice(idx, 1);
-            delete this._selectionLayerLookup[lyr.id];
-        }
-    }
-
-    /**
-     *
-     * @param {LayerEsriMapServer} lyr - map server layer
-     * @param {object} [selectionStyle={}] the selection style configuration
-     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color
-     * @param {number} [selectionStyle.width=10] the selection width for linear features
-     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function
-     * @returns {object} a reference to the ol selection layer
-     */
-    addMapServicePopup(lyr, selectionStyle) {
-        let selectionLayer = this._addPopupLayer(lyr, selectionStyle);
-        this._esriMapServiceLayers.push(lyr);
-
-        return selectionLayer;
-    }
-
-    clearSelection() {
-        this._checkInit();
-        for (let i = 0; i < this._selectionLayers.length; i++) {
-            this._selectionLayers[i].getSource().clear();
-        }
-        for (let f of this._mapClickFunctions) {
-            f();
-        }
-    };
-
-    /**
-     * Add a function to be called when the map is clicked but before any popups are implemented
-     * @param {function} func - the map click function
-     */
-    addMapClickFunction(func) {
-        this._mapClickFunctions.push(func);
-    }
-}
-nm.MapPopupCls = MapPopupCls;
-export default MapPopupCls;
diff --git a/_src/olHelpers/propertiesZoomStyle.js b/_src/olHelpers/propertiesZoomStyle.js
deleted file mode 100644
index 2baab2485453f0a76210abd78b5c13ce5979ef7f..0000000000000000000000000000000000000000
--- a/_src/olHelpers/propertiesZoomStyle.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Created by gavorhes on 12/14/2015.
- */
-
-import provide from '../util/provide';
-import * as zoomResolutionConvert from './zoomResolutionConvert';
-const nm = provide('olHelpers');
-
-/**
- * A style function based on properties and zoom level, wraps normal feature, resolution function
- * @callback propertiesZoomStyle
- * @param {object} properties the feature properties
- * @param {number} zoom level
- *
- */
-
-/**
- * wrapper to define a style function by properties and zoom level
- * @param {propertiesZoomStyle|*} styleFunc - style function
- * @returns {function|*} new function
- */
-function propertiesZoomStyle(styleFunc) {
-    if (styleFunc == undefined){
-        return undefined;
-    }
-
-    return function (feature, resolution) {
-        styleFunc(feature.getProperties(), zoomResolutionConvert.resolutionToZoom(resolution));
-    };
-}
-
-nm.propertiesZoomStyle = propertiesZoomStyle;
-export default propertiesZoomStyle;
diff --git a/_src/olHelpers/quickMap.js b/_src/olHelpers/quickMap.js
deleted file mode 100644
index 57af2d7af97199f0944c379124814b6c7eb97056..0000000000000000000000000000000000000000
--- a/_src/olHelpers/quickMap.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Created by gavorhes on 12/15/2015.
- */
-
-import quickMapBase from './quickMapBase';
-import provide from '../util/provide';
-import mapMove from './mapMove';
-import mapPopup from './mapPopup';
-let nm = provide('olHelpers');
-
-/**
- * Sets up a map with some default parameters and initializes
- * mapMove and mapPopup
- *
- * @param {object} [options={}] config options
- * @param {string} [options.divId=map] map div id
- * @param {object} [options.center={}] center config object
- * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
- * @param {number} [options.center.y=5574910] center y, web mercator y or lat
- * @param {number} [options.zoom=7] zoom level
- * @param {number} [options.minZoom=undefined] min zoom
- * @param {number} [options.maxZoom=undefined] max zoom
- * @param {boolean} [options.baseSwitcher=true] if add base map switcher
- * @param {boolean} [options.fullScreen=false] if add base map switcher
- * @returns {ol.Map} the ol map
- */
-function quickMap(options) {
-    let m = quickMapBase(options);
-    mapMove.init(m);
-    mapPopup.init(m);
-
-    return m;
-}
-
-
-nm.quickMap = quickMap;
-export default quickMap;
diff --git a/_src/olHelpers/quickMapBase.js b/_src/olHelpers/quickMapBase.js
deleted file mode 100644
index f1a598ab5cf9773106149a0a1e2cb28f70d9d7c2..0000000000000000000000000000000000000000
--- a/_src/olHelpers/quickMapBase.js
+++ /dev/null
@@ -1,102 +0,0 @@
-
-/**
- * Created by gavorhes on 12/15/2015.
- */
-
-import $ from '../jquery/jquery';
-import provide from '../util/provide';
-import ol from '../ol/ol';
-const nm = provide('olHelpers');
-
-/**
- * Sets up a map with some default parameters and initializes
- * mapMove and mapPopup
- *
- * @param {object} [options={}] config options
- * @param {string} [options.divId=map] map div id
- * @param {object} [options.center={}] center config object
- * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
- * @param {number} [options.center.y=5574910] center y, web mercator y or lat
- * @param {number} [options.zoom=7] zoom level
- * @param {number} [options.minZoom=undefined] min zoom
- * @param {number} [options.maxZoom=undefined] max zoom
- * @param {boolean} [options.baseSwitcher=true] if add base map switcher
- * @param {boolean} [options.fullScreen=false] if add base map switcher
- * @returns {ol.Map} the ol map
- */
-function quickMapBase(options) {
-    options = options || {};
-    options.divId = options.divId || 'map';
-    options.center = options.center || {};
-    options.center.x = typeof options.center.x == 'number' ? options.center.x : -10018378;
-    options.center.y = typeof options.center.y == 'number' ? options.center.y : 5574910;
-    options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;
-    options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;
-    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;
-
-
-    let $mapDiv = $('#' + options.divId);
-    $mapDiv.css('position', 'relative');
-
-    let osmLayer = new ol.layer.Tile({source: new ol.source.OSM()});
-    let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});
-
-    let osmCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')";
-    let aerialCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')";
-
-    if (options.baseSwitcher) {
-       //  let switcherContent = '<div class="base-map-switcher" title="Toggle Base Layer" style="';
-       //  switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';
-       //  switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;
-       //  switcherContent += '"></div>';
-       //  $mapDiv.append(switcherContent);
-       //
-       // $mapDiv.find('.base-map-switcher').click(function() {
-       //      "use strict";
-       //      osmLayer.setVisible(!osmLayer.getVisible());
-       //      satLayer.setVisible(!satLayer.getVisible());
-       //
-       //      if (osmLayer.getVisible()){
-       //          $(this).css('background', aerialCss);
-       //      } else {
-       //          $(this).css('background', osmCss);
-       //      }
-       //  });
-    }
-
-    if (options.zoom < 0 || options.zoom > 28) {
-        throw 'zoom out of range';
-    }
-
-    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {
-        let p = new ol.geom.Point([options.center.x, options.center.y]);
-        p.transform("EPSG:4326", "EPSG:3857");
-        let coordinates = p.getCoordinates();
-        options.center.x = coordinates[0];
-        options.center.y = coordinates[1];
-    }
-
-    let map = new ol.Map({
-        layers: [osmLayer, satLayer],
-        target: options.divId,
-        controls: ol.control.defaults({
-            attributionOptions: {collapsible: false}
-        }),
-        view: new ol.View({
-            center: [options.center.x, options.center.y],
-            zoom: options.zoom,
-            minZoom: options.minZoom,
-            maxZoom: options.maxZoom
-        })
-    });
-    
-    if (options.fullScreen){
-        map.addControl(new ol.control.FullScreen());
-    }
-
-    return map;
-}
-
-nm.quickMapBase = quickMapBase;
-export default quickMapBase;
-
diff --git a/_src/olHelpers/quickMapMulti.js b/_src/olHelpers/quickMapMulti.js
deleted file mode 100644
index f9e112c6d9ef094d3bf0d0106e18f52b0e742389..0000000000000000000000000000000000000000
--- a/_src/olHelpers/quickMapMulti.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Created by gavorhes on 12/15/2015.
- */
-
-import quickMapBase from './quickMapBase';
-import provide from '../util/provide';
-import MapMoveCls from './mapMoveCls';
-import MapPopupCls from './mapPopupCls';
-let nm = provide('olHelpers');
-
-
-/**
- * @typedef {object} quickMapMultiReturn
- * @property {ol.Map} map The X Coordinate
- * @property {MapMoveCls} mapMove The Y Coordinate
- * @property {MapPopupCls} mapPopup The Y Coordinate
- */
-
-/**
- * Sets up a map with some default parameters and initializes
- * mapMove and mapPopup
- *
- * @param {object} [options={}] config options
- * @param {string} [options.divId=map] map div id
- * @param {object} [options.center={}] center config object
- * @param {number} [options.center.x=-10018378] center x, web mercator x or lon
- * @param {number} [options.center.y=5574910] center y, web mercator y or lat
- * @param {number} [options.zoom=7] zoom level
- * @param {number} [options.minZoom=undefined] min zoom
- * @param {number} [options.maxZoom=undefined] max zoom
- * @param {boolean} [options.baseSwitcher=true] if add base map switcher
- * @param {boolean} [options.fullScreen=false] if add base map switcher
- * @returns {quickMapMultiReturn} return map, map move, and map popup objects
- */
-function quickMapMulti(options) {
-    let m = quickMapBase(options);
-    let mov = new MapMoveCls();
-    let pop = new MapPopupCls();
-    mov.init(m);
-    pop.init(m);
-
-    return {map: m, mapMove: mov, mapPopup: pop};
-}
-
-nm.quickMapMulti = quickMapMulti;
-export default quickMapMulti;
diff --git a/_src/olHelpers/zoomResolutionConvert.js b/_src/olHelpers/zoomResolutionConvert.js
deleted file mode 100644
index 68211e299dd00d32c41132b56ae135b5b390455e..0000000000000000000000000000000000000000
--- a/_src/olHelpers/zoomResolutionConvert.js
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * Created by gavorhes on 12/14/2015.
- */
-
-import provide from '../util/provide';
-const nm = provide('olHelpers.zoomResolutionConvert');
-
-let _zoomResLookup = [
-    156543.03392804097, //0
-    78271.51696402048, //1
-    39135.75848201024, //2
-    19567.87924100512, //3
-    9783.93962050256, //4
-    4891.96981025128, //5
-    2445.98490512564, //6
-    1222.99245256282, //7
-    611.49622628141, //8
-    305.748113140705, //9
-    152.8740565703525, //10
-    76.43702828517625, //11
-    38.21851414258813, //12
-    19.109257071294063, //13
-    9.554628535647032, //14
-    4.777314267823516, //15
-    2.388657133911758, //16
-    1.194328566955879, //17
-    0.5971642834779395, //18
-    0.29858214173896974, //19
-    0.14929107086948487, //20
-    0.07464553543474244, //21
-    0.03732276771737122, //22
-    0.01866138385868561, //23
-    0.009330691929342804, //24
-    0.004665345964671402, //25
-    0.002332672982335701, //26
-    0.0011663364911678506, //27
-    0.0005831682455839253 //28
-];
-
-/**
- * Get the resolution given the zoom level
- * @param {number} zoomLevel - the zoom level
- * @returns {number|*} the map resolution
- */
-export function zoomToResolution(zoomLevel) {
-    "use strict";
-
-    if (typeof zoomLevel == 'number') {
-        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {
-            return _zoomResLookup[zoomLevel];
-        } else {
-            console.log(`invalid zoom level provided: ${zoomLevel}`);
-
-            return undefined;
-        }
-    } else {
-        return undefined;
-    }
-}
-nm.zoomToResolution = zoomToResolution;
-
-
-/**
- * Get resolution from the zoom level
- * @param {number} resolution - the resolution
- * @returns {number|*} the zoom level
- */
-export function resolutionToZoom(resolution){
-    for (let i = 0; i < _zoomResLookup.length; i++){
-        if (resolution >= _zoomResLookup[i] ){
-            return i;
-        }
-    }
-
-    return 0;
-}
-
-nm.resolutionToZoom = resolutionToZoom;
diff --git a/_src/util/checkDefined.js b/_src/util/checkDefined.js
deleted file mode 100644
index fe3fa020bc2632158123e806c230f7a424fba290..0000000000000000000000000000000000000000
--- a/_src/util/checkDefined.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Created by gavorhes on 12/11/2015.
- */
-import provide from './provide';
-let nm = provide('util.checkDefined');
-
-/**
- * check if the input is undefined or null
- * @param {*} input - input pointer
- * @returns {boolean} true undefined or null
- */
-export function undefinedOrNull (input){
-    "use strict";
-
-    return (typeof input === 'undefined' || input === null);
-}
-
-nm.undefinedOrNull = undefinedOrNull;
-
-
-/**
- * check if the input is defined and not null
- * @param {*} input - input pointer
- * @returns {boolean} true defined and not null
- */
-export function definedAndNotNull (input){
-    "use strict";
-
-    return !(undefinedOrNull(input));
-}
-
-nm.definedAndNotNull = definedAndNotNull;
diff --git a/_src/util/colors.js b/_src/util/colors.js
deleted file mode 100644
index 93207a8ecffea828b70c918e13231ce26bcefdc6..0000000000000000000000000000000000000000
--- a/_src/util/colors.js
+++ /dev/null
@@ -1,176 +0,0 @@
-/**
- * Created by gavorhes on 11/3/2015.
- */
-import provide from './provide';
-import * as chk from './checkDefined';
-let nm = provide('util.colors');
-
-
-/**
- * helper function to convert to hex
- * @param {number|string} x - the number to convert to hex
- * @returns {string} number as hex
- * @private
- */
-function _hex(x) {
-    let hexDigits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
-
-    return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
-}
-
-/**
- * converts an RGB string to hex
- * @param {string} rgb - rgb color
- * @returns {string} rbg as hex
- */
-export function rgb2hex(rgb) {
-    let rgb1 = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
-
-    return ("#" + _hex(rgb1[1]) + _hex(rgb1[2]) + _hex(rgb1[3])).toUpperCase();
-}
-
-nm.rgb2hex = rgb2hex;
-
-
-/**
- * Convert hex string to RGB or RGBA string
- * @param {string} hexString - hex color string
- * @param {number} [alphaVal=undefined] Alpha value
- * @returns {string} - rgb or rgba color
- */
-export function hexAlphaToRgbOrRgba(hexString, alphaVal) {
-    hexString = ((hexString.charAt(0) == "#") ? hexString.substring(1, 7) : hexString);
-    let r = parseInt(hexString.substring(0, 2), 16).toString() || '0';
-    let g = parseInt(hexString.substring(2, 4), 16).toString() || '0';
-    let b = parseInt(hexString.substring(4, 6), 16).toString() || '0';
-    if (alphaVal) {
-        return `rgba(${r},${g},${b},${alphaVal})`;
-    } else {
-        return `rgba(${r},${g},${b})`;
-    }
-}
-
-nm.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;
-
-
-/**
- * adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)'
- * @param {string} rgb - rgb color
- * @param {number} alpha - alpha value 0 to 1
- * @returns {string} rgba color
- */
-export function rgbToRgba(rgb, alpha) {
-    let pieces = rgb.split(',');
-    pieces[0] = pieces[0].replace('rgb', 'rgba');
-    pieces[2] = pieces[2].replace(')', '');
-    pieces.push(' ' + alpha.toFixed(1) + ')');
-
-    return pieces.join(',');
-}
-
-nm.rgbToRgba = rgbToRgba;
-
-
-/**
- * @typedef {function} colorLookupByNumber
- * @param {number} num - the number to use to retrieve the color
- * @returns {string} rgb color
- */
-
-
-/**
- * Make a blue green red gradient
- * @param {number} minVal - minimum value
- * @param {number} maxVal - maximum value
- * @param {boolean} flipColors - if the colors should be flipped
- * @returns {colorLookupByNumber} color lookup function
- */
-export function makeBlueGreenRedGradient(minVal, maxVal, flipColors) {
-
-    if (typeof flipColors != "boolean") {
-        flipColors = false;
-    }
-
-    return function (theVal) {
-        let r, g, b;
-        let ratio;
-
-        if (chk.undefinedOrNull(theVal)) {
-            return 'rgb(100,100,100)';
-        }
-
-        let percent = (theVal - minVal) / (maxVal - minVal);
-
-        if (flipColors == true) {
-            percent = 1 - percent;
-        }
-
-        if (percent >= 1) {
-            r = 255;
-            g = 0;
-            b = 0;
-        } else if (percent <= 0) {
-            r = 0;
-            g = 0;
-            b = 255;
-        } else if (percent < .25) {
-            // green up, blue constant
-            r = 0;
-            g = Math.floor(255 * percent / 0.25);
-            b = 255;
-        } else if (percent < 0.50) {
-            //blue down, green constant
-            ratio = (percent - 0.25) / 0.25;
-            r = 0;
-            g = 255;
-            b = 255 - Math.floor(255 * ratio);
-        } else if (percent < 0.75) {
-            // red up, green constant
-            ratio = (percent - 0.5) / 0.25;
-            r = Math.floor(255 * ratio);
-            g = 255;
-            b = 0;
-        } else {
-            // green down, red constant
-            ratio = (percent - 0.75) / 0.25;
-            r = 255;
-            g = 255 - Math.floor(255 * ratio);
-            b = 0;
-        }
-
-        r = r.toFixed();
-        g = g.toFixed();
-        b = b.toFixed();
-
-        return 'rgb(' + r + ',' + g + ',' + b + ')';
-    };
-}
-
-nm.makeBlueGreenRedGradient = makeBlueGreenRedGradient;
-
-
-/**
- * Create a function that will return colors based on a gradient
- * @param {number} median - median value
- * @param {number} stdDev - standard deviation
- * @param {boolean} flipColors - if the colors should be flipped
- * @returns {colorLookupByNumber} color lookup function
- */
-export function makeBlueGreenRedGradientZScore(median, stdDev, flipColors) {
-
-    let grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors);
-
-    return function (theVal) {
-
-        let zScore;
-        if (theVal == null) {
-            zScore = null;
-        } else {
-            zScore = (theVal - median) / stdDev;
-        }
-
-        return grd(zScore);
-    };
-}
-
-nm.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;
diff --git a/_src/util/dateConvert.js b/_src/util/dateConvert.js
deleted file mode 100644
index c08f6358ef54891d9dd18b17b5979bb9a353eabc..0000000000000000000000000000000000000000
--- a/_src/util/dateConvert.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Created by gavorhes on 11/4/2015.
- */
-
-import provide from './provide';
-let nm = provide('util.dateConvert');
-
-function leadingPad(inNum) {
-    let strNum = inNum.toFixed();
-    if (strNum.length < 2) {
-        strNum = '0' + strNum;
-    }
-
-    return strNum;
-}
-
-nm.leadingPad = leadingPad;
-
-/**
- * Given a date return a string in the format YYYY-mm-dd hh:MM:SS
- * @param {Date} dte to convert
- * @returns {string} the formatted date string
- */
-export function dateToYyyyMmDdHhMmSs(dte) {
-    let yr = dte.getYear() + 1900;
-    let month = leadingPad(dte.getMonth() + 1);
-    let day = leadingPad(dte.getDate());
-    let hrs = leadingPad(dte.getHours());
-    let mns = leadingPad(dte.getMinutes());
-    let secs = leadingPad(dte.getSeconds());
-
-    return `${yr}-${month}-${day} ${hrs}:${mns}:${secs}`;
-}
-
-nm.dateToYyyyMmDdHhMmSs = dateToYyyyMmDdHhMmSs;
-
-
-/**
- * Given a date return a string in the format YYYYmmdd_hh0000
- * @param {Date} dte the input date
- * @returns {string} the formatted date string
- */
-export function dateToYyyyMmDdHh000(dte) {
-    let yr = dte.getYear() + 1900;
-    let month = leadingPad(dte.getMonth() + 1);
-    let day = leadingPad(dte.getDate());
-    let hrs = leadingPad(dte.getHours());
-
-    return `${yr}${month}${day}_${hrs}0000`;
-}
-
-nm.dateToYyyyMmDdHh000 = dateToYyyyMmDdHh000;
diff --git a/_src/util/formatString.js b/_src/util/formatString.js
deleted file mode 100644
index fbbb79530d8a0eb0f15cd3a9757b38f2334cc037..0000000000000000000000000000000000000000
--- a/_src/util/formatString.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Created by gavorhes on 10/30/2015.
- */
-
-if (!String.prototype.format) {
-    /**
-     *  helper function for string replacement to keep code clean
-     * usage
-     * var aString = 'some{0}stuff{1}replaced';
-     * var c = 'cat';
-     * var b = 'bird';
-     * aString.format(c, b)  returns 'somecatstuffbirdreplaced'
-     * prettier than
-     * 'some' + c + 'stuff' + b + 'replaced'
-     * but same effect
-     * adapted to take a single array that is used for replacement by position ie
-     * var arrReplacements = [c, b];
-     * aString.format(arrReplacements)
-     * @returns {string} converted string
-     */
-    String.prototype.format = function () {
-        let args = arguments;
-        for (let i = 0; i < args.length; i++) {
-            args[i] = (args[i] !== null ? args[i] : '');
-        }
-
-        //if the first argument is an array, use that
-        if (args[0].constructor == Array) {
-            args = args[0];
-        }
-
-        return this.replace(/{(\d+)}/g, function (match, number) {
-            return typeof args[number] != 'undefined' ? args[number] : match;
-        });
-    };
-}
-
-export default undefined;
diff --git a/_src/util/getUrlParams.js b/_src/util/getUrlParams.js
deleted file mode 100644
index 892acd86321c9e0c6aee96d077fe9a20fb685421..0000000000000000000000000000000000000000
--- a/_src/util/getUrlParams.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Created by gavorhes on 6/23/2016.
- */
-import provide from './provide';
-let nm = provide('util');
-
-/**
- *
- * @returns {object} object representation of url params
- */
-function getUrlParams() {
-    "use strict";
-
-    let match;
-    let pl = /\+/g;  // Regex for replacing addition symbol with a space
-    let search = /([^&=]+)=?([^&]*)/g;
-    let decode = function (s) {
-        return decodeURIComponent(s.replace(pl, " "));
-    };
-    let query = window.location.search.substring(1);
-
-    let urlParams = {};
-    while (match = search.exec(query)) {
-        /**
-         * @type {string}
-         */
-        let val =  decode(match[2]).trim();
-
-        let typedVal = null;
-        if (val.length == 0){
-            // pass
-        } else if (!isNaN(val)){
-            if (val.indexOf('.') > -1){
-                typedVal = parseFloat(val);
-            } else {
-                typedVal = parseInt(val);
-            }
-        } else if (val.toLowerCase() == 'false' || val.toLowerCase() == 'true'){
-            typedVal = val.toLowerCase() == 'true';
-        } else {
-            typedVal = val;
-        }
-        urlParams[decode(match[1])] = typedVal;
-    }
-
-    return urlParams;
-}
-
-nm.getUrlParams = getUrlParams;
-
-export default getUrlParams;
diff --git a/_src/util/makeGuid.js b/_src/util/makeGuid.js
deleted file mode 100644
index 128c322df494a63f6050720feeac4eb37fd93bd8..0000000000000000000000000000000000000000
--- a/_src/util/makeGuid.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * Created by gavorhes on 11/3/2015.
- */
-
-import provide from './provide';
-let nm = provide('util');
-
-
-/**
- * guids are used to uniquely identify groups and features
- * @returns {string} a new guid
- */
-function makeGuid() {
-        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
-            .replace(/[xy]/g, function (c) {
-                let r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;
-
-                return v.toString(16);
-            });
-
-}
-nm.makeGuid = makeGuid;
-export default makeGuid;
-
-
diff --git a/_src/util/objectHelpers.js b/_src/util/objectHelpers.js
deleted file mode 100644
index abc7770c5f216af6fa90370eb4640288b88db611..0000000000000000000000000000000000000000
--- a/_src/util/objectHelpers.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Created by gavorhes on 6/7/2016.
- */
-
-import provide from './provide';
-let nm = provide('util');
-
-/**
- * @typedef {object} keyValuePair
- * @property {string} key
- * @property {object} value
- */
-
-
-/**
- * iterate over the key value pairs of an object
- * @param {object} obj - the input object
- * @returns {Array<keyValuePair>} - array of key value pairs
- */
-export function keyValPairs(obj) {
-    let outArray = [];
-    for (let key of Object.keys(obj)) {
-        outArray.push({'key': key, 'value': obj[key]});
-
-    }
-    outArray.sort(function (a, b) {
-        "use strict";
-
-        return a > b ? 1 : -1;
-    });
-
-    return outArray;
-}
-
-nm.keyValPairs = keyValPairs;
diff --git a/_src/util/provide.js b/_src/util/provide.js
deleted file mode 100644
index cee9eb3ba6580615bdaa6b347b2c63c5562f8da7..0000000000000000000000000000000000000000
--- a/_src/util/provide.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Created by gavorhes on 12/10/2015.
- */
-
-
-/**
- * create a namespace on the gv object
- * @param {string} namespace to create
- * @returns {object} object representing the namespace
- */
-function provide(namespace){
-    "use strict";
-    if (typeof window.gv == 'undefined'){
-        window.gv = {};
-    }
-
-    let parts = namespace.split('.');
-    let nameSpace = window.gv;
-
-    for (let i=0; i< parts.length; i++){
-        let newObject = nameSpace[parts[i]];
-
-        if (typeof newObject == 'undefined'){
-            nameSpace[parts[i]] = {};
-        }
-
-        nameSpace = nameSpace[parts[i]];
-    }
-
-    return nameSpace;
-}
-
-provide('util');
-window.gv.util.provide = provide;
-
-export default provide;
diff --git a/dist/layers/LayerBaseVectorGeoJson.d.ts b/dist/layers/LayerBaseVectorGeoJson.d.ts
index 4cfa75c45e97065b9a97b892c0a47d8c2e3704a1..478f6f1907f8db2cff2722d793f8c2729ca1dcd9 100644
--- a/dist/layers/LayerBaseVectorGeoJson.d.ts
+++ b/dist/layers/LayerBaseVectorGeoJson.d.ts
@@ -12,7 +12,7 @@ export interface LayerBaseVectorGeoJsonOptions extends LayerBaseVectorOptions {
  * The Vector GeoJson Layer
  * @augments LayerBaseVector
  */
-declare class LayerBaseVectorGeoJson extends LayerBaseVector {
+export declare class LayerBaseVectorGeoJson extends LayerBaseVector {
     _geoJsonFormat: ol.format.GeoJSON;
     _transform: olx.format.ReadOptions;
     /**
diff --git a/dist/layers/LayerBaseVectorGeoJson.js b/dist/layers/LayerBaseVectorGeoJson.js
index e6927ebbb0eec948649da6e86773cb66f1d09307..036378af82beeb6f573748cfba72d83505e63dc2 100644
--- a/dist/layers/LayerBaseVectorGeoJson.js
+++ b/dist/layers/LayerBaseVectorGeoJson.js
@@ -96,6 +96,7 @@ var LayerBaseVectorGeoJson = (function (_super) {
     };
     return LayerBaseVectorGeoJson;
 }(LayerBaseVector_1.LayerBaseVector));
+exports.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;
 nm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = LayerBaseVectorGeoJson;
diff --git a/dist/layers/LayerBaseVectorGeoJson.js.map b/dist/layers/LayerBaseVectorGeoJson.js.map
index 4e9afd4846f68c22b333c60eb941051e44273a0f..2d2052aeb99de0d3809d558b1720c438a045975b 100644
--- a/dist/layers/LayerBaseVectorGeoJson.js.map
+++ b/dist/layers/LayerBaseVectorGeoJson.js.map
@@ -1 +1 @@
-{"version":3,"file":"LayerBaseVectorGeoJson.js","sourceRoot":"","sources":["../../src/layers/LayerBaseVectorGeoJson.ts"],"names":[],"mappings":"AAAA;;GAEG;;;;;;;AAEH,gCAAsD,mBAAmB,CAAC,CAAA;AAC1E,wBAAoB,iBAAiB,CAAC,CAAA;AACtC,0BAAsB,WAAW,CAAC,CAAA;AAElC,IAAY,IAAI,WAAM,0BAA0B,CAAC,CAAA;AAEjD,IAAI,EAAE,GAAG,iBAAO,CAAC,QAAQ,CAAC,CAAC;AAC3B,IAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAS5B;;;GAGG;AACH;IAAqC,0CAAe;IAIhD;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,gCAAY,GAAG,EAAE,OAAuC;QACpD,GAAG,GAAG,OAAO,GAAG,IAAI,QAAQ,GAAG,GAAG,GAAG,EAAE,CAAC;QACxC,kBAAM,GAAG,EAAE,OAAO,CAAC,CAAC;QAEpB,IAAI,CAAC,cAAc,GAAG,IAAI,cAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAE9C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,EAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE,iBAAiB,EAAE,IAAI,CAAC,QAAQ,EAAC,CAAC;QAEzG,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,4CAAW,GAAX,UAAY,iBAAuB;QAC/B,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,iBAAiB,IAAI,WAAW,CAAC,CAAC,CAAC;YACpG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAClF,CAAC;QAAC,IAAI,CAAC,CAAC;YACJ,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACnG,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,sCAAK,GAAL;QAAA,iBAkBC;QAhBG,EAAE,CAAC,CAAC,gBAAK,CAAC,KAAK,WAAE,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC;QAChB,CAAC;QAED,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EACX,IAAI,CAAC,OAAO,EACZ,UAAC,CAAC;YACE,KAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACpB,KAAI,CAAC,YAAY,CAAC,KAAI,CAAC,CAAC;QAC5B,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CACf;YACI,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACzB,CAAC,CACJ,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,gDAAe,GAAf,UAAgB,CAAC;QACb,gBAAK,CAAC,eAAe,YAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACnF,CAAC;IACL,6BAAC;AAAD,CAAC,AA1FD,CAAqC,iCAAe,GA0FnD;AAED,EAAE,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;AACnD;kBAAe,sBAAsB,CAAC"}
\ No newline at end of file
+{"version":3,"file":"LayerBaseVectorGeoJson.js","sourceRoot":"","sources":["../../src/layers/LayerBaseVectorGeoJson.ts"],"names":[],"mappings":"AAAA;;GAEG;;;;;;;AAEH,gCAAsD,mBAAmB,CAAC,CAAA;AAC1E,wBAAoB,iBAAiB,CAAC,CAAA;AACtC,0BAAsB,WAAW,CAAC,CAAA;AAElC,IAAY,IAAI,WAAM,0BAA0B,CAAC,CAAA;AAEjD,IAAI,EAAE,GAAG,iBAAO,CAAC,QAAQ,CAAC,CAAC;AAC3B,IAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAS5B;;;GAGG;AACH;IAA4C,0CAAe;IAIvD;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,gCAAY,GAAG,EAAE,OAAuC;QACpD,GAAG,GAAG,OAAO,GAAG,IAAI,QAAQ,GAAG,GAAG,GAAG,EAAE,CAAC;QACxC,kBAAM,GAAG,EAAE,OAAO,CAAC,CAAC;QAEpB,IAAI,CAAC,cAAc,GAAG,IAAI,cAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAE9C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,EAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE,iBAAiB,EAAE,IAAI,CAAC,QAAQ,EAAC,CAAC;QAEzG,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,4CAAW,GAAX,UAAY,iBAAuB;QAC/B,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,iBAAiB,IAAI,WAAW,CAAC,CAAC,CAAC;YACpG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAClF,CAAC;QAAC,IAAI,CAAC,CAAC;YACJ,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACnG,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,sCAAK,GAAL;QAAA,iBAkBC;QAhBG,EAAE,CAAC,CAAC,gBAAK,CAAC,KAAK,WAAE,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC;QAChB,CAAC;QAED,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EACX,IAAI,CAAC,OAAO,EACZ,UAAC,CAAC;YACE,KAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACpB,KAAI,CAAC,YAAY,CAAC,KAAI,CAAC,CAAC;QAC5B,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CACf;YACI,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACzB,CAAC,CACJ,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,gDAAe,GAAf,UAAgB,CAAC;QACb,gBAAK,CAAC,eAAe,YAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACnF,CAAC;IACL,6BAAC;AAAD,CAAC,AA1FD,CAA4C,iCAAe,GA0F1D;AA1FY,8BAAsB,yBA0FlC,CAAA;AAED,EAAE,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;AACnD;kBAAe,sBAAsB,CAAC"}
\ No newline at end of file
diff --git a/dist/olHelpers/quickMapBase.js b/dist/olHelpers/quickMapBase.js
index 9bfea03093ea1679aadd133f922b435cd91f0067..b04d5482923d208da4d3aa728392145471832227 100644
--- a/dist/olHelpers/quickMapBase.js
+++ b/dist/olHelpers/quickMapBase.js
@@ -2,10 +2,10 @@
  * Created by gavorhes on 12/15/2015.
  */
 "use strict";
-var $ = require('jquery');
 var provide_1 = require('../util/provide');
 var custom_ol_1 = require('custom-ol');
 var nm = provide_1.default('olHelpers');
+var $ = require('jquery');
 /**
  * Sets up a map with some default parameters and initializes
  * mapMove and mapPopup
diff --git a/dist/olHelpers/quickMapBase.js.map b/dist/olHelpers/quickMapBase.js.map
index 172c3bb5f8eb0a12c3b85f52c551630083ad14b4..dcf0ce4dbd0748a0035a0b71fdb9e4cafddfac34 100644
--- a/dist/olHelpers/quickMapBase.js.map
+++ b/dist/olHelpers/quickMapBase.js.map
@@ -1 +1 @@
-{"version":3,"file":"quickMapBase.js","sourceRoot":"","sources":["../../src/olHelpers/quickMapBase.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,IAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC5B,wBAAoB,iBAAiB,CAAC,CAAA;AACtC,0BAAiB,WAAW,CAAC,CAAA;AAC7B,IAAM,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAahC;;;;;;;;;;;;;;;GAeG;AACH,sBAA6B,OAAyB;IAClD,OAAO,GAAG,OAAO,IAAI,EAAqB,CAAC;IAC3C,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;IACvC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,GAAG,OAAO,OAAO,CAAC,IAAI,IAAI,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IAClE,OAAO,CAAC,YAAY,GAAG,OAAO,OAAO,CAAC,YAAY,IAAI,SAAS,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAC9F,OAAO,CAAC,UAAU,GAAG,OAAO,OAAO,CAAC,UAAU,IAAI,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;IAGzF,IAAI,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAEpC,IAAI,QAAQ,GAAG,IAAI,cAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,cAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAC,CAAC,CAAC;IAChE,sGAAsG;IAEtG,IAAI,MAAM,GAAG,m0GAAm0G,CAAC;IACj1G,IAAI,SAAS,GAAG,+uIAA+uI,CAAC;IAEhwI,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAkB3B,CAAC;IAED,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,mBAAmB,CAAC;IAC9B,CAAC;IAED,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3G,IAAI,CAAC,GAAG,IAAI,cAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,IAAI,cAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC;QAE5C,CAAC,CAAC,SAAS,CAAC,IAAI,cAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,EAAE,IAAI,cAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC,CAAC;QACtG,IAAI,WAAW,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;QACrC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,GAAG,GAAG,IAAI,cAAE,CAAC,GAAG,CAAC;QACjB,MAAM,EAAE,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC,KAAK;QACrB,QAAQ,EAAE,cAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC1B,kBAAkB,EAAE,EAAC,WAAW,EAAE,KAAK,EAAC;SAC3C,CAAC;QACF,IAAI,EAAE,IAAI,cAAE,CAAC,IAAI,CAAC;YACd,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5C,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B,CAAC;KACL,CAAC,CAAC;IAEH,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACrB,oCAAoC;QACpC,GAAG,CAAC,UAAU,CAAC,IAAI,cAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,GAAG,CAAC;AACf,CAAC;AAxEe,oBAAY,eAwE3B,CAAA;AAED,EAAE,CAAC,YAAY,GAAG,YAAY,CAAC;AAC/B;kBAAe,YAAY,CAAC"}
\ No newline at end of file
+{"version":3,"file":"quickMapBase.js","sourceRoot":"","sources":["../../src/olHelpers/quickMapBase.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,wBAAoB,iBAAiB,CAAC,CAAA;AACtC,0BAAiB,WAAW,CAAC,CAAA;AAC7B,IAAM,EAAE,GAAG,iBAAO,CAAC,WAAW,CAAC,CAAC;AAChC,IAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAa5B;;;;;;;;;;;;;;;GAeG;AACH,sBAA6B,OAAyB;IAClD,OAAO,GAAG,OAAO,IAAI,EAAqB,CAAC;IAC3C,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;IACvC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,GAAG,OAAO,OAAO,CAAC,IAAI,IAAI,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IAClE,OAAO,CAAC,YAAY,GAAG,OAAO,OAAO,CAAC,YAAY,IAAI,SAAS,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAC9F,OAAO,CAAC,UAAU,GAAG,OAAO,OAAO,CAAC,UAAU,IAAI,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;IAGzF,IAAI,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAEpC,IAAI,QAAQ,GAAG,IAAI,cAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,cAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAC,CAAC,CAAC;IAChE,sGAAsG;IAEtG,IAAI,MAAM,GAAG,m0GAAm0G,CAAC;IACj1G,IAAI,SAAS,GAAG,+uIAA+uI,CAAC;IAEhwI,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAkB3B,CAAC;IAED,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,mBAAmB,CAAC;IAC9B,CAAC;IAED,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3G,IAAI,CAAC,GAAG,IAAI,cAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,IAAI,cAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC;QAE5C,CAAC,CAAC,SAAS,CAAC,IAAI,cAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,EAAE,IAAI,cAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC,CAAC;QACtG,IAAI,WAAW,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;QACrC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,GAAG,GAAG,IAAI,cAAE,CAAC,GAAG,CAAC;QACjB,MAAM,EAAE,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC,KAAK;QACrB,QAAQ,EAAE,cAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC1B,kBAAkB,EAAE,EAAC,WAAW,EAAE,KAAK,EAAC;SAC3C,CAAC;QACF,IAAI,EAAE,IAAI,cAAE,CAAC,IAAI,CAAC;YACd,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5C,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B,CAAC;KACL,CAAC,CAAC;IAEH,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACrB,oCAAoC;QACpC,GAAG,CAAC,UAAU,CAAC,IAAI,cAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,GAAG,CAAC;AACf,CAAC;AAxEe,oBAAY,eAwE3B,CAAA;AAED,EAAE,CAAC,YAAY,GAAG,YAAY,CAAC;AAC/B;kBAAe,YAAY,CAAC"}
\ No newline at end of file
diff --git a/package.json b/package.json
index 9619ebd4f9286869072f0333b7aa7e3ceecc1553..39e5e4a37a8e1e1860986bebd2a3362874b65676 100644
--- a/package.json
+++ b/package.json
@@ -31,7 +31,6 @@
     "react-dom": "^15.3.2",
     "source-map-loader": "^0.1.5",
     "ts-loader": "^0.8.2",
-    "webpack": "^1.13.2",
     "custom-ol": "git://github.com/glennvorhes/custom-ol.git#master"
   },
   "repository": {
diff --git a/src/_scratch/_testimport.ts b/src/_scratch/_testimport.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3d9b769418ffdaf4e79700ffa488268bd9181e67
--- /dev/null
+++ b/src/_scratch/_testimport.ts
@@ -0,0 +1,3 @@
+
+import {ol} from 'custom-ol';
+console.log(ol.animation.bounce({duration: 10, resolution: 30, start: 4, easing: (t) => {return 5}}));
\ No newline at end of file
diff --git a/src/gulp-helpers.js b/src/gulp-helpers.js
deleted file mode 100644
index b5f91c5478fee5083dd00729a867711667cef5e0..0000000000000000000000000000000000000000
--- a/src/gulp-helpers.js
+++ /dev/null
@@ -1,168 +0,0 @@
-/**
- * Created by gavorhes on 5/10/2016.
- * Helpers functions for gulp tasks
- */
-
-const gulp = require('gulp');
-const babel = require('gulp-babel');
-const babelify = require('babelify');
-const browserify = require('browserify');
-const buffer = require('vinyl-buffer');
-const source = require('vinyl-source-stream');
-const sourcemaps = require('gulp-sourcemaps');
-const minify = require('gulp-minify');
-const less = require('gulp-less');
-const cssmin = require('gulp-cssmin');
-const rename = require('gulp-rename');
-const glob = require('glob');
-const watchify = require('watchify');
-const gulpUtil = require('gulp-util');
-
-
-/**
- * @typedef {object} dirNameFilePath
- * @property {string} dirName - directory name
- * @property {string} fileName - file name
- */
-
-/**
- * get directory and file name from output path
- * @param {string} outputFile - output file path
- * @returns {dirNameFilePath} file directory and path
- * @private
- */
-function _processOutDir(outputFile) {
-    "use strict";
-
-    let pathParts = outputFile.split('/');
-    let outFileName = pathParts[pathParts.length - 1];
-    pathParts.splice(pathParts.length - 1, 1);
-    let outDir = pathParts.length === 0 ? '.' : pathParts.join('/');
-
-    return {dirName: outDir, fileName: outFileName};
-}
-
-/**
- *
- * @param {string} inputFile - input file set to null to bundle everything in 'test' directory
- * @param {dirNameFilePath|string} outFile - output file as string or path object
- * @param {boolean} [production=false] if production, minify and don't watch
- * @returns {*} the stream
- * @private
- */
-export function bundleEs2015(inputFile, outFile, production) {
-    "use strict";
-
-
-
-    if (typeof outFile == 'string') {
-        outFile = _processOutDir(outFile);
-    }
-
-    production = typeof production == 'boolean' ? production : false;
-
-    if (inputFile.indexOf('*') > -1) {
-        inputFile = glob.sync(inputFile);
-    }
-
-
-    let bundler = browserify({
-        entries: inputFile,
-        cache: {},
-        packageCache: {},
-        debug: true
-    });
-
-    
-    bundler.transform(babelify.configure({
-        presets: ["es2015"],
-        ignore: /ol\-build\.js|jquery\.min/
-        // ignore: /ol\-build\.js|jquery\.min|\/node_modules\/(?!webmapsjs\/)|\/node_modules\/webmapsjs\/(?!lib\/)/
-    }));
-
-    if (!production) {
-        bundler = watchify(bundler);
-    }
-
-
-    function runBundle() {
-        console.log(inputFile);
-        let stream = bundler.bundle()
-            .on('error', function (err) {
-                console.error(err);
-            })
-            .pipe(source(outFile.fileName))
-            .pipe(buffer())
-            .pipe(sourcemaps.init({loadMaps: true}));
-
-        if (production) {
-            stream = stream.pipe(minify({
-                ext: {
-                    src: '-debug.js',
-                    min: '.js'
-                },
-                exclude: ['tasks'],
-                ignoreFiles: ['.combo.js', '-min.js']
-            }));
-        }
-
-        return stream.pipe(sourcemaps.write('./')).pipe(gulp.dest(outFile.dirName));
-    }
-
-    if (!production) {
-        bundler.on('update', runBundle);
-        bundler.on('log', gulpUtil.log);
-    }
-
-    return runBundle();
-}
-
-
-/**
- * convert less file
- * @param {string} inputFile - input less file
- * @param {string} outputFile - output css file
- * @returns {*} stream
- */
-export function processLessFile(inputFile, outputFile) {
-    "use strict";
-
-    let pathParts = outputFile.split('/');
-    let outFileName = pathParts[pathParts.length - 1];
-    pathParts.splice(pathParts.length - 1, 1);
-    let outDir = pathParts.length === 0 ? '.' : pathParts.join('/');
-
-    let fileNameParts = outFileName.split('.');
-
-    return gulp.src(inputFile)
-        .pipe(less().on('error', function (err) {
-            console.log(err);
-        }))
-        .pipe(cssmin().on('error', function (err) {
-            console.log(err);
-        }))
-        .pipe(rename({
-            basename: fileNameParts[0],
-            extname: '.' + fileNameParts[1],
-            suffix: '.min'
-        }))
-        .pipe(gulp.dest(outDir));
-}
-
-/**
- * make multiple bundles
- * @param {Array<Array<string>>} fileArray - array with elements [input file, output file]
- * @param {boolean} production - if is production
- * @returns {*} output stream
- */
-export function bundleEs2015Multiple(fileArray, production) {
-    "use strict";
-
-    let outStream = undefined;
-
-    for (let f of fileArray) {
-        outStream = bundleEs2015(f[0], f[1], production);
-    }
-
-    return outStream;
-}
diff --git a/src/layers/LayerBaseVectorEsri.js b/src/layers/LayerBaseVectorEsri.ts
similarity index 92%
rename from src/layers/LayerBaseVectorEsri.js
rename to src/layers/LayerBaseVectorEsri.ts
index 3bc94e3b1e216b5073ee9cb079211ffabb9535d0..368aab87d029342174949a82ab6a9c43f9630c8e 100644
--- a/src/layers/LayerBaseVectorEsri.js
+++ b/src/layers/LayerBaseVectorEsri.ts
@@ -2,19 +2,30 @@
  * Created by gavorhes on 11/2/2015.
  */
 
-import $ from '../jquery/jquery';
-import LayerBaseVector from './LayerBaseVector';
+import {LayerBaseVector, LayerBaseVectorOptions} from './LayerBaseVector';
 import * as esriToOl from '../olHelpers/esriToOlStyle';
 import provide from '../util/provide';
-import ol from '../ol/ol';
-
+import {ol} from 'custom-ol';
+const $ = require('jquery');
 let nm = provide('layers');
 
+export interface LayerBaseVectorEsriOptions  extends LayerBaseVectorOptions{
+    format: string;
+    outSR: number;
+    where: string;
+    outFields: string;
+    useEsriStyle: boolean;
+}
+
 /**
  * Base layer for esri vector layers
  * @augments LayerBaseVector
  */
 class LayerBaseVectorEsri extends LayerBaseVector {
+    _outSR: number;
+    _esriFormat: ol.format.EsriJSON;
+    _urlCopy: string;
+    _useEsriStyle: boolean;
 
     /**
      * The base vector layer
@@ -47,7 +58,7 @@ class LayerBaseVectorEsri extends LayerBaseVector {
      * @param {boolean} [options.collapseLegend=false] if the legend should be initially collapsed
      * @param {number} [options.mapMoveMakeGetParams=function(extent, zoomLevel){}] function to create additional map move params
      */
-    constructor(url, options) {
+    constructor(url: string, options: LayerBaseVectorEsriOptions) {
 
         if (typeof options.params != 'object') {
             options.params = {};
@@ -83,7 +94,7 @@ class LayerBaseVectorEsri extends LayerBaseVector {
      * add additional content to the legend
      * @param {string} [additionalContent=''] additional content to add to legend
      */
-    addLegendContent(additionalContent) {
+    addLegendContent(additionalContent?: string) {
         if (!this._useEsriStyle) {
             super.addLegendContent(additionalContent);
         } else {
diff --git a/src/layers/LayerBaseVectorGeoJson.ts b/src/layers/LayerBaseVectorGeoJson.ts
index a5a754fea9b88d7cbd167e4b51364043dad92934..a0ca2f6fe3ae9fec2d24357fa63cc51ffa9f37c1 100644
--- a/src/layers/LayerBaseVectorGeoJson.ts
+++ b/src/layers/LayerBaseVectorGeoJson.ts
@@ -22,7 +22,7 @@ export interface LayerBaseVectorGeoJsonOptions extends LayerBaseVectorOptions{
  * The Vector GeoJson Layer
  * @augments LayerBaseVector
  */
-class LayerBaseVectorGeoJson extends LayerBaseVector {
+export class LayerBaseVectorGeoJson extends LayerBaseVector {
     _geoJsonFormat: ol.format.GeoJSON;
     _transform: olx.format.ReadOptions;
 
diff --git a/_src/layers/LayerEsriTile.js b/src/layers/LayerBaseXyzTile.ts
similarity index 54%
rename from _src/layers/LayerEsriTile.js
rename to src/layers/LayerBaseXyzTile.ts
index 2e94f691e3aefe53dfcdfae6797d67f5fef26af7..7208995aa138cd9b4590ca397e88e2e2feffedbc 100644
--- a/_src/layers/LayerEsriTile.js
+++ b/src/layers/LayerBaseXyzTile.ts
@@ -1,20 +1,21 @@
 /**
  * Created by gavorhes on 12/4/2015.
  */
+import {LayerBase, LayerBaseOptions} from './LayerBase';
 import provide from '../util/provide';
-import LayerBaseXyzTile from './LayerBaseXyzTile';
-
+import {ol} from 'custom-ol';
 const nm = provide('layers');
 
 
 /**
- * Esri tile
- * @augments LayerBaseXyzTile
+ * XYZ tile
+ * @augments LayerBase
  */
-class LayerEsriTile extends LayerBaseXyzTile {
+export class LayerBaseXyzTile extends LayerBase {
+
 
     /**
-     * The Esri tile layer
+     * The XYZ tile layer
      * @param {string} url - url for source
      * @param {object} options - config
      * @param {string} [options.id] - layer id
@@ -31,16 +32,37 @@ class LayerEsriTile extends LayerBaseXyzTile {
      * @param {boolean} [options.legendContent] additional content to add to the legend
      * @param {boolean} [options.useEsriStyle=false] if the map service style should be used
      */
-    
-    constructor(url, options) {
-        if (url.search(/\/$/) == -1){
-            url += '/';
-        }
-        url += 'tile/{z}/{y}/{x}';
-        
+    constructor(url: string, options: LayerBaseOptions) {
         super(url, options);
+        this._source = new ol.source.XYZ({url: this.url == '' ? undefined : this.url});
+
+        this._olLayer = new ol.layer.Tile({
+            source: this._source as ol.source.XYZ,
+            visible: this.visible,
+            opacity: this.opacity,
+            minResolution: this._minResolution,
+            maxResolution: this._maxResolution
+        } );
+
+        this._olLayer.setZIndex(this._zIndex);
+    }
+
+    /**
+     *
+     * @returns {ol.source.XYZ} the vector source
+     */
+    get source(): ol.source.XYZ {
+        return this._source as ol.source.XYZ;
+    }
+
+    /**
+     *
+     * @returns {ol.layer.Tile|ol.layer.Base|undefined} the ol layer
+     */
+    get olLayer() : ol.layer.Tile {
+        return this._olLayer as ol.layer.Tile;
     }
 }
 
-nm.LayerBaseXyzTile = LayerEsriTile;
-export default LayerEsriTile;
+nm.LayerBaseXyzTile = LayerBaseXyzTile;
+export default LayerBaseXyzTile;
diff --git a/src/layers/LayerEsriTile.js b/src/layers/LayerEsriTile.js
deleted file mode 100644
index ee0e1b0ffc09754867b8e33a7eea3b0211d129f1..0000000000000000000000000000000000000000
--- a/src/layers/LayerEsriTile.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Created by gavorhes on 12/4/2015.
- */
-import provide from '../util/provide';
-import LayerBaseXyzTile from './LayerBaseXyzTile';
-
-const nm = provide('layers');
-
-/**
- * Esri tile
- * @augments LayerBaseXyzTile
- */
-export class LayerEsriTile extends LayerBaseXyzTile {
-
-    /**
-     * The Esri tile layer
-     * @param {string} url - url for source
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used
-     */
-    constructor(url, options) {
-        if (url.search(/\/$/) == -1){
-            url += '/';
-        }
-        url += 'tile/{z}/{y}/{x}';
-        
-        super(url, options);
-    }
-}
-
-nm.LayerBaseXyzTile = LayerEsriTile;
-
diff --git a/src/layers/LayerBaseXyzTile.js b/src/layers/LayerEsriTile.ts
similarity index 71%
rename from src/layers/LayerBaseXyzTile.js
rename to src/layers/LayerEsriTile.ts
index 88c58565cdb33fa6dd690e9d2748f5802c2175cf..4c9bc70ca8ebce10cba163008b93869ff2a4b065 100644
--- a/src/layers/LayerBaseXyzTile.js
+++ b/src/layers/LayerEsriTile.ts
@@ -1,21 +1,27 @@
 /**
  * Created by gavorhes on 12/4/2015.
  */
-import $ from '../jquery/jquery';
-import LayerBase from './LayerBase';
-import * as esriToOl from '../olHelpers/esriToOlStyle';
 import provide from '../util/provide';
-import ol from '../ol/ol';
+import {LayerBaseXyzTile} from './LayerBaseXyzTile';
+import {LayerBaseOptions} from './LayerBase'
+import * as esriToOl from '../olHelpers/esriToOlStyle';
+
+
 const nm = provide('layers');
 
+export interface LayerEsriTileOptions extends LayerBaseOptions{
+    useEsriStyle?: boolean
+}
+
 /**
- * XYZ tile
- * @augments LayerBase
+ * Esri tile
+ * @augments LayerBaseXyzTile
  */
-class LayerBaseXyzTile extends LayerBase {
+export class LayerEsriTile extends LayerBaseXyzTile {
+    _useEsriStyle: boolean;
 
     /**
-     * The XYZ tile layer
+     * The Esri tile layer
      * @param {string} url - url for source
      * @param {object} options - config
      * @param {string} [options.id] - layer id
@@ -32,18 +38,13 @@ class LayerBaseXyzTile extends LayerBase {
      * @param {boolean} [options.legendContent] additional content to add to the legend
      * @param {boolean} [options.useEsriStyle=false] if the map service style should be used
      */
-    constructor(url, options) {
-        super(url, options);
-        this._source = new ol.source.XYZ({url: this.url == '' ? undefined : this.url});
-        this._olLayer = new ol.layer.Tile({
-            source: this._source,
-            visible: this.visible,
-            opacity: this.opacity,
-            minResolution: this._minResolution,
-            maxResolution: this._maxResolution,
-            zIndex: this._zIndex
-        });
+    constructor(url: string, options: LayerEsriTileOptions) {
+        if (url.search(/\/$/) == -1) {
+            url += '/';
+        }
+        url += 'tile/{z}/{y}/{x}';
 
+        super(url, options);
 
         this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;
 
@@ -52,11 +53,12 @@ class LayerBaseXyzTile extends LayerBase {
         }
     }
 
+
     /**
      * add additional content to the legend
      * @param {string} [additionalContent=''] additional content for legend
      */
-    addLegendContent(additionalContent) {
+    addLegendContent(additionalContent = ''): void {
         if (!this._useEsriStyle) {
             super.addLegendContent(additionalContent);
         } else {
@@ -85,22 +87,9 @@ class LayerBaseXyzTile extends LayerBase {
         }
     }
 
-    /**
-     *
-     * @returns {ol.source.XYZ} the vector source
-     */
-    get source() {
-        return super.source;
-    }
 
-    /**
-     *
-     * @returns {ol.layer.Tile|ol.layer.Base|undefined} the ol layer
-     */
-    get olLayer() {
-        return super.olLayer;
-    }
 }
 
-nm.LayerBaseXyzTile = LayerBaseXyzTile;
-export default LayerBaseXyzTile;
+nm.LayerBaseXyzTile = LayerEsriTile;
+export default LayerEsriTile;
+
diff --git a/src/layers/LayerRealEarthTile.js b/src/layers/LayerRealEarthTile.ts
similarity index 86%
rename from src/layers/LayerRealEarthTile.js
rename to src/layers/LayerRealEarthTile.ts
index 46eb2a906e7be5b262e57d526a4c95f0414238d5..3e2aa409a2b0824faef33ad877ed7ad450de0c31 100644
--- a/src/layers/LayerRealEarthTile.js
+++ b/src/layers/LayerRealEarthTile.ts
@@ -2,18 +2,27 @@
  * Created by gavorhes on 11/4/2015.
  */
 
-import $ from '../jquery/jquery';
-import LayerBaseXyzTile from './LayerBaseXyzTile';
+import {LayerBaseXyzTile} from './LayerBaseXyzTile';
+import {LayerBaseOptions} from './LayerBase';
 import RealEarthAnimateTile from '../mixin/RealEarthAnimateTile';
 import provide from '../util/provide';
 const mixIns = require('es6-mixins');
 const nm = provide('layers');
 
+export interface LayerRealEarthTileOptions extends LayerBaseOptions{
+    products: string;
+    hasTimes?: boolean;
+    animate?: boolean;
+}
+
+
 /**
  * Real earth tile
  * @augments LayerBaseXyzTile
  */
 class LayerRealEarthTile extends LayerBaseXyzTile {
+    _products: string;
+    timeInit: Function;
     /**
      * The base layer for all others
      * @param {object} options - config
@@ -34,7 +43,7 @@ class LayerRealEarthTile extends LayerBaseXyzTile {
      * @param {boolean} [options.hasTimes=false] If the layer is time dependent, fixed set of dates
      * @param {boolean} [options.animate=false] if the layer should be animated
      */
-    constructor(options) {
+    constructor(options: LayerRealEarthTileOptions) {
         options.animate = typeof options.animate == 'boolean' ? options.animate : false;
         if (!options.animate) {
             super(`http://realearth.ssec.wisc.edu/api/image?products=${options.products}&x={x}&y={y}&z={z}`, options);
diff --git a/src/layers/LayerRealEarthVector.js b/src/layers/LayerRealEarthVector.js
deleted file mode 100644
index 65ebab4a8bbcc248ed45fa15ff6d9704c5fd3904..0000000000000000000000000000000000000000
--- a/src/layers/LayerRealEarthVector.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * Created by gavorhes on 11/13/2015.
- */
-
-import LayerBaseVectorGeoJson from './LayerBaseVectorGeoJson';
-import RealEarthAnimateVector from '../mixin/RealEarthAnimateVector';
-import provide from '../util/provide';
-const mixIns = require('es6-mixins');
-const nm = provide('layers');
-
-/**
- * Vector real earth vector
- * @augments LayerBaseVectorGeoJson
- */
-class LayerVectorRealEarth extends LayerBaseVectorGeoJson {
-    /**
-     * Real Earth vector layer
-     * @param {object} options - config
-     * @param {string} [options.id] - layer id
-     * @param {string} [options.name=Unnamed Layer] - layer name
-     * @param {number} [options.opacity=1] - opacity
-     * @param {boolean} [options.visible=true] - default visible
-     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
-     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
-     * @param {object} [options.params={}] the get parameters to include to retrieve the layer
-     * @param {number} [options.zIndex=0] the z index for the layer
-     * @param {function} [options.loadCallback] function to call on load, context this is the layer object
-     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
-     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
-     * @param {boolean} [options.legendContent] additional content to add to the legend
-     *
-     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
-     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
-     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
-     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
-     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
-     *
-     * @param {object} [options.transform={}] SR transform, set as false for no transform
-     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS
-     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS
-     *
-     * @param {string} options.products real earth products identifier
-     * @param {boolean} [options.animate=false] if the layer should be animated
-     */
-    constructor(options) {
-        options.animate = typeof options.animate == 'boolean' ? options.animate : false;
-        if (!options.animate) {
-            options.params = {products: options.products};
-            super('http://realearth.ssec.wisc.edu/api/shapes', options);
-        } else {
-            options.autoLoad = false;
-            super('', options);
-            this._products = options.products;
-            if (!this.timeInit) {
-                mixIns([RealEarthAnimateVector], this);
-            }
-            this.timeInit();
-        }
-    }
-}
-
-nm.LayerVectorRealEarth = LayerVectorRealEarth;
-export default LayerVectorRealEarth;
diff --git a/_src/layers/LayerRealEarthVector.js b/src/layers/LayerRealEarthVector.ts
similarity index 89%
rename from _src/layers/LayerRealEarthVector.js
rename to src/layers/LayerRealEarthVector.ts
index 65ebab4a8bbcc248ed45fa15ff6d9704c5fd3904..b2500d86a3658da1fc88e2e0e994a5545c0d0bbe 100644
--- a/_src/layers/LayerRealEarthVector.js
+++ b/src/layers/LayerRealEarthVector.ts
@@ -2,17 +2,27 @@
  * Created by gavorhes on 11/13/2015.
  */
 
-import LayerBaseVectorGeoJson from './LayerBaseVectorGeoJson';
+import {LayerBaseVectorGeoJson, LayerBaseVectorGeoJsonOptions} from './LayerBaseVectorGeoJson';
 import RealEarthAnimateVector from '../mixin/RealEarthAnimateVector';
 import provide from '../util/provide';
 const mixIns = require('es6-mixins');
 const nm = provide('layers');
 
+export interface LayerVectorRealEarthOptions extends LayerBaseVectorGeoJsonOptions {
+    products: string;
+    hasTimes?: boolean;
+    animate?: boolean;
+}
+
+
 /**
  * Vector real earth vector
  * @augments LayerBaseVectorGeoJson
  */
 class LayerVectorRealEarth extends LayerBaseVectorGeoJson {
+    _products: string;
+    timeInit: Function;
+
     /**
      * Real Earth vector layer
      * @param {object} options - config
@@ -42,7 +52,7 @@ class LayerVectorRealEarth extends LayerBaseVectorGeoJson {
      * @param {string} options.products real earth products identifier
      * @param {boolean} [options.animate=false] if the layer should be animated
      */
-    constructor(options) {
+    constructor(options: LayerVectorRealEarthOptions) {
         options.animate = typeof options.animate == 'boolean' ? options.animate : false;
         if (!options.animate) {
             options.params = {products: options.products};
diff --git a/src/mixin/RealEarthAnimate.js b/src/mixin/RealEarthAnimate.ts
similarity index 82%
rename from src/mixin/RealEarthAnimate.js
rename to src/mixin/RealEarthAnimate.ts
index 949a867e9c98407e2c5f6dc6d23f9dc011026ce0..57672431f72e875db2d0885a171a6a3e8ec8b180 100644
--- a/src/mixin/RealEarthAnimate.js
+++ b/src/mixin/RealEarthAnimate.ts
@@ -3,7 +3,7 @@
  */
 import provide from '../util/provide';
 import mapPopup from '../olHelpers/mapPopup';
-import $ from '../jquery/jquery';
+const $ = require('jquery');
 const nm = provide('mixin');
 
 
@@ -13,11 +13,23 @@ const nm = provide('mixin');
  */
 let offsetMinutes = (new Date()).getTimezoneOffset();
 
+
 /**
  * Mixin to get the product times
  * Be sure to call getTimeInit after the mixin has been applied
  */
-class RealEarthAnimate {
+export class RealEarthAnimate {
+    _animateEnabled: boolean;
+    _currentIndex: number;
+    _localDates: Date[];
+    _rawDateStrings: string[];
+    _products: string;
+    loadCallback: Function;
+    localTimes: number[];
+    _currentTime: number;
+    _loaded: boolean;
+    _visible: boolean;
+
 
     /**
      * override base layer load
@@ -40,20 +52,20 @@ class RealEarthAnimate {
         this._currentTime = undefined;
         this._currentIndex = undefined;
 
-        let _this = this;
+        let __this = this;
 
         $.get('http://realearth.ssec.wisc.edu/api/products', {products: this._products}, function (d) {
             if (d.length == 0) {
-                console.log(`${this._products} layer not available or does not have times`);
+                console.log(`${__this._products} layer not available or does not have times`);
 
                 return;
             }
             d = d[0];
             for (let i = 0; i < d['times'].length; i++) {
-                _this._loadDates.call(_this, d['times'][i]);
+                __this._loadDates.call(__this, d['times'][i]);
             }
-            _this.loadCallback.call(_this);
-            _this._loadLatest.call(_this);
+            __this.loadCallback.call(__this);
+            __this._loadLatest.call(__this);
         }, 'json');
     }
 
@@ -62,7 +74,7 @@ class RealEarthAnimate {
      *
      * @returns {boolean} if animation enabled
      */
-    get animationEnabled(){
+    get animationEnabled(): boolean{
         return this._animateEnabled;
     }
 
@@ -72,7 +84,7 @@ class RealEarthAnimate {
      * @returns {string} the converted string
      * @protected
      */
-    _loadDates(inString) {
+    _loadDates(inString: string): string {
         let yr = inString.slice(0, 4);
         let month = inString.slice(4, 6);
         let d = inString.slice(6, 8);
@@ -113,8 +125,8 @@ class RealEarthAnimate {
      * @param {number} theTime - the time
      * @returns {boolean} true if new index, false if the same or below lowest value
      */
-    setLayerTime(theTime){
-        if (!this.visible){
+    setLayerTime(theTime: number): boolean{
+        if (!this._visible){
             return false;
         }
 
diff --git a/src/mixin/RealEarthAnimateTile.js b/src/mixin/RealEarthAnimateTile.js
deleted file mode 100644
index f793f47dedda3c9d8de84cc9fb94c6ed69cf858d..0000000000000000000000000000000000000000
--- a/src/mixin/RealEarthAnimateTile.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * Created by gavorhes on 12/4/2015.
- */
-import RealEarthAnimate from './RealEarthAnimate';
-import provide from '../util/provide';
-const nm = provide('mixin');
-
-/**
- * Animate real earth tile
- * @augments RealEarthAnimate
- */
-class RealEarthAnimateTile extends RealEarthAnimate {
-
-    /**
-     * override base layer load
-     */
-    load() {
-        super.load();
-    };
-
-
-    timeInit() {
-        super.timeInit();
-        this._sourceUrls = [];
-    }
-
-    _loadDates(inString) {
-        let rawDte = super._loadDates(inString);
-        let dteProductUrl =
-            `http://realearth.ssec.wisc.edu/api/image?products=${this._products}_${rawDte}&x={x}&y={y}&z={z}`;
-        this._sourceUrls.push(dteProductUrl);
-    }
-
-    /**
-     * @protected
-     */
-    _loadLatest() {
-        if (super._loadLatest()){
-            this._source.setUrl(this._sourceUrls[this._sourceUrls.length - 1]);
-        }
-    }
-
-    setLayerTime(theTime) {
-        if (super.setLayerTime(theTime)) {
-            if (this.olLayer.getZIndex() < 0){
-                this.olLayer.setZIndex(0);
-            }
-            this._source.setUrl(this._sourceUrls[this._currentIndex]);
-        } else {
-            this.olLayer.setZIndex(-1);
-        }
-    }
-}
-
-nm.RealEarthAnimateTile = RealEarthAnimateTile;
-export default RealEarthAnimateTile;
diff --git a/_src/mixin/RealEarthAnimateTile.js b/src/mixin/RealEarthAnimateTile.ts
similarity index 72%
rename from _src/mixin/RealEarthAnimateTile.js
rename to src/mixin/RealEarthAnimateTile.ts
index f793f47dedda3c9d8de84cc9fb94c6ed69cf858d..d1d0072413f77518345b49dd1c9222bae0eec755 100644
--- a/_src/mixin/RealEarthAnimateTile.js
+++ b/src/mixin/RealEarthAnimateTile.ts
@@ -3,6 +3,7 @@
  */
 import RealEarthAnimate from './RealEarthAnimate';
 import provide from '../util/provide';
+import {ol} from 'custom-ol';
 const nm = provide('mixin');
 
 /**
@@ -10,6 +11,9 @@ const nm = provide('mixin');
  * @augments RealEarthAnimate
  */
 class RealEarthAnimateTile extends RealEarthAnimate {
+    _sourceUrls: string[];
+    _source: ol.source.XYZ;
+    _olLayer: ol.layer.Tile;
 
     /**
      * override base layer load
@@ -24,31 +28,34 @@ class RealEarthAnimateTile extends RealEarthAnimate {
         this._sourceUrls = [];
     }
 
-    _loadDates(inString) {
+    _loadDates(inString: string): string {
         let rawDte = super._loadDates(inString);
         let dteProductUrl =
             `http://realearth.ssec.wisc.edu/api/image?products=${this._products}_${rawDte}&x={x}&y={y}&z={z}`;
         this._sourceUrls.push(dteProductUrl);
+        return '';
     }
 
     /**
      * @protected
      */
-    _loadLatest() {
+    _loadLatest(): boolean {
         if (super._loadLatest()){
             this._source.setUrl(this._sourceUrls[this._sourceUrls.length - 1]);
         }
+        return true;
     }
 
-    setLayerTime(theTime) {
+    setLayerTime(theTime: number): boolean {
         if (super.setLayerTime(theTime)) {
-            if (this.olLayer.getZIndex() < 0){
-                this.olLayer.setZIndex(0);
+            if (this._olLayer.getZIndex() < 0){
+                this._olLayer.setZIndex(0);
             }
             this._source.setUrl(this._sourceUrls[this._currentIndex]);
         } else {
-            this.olLayer.setZIndex(-1);
+            this._olLayer.setZIndex(-1);
         }
+        return true;
     }
 }
 
diff --git a/src/mixin/RealEarthAnimateVector.js b/src/mixin/RealEarthAnimateVector.ts
similarity index 79%
rename from src/mixin/RealEarthAnimateVector.js
rename to src/mixin/RealEarthAnimateVector.ts
index 944223884ae7e5af602fa2c34ceb6c5c8ee4d587..d53ea8ed315ed35794158250d2a3ae9103e33128 100644
--- a/src/mixin/RealEarthAnimateVector.js
+++ b/src/mixin/RealEarthAnimateVector.ts
@@ -3,6 +3,7 @@
  */
 import RealEarthAnimate from './RealEarthAnimate';
 import provide from '../util/provide';
+import {ol, olx} from 'custom-ol';
 const nm = provide('mixin');
 const $ = require('jquery');
 
@@ -12,6 +13,12 @@ const $ = require('jquery');
  * @augments RealEarthAnimate
  */
 class RealEarthAnimateVector extends RealEarthAnimate {
+    _dataCache: Array<Array<Object>|Object>;
+    _source: ol.source.Vector;
+    _geoJsonFormat: ol.format.GeoJSON;
+    _transform: olx.format.ReadOptions;
+    _rawTimesLookup: {[s: string]: any};
+    _currentIndex: number;
 
     /**
      * override base layer load
@@ -34,19 +41,21 @@ class RealEarthAnimateVector extends RealEarthAnimate {
      * @param {string} inString - input date string
      * @protected
      */
-    _loadDates(inString) {
+    _loadDates(inString: string): string {
         let rawDte = super._loadDates(inString);
         this._dataCache.push(null);
         this._rawTimesLookup[rawDte] = null;
+        return '';
     }
 
     /**
      * @protected
      */
-    _loadLatest() {
+    _loadLatest(): boolean {
         if(super._loadLatest()){
             this._loadAtTimeIndex.call(this, this._currentIndex);
         }
+        return true;
     }
     //
     //http://realearth.ssec.wisc.edu/api/image?products=nexrhres_20160108_212500&x=1&y=5&z=4
@@ -60,10 +69,10 @@ class RealEarthAnimateVector extends RealEarthAnimate {
      * @param {boolean} [setAsSource=true] set to false to trigger cache load only
      * @private
      */
-    _loadAtTimeIndex(i, setAsSource) {
+    _loadAtTimeIndex(i: number, setAsSource = true) {
         setAsSource = typeof setAsSource == 'boolean' ? setAsSource : true;
         if (this._dataCache[i] != null) {
-            this.source.clear();
+            this._source.clear();
             this._loadFeatures(this._dataCache[i]);
         } else {
             let _this = this;
@@ -73,7 +82,7 @@ class RealEarthAnimateVector extends RealEarthAnimate {
                     _this._dataCache[i] = d;
                     _this._rawTimesLookup[_this._rawDateStrings[i]] = d;
                     if (setAsSource) {
-                        _this.source.clear();
+                        _this._source.clear();
                         _this._loadFeatures.call(_this, _this._dataCache[i]);
                     }
                 }, 'json'
@@ -87,15 +96,16 @@ class RealEarthAnimateVector extends RealEarthAnimate {
      * @private
      */
     _loadFeatures(geojObj) {
-        this.source.addFeatures(this._geoJsonFormat.readFeatures(geojObj, this._transform));
+        this._source.addFeatures(this._geoJsonFormat.readFeatures(geojObj, this._transform));
     }
 
-    setLayerTime(theTime) {
+    setLayerTime(theTime: number): boolean {
         if (super.setLayerTime(theTime)){
             this._loadAtTimeIndex(this._currentIndex);
         } else {
-            this.source.clear();
+            this._source.clear();
         }
+        return true;
     }
 }
 
diff --git a/src/olHelpers/quickMapBase.ts b/src/olHelpers/quickMapBase.ts
index 1dd43e05a11ee3f7ce5f69078245297b6d27f2fc..c2e61b04265b8ee5d69a7e45a329246b710d8340 100644
--- a/src/olHelpers/quickMapBase.ts
+++ b/src/olHelpers/quickMapBase.ts
@@ -2,10 +2,10 @@
  * Created by gavorhes on 12/15/2015.
  */
 
-const $ = require('jquery');
 import provide from '../util/provide';
 import {ol} from 'custom-ol';
 const nm = provide('olHelpers');
+const $ = require('jquery');
 
 
 export interface quickMapOptions {
diff --git a/src/olHelpers/quickMapMulti.js b/src/olHelpers/quickMapMulti.ts
similarity index 83%
rename from src/olHelpers/quickMapMulti.js
rename to src/olHelpers/quickMapMulti.ts
index f9e112c6d9ef094d3bf0d0106e18f52b0e742389..827509785d665d63f401044223b1a859a3719f55 100644
--- a/src/olHelpers/quickMapMulti.js
+++ b/src/olHelpers/quickMapMulti.ts
@@ -2,10 +2,11 @@
  * Created by gavorhes on 12/15/2015.
  */
 
-import quickMapBase from './quickMapBase';
+import {quickMapBase, quickMapOptions} from './quickMapBase';
 import provide from '../util/provide';
 import MapMoveCls from './mapMoveCls';
 import MapPopupCls from './mapPopupCls';
+import {ol} from 'custom-ol'
 let nm = provide('olHelpers');
 
 
@@ -30,9 +31,9 @@ let nm = provide('olHelpers');
  * @param {number} [options.maxZoom=undefined] max zoom
  * @param {boolean} [options.baseSwitcher=true] if add base map switcher
  * @param {boolean} [options.fullScreen=false] if add base map switcher
- * @returns {quickMapMultiReturn} return map, map move, and map popup objects
+ * @returns return object with map, map move, and map popup objects
  */
-function quickMapMulti(options) {
+function quickMapMulti(options: quickMapOptions): {map: ol.Map, mapMove: MapMoveCls, mapPopup: MapPopupCls} {
     let m = quickMapBase(options);
     let mov = new MapMoveCls();
     let pop = new MapPopupCls();
diff --git a/tsconfig.json b/tsconfig.json
index f50f28b20ca36826f0b839c9a560305849545635..490ea28ecc5d644b0ad901be415bc38f9f512aa7 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -10,7 +10,8 @@
     "sourceMap": true,
     "jsx": "react",
     "typeRoots": [
-      "node_modules/@types"
+      "node_modules/@types",
+      "node_modules/custom-ol/lib"
     ]
   },
   "exclude": [
diff --git a/webpack.config.js b/webpack.config.js
index c66ff315150c93142fe3a0ea7cc22910c73faf46..cf3bd2aac943d09fb2445b2bf4821acd9bb1ef46 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,6 +1,5 @@
 "use strict";
 const path = require('path');
-const webpack = require('webpack');
 const fs = require('fs');
 
 const testAppDir = path.join(__dirname, 'dist/_test');