{"version":3,"sources":["webpack:///./node_modules/@babel/runtime/helpers/asyncToGenerator.js","webpack:///./node_modules/@google/markerclusterer/dist/markerclusterer.esm.js","webpack:///./node_modules/google-maps/lib/Google.js"],"names":["MarkerClusterer","constructor","map","opt_markers","opt_options","extend","google","maps","OverlayView","map_","MARKER_CLUSTER_IMAGE_PATH_","MARKER_CLUSTER_IMAGE_EXTENSION_","markers_","clusters_","sizes","styles_","ready_","options","zIndex_","Marker","MAX_ZINDEX","gridSize_","minClusterSize_","maxZoom_","imagePath_","imageExtension_","zoomOnClick_","undefined","averageCenter_","setupStyles_","setMap","prevZoom_","getZoom","that","event","addListener","zoom","minZoom","maxZoom","Math","min","mapTypes","getMapTypeId","max","resetViewport","redraw","length","Object","keys","addMarkers","obj1","obj2","object","property","prototype","apply","onAdd","setReady_","draw","i","size","push","url","height","width","fitMapToMarkers","markers","getMarkers","bounds","LatLngBounds","marker","getPosition","fitBounds","setZIndex","zIndex","getZIndex","setStyles","styles","getStyles","isZoomOnClick","isAverageCenter","getTotalMarkers","setMaxZoom","getMaxZoom","calculator_","numStyles","index","count","dv","parseInt","text","setCalculator","calculator","getCalculator","opt_nodraw","pushMarkerTo_","isAdded","repaint","addMarker","removeMarker_","indexOf","m","splice","removeMarker","removed","removeMarkers","markersCopy","slice","r","ready","createClusters_","getTotalClusters","getMap","getGridSize","setGridSize","getMinClusterSize","setMinClusterSize","getExtendedBounds","projection","getProjection","tr","LatLng","getNorthEast","lat","lng","bl","getSouthWest","trPix","fromLatLngToDivPixel","x","y","blPix","ne","fromDivPixelToLatLng","sw","isMarkerInBounds_","contains","clearMarkers","opt_hide","cluster","remove","oldClusters","setTimeout","distanceBetweenPoints_","p1","p2","R","dLat","PI","dLon","a","sin","cos","c","atan2","sqrt","d","addToClosestCluster_","distance","clusterToAddTo","center","getCenter","isMarkerInClusterBounds","newCluster","Cluster","mapBounds","getBounds","markerClusterer","markerClusterer_","center_","bounds_","clusterIcon_","ClusterIcon","isMarkerAlreadyAdded","calculateBounds_","l","len","updateIcon","getMarkerClusterer","getSize","mz","hide","sums","setCenter","setSums","show","opt_padding","padding_","cluster_","div_","sums_","visible_","triggerClusterClick","clusterBounds","trigger","document","createElement","pos","getPosFromLatLng_","style","cssText","createCss","innerHTML","panes","getPanes","overlayMouseTarget","appendChild","addDomListener","latlng","width_","height_","top","left","display","onRemove","parentNode","removeChild","text_","index_","useStyle","url_","textColor_","anchor_","textSize_","backgroundPosition_","backgroundPosition","txtColor","txtSize","join"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,iH;;;;;;;;;;;;AC9BA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,eAAe,CAAC;EACpBC,WAAWA,CAACC,GAAG,EAAEC,WAAW,EAAEC,WAAW,EAAE;IACzC,IAAI,CAACC,MAAM,CAACL,eAAe,EAAEM,MAAM,CAACC,IAAI,CAACC,WAAW,CAAC;IACrD,IAAI,CAACC,IAAI,GAAGP,GAAG;;IAEf;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACQ,0BAA0B,GAAG,aAAa;;IAE/C;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,+BAA+B,GAAG,KAAK;IAC5C;AACJ;AACA;AACA;IACI,IAAI,CAACC,QAAQ,GAAG,EAAE;;IAElB;AACJ;AACA;IACI,IAAI,CAACC,SAAS,GAAG,EAAE;IAEnB,IAAI,CAACC,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;;IAEjC;AACJ;AACA;AACA;IACI,IAAI,CAACC,OAAO,GAAG,EAAE;;IAEjB;AACJ;AACA;AACA;IACI,IAAI,CAACC,MAAM,GAAG,KAAK;IAEnB,IAAIC,OAAO,GAAGb,WAAW,IAAI,CAAC,CAAC;;IAE/B;AACJ;AACA;IACI,IAAI,CAACc,OAAO,GAAGD,OAAO,CAAC,QAAQ,CAAC,IA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","file":"vendors~dealer.chunk.js","sourcesContent":["function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n  try {\n    var info = gen[key](arg);\n    var value = info.value;\n  } catch (error) {\n    reject(error);\n    return;\n  }\n  if (info.done) {\n    resolve(value);\n  } else {\n    Promise.resolve(value).then(_next, _throw);\n  }\n}\nfunction _asyncToGenerator(fn) {\n  return function () {\n    var self = this,\n      args = arguments;\n    return new Promise(function (resolve, reject) {\n      var gen = fn.apply(self, args);\n      function _next(value) {\n        asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n      }\n      function _throw(err) {\n        asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n      }\n      _next(undefined);\n    });\n  };\n}\nmodule.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/**\n * Copyright 2019 Google LLC. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @name MarkerClusterer for Google Maps v3\n * @author Luke Mahe\n * @fileoverview\n * The library creates and manages per-zoom-level clusters for large amounts of\n * markers.\n */\n\n/**\n * A Marker Clusterer that clusters markers.\n *\n * @param {google.maps.Map} map The Google map to attach to.\n * @param {Array.<google.maps.Marker>=} opt_markers Optional markers to add to\n *   the cluster.\n * @param {Object=} opt_options support the following options:\n *     'gridSize': (number) The grid size of a cluster in pixels.\n *     'maxZoom': (number) The maximum zoom level that a marker can be part of a\n *                cluster.\n *     'zoomOnClick': (boolean) Whether the default behaviour of clicking on a\n *                    cluster is to zoom into it.\n *     'imagePath': (string) The base URL where the images representing\n *                  clusters will be found. The full URL will be:\n *                  {imagePath}[1-5].{imageExtension}\n *                  Default: '../images/m'.\n *     'imageExtension': (string) The suffix for images URL representing\n *                       clusters will be found. See _imagePath_ for details.\n *                       Default: 'png'.\n *     'averageCenter': (boolean) Whether the center of each cluster should be\n *                      the average of all markers in the cluster.\n *     'minimumClusterSize': (number) The minimum number of markers to be in a\n *                           cluster before the markers are hidden and a count\n *                           is shown.\n *     'zIndex': (number) the z-index of a cluster.\n *               Default: google.maps.Marker.MAX_ZINDEX + 1\n *     'styles': (Array.<Object>) An Array of single object that has style properties for all cluster:\n *       'url': (string) The image url.\n *       'height': (number) The image height.\n *       'width': (number) The image width.\n *       'anchor': (Array) The anchor position of the label text.\n *       'textColor': (string) The text color.\n *       'textSize': (number) The text size.\n *       'backgroundPosition': (string) The position of the backgound x, y.\n * @constructor\n * @extends google.maps.OverlayView\n */\n\nclass MarkerClusterer {\n  constructor(map, opt_markers, opt_options) {\n    this.extend(MarkerClusterer, google.maps.OverlayView);\n    this.map_ = map;\n\n    /**\n     * The marker cluster image path.\n     *\n     * @type {string}\n     * @private\n     */\n    this.MARKER_CLUSTER_IMAGE_PATH_ = \"../images/m\";\n\n    /**\n     * The marker cluster image path.\n     *\n     * @type {string}\n     * @private\n     */\n    this.MARKER_CLUSTER_IMAGE_EXTENSION_ = \"png\";\n    /**\n     * @type {Array.<google.maps.Marker>}\n     * @private\n     */\n    this.markers_ = [];\n\n    /**\n     *  @type {Array.<Cluster>}\n     */\n    this.clusters_ = [];\n\n    this.sizes = [53, 56, 66, 78, 90];\n\n    /**\n     * @type {Array.<Object>}\n     * @private\n     */\n    this.styles_ = [];\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.ready_ = false;\n\n    var options = opt_options || {};\n\n    /**\n     * @type {number}\n     */\n    this.zIndex_ = options[\"zIndex\"] || google.maps.Marker.MAX_ZINDEX + 1;\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.gridSize_ = options[\"gridSize\"] || 60;\n\n    /**\n     * @private\n     */\n    this.minClusterSize_ = options[\"minimumClusterSize\"] || 2;\n\n    /**\n     * @type {?number}\n     * @private\n     */\n    this.maxZoom_ = options[\"maxZoom\"] || null;\n\n    this.styles_ = options[\"styles\"] || [];\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.imagePath_ = options[\"imagePath\"] || this.MARKER_CLUSTER_IMAGE_PATH_;\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.imageExtension_ =\n      options[\"imageExtension\"] || this.MARKER_CLUSTER_IMAGE_EXTENSION_;\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.zoomOnClick_ = true;\n\n    if (options[\"zoomOnClick\"] != undefined) {\n      this.zoomOnClick_ = options[\"zoomOnClick\"];\n    }\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this.averageCenter_ = false;\n\n    if (options[\"averageCenter\"] != undefined) {\n      this.averageCenter_ = options[\"averageCenter\"];\n    }\n\n    this.setupStyles_();\n\n    this.setMap(map);\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this.prevZoom_ = this.map_.getZoom();\n\n    // Add the map event listeners\n    var that = this;\n    google.maps.event.addListener(this.map_, \"zoom_changed\", function() {\n      // Determines map type and prevent illegal zoom levels\n      var zoom = that.map_.getZoom();\n      var minZoom = that.map_.minZoom || 0;\n      var maxZoom = Math.min(\n        that.map_.maxZoom || 100,\n        that.map_.mapTypes[that.map_.getMapTypeId()].maxZoom\n      );\n      zoom = Math.min(Math.max(zoom, minZoom), maxZoom);\n\n      if (that.prevZoom_ != zoom) {\n        that.prevZoom_ = zoom;\n        that.resetViewport();\n      }\n    });\n\n    google.maps.event.addListener(this.map_, \"idle\", function() {\n      that.redraw();\n    });\n\n    // Finally, add the markers\n    if (\n      opt_markers &&\n      (opt_markers.length || Object.keys(opt_markers).length)\n    ) {\n      this.addMarkers(opt_markers, false);\n    }\n  }\n\n  /**\n   * Extends a objects prototype by anothers.\n   *\n   * @param {Object} obj1 The object to be extended.\n   * @param {Object} obj2 The object to extend with.\n   * @return {Object} The new extended object.\n   * @ignore\n   */\n  extend(obj1, obj2) {\n    return function(object) {\n      for (var property in object.prototype) {\n        this.prototype[property] = object.prototype[property];\n      }\n      return this;\n    }.apply(obj1, [obj2]);\n  }\n\n  /**\n   * Implementaion of the interface method.\n   * @ignore\n   */\n  onAdd() {\n    this.setReady_(true);\n  }\n\n  /**\n   * Implementaion of the interface method.\n   * @ignore\n   */\n  draw() {}\n\n  /**\n   * Sets up the styles object.\n   *\n   * @private\n   */\n  setupStyles_() {\n    if (this.styles_.length) {\n      return;\n    }\n\n    for (var i = 0, size; (size = this.sizes[i]); i++) {\n      this.styles_.push({\n        url: this.imagePath_ + (i + 1) + \".\" + this.imageExtension_,\n        height: size,\n        width: size\n      });\n    }\n  }\n\n  /**\n   *  Fit the map to the bounds of the markers in the clusterer.\n   */\n  fitMapToMarkers() {\n    var markers = this.getMarkers();\n    var bounds = new google.maps.LatLngBounds();\n    for (var i = 0, marker; (marker = markers[i]); i++) {\n      bounds.extend(marker.getPosition());\n    }\n\n    this.map_.fitBounds(bounds);\n  }\n\n  /**\n   * @param {number} zIndex\n   */\n  setZIndex(zIndex) {\n    this.zIndex_ = zIndex;\n  }\n\n  /**\n   * @return {number}\n   */\n  getZIndex() {\n    return this.zIndex_;\n  }\n\n  /**\n   *  Sets the styles.\n   *\n   *  @param {Object} styles The style to set.\n   */\n  setStyles(styles) {\n    this.styles_ = styles;\n  }\n\n  /**\n   *  Gets the styles.\n   *\n   *  @return {Object} The styles object.\n   */\n  getStyles() {\n    return this.styles_;\n  }\n\n  /**\n   * Whether zoom on click is set.\n   *\n   * @return {boolean} True if zoomOnClick_ is set.\n   */\n  isZoomOnClick() {\n    return this.zoomOnClick_;\n  }\n\n  /**\n   * Whether average center is set.\n   *\n   * @return {boolean} True if averageCenter_ is set.\n   */\n  isAverageCenter() {\n    return this.averageCenter_;\n  }\n\n  /**\n   *  Returns the array of markers in the clusterer.\n   *\n   *  @return {Array.<google.maps.Marker>} The markers.\n   */\n  getMarkers() {\n    return this.markers_;\n  }\n\n  /**\n   *  Returns the number of markers in the clusterer\n   *\n   *  @return {Number} The number of markers.\n   */\n  getTotalMarkers() {\n    return this.markers_.length;\n  }\n\n  /**\n   *  Sets the max zoom for the clusterer.\n   *\n   *  @param {number} maxZoom The max zoom level.\n   */\n  setMaxZoom(maxZoom) {\n    this.maxZoom_ = maxZoom;\n  }\n\n  /**\n   *  Gets the max zoom for the clusterer.\n   *\n   *  @return {number} The max zoom level.\n   */\n  getMaxZoom() {\n    return this.maxZoom_;\n  }\n\n  /**\n   *  The function for calculating the cluster icon image.\n   *\n   *  @param {Array.<google.maps.Marker>} markers The markers in the clusterer.\n   *  @param {number} numStyles The number of styles available.\n   *  @return {Object} A object properties: 'text' (string) and 'index' (number).\n   *  @private\n   */\n  calculator_(markers, numStyles) {\n    var index = 0;\n    var count = markers.length;\n    var dv = count;\n    while (dv !== 0) {\n      dv = parseInt(dv / 10, 10);\n      index++;\n    }\n\n    index = Math.min(index, numStyles);\n    return {\n      text: count,\n      index: index\n    };\n  }\n\n  /**\n   * Set the calculator function.\n   *\n   * @param {function(Array, number)} calculator The function to set as the\n   *     calculator. The function should return a object properties:\n   *     'text' (string) and 'index' (number).\n   *\n   */\n  setCalculator(calculator) {\n    this.calculator_ = calculator;\n  }\n\n  /**\n   * Get the calculator function.\n   *\n   * @return {function(Array, number)} the calculator function.\n   */\n  getCalculator() {\n    return this.calculator_;\n  }\n\n  /**\n   * Add an array of markers to the clusterer.\n   *\n   * @param {Array.<google.maps.Marker>} markers The markers to add.\n   * @param {boolean=} opt_nodraw Whether to redraw the clusters.\n   */\n  addMarkers(markers, opt_nodraw) {\n    if (markers.length) {\n      for (let i = 0, marker; (marker = markers[i]); i++) {\n        this.pushMarkerTo_(marker);\n      }\n    } else if (Object.keys(markers).length) {\n      for (let marker in markers) {\n        this.pushMarkerTo_(markers[marker]);\n      }\n    }\n    if (!opt_nodraw) {\n      this.redraw();\n    }\n  }\n\n  /**\n   * Pushes a marker to the clusterer.\n   *\n   * @param {google.maps.Marker} marker The marker to add.\n   * @private\n   */\n  pushMarkerTo_(marker) {\n    marker.isAdded = false;\n    if (marker[\"draggable\"]) {\n      // If the marker is draggable add a listener so we update the clusters on\n      // the drag end.\n      var that = this;\n      google.maps.event.addListener(marker, \"dragend\", function() {\n        marker.isAdded = false;\n        that.repaint();\n      });\n    }\n    this.markers_.push(marker);\n  }\n\n  /**\n   * Adds a marker to the clusterer and redraws if needed.\n   *\n   * @param {google.maps.Marker} marker The marker to add.\n   * @param {boolean=} opt_nodraw Whether to redraw the clusters.\n   */\n  addMarker(marker, opt_nodraw) {\n    this.pushMarkerTo_(marker);\n    if (!opt_nodraw) {\n      this.redraw();\n    }\n  }\n\n  /**\n   * Removes a marker and returns true if removed, false if not\n   *\n   * @param {google.maps.Marker} marker The marker to remove\n   * @return {boolean} Whether the marker was removed or not\n   * @private\n   */\n  removeMarker_(marker) {\n    var index = -1;\n    if (this.markers_.indexOf) {\n      index = this.markers_.indexOf(marker);\n    } else {\n      for (var i = 0, m; (m = this.markers_[i]); i++) {\n        if (m == marker) {\n          index = i;\n          break;\n        }\n      }\n    }\n\n    if (index == -1) {\n      // Marker is not in our list of markers.\n      return false;\n    }\n\n    marker.setMap(null);\n\n    this.markers_.splice(index, 1);\n\n    return true;\n  }\n\n  /**\n   * Remove a marker from the cluster.\n   *\n   * @param {google.maps.Marker} marker The marker to remove.\n   * @param {boolean=} opt_nodraw Optional boolean to force no redraw.\n   * @return {boolean} True if the marker was removed.\n   */\n  removeMarker(marker, opt_nodraw) {\n    var removed = this.removeMarker_(marker);\n\n    if (!opt_nodraw && removed) {\n      this.resetViewport();\n      this.redraw();\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  /**\n   * Removes an array of markers from the cluster.\n   *\n   * @param {Array.<google.maps.Marker>} markers The markers to remove.\n   * @param {boolean=} opt_nodraw Optional boolean to force no redraw.\n   */\n  removeMarkers(markers, opt_nodraw) {\n    // create a local copy of markers if required\n    // (removeMarker_ modifies the getMarkers() array in place)\n    var markersCopy = markers === this.getMarkers() ? markers.slice() : markers;\n    var removed = false;\n\n    for (var i = 0, marker; (marker = markersCopy[i]); i++) {\n      var r = this.removeMarker_(marker);\n      removed = removed || r;\n    }\n\n    if (!opt_nodraw && removed) {\n      this.resetViewport();\n      this.redraw();\n      return true;\n    }\n  }\n\n  /**\n   * Sets the clusterer's ready state.\n   *\n   * @param {boolean} ready The state.\n   * @private\n   */\n  setReady_(ready) {\n    if (!this.ready_) {\n      this.ready_ = ready;\n      this.createClusters_();\n    }\n  }\n\n  /**\n   * Returns the number of clusters in the clusterer.\n   *\n   * @return {number} The number of clusters.\n   */\n  getTotalClusters() {\n    return this.clusters_.length;\n  }\n\n  /**\n   * Returns the google map that the clusterer is associated with.\n   *\n   * @return {google.maps.Map} The map.\n   */\n  getMap() {\n    return this.map_;\n  }\n\n  /**\n   * Sets the google map that the clusterer is associated with.\n   *\n   * @param {google.maps.Map} map The map.\n   */\n  setMap(map) {\n    this.map_ = map;\n  }\n\n  /**\n   * Returns the size of the grid.\n   *\n   * @return {number} The grid size.\n   */\n  getGridSize() {\n    return this.gridSize_;\n  }\n\n  /**\n   * Sets the size of the grid.\n   *\n   * @param {number} size The grid size.\n   */\n  setGridSize(size) {\n    this.gridSize_ = size;\n  }\n\n  /**\n   * Returns the min cluster size.\n   *\n   * @return {number} The grid size.\n   */\n  getMinClusterSize() {\n    return this.minClusterSize_;\n  }\n\n  /**\n   * Sets the min cluster size.\n   *\n   * @param {number} size The grid size.\n   */\n  setMinClusterSize(size) {\n    this.minClusterSize_ = size;\n  }\n\n  /**\n   * Extends a bounds object by the grid size.\n   *\n   * @param {google.maps.LatLngBounds} bounds The bounds to extend.\n   * @return {google.maps.LatLngBounds} The extended bounds.\n   */\n  getExtendedBounds(bounds) {\n    var projection = this.getProjection();\n\n    // Turn the bounds into latlng.\n    var tr = new google.maps.LatLng(\n      bounds.getNorthEast().lat(),\n      bounds.getNorthEast().lng()\n    );\n    var bl = new google.maps.LatLng(\n      bounds.getSouthWest().lat(),\n      bounds.getSouthWest().lng()\n    );\n\n    // Convert the points to pixels and the extend out by the grid size.\n    var trPix = projection.fromLatLngToDivPixel(tr);\n    trPix.x += this.gridSize_;\n    trPix.y -= this.gridSize_;\n\n    var blPix = projection.fromLatLngToDivPixel(bl);\n    blPix.x -= this.gridSize_;\n    blPix.y += this.gridSize_;\n\n    // Convert the pixel points back to LatLng\n    var ne = projection.fromDivPixelToLatLng(trPix);\n    var sw = projection.fromDivPixelToLatLng(blPix);\n\n    // Extend the bounds to contain the new bounds.\n    bounds.extend(ne);\n    bounds.extend(sw);\n\n    return bounds;\n  }\n\n  /**\n   * Determins if a marker is contained in a bounds.\n   *\n   * @param {google.maps.Marker} marker The marker to check.\n   * @param {google.maps.LatLngBounds} bounds The bounds to check against.\n   * @return {boolean} True if the marker is in the bounds.\n   * @private\n   */\n  isMarkerInBounds_(marker, bounds) {\n    return bounds.contains(marker.getPosition());\n  }\n\n  /**\n   * Clears all clusters and markers from the clusterer.\n   */\n  clearMarkers() {\n    this.resetViewport(true);\n\n    // Set the markers a empty array.\n    this.markers_ = [];\n  }\n\n  /**\n   * Clears all existing clusters and recreates them.\n   * @param {boolean} opt_hide To also hide the marker.\n   */\n  resetViewport(opt_hide) {\n    // Remove all the clusters\n    for (let i = 0, cluster; (cluster = this.clusters_[i]); i++) {\n      cluster.remove();\n    }\n\n    // Reset the markers to not be added and to be invisible.\n    for (let i = 0, marker; (marker = this.markers_[i]); i++) {\n      marker.isAdded = false;\n      if (opt_hide) {\n        marker.setMap(null);\n      }\n    }\n\n    this.clusters_ = [];\n  }\n\n  /**\n   *\n   */\n  repaint() {\n    var oldClusters = this.clusters_.slice();\n    this.clusters_.length = 0;\n    this.resetViewport();\n    this.redraw();\n\n    // Remove the old clusters.\n    // Do it in a timeout so the other clusters have been drawn first.\n    setTimeout(function() {\n      for (var i = 0, cluster; (cluster = oldClusters[i]); i++) {\n        cluster.remove();\n      }\n    }, 0);\n  }\n\n  /**\n   * Redraws the clusters.\n   */\n  redraw() {\n    this.createClusters_();\n  }\n\n  /**\n   * Calculates the distance between two latlng locations in km.\n   * @see http://www.movable-type.co.uk/scripts/latlong.html\n   *\n   * @param {google.maps.LatLng} p1 The first lat lng point.\n   * @param {google.maps.LatLng} p2 The second lat lng point.\n   * @return {number} The distance between the two points in km.\n   * @private\n   */\n  distanceBetweenPoints_(p1, p2) {\n    if (!p1 || !p2) {\n      return 0;\n    }\n\n    var R = 6371; // Radius of the Earth in km\n    var dLat = ((p2.lat() - p1.lat()) * Math.PI) / 180;\n    var dLon = ((p2.lng() - p1.lng()) * Math.PI) / 180;\n    var a =\n      Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n      Math.cos((p1.lat() * Math.PI) / 180) *\n        Math.cos((p2.lat() * Math.PI) / 180) *\n        Math.sin(dLon / 2) *\n        Math.sin(dLon / 2);\n    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n    var d = R * c;\n    return d;\n  }\n\n  /**\n   * Add a marker to a cluster, or creates a new cluster.\n   *\n   * @param {google.maps.Marker} marker The marker to add.\n   * @private\n   */\n  addToClosestCluster_(marker) {\n    var distance = 40000; // Some large number\n    var clusterToAddTo = null;\n    for (var i = 0, cluster; (cluster = this.clusters_[i]); i++) {\n      var center = cluster.getCenter();\n      if (center) {\n        var d = this.distanceBetweenPoints_(center, marker.getPosition());\n        if (d < distance) {\n          distance = d;\n          clusterToAddTo = cluster;\n        }\n      }\n    }\n\n    if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) {\n      clusterToAddTo.addMarker(marker);\n    } else {\n      var newCluster = new Cluster(this);\n      newCluster.addMarker(marker);\n      this.clusters_.push(newCluster);\n    }\n  }\n\n  /**\n   * Creates the clusters.\n   *\n   * @private\n   */\n  createClusters_() {\n    if (!this.ready_) {\n      return;\n    }\n\n    // Get our current map view bounds.\n    // Create a new bounds object so we don't affect the map.\n    var mapBounds = new google.maps.LatLngBounds(\n      this.map_.getBounds().getSouthWest(),\n      this.map_.getBounds().getNorthEast()\n    );\n    var bounds = this.getExtendedBounds(mapBounds);\n\n    for (var i = 0, marker; (marker = this.markers_[i]); i++) {\n      if (!marker.isAdded && this.isMarkerInBounds_(marker, bounds)) {\n        this.addToClosestCluster_(marker);\n      }\n    }\n  }\n}\n\n/**\n * A cluster that contains markers.\n *\n * @param {MarkerClusterer} markerClusterer The markerclusterer that this\n *     cluster is associated with.\n * @constructor\n * @ignore\n */\nclass Cluster {\n  constructor(markerClusterer) {\n    this.markerClusterer_ = markerClusterer;\n    this.map_ = markerClusterer.getMap();\n    this.gridSize_ = markerClusterer.getGridSize();\n    this.minClusterSize_ = markerClusterer.getMinClusterSize();\n    this.averageCenter_ = markerClusterer.isAverageCenter();\n    this.center_ = null;\n    this.markers_ = [];\n    this.bounds_ = null;\n    this.clusterIcon_ = new ClusterIcon(\n      this,\n      markerClusterer.getStyles(),\n      markerClusterer.getGridSize()\n    );\n  }\n\n  /**\n   * Determins if a marker is already added to the cluster.\n   *\n   * @param {google.maps.Marker} marker The marker to check.\n   * @return {boolean} True if the marker is already added.\n   */\n  isMarkerAlreadyAdded(marker) {\n    if (this.markers_.indexOf) {\n      return this.markers_.indexOf(marker) != -1;\n    } else {\n      for (var i = 0, m; (m = this.markers_[i]); i++) {\n        if (m == marker) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Add a marker the cluster.\n   *\n   * @param {google.maps.Marker} marker The marker to add.\n   * @return {boolean} True if the marker was added.\n   */\n  addMarker(marker) {\n    if (this.isMarkerAlreadyAdded(marker)) {\n      return false;\n    }\n\n    if (!this.center_) {\n      this.center_ = marker.getPosition();\n      this.calculateBounds_();\n    } else {\n      if (this.averageCenter_) {\n        var l = this.markers_.length + 1;\n        var lat =\n          (this.center_.lat() * (l - 1) + marker.getPosition().lat()) / l;\n        var lng =\n          (this.center_.lng() * (l - 1) + marker.getPosition().lng()) / l;\n        this.center_ = new google.maps.LatLng(lat, lng);\n        this.calculateBounds_();\n      }\n    }\n\n    marker.isAdded = true;\n    this.markers_.push(marker);\n\n    var len = this.markers_.length;\n    if (len < this.minClusterSize_ && marker.getMap() != this.map_) {\n      // Min cluster size not reached so show the marker.\n      marker.setMap(this.map_);\n    }\n\n    if (len == this.minClusterSize_) {\n      // Hide the markers that were showing.\n      for (var i = 0; i < len; i++) {\n        this.markers_[i].setMap(null);\n      }\n    }\n\n    if (len >= this.minClusterSize_) {\n      marker.setMap(null);\n    }\n\n    this.updateIcon();\n    return true;\n  }\n\n  /**\n   * Returns the marker clusterer that the cluster is associated with.\n   *\n   * @return {MarkerClusterer} The associated marker clusterer.\n   */\n  getMarkerClusterer() {\n    return this.markerClusterer_;\n  }\n\n  /**\n   * Returns the bounds of the cluster.\n   *\n   * @return {google.maps.LatLngBounds} the cluster bounds.\n   */\n  getBounds() {\n    var bounds = new google.maps.LatLngBounds(this.center_, this.center_);\n    var markers = this.getMarkers();\n    for (var i = 0, marker; (marker = markers[i]); i++) {\n      bounds.extend(marker.getPosition());\n    }\n    return bounds;\n  }\n\n  /**\n   * Removes the cluster\n   */\n  remove() {\n    this.clusterIcon_.remove();\n    this.markers_.length = 0;\n    delete this.markers_;\n  }\n\n  /**\n   * Returns the number of markers in the cluster.\n   *\n   * @return {number} The number of markers in the cluster.\n   */\n  getSize() {\n    return this.markers_.length;\n  }\n\n  /**\n   * Returns a list of the markers in the cluster.\n   *\n   * @return {Array.<google.maps.Marker>} The markers in the cluster.\n   */\n  getMarkers() {\n    return this.markers_;\n  }\n\n  /**\n   * Returns the center of the cluster.\n   *\n   * @return {google.maps.LatLng} The cluster center.\n   */\n  getCenter() {\n    return this.center_;\n  }\n\n  /**\n   * Calculated the extended bounds of the cluster with the grid.\n   *\n   * @private\n   */\n  calculateBounds_() {\n    var bounds = new google.maps.LatLngBounds(this.center_, this.center_);\n    this.bounds_ = this.markerClusterer_.getExtendedBounds(bounds);\n  }\n\n  /**\n   * Determines if a marker lies in the clusters bounds.\n   *\n   * @param {google.maps.Marker} marker The marker to check.\n   * @return {boolean} True if the marker lies in the bounds.\n   */\n  isMarkerInClusterBounds(marker) {\n    return this.bounds_.contains(marker.getPosition());\n  }\n\n  /**\n   * Returns the map that the cluster is associated with.\n   *\n   * @return {google.maps.Map} The map.\n   */\n  getMap() {\n    return this.map_;\n  }\n\n  /**\n   * Updates the cluster icon\n   */\n  updateIcon() {\n    var zoom = this.map_.getZoom();\n    var mz = this.markerClusterer_.getMaxZoom();\n\n    if (mz && zoom > mz) {\n      // The zoom is greater than our max zoom so show all the markers in cluster.\n      for (var i = 0, marker; (marker = this.markers_[i]); i++) {\n        marker.setMap(this.map_);\n      }\n      return;\n    }\n\n    if (this.markers_.length < this.minClusterSize_) {\n      // Min cluster size not yet reached.\n      this.clusterIcon_.hide();\n      return;\n    }\n\n    var numStyles = this.markerClusterer_.getStyles().length;\n    var sums = this.markerClusterer_.getCalculator()(this.markers_, numStyles);\n    this.clusterIcon_.setCenter(this.center_);\n    this.clusterIcon_.setSums(sums);\n    this.clusterIcon_.show();\n  }\n}\n\n/**\n * A cluster icon\n *\n * @param {Cluster} cluster The cluster to be associated with.\n * @param {Object} styles An object that has style properties:\n *     'url': (string) The image url.\n *     'height': (number) The image height.\n *     'width': (number) The image width.\n *     'anchor': (Array) The anchor position of the label text.\n *     'textColor': (string) The text color.\n *     'textSize': (number) The text size.\n *     'backgroundPosition: (string) The background postition x, y.\n * @param {number=} opt_padding Optional padding to apply to the cluster icon.\n * @constructor\n * @extends google.maps.OverlayView\n * @ignore\n */\nclass ClusterIcon {\n  constructor(cluster, styles, opt_padding) {\n    cluster.getMarkerClusterer().extend(ClusterIcon, google.maps.OverlayView);\n\n    this.styles_ = styles;\n    this.padding_ = opt_padding || 0;\n    this.cluster_ = cluster;\n    this.center_ = null;\n    this.map_ = cluster.getMap();\n    this.div_ = null;\n    this.sums_ = null;\n    this.visible_ = false;\n\n    this.setMap(this.map_);\n  }\n\n  /**\n   * Triggers the clusterclick event and zoom's if the option is set.\n   */\n  triggerClusterClick() {\n    var clusterBounds = this.cluster_.getBounds();\n    var markerClusterer = this.cluster_.getMarkerClusterer();\n\n    // Trigger the clusterclick event.\n    google.maps.event.trigger(\n      markerClusterer.map_,\n      \"clusterclick\",\n      this.cluster_\n    );\n\n    if (markerClusterer.isZoomOnClick()) {\n      // Zoom into the cluster.\n      this.map_.fitBounds(clusterBounds);\n      this.map_.setCenter(clusterBounds.getCenter());\n    }\n  }\n\n  /**\n   * Adding the cluster icon to the dom.\n   * @ignore\n   */\n  onAdd() {\n    this.div_ = document.createElement(\"DIV\");\n    if (this.visible_) {\n      var pos = this.getPosFromLatLng_(this.center_);\n      this.div_.style.cssText = this.createCss(pos);\n      this.div_.innerHTML = this.sums_.text;\n    }\n\n    var panes = this.getPanes();\n    panes.overlayMouseTarget.appendChild(this.div_);\n\n    var that = this;\n    google.maps.event.addDomListener(this.div_, \"click\", function() {\n      that.triggerClusterClick();\n    });\n  }\n\n  /**\n   * Returns the position to place the div dending on the latlng.\n   *\n   * @param {google.maps.LatLng} latlng The position in latlng.\n   * @return {google.maps.Point} The position in pixels.\n   * @private\n   */\n  getPosFromLatLng_(latlng) {\n    var pos = this.getProjection().fromLatLngToDivPixel(latlng);\n    pos.x -= parseInt(this.width_ / 2, 10);\n    pos.y -= parseInt(this.height_ / 2, 10);\n    return pos;\n  }\n\n  /**\n   * Draw the icon.\n   * @ignore\n   */\n  draw() {\n    if (this.visible_) {\n      var pos = this.getPosFromLatLng_(this.center_);\n      this.div_.style.top = pos.y + \"px\";\n      this.div_.style.left = pos.x + \"px\";\n    }\n  }\n\n  /**\n   * Hide the icon.\n   */\n  hide() {\n    if (this.div_) {\n      this.div_.style.display = \"none\";\n    }\n    this.visible_ = false;\n  }\n\n  /**\n   * Position and show the icon.\n   */\n  show() {\n    if (this.div_) {\n      var pos = this.getPosFromLatLng_(this.center_);\n      this.div_.style.cssText = this.createCss(pos);\n      this.div_.style.display = \"\";\n    }\n    this.visible_ = true;\n  }\n\n  /**\n   * Remove the icon from the map\n   */\n  remove() {\n    this.setMap(null);\n  }\n\n  /**\n   * Implementation of the onRemove interface.\n   * @ignore\n   */\n  onRemove() {\n    if (this.div_ && this.div_.parentNode) {\n      this.hide();\n      this.div_.parentNode.removeChild(this.div_);\n      this.div_ = null;\n    }\n  }\n\n  /**\n   * Set the sums of the icon.\n   *\n   * @param {Object} sums The sums containing:\n   *   'text': (string) The text to display in the icon.\n   *   'index': (number) The style index of the icon.\n   */\n  setSums(sums) {\n    this.sums_ = sums;\n    this.text_ = sums.text;\n    this.index_ = sums.index;\n    if (this.div_) {\n      this.div_.innerHTML = sums.text;\n    }\n\n    this.useStyle();\n  }\n\n  /**\n   * Sets the icon to the the styles.\n   */\n  useStyle() {\n    var index = Math.max(0, this.sums_.index - 1);\n    index = Math.min(this.styles_.length - 1, index);\n    var style = this.styles_[index];\n    this.url_ = style[\"url\"];\n    this.height_ = style[\"height\"];\n    this.width_ = style[\"width\"];\n    this.textColor_ = style[\"textColor\"];\n    this.anchor_ = style[\"anchor\"];\n    this.textSize_ = style[\"textSize\"];\n    this.backgroundPosition_ = style[\"backgroundPosition\"];\n  }\n\n  /**\n   * Sets the center of the icon.\n   *\n   * @param {google.maps.LatLng} center The latlng to set as the center.\n   */\n  setCenter(center) {\n    this.center_ = center;\n  }\n\n  /**\n   * Create the css text based on the position of the icon.\n   *\n   * @param {google.maps.Point} pos The position.\n   * @return {string} The css style text.\n   */\n  createCss(pos) {\n    var style = [];\n    style.push(\"z-index:\" + this.cluster_.markerClusterer_.getZIndex() + \";\");\n    style.push(\"background-image:url(\" + this.url_ + \");\");\n    var backgroundPosition = this.backgroundPosition_\n      ? this.backgroundPosition_\n      : \"0 0\";\n    style.push(\"background-position:\" + backgroundPosition + \";\");\n\n    if (typeof this.anchor_ === \"object\") {\n      if (\n        typeof this.anchor_[0] === \"number\" &&\n        this.anchor_[0] > 0 &&\n        this.anchor_[0] < this.height_\n      ) {\n        style.push(\n          \"height:\" +\n            (this.height_ - this.anchor_[0]) +\n            \"px; padding-top:\" +\n            this.anchor_[0] +\n            \"px;\"\n        );\n      } else {\n        style.push(\n          \"height:\" + this.height_ + \"px; line-height:\" + this.height_ + \"px;\"\n        );\n      }\n      if (\n        typeof this.anchor_[1] === \"number\" &&\n        this.anchor_[1] > 0 &&\n        this.anchor_[1] < this.width_\n      ) {\n        style.push(\n          \"width:\" +\n            (this.width_ - this.anchor_[1]) +\n            \"px; padding-left:\" +\n            this.anchor_[1] +\n            \"px;\"\n        );\n      } else {\n        style.push(\"width:\" + this.width_ + \"px; text-align:center;\");\n      }\n    } else {\n      style.push(\n        \"height:\" +\n          this.height_ +\n          \"px; line-height:\" +\n          this.height_ +\n          \"px; width:\" +\n          this.width_ +\n          \"px; text-align:center;\"\n      );\n    }\n\n    var txtColor = this.textColor_ ? this.textColor_ : \"black\";\n    var txtSize = this.textSize_ ? this.textSize_ : 11;\n\n    style.push(\n      \"cursor:pointer; top:\" +\n        pos.y +\n        \"px; left:\" +\n        pos.x +\n        \"px; color:\" +\n        txtColor +\n        \"; position:absolute; font-size:\" +\n        txtSize +\n        \"px; font-family:Arial,sans-serif; font-weight:bold\"\n    );\n    return style.join(\"\");\n  }\n}\n\nexport default MarkerClusterer;\n","(function(root, factory) {\n\n\tif (root === null) {\n\t\tthrow new Error('Google-maps package can be used only in browser');\n\t}\n\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t} else if (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t} else {\n\t\troot.GoogleMapsLoader = factory();\n\t}\n\n})(typeof window !== 'undefined' ? window : null, function() {\n\n\n\t'use strict';\n\n\n\tvar googleVersion = '3.31';\n\n\tvar script = null;\n\n\tvar google = null;\n\n\tvar loading = false;\n\n\tvar callbacks = [];\n\n\tvar onLoadEvents = [];\n\n\tvar originalCreateLoaderMethod = null;\n\n\n\tvar GoogleMapsLoader = {};\n\n\n\tGoogleMapsLoader.URL = 'https://maps.googleapis.com/maps/api/js';\n\n\tGoogleMapsLoader.KEY = null;\n\n\tGoogleMapsLoader.LIBRARIES = [];\n\n\tGoogleMapsLoader.CLIENT = null;\n\n\tGoogleMapsLoader.CHANNEL = null;\n\n\tGoogleMapsLoader.LANGUAGE = null;\n\n\tGoogleMapsLoader.REGION = null;\n\n\tGoogleMapsLoader.VERSION = googleVersion;\n\n\tGoogleMapsLoader.WINDOW_CALLBACK_NAME = '__google_maps_api_provider_initializator__';\n\n\n\tGoogleMapsLoader._googleMockApiObject = {};\n\n\n\tGoogleMapsLoader.load = function(fn) {\n\t\tif (google === null) {\n\t\t\tif (loading === true) {\n\t\t\t\tif (fn) {\n\t\t\t\t\tcallbacks.push(fn);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tloading = true;\n\n\t\t\t\twindow[GoogleMapsLoader.WINDOW_CALLBACK_NAME] = function() {\n\t\t\t\t\tready(fn);\n\t\t\t\t};\n\n\t\t\t\tGoogleMapsLoader.createLoader();\n\t\t\t}\n\t\t} else if (fn) {\n\t\t\tfn(google);\n\t\t}\n\t};\n\n\n\tGoogleMapsLoader.createLoader = function() {\n\t\tscript = document.createElement('script');\n\t\tscript.type = 'text/javascript';\n\t\tscript.src = GoogleMapsLoader.createUrl();\n\n\t\tdocument.body.appendChild(script);\n\t};\n\n\n\tGoogleMapsLoader.isLoaded = function() {\n\t\treturn google !== null;\n\t};\n\n\n\tGoogleMapsLoader.createUrl = function() {\n\t\tvar url = GoogleMapsLoader.URL;\n\n\t\turl += '?callback=' + GoogleMapsLoader.WINDOW_CALLBACK_NAME;\n\n\t\tif (GoogleMapsLoader.KEY) {\n\t\t\turl += '&key=' + GoogleMapsLoader.KEY;\n\t\t}\n\n\t\tif (GoogleMapsLoader.LIBRARIES.length > 0) {\n\t\t\turl += '&libraries=' + GoogleMapsLoader.LIBRARIES.join(',');\n\t\t}\n\n\t\tif (GoogleMapsLoader.CLIENT) {\n\t\t\turl += '&client=' + GoogleMapsLoader.CLIENT;\n\t\t}\n\n\t\tif (GoogleMapsLoader.CHANNEL) {\n\t\t\turl += '&channel=' + GoogleMapsLoader.CHANNEL;\n\t\t}\n\n\t\tif (GoogleMapsLoader.LANGUAGE) {\n\t\t\turl += '&language=' + GoogleMapsLoader.LANGUAGE;\n\t\t}\n\n\t\tif (GoogleMapsLoader.REGION) {\n\t\t\turl += '&region=' + GoogleMapsLoader.REGION;\n\t\t}\n\n\t\tif (GoogleMapsLoader.VERSION) {\n\t\t\turl += '&v=' + GoogleMapsLoader.VERSION;\n\t\t}\n\n\t\treturn url;\n\t};\n\n\n\tGoogleMapsLoader.release = function(fn) {\n\t\tvar release = function() {\n\t\t\tGoogleMapsLoader.KEY = null;\n\t\t\tGoogleMapsLoader.LIBRARIES = [];\n\t\t\tGoogleMapsLoader.CLIENT = null;\n\t\t\tGoogleMapsLoader.CHANNEL = null;\n\t\t\tGoogleMapsLoader.LANGUAGE = null;\n\t\t\tGoogleMapsLoader.REGION = null;\n\t\t\tGoogleMapsLoader.VERSION = googleVersion;\n\n\t\t\tgoogle = null;\n\t\t\tloading = false;\n\t\t\tcallbacks = [];\n\t\t\tonLoadEvents = [];\n\n\t\t\tif (typeof window.google !== 'undefined') {\n\t\t\t\tdelete window.google;\n\t\t\t}\n\n\t\t\tif (typeof window[GoogleMapsLoader.WINDOW_CALLBACK_NAME] !== 'undefined') {\n\t\t\t\tdelete window[GoogleMapsLoader.WINDOW_CALLBACK_NAME];\n\t\t\t}\n\n\t\t\tif (originalCreateLoaderMethod !== null) {\n\t\t\t\tGoogleMapsLoader.createLoader = originalCreateLoaderMethod;\n\t\t\t\toriginalCreateLoaderMethod = null;\n\t\t\t}\n\n\t\t\tif (script !== null) {\n\t\t\t\tscript.parentElement.removeChild(script);\n\t\t\t\tscript = null;\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t};\n\n\t\tif (loading) {\n\t\t\tGoogleMapsLoader.load(function() {\n\t\t\t\trelease();\n\t\t\t});\n\t\t} else {\n\t\t\trelease();\n\t\t}\n\t};\n\n\n\tGoogleMapsLoader.onLoad = function(fn) {\n\t\tonLoadEvents.push(fn);\n\t};\n\n\n\tGoogleMapsLoader.makeMock = function() {\n\t\toriginalCreateLoaderMethod = GoogleMapsLoader.createLoader;\n\n\t\tGoogleMapsLoader.createLoader = function() {\n\t\t\twindow.google = GoogleMapsLoader._googleMockApiObject;\n\t\t\twindow[GoogleMapsLoader.WINDOW_CALLBACK_NAME]();\n\t\t};\n\t};\n\n\n\tvar ready = function(fn) {\n\t\tvar i;\n\n\t\tloading = false;\n\n\t\tif (google === null) {\n\t\t\tgoogle = window.google;\n\t\t}\n\n\t\tfor (i = 0; i < onLoadEvents.length; i++) {\n\t\t\tonLoadEvents[i](google);\n\t\t}\n\n\t\tif (fn) {\n\t\t\tfn(google);\n\t\t}\n\n\t\tfor (i = 0; i < callbacks.length; i++) {\n\t\t\tcallbacks[i](google);\n\t\t}\n\n\t\tcallbacks = [];\n\t};\n\n\n\treturn GoogleMapsLoader;\n\n});\n"],"sourceRoot":""}