From 122140e9f0250e5871d1a5d233baa8cb5ad0aae7 Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Sun, 15 Dec 2019 16:04:46 +0000 Subject: [PATCH 001/246] Replace Bing layer with MapTiler --- examples/image-filter.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/examples/image-filter.js b/examples/image-filter.js index 47d321e56a..db6a8105f6 100644 --- a/examples/image-filter.js +++ b/examples/image-filter.js @@ -2,12 +2,19 @@ import Map from '../src/ol/Map.js'; import View from '../src/ol/View.js'; import TileLayer from '../src/ol/layer/Tile.js'; import {fromLonLat} from '../src/ol/proj.js'; -import BingMaps from '../src/ol/source/BingMaps.js'; +import XYZ from '../src/ol/source/XYZ.js'; -const key = 'As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5'; +const key = 'get_your_own_D6rA4zTHduk6KOKTXzGB'; +const attributions = '© MapTiler ' + + '© OpenStreetMap contributors'; const imagery = new TileLayer({ - source: new BingMaps({key: key, imagerySet: 'Aerial'}) + source: new XYZ({ + attributions: attributions, + url: 'https://api.maptiler.com/tiles/satellite/{z}/{x}/{y}.jpg?key=' + key, + maxZoom: 20, + crossOrigin: '' + }) }); const map = new Map({ From 3bf1931f396e9067401318c4e1e03440fad79ba2 Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Sun, 15 Dec 2019 16:15:51 +0000 Subject: [PATCH 002/246] Replace Bing layer with MapTiler --- examples/image-filter.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/image-filter.html b/examples/image-filter.html index 1d68e835d1..a6efc86608 100644 --- a/examples/image-filter.html +++ b/examples/image-filter.html @@ -6,10 +6,10 @@ docs: >

Layer rendering can be manipulated in prerender and postrender event listeners. These listeners get an event with a reference to the Canvas rendering context. In this example, the postrender listener applies a filter to the image data.

-tags: "filter, image manipulation" +tags: "filter, image manipulation, maptiler" cloak: - - key: As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5 - value: Your Bing Maps Key from http://www.bingmapsportal.com/ here + - key: get_your_own_D6rA4zTHduk6KOKTXzGB + value: Get your own API key at https://www.maptiler.com/cloud/ ---
diff --git a/examples/webgl-points-layer.js b/examples/webgl-points-layer.js index 3d3c980a41..1db76814c4 100644 --- a/examples/webgl-points-layer.js +++ b/examples/webgl-points-layer.js @@ -95,6 +95,35 @@ const predefinedStyles = { offset: [0, 0], opacity: 0.95 } + }, + 'rotating-bars': { + symbol: { + symbolType: 'square', + rotation: ['*', [ + 'time' + ], 0.1], + size: ['array', 4, [ + 'interpolate', + ['linear'], + ['get', 'population'], + 20000, 4, + 300000, 28] + ], + color: [ + 'interpolate', + ['linear'], + ['get', 'population'], + 20000, '#ffdc00', + 300000, '#ff5b19' + ], + offset: ['array', 0, [ + 'interpolate', + ['linear'], + ['get', 'population'], + 20000, 2, + 300000, 14] + ] + } } }; @@ -167,3 +196,10 @@ function onSelectChange() { } onSelectChange(); select.addEventListener('change', onSelectChange); + +// animate the map +function animate() { + map.render(); + window.requestAnimationFrame(animate); +} +animate(); From d7eaacf9238bf5c22fc95b7aa13bdcce7b264920 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Kr=C3=B6g?= Date: Fri, 20 Dec 2019 23:04:09 +0100 Subject: [PATCH 018/246] Small performance improvement by saving the calculated logarithm. --- src/ol/View.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ol/View.js b/src/ol/View.js index 5fc955d351..1dcbd9ab38 100644 --- a/src/ol/View.js +++ b/src/ol/View.js @@ -976,17 +976,17 @@ class View extends BaseObject { * @return {function(number): number} Value for resolution function. */ getValueForResolutionFunction(opt_power) { - const power = opt_power || 2; + const logPower = Math.log(opt_power || 2); const maxResolution = this.maxResolution_; const minResolution = this.minResolution_; - const max = Math.log(maxResolution / minResolution) / Math.log(power); + const max = Math.log(maxResolution / minResolution) / logPower; return ( /** * @param {number} resolution Resolution. * @return {number} Value. */ function(resolution) { - const value = (Math.log(maxResolution / resolution) / Math.log(power)) / max; + const value = (Math.log(maxResolution / resolution) / logPower) / max; return value; }); } From 33389969ce36c25ba0499a8dfa9a14eeb8967b69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Kr=C3=B6g?= Date: Fri, 20 Dec 2019 23:04:55 +0100 Subject: [PATCH 019/246] Limit the ZoomSlider's range to the view's constrained resolution. --- src/ol/View.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ol/View.js b/src/ol/View.js index 1dcbd9ab38..3d3bb4bacd 100644 --- a/src/ol/View.js +++ b/src/ol/View.js @@ -945,7 +945,7 @@ class View extends BaseObject { */ getResolutionForValueFunction(opt_power) { const power = opt_power || 2; - const maxResolution = this.maxResolution_; + const maxResolution = this.getConstrainedResolution(this.maxResolution_); const minResolution = this.minResolution_; const max = Math.log(maxResolution / minResolution) / Math.log(power); return ( @@ -977,7 +977,7 @@ class View extends BaseObject { */ getValueForResolutionFunction(opt_power) { const logPower = Math.log(opt_power || 2); - const maxResolution = this.maxResolution_; + const maxResolution = this.getConstrainedResolution(this.maxResolution_); const minResolution = this.minResolution_; const max = Math.log(maxResolution / minResolution) / logPower; return ( From a4c3bce3b1a6f8e996b270f434e30b09f15203e5 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 07:49:09 +0000 Subject: [PATCH 020/246] Bump webpack-dev-server from 3.9.0 to 3.10.1 Bumps [webpack-dev-server](https://github.com/webpack/webpack-dev-server) from 3.9.0 to 3.10.1. - [Release notes](https://github.com/webpack/webpack-dev-server/releases) - [Changelog](https://github.com/webpack/webpack-dev-server/blob/v3.10.1/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack-dev-server/compare/v3.9.0...v3.10.1) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 45 ++++++++++----------------------------------- 1 file changed, 10 insertions(+), 35 deletions(-) diff --git a/package-lock.json b/package-lock.json index 36e305f33c..54e8481176 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4147,9 +4147,9 @@ "dev": true }, "deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.0.tgz", - "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", "dev": true, "requires": { "is-arguments": "^1.0.4", @@ -9253,9 +9253,9 @@ "dev": true }, "object-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", - "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", + "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==", "dev": true }, "object-keys": { @@ -12751,9 +12751,9 @@ } }, "webpack-dev-server": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.9.0.tgz", - "integrity": "sha512-E6uQ4kRrTX9URN9s/lIbqTAztwEPdvzVrcmHE8EQ9YnuT9J8Es5Wrd8n9BKg1a0oZ5EgEke/EQFgUsp18dSTBw==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.10.1.tgz", + "integrity": "sha512-AGG4+XrrXn4rbZUueyNrQgO4KGnol+0wm3MPdqGLmmA+NofZl3blZQKxZ9BND6RDNuvAK9OMYClhjOSnxpWRoA==", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -12771,7 +12771,7 @@ "ip": "^1.1.5", "is-absolute-url": "^3.0.3", "killable": "^1.0.1", - "loglevel": "^1.6.4", + "loglevel": "^1.6.6", "opn": "^5.5.0", "p-retry": "^3.0.1", "portfinder": "^1.0.25", @@ -12829,18 +12829,6 @@ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, - "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", - "dev": true - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", @@ -12871,19 +12859,6 @@ "has-flag": "^3.0.0" } }, - "webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - } - }, "ws": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", From 8838565629d173800b80a1c8b2ec298cd071fd46 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 07:49:51 +0000 Subject: [PATCH 021/246] Bump terser-webpack-plugin from 2.3.0 to 2.3.1 Bumps [terser-webpack-plugin](https://github.com/webpack-contrib/terser-webpack-plugin) from 2.3.0 to 2.3.1. - [Release notes](https://github.com/webpack-contrib/terser-webpack-plugin/releases) - [Changelog](https://github.com/webpack-contrib/terser-webpack-plugin/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/terser-webpack-plugin/compare/v2.3.0...v2.3.1) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 36e305f33c..dae8b89ded 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11758,18 +11758,18 @@ } }, "terser-webpack-plugin": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.0.tgz", - "integrity": "sha512-yez0HdpDf/iQVYGf+e/o8ZYWLb1g9d1nRRi5FIOZ4KfXbfSPT259UoqxPiSLhCnr0mlDoh+bucpYQSFbU0cEsQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.1.tgz", + "integrity": "sha512-dNxivOXmDgZqrGxOttBH6B4xaxT4zNC+Xd+2K8jwGDMK5q2CZI+KZMA1AAnSRT+BTRvuzKsDx+fpxzPAmAMVcA==", "dev": true, "requires": { "cacache": "^13.0.1", - "find-cache-dir": "^3.1.0", + "find-cache-dir": "^3.2.0", "jest-worker": "^24.9.0", "schema-utils": "^2.6.1", "serialize-javascript": "^2.1.2", "source-map": "^0.6.1", - "terser": "^4.4.2", + "terser": "^4.4.3", "webpack-sources": "^1.4.3" }, "dependencies": { @@ -11943,9 +11943,9 @@ } }, "terser": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.2.tgz", - "integrity": "sha512-Uufrsvhj9O1ikwgITGsZ5EZS6qPokUOkCegS7fYOdGTv+OA90vndUbU6PEjr5ePqHfNUbGyMO7xyIZv2MhsALQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.3.tgz", + "integrity": "sha512-0ikKraVtRDKGzHrzkCv5rUNDzqlhmhowOBqC0XqUHFpW+vJ45+20/IFBcebwKfiS2Z9fJin6Eo+F1zLZsxi8RA==", "dev": true, "requires": { "commander": "^2.20.0", From 28ae21e5ddf9dc7022d6521adbc5a805ad06963f Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 07:51:13 +0000 Subject: [PATCH 022/246] Bump sinon from 7.5.0 to 8.0.0 Bumps [sinon](https://github.com/sinonjs/sinon) from 7.5.0 to 8.0.0. - [Release notes](https://github.com/sinonjs/sinon/releases) - [Changelog](https://github.com/sinonjs/sinon/blob/master/CHANGELOG.md) - [Commits](https://github.com/sinonjs/sinon/compare/v7.5.0...v8.0.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 93 ++++++++++++++++++++++++++++++++--------------- package.json | 2 +- 2 files changed, 64 insertions(+), 31 deletions(-) diff --git a/package-lock.json b/package-lock.json index 36e305f33c..8b4a58633d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2072,33 +2072,33 @@ } }, "@sinonjs/commons": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.6.0.tgz", - "integrity": "sha512-w4/WHG7C4WWFyE5geCieFJF6MZkbW4VAriol5KlmQXpAQdxvV0p26sqNZOW6Qyw6Y0l9K4g+cHvvczR2sEEpqg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.0.tgz", + "integrity": "sha512-qbk9AP+cZUsKdW1GJsBpxPKFmCJ0T8swwzVje3qFd+AkQb74Q/tiuzrdfFg8AD2g5HH/XbE/I8Uc1KYHVYWfhg==", "dev": true, "requires": { "type-detect": "4.0.8" } }, "@sinonjs/formatio": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz", - "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-4.0.1.tgz", + "integrity": "sha512-asIdlLFrla/WZybhm0C8eEzaDNNrzymiTqHMeJl6zPW2881l3uuVRpm0QlRQEjqYWv6CcKMGYME3LbrLJsORBw==", "dev": true, "requires": { "@sinonjs/commons": "^1", - "@sinonjs/samsam": "^3.1.0" + "@sinonjs/samsam": "^4.2.0" } }, "@sinonjs/samsam": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", - "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-4.2.0.tgz", + "integrity": "sha512-yG7QbUz38ZPIegfuSMEcbOo0kkLGmPa8a0Qlz4dk7+cXYALDScWjIZzAm/u2+Frh+bcdZF6wZJZwwuJjY0WAjA==", "dev": true, "requires": { - "@sinonjs/commons": "^1.3.0", + "@sinonjs/commons": "^1.6.0", "array-from": "^2.1.1", - "lodash": "^4.17.15" + "lodash.get": "^4.4.2" } }, "@sinonjs/text-encoding": { @@ -8315,6 +8315,12 @@ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, "log-driver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", @@ -8356,10 +8362,13 @@ "dev": true }, "lolex": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz", - "integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==", - "dev": true + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", + "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } }, "loose-envify": { "version": "1.4.0", @@ -9071,15 +9080,16 @@ "dev": true }, "nise": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.2.tgz", - "integrity": "sha512-/6RhOUlicRCbE9s+94qCUsyE+pKlVJ5AhIv+jEE7ESKwnbXqulKZ1FYU+XAtHHWE9TinYvAxDUJAb912PwPoWA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-3.0.0.tgz", + "integrity": "sha512-EObFx5tioBMePHpU/gGczaY2YDqL255iwjmZwswu2CiwEW8xIGrr3E2xij+efIppS1nLQo9NyXSIUySGHUOhHQ==", "dev": true, "requires": { - "@sinonjs/formatio": "^3.2.1", + "@sinonjs/commons": "^1.7.0", + "@sinonjs/formatio": "^4.0.1", "@sinonjs/text-encoding": "^0.7.1", "just-extend": "^4.0.2", - "lolex": "^4.1.0", + "lolex": "^5.0.1", "path-to-regexp": "^1.7.0" } }, @@ -10948,18 +10958,41 @@ "dev": true }, "sinon": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.5.0.tgz", - "integrity": "sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-8.0.0.tgz", + "integrity": "sha512-9ugfO9tMrxTzqViG0hGhJoLXj8M01FZwfXMpYSmQT1AuV2jyXDJZUMpbENHBY9/2c2u6RKkHOcbYINx2FttUkg==", "dev": true, "requires": { "@sinonjs/commons": "^1.4.0", - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/samsam": "^3.3.3", - "diff": "^3.5.0", - "lolex": "^4.2.0", - "nise": "^1.5.2", - "supports-color": "^5.5.0" + "@sinonjs/formatio": "^4.0.1", + "@sinonjs/samsam": "^4.0.1", + "diff": "^4.0.1", + "lolex": "^5.1.2", + "nise": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "diff": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", + "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "slash": { diff --git a/package.json b/package.json index 1488ae725f..2de87905a7 100644 --- a/package.json +++ b/package.json @@ -93,7 +93,7 @@ "rollup-plugin-terser": "^5.0.0", "serve-static": "^1.14.0", "shx": "^0.3.2", - "sinon": "^7.3.2", + "sinon": "^8.0.0", "terser-webpack-plugin": "^2.0.1", "typescript": "3.5.3", "url-polyfill": "^1.1.5", From dd9643cc07b0e6679ddb56cf1101c494a230ada8 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 07:52:02 +0000 Subject: [PATCH 023/246] Bump @babel/preset-env from 7.7.6 to 7.7.7 Bumps [@babel/preset-env](https://github.com/babel/babel) from 7.7.6 to 7.7.7. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) - [Commits](https://github.com/babel/babel/compare/v7.7.6...v7.7.7) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 156 +++++++++++++++++++++++----------------------- 1 file changed, 78 insertions(+), 78 deletions(-) diff --git a/package-lock.json b/package-lock.json index 36e305f33c..f10ae5c413 100644 --- a/package-lock.json +++ b/package-lock.json @@ -255,9 +255,9 @@ } }, "@babel/generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz", - "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", + "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", "dev": true, "requires": { "@babel/types": "^7.7.4", @@ -296,9 +296,9 @@ } }, "@babel/parser": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", - "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", + "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", "dev": true }, "@babel/template": { @@ -421,9 +421,9 @@ } }, "@babel/parser": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", - "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", + "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", "dev": true }, "@babel/template": { @@ -470,9 +470,9 @@ } }, "@babel/generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz", - "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", + "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", "dev": true, "requires": { "@babel/types": "^7.7.4", @@ -511,9 +511,9 @@ } }, "@babel/parser": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", - "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", + "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", "dev": true }, "@babel/template": { @@ -675,9 +675,9 @@ } }, "@babel/parser": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", - "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", + "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", "dev": true }, "@babel/template": { @@ -755,9 +755,9 @@ }, "dependencies": { "@babel/generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz", - "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", + "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", "dev": true, "requires": { "@babel/types": "^7.7.4", @@ -796,9 +796,9 @@ } }, "@babel/parser": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", - "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", + "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", "dev": true }, "@babel/template": { @@ -887,9 +887,9 @@ } }, "@babel/generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz", - "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", + "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", "dev": true, "requires": { "@babel/types": "^7.7.4", @@ -928,9 +928,9 @@ } }, "@babel/parser": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", - "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", + "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", "dev": true }, "@babel/template": { @@ -997,9 +997,9 @@ }, "dependencies": { "@babel/parser": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", - "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", + "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", "dev": true }, "@babel/template": { @@ -1048,9 +1048,9 @@ }, "dependencies": { "@babel/generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz", - "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", + "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", "dev": true, "requires": { "@babel/types": "^7.7.4", @@ -1089,9 +1089,9 @@ } }, "@babel/parser": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", - "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", + "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", "dev": true }, "@babel/template": { @@ -1329,9 +1329,9 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz", - "integrity": "sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.7.tgz", + "integrity": "sha512-3qp9I8lelgzNedI3hrhkvhaEYree6+WHnyA/q4Dza9z7iEIs1eyhWyJnetk3jJ69RT0AT4G0UhEGwyGFJ7GUuQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1349,9 +1349,9 @@ } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz", - "integrity": "sha512-cHgqHgYvffluZk85dJ02vloErm3Y6xtH+2noOBOJ2kXOJH3aVCDnj5eR/lVNlTnYu4hndAPJD3rTFjW3qee0PA==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.7.tgz", + "integrity": "sha512-80PbkKyORBUVm1fbTLrHpYdJxMThzM1UqFGh0ALEhO9TYbG86Ah9zQYAB/84axz2vcxefDLdZwWwZNlYARlu9w==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.7.4", @@ -1519,9 +1519,9 @@ } }, "@babel/parser": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", - "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", + "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", "dev": true }, "@babel/template": { @@ -1567,9 +1567,9 @@ } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.4.tgz", - "integrity": "sha512-mk0cH1zyMa/XHeb6LOTXTbG7uIJ8Rrjlzu91pUx/KS3JpcgaTDwMS8kM+ar8SLOvlL2Lofi4CGBAjCo3a2x+lw==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.7.tgz", + "integrity": "sha512-b4in+YlTeE/QmTgrllnb3bHA0HntYvjz8O3Mcbx75UBPJA2xhb5A8nle498VhxSXJHQefjtQxpnLPehDJ4TRlg==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.7.4", @@ -1635,9 +1635,9 @@ } }, "@babel/parser": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", - "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", + "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", "dev": true }, "@babel/template": { @@ -1755,9 +1755,9 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz", - "integrity": "sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.7.tgz", + "integrity": "sha512-OhGSrf9ZBrr1fw84oFXj5hgi8Nmg+E2w5L7NhnG0lPvpDtqd7dbyilM2/vR8CKbJ907RyxPh2kj6sBCSSfI9Ew==", "dev": true, "requires": { "@babel/helper-call-delegate": "^7.7.4", @@ -1872,9 +1872,9 @@ } }, "@babel/preset-env": { - "version": "7.7.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.6.tgz", - "integrity": "sha512-k5hO17iF/Q7tR9Jv8PdNBZWYW6RofxhnxKjBMc0nG4JTaWvOTiPoO/RLFwAKcA4FpmuBFm6jkoqaRJLGi0zdaQ==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.7.tgz", + "integrity": "sha512-pCu0hrSSDVI7kCVUOdcMNQEbOPJ52E+LrQ14sN8uL2ALfSqePZQlKrOy+tM4uhEdYlCHi4imr8Zz2cZe9oSdIg==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.7.4", @@ -1882,9 +1882,9 @@ "@babel/plugin-proposal-async-generator-functions": "^7.7.4", "@babel/plugin-proposal-dynamic-import": "^7.7.4", "@babel/plugin-proposal-json-strings": "^7.7.4", - "@babel/plugin-proposal-object-rest-spread": "^7.7.4", + "@babel/plugin-proposal-object-rest-spread": "^7.7.7", "@babel/plugin-proposal-optional-catch-binding": "^7.7.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.7.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.7.7", "@babel/plugin-syntax-async-generators": "^7.7.4", "@babel/plugin-syntax-dynamic-import": "^7.7.4", "@babel/plugin-syntax-json-strings": "^7.7.4", @@ -1898,7 +1898,7 @@ "@babel/plugin-transform-classes": "^7.7.4", "@babel/plugin-transform-computed-properties": "^7.7.4", "@babel/plugin-transform-destructuring": "^7.7.4", - "@babel/plugin-transform-dotall-regex": "^7.7.4", + "@babel/plugin-transform-dotall-regex": "^7.7.7", "@babel/plugin-transform-duplicate-keys": "^7.7.4", "@babel/plugin-transform-exponentiation-operator": "^7.7.4", "@babel/plugin-transform-for-of": "^7.7.4", @@ -1912,7 +1912,7 @@ "@babel/plugin-transform-named-capturing-groups-regex": "^7.7.4", "@babel/plugin-transform-new-target": "^7.7.4", "@babel/plugin-transform-object-super": "^7.7.4", - "@babel/plugin-transform-parameters": "^7.7.4", + "@babel/plugin-transform-parameters": "^7.7.7", "@babel/plugin-transform-property-literals": "^7.7.4", "@babel/plugin-transform-regenerator": "^7.7.5", "@babel/plugin-transform-reserved-words": "^7.7.4", @@ -1924,7 +1924,7 @@ "@babel/plugin-transform-unicode-regex": "^7.7.4", "@babel/types": "^7.7.4", "browserslist": "^4.6.0", - "core-js-compat": "^3.4.7", + "core-js-compat": "^3.6.0", "invariant": "^2.2.2", "js-levenshtein": "^1.1.3", "semver": "^5.5.0" @@ -3448,9 +3448,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001015", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001015.tgz", - "integrity": "sha512-/xL2AbW/XWHNu1gnIrO8UitBGoFthcsDgU9VLK1/dpsoxbaD5LscHozKze05R6WLsBvLhqv78dAPozMFQBYLbQ==", + "version": "1.0.30001016", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001016.tgz", + "integrity": "sha512-yYQ2QfotceRiH4U+h1Us86WJXtVHDmy3nEKIdYPsZCYnOV5/tMgGbmoIlrMzmh2VXlproqYtVaKeGDBkMZifFA==", "dev": true }, "caseless": { @@ -3962,19 +3962,19 @@ "dev": true }, "core-js-compat": { - "version": "3.4.8", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.4.8.tgz", - "integrity": "sha512-l3WTmnXHV2Sfu5VuD7EHE2w7y+K68+kULKt5RJg8ZJk3YhHF1qLD4O8v8AmNq+8vbOwnPFFDvds25/AoEvMqlQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.0.tgz", + "integrity": "sha512-Z3eCNjGgoYluH89Jt4wVkfYsc/VdLrA2/woX5lm0isO/pCT+P+Y+o65bOuEnjDJLthdwTBxbCVzptTXtc18fJg==", "dev": true, "requires": { "browserslist": "^4.8.2", - "semver": "^6.3.0" + "semver": "7.0.0" }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", "dev": true } } @@ -9139,9 +9139,9 @@ } }, "node-releases": { - "version": "1.1.42", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.42.tgz", - "integrity": "sha512-OQ/ESmUqGawI2PRX+XIRao44qWYBBfN54ImQYdWVTQqUckuejOg76ysSqDBK8NG3zwySRVnX36JwDQ6x+9GxzA==", + "version": "1.1.43", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.43.tgz", + "integrity": "sha512-Rmfnj52WNhvr83MvuAWHEqXVoZXCcDQssSOffU4n4XOL9sPrP61mSZ88g25NqmABDvH7PiAlFCzoSCSdzA293w==", "dev": true, "requires": { "semver": "^6.3.0" From 8496b5b4e042b403aff535f165d4a02b4169c40d Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 07:53:34 +0000 Subject: [PATCH 024/246] Bump eslint from 6.7.2 to 6.8.0 Bumps [eslint](https://github.com/eslint/eslint) from 6.7.2 to 6.8.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v6.7.2...v6.8.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 36e305f33c..250e83f088 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4710,9 +4710,9 @@ } }, "eslint": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.7.2.tgz", - "integrity": "sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", From bcb78fe3a9a0f549bd463a6eaa1c846af28c1edc Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 07:54:01 +0000 Subject: [PATCH 025/246] Bump @babel/core from 7.7.5 to 7.7.7 Bumps [@babel/core](https://github.com/babel/babel) from 7.7.5 to 7.7.7. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) - [Commits](https://github.com/babel/babel/compare/v7.7.5...v7.7.7) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index 36e305f33c..a30bc091c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,15 +14,15 @@ } }, "@babel/core": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.5.tgz", - "integrity": "sha512-M42+ScN4+1S9iB6f+TL7QBpoQETxbclx+KNoKJABghnKYE+fMzSGqst0BZJc8CpI625bwPwYgUyRvxZ+0mZzpw==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.7.tgz", + "integrity": "sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ==", "dev": true, "requires": { "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", + "@babel/generator": "^7.7.7", "@babel/helpers": "^7.7.4", - "@babel/parser": "^7.7.5", + "@babel/parser": "^7.7.7", "@babel/template": "^7.7.4", "@babel/traverse": "^7.7.4", "@babel/types": "^7.7.4", @@ -45,9 +45,9 @@ } }, "@babel/generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz", - "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", + "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", "dev": true, "requires": { "@babel/types": "^7.7.4", @@ -86,9 +86,9 @@ } }, "@babel/parser": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", - "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", + "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", "dev": true }, "@babel/template": { @@ -1170,9 +1170,9 @@ }, "dependencies": { "@babel/generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz", - "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", + "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", "dev": true, "requires": { "@babel/types": "^7.7.4", @@ -1211,9 +1211,9 @@ } }, "@babel/parser": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", - "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", + "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", "dev": true }, "@babel/template": { From ada892322a981aa5c1150a53290dc476a512676f Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 08:22:11 +0000 Subject: [PATCH 026/246] Bump webpack from 4.41.2 to 4.41.4 Bumps [webpack](https://github.com/webpack/webpack) from 4.41.2 to 4.41.4. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v4.41.2...v4.41.4) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 104 +++++++++++++++------------------------------- package.json | 2 +- 2 files changed, 34 insertions(+), 72 deletions(-) diff --git a/package-lock.json b/package-lock.json index 54e8481176..8c3822ac20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3303,9 +3303,9 @@ } }, "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, "requires": { "base64-js": "^1.0.2", @@ -3503,9 +3503,9 @@ "dev": true }, "chokidar": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", - "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -3822,13 +3822,10 @@ "dev": true }, "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true }, "constants-browserify": { "version": "1.0.0", @@ -4109,12 +4106,6 @@ "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", "dev": true }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, "dateformat": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", @@ -4286,9 +4277,9 @@ "dev": true }, "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -4441,9 +4432,9 @@ "dev": true }, "elliptic": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", - "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", + "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", "dev": true, "requires": { "bn.js": "^4.4.0", @@ -10725,9 +10716,9 @@ } }, "serialize-javascript": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", - "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", "dev": true }, "serve-index": { @@ -12471,9 +12462,9 @@ } }, "vm-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", - "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, "void-elements": { @@ -12518,9 +12509,9 @@ "dev": true }, "webpack": { - "version": "4.41.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.2.tgz", - "integrity": "sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A==", + "version": "4.41.4", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.4.tgz", + "integrity": "sha512-Lc+2uB6NjpCWsHI3trkoISOI64h9QYIXenbEWj3bn3oyjfB1lEBXjWAfAyY2sM0rZn41oD5V91OLwKRwS6Wp8Q==", "dev": true, "requires": { "@webassemblyjs/ast": "1.8.5", @@ -12543,15 +12534,15 @@ "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.1", + "terser-webpack-plugin": "^1.4.3", "watchpack": "^1.6.0", "webpack-sources": "^1.4.1" }, "dependencies": { "acorn": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", - "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", + "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", "dev": true }, "ajv": { @@ -12572,35 +12563,6 @@ "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", "dev": true }, - "bluebird": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", - "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", - "dev": true - }, - "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, "neo-async": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", @@ -12608,16 +12570,16 @@ "dev": true }, "terser-webpack-plugin": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", - "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", + "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", "dev": true, "requires": { "cacache": "^12.0.2", "find-cache-dir": "^2.1.0", "is-wsl": "^1.1.0", "schema-utils": "^1.0.0", - "serialize-javascript": "^1.7.0", + "serialize-javascript": "^2.1.2", "source-map": "^0.6.1", "terser": "^4.1.2", "webpack-sources": "^1.4.0", diff --git a/package.json b/package.json index 1488ae725f..8d15f70b0a 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "typescript": "3.5.3", "url-polyfill": "^1.1.5", "walk": "^2.3.9", - "webpack": "4.41.2", + "webpack": "4.41.4", "webpack-cli": "^3.3.2", "webpack-dev-middleware": "^3.6.2", "webpack-dev-server": "^3.3.1", From 3d3fe9f41be6a7450b2fa69aaa652fb05c33a4be Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2019 09:15:54 +0000 Subject: [PATCH 027/246] Bump rollup from 1.27.13 to 1.27.14 Bumps [rollup](https://github.com/rollup/rollup) from 1.27.13 to 1.27.14. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v1.27.13...v1.27.14) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index adffb457eb..9d738620e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10467,9 +10467,9 @@ } }, "rollup": { - "version": "1.27.13", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.27.13.tgz", - "integrity": "sha512-hDi7M07MpmNSDE8YVwGVFA8L7n8jTLJ4lG65nMAijAyqBe//rtu4JdxjUBE7JqXfdpqxqDTbCDys9WcqdpsQvw==", + "version": "1.27.14", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.27.14.tgz", + "integrity": "sha512-DuDjEyn8Y79ALYXMt+nH/EI58L5pEw5HU9K38xXdRnxQhvzUTI/nxAawhkAHUQeudANQ//8iyrhVRHJBuR6DSQ==", "dev": true, "requires": { "@types/estree": "*", From 4440994ec8f6b2268a6da269e01491d9e5770d81 Mon Sep 17 00:00:00 2001 From: Olivier Guyot Date: Fri, 20 Dec 2019 15:27:16 +0100 Subject: [PATCH 028/246] Avoid recomputing the viewport size by reading the DOM everytime Also clarify View#calculateExtent doc & remove the [data-view] attribute on the viewport element (not needed anymore). --- src/ol/PluggableMap.js | 25 ++++++++++++++-- src/ol/View.js | 62 +++++++++++++++++++++++---------------- test/spec/ol/view.test.js | 21 +++++++++---- 3 files changed, 75 insertions(+), 33 deletions(-) diff --git a/src/ol/PluggableMap.js b/src/ol/PluggableMap.js index bc771866d8..8ddf303321 100644 --- a/src/ol/PluggableMap.js +++ b/src/ol/PluggableMap.js @@ -1,7 +1,6 @@ /** * @module ol/PluggableMap */ -import {getUid} from './util.js'; import Collection from './Collection.js'; import CollectionEventType from './CollectionEventType.js'; import MapBrowserEvent from './MapBrowserEvent.js'; @@ -1102,7 +1101,8 @@ class PluggableMap extends BaseObject { } const view = this.getView(); if (view) { - this.viewport_.setAttribute('data-view', getUid(view)); + this.updateViewportSize_(); + this.viewPropertyListenerKey_ = listen( view, ObjectEventType.PROPERTYCHANGE, this.handleViewPropertyChanged_, this); @@ -1360,6 +1360,27 @@ class PluggableMap extends BaseObject { parseFloat(computedStyle['borderBottomWidth']) ]); } + + this.updateViewportSize_(); + } + + /** + * Recomputes the viewport size and save it on the view object (if any) + * @private + */ + updateViewportSize_() { + const view = this.getView(); + if (view) { + let size = undefined; + const computedStyle = getComputedStyle(this.viewport_); + if (computedStyle.width && computedStyle.height) { + size = [ + parseInt(computedStyle.width, 10), + parseInt(computedStyle.height, 10) + ]; + } + view.setViewportSize(size); + } } } diff --git a/src/ol/View.js b/src/ol/View.js index 5fc955d351..9331d9a740 100644 --- a/src/ol/View.js +++ b/src/ol/View.js @@ -2,7 +2,6 @@ * @module ol/View */ import {DEFAULT_TILE_SIZE} from './tilegrid/common.js'; -import {getUid} from './util.js'; import {VOID} from './functions.js'; import {createExtent, none as centerNone} from './centerconstraint.js'; import BaseObject from './Object.js'; @@ -294,6 +293,12 @@ class View extends BaseObject { */ this.projection_ = createProjection(options.projection, 'EPSG:3857'); + /** + * @private + * @type {import("./size.js").Size} + */ + this.viewportSize_ = [100, 100]; + /** * @private * @type {import("./coordinate.js").Coordinate|undefined} @@ -649,7 +654,7 @@ class View extends BaseObject { animation.targetResolution : animation.sourceResolution + progress * (animation.targetResolution - animation.sourceResolution); if (animation.anchor) { - const size = this.getSizeFromViewport_(this.getRotation()); + const size = this.getViewportSize_(this.getRotation()); const constrainedResolution = this.constraints_.resolution(resolution, 0, size, true); this.targetCenter_ = this.calculateCenterZoom(constrainedResolution, animation.anchor); } @@ -722,26 +727,33 @@ class View extends BaseObject { } /** + * Returns the current viewport size. * @private * @param {number=} opt_rotation Take into account the rotation of the viewport when giving the size * @return {import("./size.js").Size} Viewport size or `[100, 100]` when no viewport is found. */ - getSizeFromViewport_(opt_rotation) { - const size = [100, 100]; - const selector = '.ol-viewport[data-view="' + getUid(this) + '"]'; - const element = document.querySelector(selector); - if (element) { - const metrics = getComputedStyle(element); - size[0] = parseInt(metrics.width, 10); - size[1] = parseInt(metrics.height, 10); - } + getViewportSize_(opt_rotation) { + const size = this.viewportSize_; if (opt_rotation) { const w = size[0]; const h = size[1]; - size[0] = Math.abs(w * Math.cos(opt_rotation)) + Math.abs(h * Math.sin(opt_rotation)); - size[1] = Math.abs(w * Math.sin(opt_rotation)) + Math.abs(h * Math.cos(opt_rotation)); + return [ + Math.abs(w * Math.cos(opt_rotation)) + Math.abs(h * Math.sin(opt_rotation)), + Math.abs(w * Math.sin(opt_rotation)) + Math.abs(h * Math.cos(opt_rotation)) + ]; + } else { + return size; } - return size; + } + + /** + * Stores the viewport size on the view. The viewport size is not read every time from the DOM + * to avoid performance hit and layout reflow. + * This should be done on map size change. + * @param {import("./size.js").Size=} opt_size Viewport size; if undefined, [100, 100] is assumed + */ + setViewportSize(opt_size) { + this.viewportSize_ = Array.isArray(opt_size) ? opt_size.slice() : [100, 100]; } /** @@ -792,8 +804,8 @@ class View extends BaseObject { * The size is the pixel dimensions of the box into which the calculated extent * should fit. In most cases you want to get the extent of the entire map, * that is `map.getSize()`. - * @param {import("./size.js").Size=} opt_size Box pixel size. If not provided, the size of the - * first map that uses this view will be used. + * @param {import("./size.js").Size=} opt_size Box pixel size. If not provided, the size + * of the map that uses this view will be used. * @return {import("./extent.js").Extent} Extent. * @api */ @@ -808,7 +820,7 @@ class View extends BaseObject { * @return {import("./extent.js").Extent} Extent. */ calculateExtentInternal(opt_size) { - const size = opt_size || this.getSizeFromViewport_(); + const size = opt_size || this.getViewportSize_(); const center = /** @type {!import("./coordinate.js").Coordinate} */ (this.getCenterInternal()); assert(center, 1); // The view center is not defined const resolution = /** @type {!number} */ (this.getResolution()); @@ -931,7 +943,7 @@ class View extends BaseObject { * the given size. */ getResolutionForExtentInternal(extent, opt_size) { - const size = opt_size || this.getSizeFromViewport_(); + const size = opt_size || this.getViewportSize_(); const xResolution = getWidth(extent) / size[0]; const yResolution = getHeight(extent) / size[1]; return Math.max(xResolution, yResolution); @@ -1079,7 +1091,7 @@ class View extends BaseObject { * @api */ fit(geometryOrExtent, opt_options) { - const options = assign({size: this.getSizeFromViewport_()}, opt_options || {}); + const options = assign({size: this.getViewportSize_()}, opt_options || {}); /** @type {import("./geom/SimpleGeometry.js").default} */ let geometry; @@ -1114,7 +1126,7 @@ class View extends BaseObject { const options = opt_options || {}; let size = options.size; if (!size) { - size = this.getSizeFromViewport_(); + size = this.getViewportSize_(); } const padding = options.padding !== undefined ? options.padding : [0, 0, 0, 0]; const nearest = options.nearest !== undefined ? options.nearest : false; @@ -1261,7 +1273,7 @@ class View extends BaseObject { */ adjustResolutionInternal(ratio, opt_anchor) { const isMoving = this.getAnimating() || this.getInteracting(); - const size = this.getSizeFromViewport_(this.getRotation()); + const size = this.getViewportSize_(this.getRotation()); const newResolution = this.constraints_.resolution(this.targetResolution_ * ratio, 0, size, isMoving); if (opt_anchor) { @@ -1385,7 +1397,7 @@ class View extends BaseObject { // compute rotation const newRotation = this.constraints_.rotation(this.targetRotation_, isMoving); - const size = this.getSizeFromViewport_(newRotation); + const size = this.getViewportSize_(newRotation); const newResolution = this.constraints_.resolution(this.targetResolution_, 0, size, isMoving); const newCenter = this.constraints_.center(this.targetCenter_, newResolution, size, isMoving); @@ -1419,7 +1431,7 @@ class View extends BaseObject { const direction = opt_resolutionDirection || 0; const newRotation = this.constraints_.rotation(this.targetRotation_); - const size = this.getSizeFromViewport_(newRotation); + const size = this.getViewportSize_(newRotation); const newResolution = this.constraints_.resolution(this.targetResolution_, direction, size); const newCenter = this.constraints_.center(this.targetCenter_, newResolution, size); @@ -1500,7 +1512,7 @@ class View extends BaseObject { * @return {import("./coordinate.js").Coordinate|undefined} Valid center position. */ getConstrainedCenter(targetCenter, opt_targetResolution) { - const size = this.getSizeFromViewport_(this.getRotation()); + const size = this.getViewportSize_(this.getRotation()); return this.constraints_.center(targetCenter, opt_targetResolution || this.getResolution(), size); } @@ -1529,7 +1541,7 @@ class View extends BaseObject { */ getConstrainedResolution(targetResolution, opt_direction) { const direction = opt_direction || 0; - const size = this.getSizeFromViewport_(this.getRotation()); + const size = this.getViewportSize_(this.getRotation()); return this.constraints_.resolution(targetResolution, direction, size); } diff --git a/test/spec/ol/view.test.js b/test/spec/ol/view.test.js index 94957a7cef..17c2f2733e 100644 --- a/test/spec/ol/view.test.js +++ b/test/spec/ol/view.test.js @@ -1461,28 +1461,37 @@ describe('ol.View', function() { }); }); - describe('#getSizeFromViewport_()', function() { + describe('#getViewportSize_()', function() { let map, target; beforeEach(function() { target = document.createElement('div'); target.style.width = '200px'; target.style.height = '150px'; + document.body.appendChild(target); map = new Map({ target: target }); - document.body.appendChild(target); }); afterEach(function() { map.setTarget(null); document.body.removeChild(target); }); - it('calculates the size correctly', function() { - let size = map.getView().getSizeFromViewport_(); + it('correctly initializes the viewport size', function() { + const size = map.getView().getViewportSize_(); expect(size).to.eql([200, 150]); - size = map.getView().getSizeFromViewport_(Math.PI / 2); + }); + it('correctly updates the viewport size', function() { + target.style.width = '300px'; + target.style.height = '200px'; + map.updateSize(); + const size = map.getView().getViewportSize_(); + expect(size).to.eql([300, 200]); + }); + it('calculates the size correctly', function() { + let size = map.getView().getViewportSize_(Math.PI / 2); expect(size[0]).to.roughlyEqual(150, 1e-9); expect(size[1]).to.roughlyEqual(200, 1e-9); - size = map.getView().getSizeFromViewport_(Math.PI); + size = map.getView().getViewportSize_(Math.PI); expect(size[0]).to.roughlyEqual(200, 1e-9); expect(size[1]).to.roughlyEqual(150, 1e-9); }); From 9622a8ca936bf965b2928b4d0a481bae663bd345 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Kr=C3=B6g?= Date: Fri, 27 Dec 2019 21:45:11 +0100 Subject: [PATCH 029/246] Fix link in apidocs to ObjectEvent. --- config/jsdoc/api/index.md | 2 +- config/jsdoc/api/template/tmpl/observables.tmpl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/jsdoc/api/index.md b/config/jsdoc/api/index.md index e2a66347cf..203e474175 100644 --- a/config/jsdoc/api/index.md +++ b/config/jsdoc/api/index.md @@ -34,7 +34,7 @@ Interactions for vector features ProjectionsObservable objectsOther components

All coordinates and extents need to be provided in view projection (default: EPSG:3857). To transform, use ol/proj#transform() and ol/proj#transformExtent().

ol/proj -

Changes to all ol/Objects can be observed by calling the object.on('propertychange') method. Listeners receive an ol/Object.ObjectEvent with information on the changed property and old value.

+

Changes to all ol/Objects can be observed by calling the object.on('propertychange') method. Listeners receive an ol/Object.ObjectEvent with information on the changed property and old value.

ol/Geolocation
ol/Overlay
diff --git a/config/jsdoc/api/template/tmpl/observables.tmpl b/config/jsdoc/api/template/tmpl/observables.tmpl index 0edca6272a..50f44a4b34 100644 --- a/config/jsdoc/api/template/tmpl/observables.tmpl +++ b/config/jsdoc/api/template/tmpl/observables.tmpl @@ -8,7 +8,7 @@ Name Type Settable - ol/Object.ObjectEvent type + ol/Object.ObjectEvent type Description From 58482c6c6416682541e5b0e6530b16bc5ba596c6 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 30 Dec 2019 07:37:37 +0000 Subject: [PATCH 030/246] Bump webpack from 4.41.4 to 4.41.5 Bumps [webpack](https://github.com/webpack/webpack) from 4.41.4 to 4.41.5. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v4.41.4...v4.41.5) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index ec4fdcdc86..8879ac6045 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12542,9 +12542,9 @@ "dev": true }, "webpack": { - "version": "4.41.4", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.4.tgz", - "integrity": "sha512-Lc+2uB6NjpCWsHI3trkoISOI64h9QYIXenbEWj3bn3oyjfB1lEBXjWAfAyY2sM0rZn41oD5V91OLwKRwS6Wp8Q==", + "version": "4.41.5", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.5.tgz", + "integrity": "sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw==", "dev": true, "requires": { "@webassemblyjs/ast": "1.8.5", diff --git a/package.json b/package.json index f0cde7901a..b5245ef23d 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "typescript": "3.5.3", "url-polyfill": "^1.1.5", "walk": "^2.3.9", - "webpack": "4.41.4", + "webpack": "4.41.5", "webpack-cli": "^3.3.2", "webpack-dev-middleware": "^3.6.2", "webpack-dev-server": "^3.3.1", From e8a17376b680436461c21d7d70eb38a69f8c5633 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 30 Dec 2019 07:38:28 +0000 Subject: [PATCH 031/246] Bump sinon from 8.0.0 to 8.0.1 Bumps [sinon](https://github.com/sinonjs/sinon) from 8.0.0 to 8.0.1. - [Release notes](https://github.com/sinonjs/sinon/releases) - [Changelog](https://github.com/sinonjs/sinon/blob/master/CHANGELOG.md) - [Commits](https://github.com/sinonjs/sinon/compare/v8.0.0...v8.0.1) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index ec4fdcdc86..94bf465fb3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10949,12 +10949,12 @@ "dev": true }, "sinon": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-8.0.0.tgz", - "integrity": "sha512-9ugfO9tMrxTzqViG0hGhJoLXj8M01FZwfXMpYSmQT1AuV2jyXDJZUMpbENHBY9/2c2u6RKkHOcbYINx2FttUkg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-8.0.1.tgz", + "integrity": "sha512-vbXMHBszVioyPsuRDLEiPEgvkZnbjfdCFvLYV4jONNJqZNLWTwZ/gYSNh3SuiT1w9MRXUz+S7aX0B4Ar2XI8iw==", "dev": true, "requires": { - "@sinonjs/commons": "^1.4.0", + "@sinonjs/commons": "^1.7.0", "@sinonjs/formatio": "^4.0.1", "@sinonjs/samsam": "^4.0.1", "diff": "^4.0.1", From f48704cac4b42f7ace9c71f15d1c7fefb24c3ddd Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Wed, 1 Jan 2020 21:04:12 +0000 Subject: [PATCH 032/246] Fix for undefined source in Vector layer A source left or set undefined is equivalent to an empty source so treat it as such to prevent errors in prepareFrame --- src/ol/renderer/canvas/VectorLayer.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/ol/renderer/canvas/VectorLayer.js b/src/ol/renderer/canvas/VectorLayer.js index b451a01b88..3915ba8a66 100644 --- a/src/ol/renderer/canvas/VectorLayer.js +++ b/src/ol/renderer/canvas/VectorLayer.js @@ -11,6 +11,16 @@ import CanvasLayerRenderer from './Layer.js'; import {defaultOrder as defaultRenderOrder, getTolerance as getRenderTolerance, getSquaredTolerance as getSquaredRenderTolerance, renderFeature} from '../vector.js'; import {toString as transformToString, makeScale, makeInverse, apply} from '../../transform.js'; import {createHitDetectionImageData, hitDetect} from '../../render/canvas/hitdetect.js'; +import VectorSource from '../../source/Vector.js'; + + +/** + * @const + * @type {VectorSource} + * @private + */ +const emptySource = new VectorSource(); + /** * @classdesc @@ -328,7 +338,7 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer { */ prepareFrame(frameState) { const vectorLayer = this.getLayer(); - const vectorSource = vectorLayer.getSource(); + const vectorSource = vectorLayer.getSource() || emptySource; const animating = frameState.viewHints[ViewHint.ANIMATING]; const interacting = frameState.viewHints[ViewHint.INTERACTING]; From b91e1a893d81c1888a34d6622f6aa649a2fc63a1 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Fri, 3 Jan 2020 18:59:24 +0100 Subject: [PATCH 033/246] Do not abort and dispose of tiles --- src/ol/Tile.js | 7 ---- src/ol/TileCache.js | 12 +----- src/ol/TileQueue.js | 13 +----- src/ol/TileState.js | 3 +- src/ol/renderer/canvas/VectorTileLayer.js | 6 +-- src/ol/source/UrlTile.js | 2 +- test/spec/ol/imagetile.test.js | 17 -------- test/spec/ol/source/tileimage.test.js | 13 ------ test/spec/ol/tilecache.test.js | 2 - test/spec/ol/tilequeue.test.js | 24 ++--------- test/spec/ol/vectorrendertile.test.js | 51 +---------------------- 11 files changed, 11 insertions(+), 139 deletions(-) diff --git a/src/ol/Tile.js b/src/ol/Tile.js index 89c7a28e54..e0a393854c 100644 --- a/src/ol/Tile.js +++ b/src/ol/Tile.js @@ -144,13 +144,6 @@ class Tile extends EventTarget { this.dispatchEvent(EventType.CHANGE); } - /** - * @inheritDoc - */ - disposeInternal() { - this.setState(TileState.ABORT); - } - /** * @return {string} Key. */ diff --git a/src/ol/TileCache.js b/src/ol/TileCache.js index e71cfd4bc3..d1527388f4 100644 --- a/src/ol/TileCache.js +++ b/src/ol/TileCache.js @@ -6,15 +6,6 @@ import {fromKey, getKey} from './tilecoord.js'; class TileCache extends LRUCache { - /** - * @param {number=} opt_highWaterMark High water mark. - */ - constructor(opt_highWaterMark) { - - super(opt_highWaterMark); - - } - /** * @param {!Object} usedTiles Used tiles. */ @@ -24,7 +15,7 @@ class TileCache extends LRUCache { if (tile.getKey() in usedTiles) { break; } else { - this.pop().dispose(); + this.pop(); } } } @@ -42,7 +33,6 @@ class TileCache extends LRUCache { this.forEach(function(tile) { if (tile.tileCoord[0] !== z) { this.remove(getKey(tile.tileCoord)); - tile.dispose(); } }.bind(this)); } diff --git a/src/ol/TileQueue.js b/src/ol/TileQueue.js index 3bf20be359..994a8eeb1d 100644 --- a/src/ol/TileQueue.js +++ b/src/ol/TileQueue.js @@ -84,8 +84,7 @@ class TileQueue extends PriorityQueue { handleTileChange(event) { const tile = /** @type {import("./Tile.js").default} */ (event.target); const state = tile.getState(); - if (tile.hifi && state === TileState.LOADED || state === TileState.ERROR || - state === TileState.EMPTY || state === TileState.ABORT) { + if (tile.hifi && state === TileState.LOADED || state === TileState.ERROR || state === TileState.EMPTY) { tile.removeEventListener(EventType.CHANGE, this.boundHandleTileChange_); const tileKey = tile.getKey(); if (tileKey in this.tilesLoadingKeys_) { @@ -102,27 +101,19 @@ class TileQueue extends PriorityQueue { */ loadMoreTiles(maxTotalLoading, maxNewLoads) { let newLoads = 0; - let abortedTiles = false; let state, tile, tileKey; while (this.tilesLoading_ < maxTotalLoading && newLoads < maxNewLoads && this.getCount() > 0) { tile = /** @type {import("./Tile.js").default} */ (this.dequeue()[0]); tileKey = tile.getKey(); state = tile.getState(); - if (state === TileState.ABORT) { - abortedTiles = true; - } else if (state === TileState.IDLE && !(tileKey in this.tilesLoadingKeys_)) { + if (state === TileState.IDLE && !(tileKey in this.tilesLoadingKeys_)) { this.tilesLoadingKeys_[tileKey] = true; ++this.tilesLoading_; ++newLoads; tile.load(); } } - if (newLoads === 0 && abortedTiles) { - // Do not stop the render loop when all wanted tiles were aborted due to - // a small, saturated tile cache. - this.tileChangeCallback_(); - } } } diff --git a/src/ol/TileState.js b/src/ol/TileState.js index f350815140..61dd890c5b 100644 --- a/src/ol/TileState.js +++ b/src/ol/TileState.js @@ -14,6 +14,5 @@ export default { * @type {number} */ ERROR: 3, - EMPTY: 4, - ABORT: 5 + EMPTY: 4 }; diff --git a/src/ol/renderer/canvas/VectorTileLayer.js b/src/ol/renderer/canvas/VectorTileLayer.js index 785f0b3d3d..834725493e 100644 --- a/src/ol/renderer/canvas/VectorTileLayer.js +++ b/src/ol/renderer/canvas/VectorTileLayer.js @@ -117,8 +117,7 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { let render; const tileUid = getUid(tile); const state = tile.getState(); - if (((state === TileState.LOADED && tile.hifi) || - state === TileState.ERROR || state === TileState.ABORT) && + if (((state === TileState.LOADED && tile.hifi) || state === TileState.ERROR) && tileUid in this.tileListenerKeys_) { unlistenByKey(this.tileListenerKeys_[tileUid]); delete this.tileListenerKeys_[tileUid]; @@ -468,9 +467,6 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { const clipZs = []; for (let i = tiles.length - 1; i >= 0; --i) { const tile = /** @type {import("../../VectorRenderTile.js").default} */ (tiles[i]); - if (tile.getState() == TileState.ABORT) { - continue; - } const tileCoord = tile.tileCoord; const tileExtent = tileGrid.getTileCoordExtent(tile.wrappedTileCoord); const worldOffset = tileGrid.getTileCoordExtent(tileCoord, this.tmpExtent)[0] - tileExtent[0]; diff --git a/src/ol/source/UrlTile.js b/src/ol/source/UrlTile.js index 0707b15eac..ebc3f5a8ed 100644 --- a/src/ol/source/UrlTile.js +++ b/src/ol/source/UrlTile.js @@ -139,7 +139,7 @@ class UrlTile extends TileSource { } else if (uid in this.tileLoadingKeys_) { delete this.tileLoadingKeys_[uid]; type = tileState == TileState.ERROR ? TileEventType.TILELOADERROR : - (tileState == TileState.LOADED || tileState == TileState.ABORT) ? + tileState == TileState.LOADED ? TileEventType.TILELOADEND : undefined; } if (type != undefined) { diff --git a/test/spec/ol/imagetile.test.js b/test/spec/ol/imagetile.test.js index eb35ed9f18..7925182e0a 100644 --- a/test/spec/ol/imagetile.test.js +++ b/test/spec/ol/imagetile.test.js @@ -83,21 +83,4 @@ describe('ol.ImageTile', function() { }); - describe('dispose', function() { - - it('sets image src to a blank image data uri', function() { - const tileCoord = [0, 0, 0]; - const state = TileState.IDLE; - const src = 'spec/ol/data/osm-0-0-0.png'; - const tileLoadFunction = defaultImageLoadFunction; - const tile = new ImageTile(tileCoord, state, src, null, tileLoadFunction); - tile.load(); - expect(tile.getState()).to.be(TileState.LOADING); - tile.dispose(); - expect(tile.getState()).to.be(TileState.ABORT); - expect(tile.getImage().src).to.be(ImageTile.blankImageUrl); - }); - - }); - }); diff --git a/test/spec/ol/source/tileimage.test.js b/test/spec/ol/source/tileimage.test.js index 1879db57ac..cb9b85884c 100644 --- a/test/spec/ol/source/tileimage.test.js +++ b/test/spec/ol/source/tileimage.test.js @@ -218,19 +218,6 @@ describe('ol.source.TileImage', function() { const tile = source.getTile(0, 0, 0, 1, getProjection('EPSG:3857')); tile.load(); }); - - it('dispatches tileloadend events for aborted tiles', function() { - source.setTileLoadFunction(function() {}); - const startSpy = sinon.spy(); - source.on('tileloadstart', startSpy); - const endSpy = sinon.spy(); - source.on('tileloadend', endSpy); - const tile = source.getTile(0, 0, 0, 1, getProjection('EPSG:3857')); - tile.load(); - tile.dispose(); - expect(startSpy.callCount).to.be(1); - expect(endSpy.callCount).to.be(1); - }); }); }); diff --git a/test/spec/ol/tilecache.test.js b/test/spec/ol/tilecache.test.js index c20ac068d8..ce92e0a145 100644 --- a/test/spec/ol/tilecache.test.js +++ b/test/spec/ol/tilecache.test.js @@ -32,8 +32,6 @@ describe('ol.TileCache', function() { '2/1/0', '2/0/0' ]); - - expect(tiles[0].dispose.calledOnce).to.be(true); }); }); }); diff --git a/test/spec/ol/tilequeue.test.js b/test/spec/ol/tilequeue.test.js index c92e02a34a..5136ac8e01 100644 --- a/test/spec/ol/tilequeue.test.js +++ b/test/spec/ol/tilequeue.test.js @@ -89,20 +89,6 @@ describe('ol.TileQueue', function() { }); - it('calls #tileChangeCallback_ when all wanted tiles are aborted', function() { - const tileChangeCallback = sinon.spy(); - const queue = new TileQueue(noop, tileChangeCallback); - const numTiles = 20; - for (let i = 0; i < numTiles; ++i) { - const tile = createImageTile(); - tile.state = TileState.ABORT; - queue.enqueue([tile]); - } - const maxLoading = numTiles / 2; - queue.loadMoreTiles(maxLoading, maxLoading); - expect(tileChangeCallback.callCount).to.be(1); - }); - }); describe('heapify', function() { @@ -144,7 +130,7 @@ describe('ol.TileQueue', function() { describe('tile change event', function() { const noop = function() {}; - it('abort queued tiles', function() { + it('loaded tiles', function() { const tq = new TileQueue(noop, noop); const tile = createImageTile(); expect(tile.hasListener('change')).to.be(false); @@ -152,12 +138,11 @@ describe('ol.TileQueue', function() { tq.enqueue([tile]); expect(tile.hasListener('change')).to.be(true); - tile.dispose(); + tile.setState(TileState.LOADED); expect(tile.hasListener('change')).to.be(false); - expect(tile.getState()).to.eql(5); // ABORT }); - it('abort loading tiles', function() { + it('error tiles', function() { const tq = new TileQueue(noop, noop); const tile = createImageTile(noop); @@ -166,10 +151,9 @@ describe('ol.TileQueue', function() { expect(tq.getTilesLoading()).to.eql(1); expect(tile.getState()).to.eql(1); // LOADING - tile.dispose(); + tile.setState(TileState.ERROR); expect(tq.getTilesLoading()).to.eql(0); expect(tile.hasListener('change')).to.be(false); - expect(tile.getState()).to.eql(5); // ABORT }); diff --git a/test/spec/ol/vectorrendertile.test.js b/test/spec/ol/vectorrendertile.test.js index 783d9acf2d..355432be34 100644 --- a/test/spec/ol/vectorrendertile.test.js +++ b/test/spec/ol/vectorrendertile.test.js @@ -1,9 +1,8 @@ import TileState from '../../../src/ol/TileState.js'; import {defaultLoadFunction} from '../../../src/ol/source/VectorTile.js'; import VectorTileSource from '../../../src/ol/source/VectorTile.js'; -import {listen, listenOnce, unlistenByKey} from '../../../src/ol/events.js'; +import {listen, unlistenByKey} from '../../../src/ol/events.js'; import GeoJSON from '../../../src/ol/format/GeoJSON.js'; -import {createXYZ} from '../../../src/ol/tilegrid.js'; import TileGrid from '../../../src/ol/tilegrid/TileGrid.js'; import EventType from '../../../src/ol/events/EventType.js'; @@ -95,52 +94,4 @@ describe('ol.VectorRenderTile', function() { }); }); - it('#dispose() while loading', function() { - const source = new VectorTileSource({ - format: new GeoJSON(), - url: 'spec/ol/data/point.json', - tileGrid: createXYZ() - }); - source.getTileGridForProjection = function() { - return createXYZ({tileSize: 512}); - }; - const tile = source.getTile(0, 0, 0, 1, source.getProjection()); - - tile.load(); - expect(tile.getState()).to.be(TileState.LOADING); - tile.dispose(); - expect(source.sourceTilesByTileKey_[tile.getKey()]).to.be(undefined); - expect(tile.getState()).to.be(TileState.ABORT); - }); - - it('#dispose() when source tiles are loaded', function(done) { - const source = new VectorTileSource({ - format: new GeoJSON(), - url: 'spec/ol/data/point.json?{z}/{x}/{y}', - tileGrid: createXYZ() - }); - source.getTileGridForProjection = function() { - return createXYZ({tileSize: 512}); - }; - const tile = source.getTile(0, 0, 0, 1, source.getProjection()); - - tile.load(); - listenOnce(tile, 'change', function() { - expect(tile.getState()).to.be(TileState.LOADED); - expect(tile.loadingSourceTiles).to.be(0); - const sourceTiles = source.getSourceTiles(1, source.getProjection(), tile); - expect(sourceTiles.length).to.be(4); - for (let i = 0, ii = sourceTiles.length; i < ii; ++i) { - expect(sourceTiles[i].consumers).to.be(1); - } - tile.dispose(); - expect(tile.getState()).to.be(TileState.ABORT); - for (let i = 0, ii = sourceTiles.length; i < ii; ++i) { - expect(sourceTiles[i].consumers).to.be(0); - expect(sourceTiles[i].getState()).to.be(TileState.ABORT); - } - done(); - }); - }); - }); From ae336f0a1bbbe36d0cc3fa2e15f7b30540812c63 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Sun, 5 Jan 2020 00:13:05 +0100 Subject: [PATCH 034/246] Remove disposeInternal of ImageTile and reproj/Tile --- src/ol/ImageTile.js | 14 -------------- src/ol/reproj/Tile.js | 10 ---------- 2 files changed, 24 deletions(-) diff --git a/src/ol/ImageTile.js b/src/ol/ImageTile.js index 995f32657e..3e0b95253a 100644 --- a/src/ol/ImageTile.js +++ b/src/ol/ImageTile.js @@ -58,20 +58,6 @@ class ImageTile extends Tile { } - /** - * @inheritDoc - */ - disposeInternal() { - if (this.state == TileState.LOADING) { - this.unlistenImage_(); - this.image_ = getBlankImage(); - } - if (this.interimTile) { - this.interimTile.dispose(); - } - super.disposeInternal(); - } - /** * Get the HTML image element for this tile (may be a Canvas, Image, or Video). * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image. diff --git a/src/ol/reproj/Tile.js b/src/ol/reproj/Tile.js index 909b125e7e..73d508d203 100644 --- a/src/ol/reproj/Tile.js +++ b/src/ol/reproj/Tile.js @@ -203,16 +203,6 @@ class ReprojTile extends Tile { } } - /** - * @inheritDoc - */ - disposeInternal() { - if (this.state == TileState.LOADING) { - this.unlistenSources_(); - } - super.disposeInternal(); - } - /** * Get the HTML Canvas element for this tile. * @return {HTMLCanvasElement} Canvas. From da6eed850ccddfefa8be0c3571b83368b7c3d955 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Sun, 5 Jan 2020 11:24:46 +0100 Subject: [PATCH 035/246] Do not lock label cache entries --- src/ol/VectorRenderTile.js | 6 --- src/ol/render/canvas/Executor.js | 13 +---- src/ol/render/canvas/ExecutorGroup.js | 22 +------- src/ol/render/canvas/LabelCache.js | 53 +------------------ src/ol/render/canvas/TextBuilder.js | 3 +- src/ol/renderer/canvas/VectorLayer.js | 3 -- src/ol/renderer/canvas/VectorTileLayer.js | 6 --- test/spec/ol/render/canvas/labelcache.test.js | 18 +------ 8 files changed, 7 insertions(+), 117 deletions(-) diff --git a/src/ol/VectorRenderTile.js b/src/ol/VectorRenderTile.js index a22a38991a..1bff7afcc3 100644 --- a/src/ol/VectorRenderTile.js +++ b/src/ol/VectorRenderTile.js @@ -127,12 +127,6 @@ class VectorRenderTile extends Tile { canvas.width = 0; canvas.height = 0; } - for (const key in this.executorGroups) { - const executorGroups = this.executorGroups[key]; - for (let i = 0, ii = executorGroups.length; i < ii; ++i) { - executorGroups[i].disposeInternal(); - } - } super.disposeInternal(); } diff --git a/src/ol/render/canvas/Executor.js b/src/ol/render/canvas/Executor.js index ebe8946f57..5ec354c5b0 100644 --- a/src/ol/render/canvas/Executor.js +++ b/src/ol/render/canvas/Executor.js @@ -18,7 +18,6 @@ import { } from '../../transform.js'; import {createCanvasContext2D} from '../../dom.js'; import {labelCache, defaultTextAlign, measureTextHeight, measureAndCacheTextWidth, measureTextWidths} from '../canvas.js'; -import Disposable from '../../Disposable.js'; import RBush from 'rbush/rbush.js'; @@ -52,7 +51,7 @@ const p3 = []; const p4 = []; -class Executor extends Disposable { +class Executor { /** * @param {number} resolution Resolution. * @param {number} pixelRatio Pixel ratio. @@ -60,7 +59,6 @@ class Executor extends Disposable { * @param {SerializableInstructions} instructions The serializable instructions */ constructor(resolution, pixelRatio, overlaps, instructions) { - super(); /** * @protected @@ -156,15 +154,6 @@ class Executor extends Disposable { this.widths_ = {}; } - /** - * @inheritDoc - */ - disposeInternal() { - labelCache.release(this); - super.disposeInternal(); - } - - /** * @param {string} text Text. * @param {string} textKey Text style key. diff --git a/src/ol/render/canvas/ExecutorGroup.js b/src/ol/render/canvas/ExecutorGroup.js index 852179f346..871456ba62 100644 --- a/src/ol/render/canvas/ExecutorGroup.js +++ b/src/ol/render/canvas/ExecutorGroup.js @@ -10,7 +10,6 @@ import {isEmpty} from '../../obj.js'; import BuilderType from './BuilderType.js'; import {create as createTransform, compose as composeTransform} from '../../transform.js'; import Executor from './Executor.js'; -import Disposable from '../../Disposable.js'; /** * @const @@ -26,7 +25,7 @@ const ORDER = [ ]; -class ExecutorGroup extends Disposable { +class ExecutorGroup { /** * @param {import("../../extent.js").Extent} maxExtent Max extent for clipping. When a * `maxExtent` was set on the Buillder for this executor group, the same `maxExtent` @@ -40,7 +39,6 @@ class ExecutorGroup extends Disposable { * @param {number=} opt_renderBuffer Optional rendering buffer. */ constructor(maxExtent, resolution, pixelRatio, overlaps, allInstructions, opt_renderBuffer) { - super(); /** * @private @@ -128,24 +126,6 @@ class ExecutorGroup extends Disposable { } } - /** - * @inheritDoc - */ - disposeInternal() { - for (const z in this.executorsByZIndex_) { - const executors = this.executorsByZIndex_[z]; - for (const key in executors) { - executors[key].disposeInternal(); - } - } - if (this.hitDetectionContext_) { - const canvas = this.hitDetectionContext_.canvas; - canvas.width = 0; - canvas.height = 0; - } - - super.disposeInternal(); - } /** * @param {Array} executors Executors. diff --git a/src/ol/render/canvas/LabelCache.js b/src/ol/render/canvas/LabelCache.js index dfa800428e..37de689738 100644 --- a/src/ol/render/canvas/LabelCache.js +++ b/src/ol/render/canvas/LabelCache.js @@ -1,4 +1,3 @@ -import {getUid} from '../../util.js'; import LRUCache from '../../structs/LRUCache.js'; /** @@ -11,59 +10,11 @@ import LRUCache from '../../structs/LRUCache.js'; */ class LabelCache extends LRUCache { - /** - * @inheritDoc - */ - constructor(opt_highWaterMark) { - super(opt_highWaterMark); - this.consumers = {}; - } - - clear() { - this.consumers = {}; - super.clear(); - } - - /** - * @override - * @param {string} key Label key. - * @param {import("./Executor.js").default} consumer Label consumer. - * @return {HTMLCanvasElement} Label. - */ - get(key, consumer) { - const canvas = super.get(key); - const consumerId = getUid(consumer); - if (!(consumerId in this.consumers)) { - this.consumers[consumerId] = {}; - } - this.consumers[consumerId][key] = true; - return canvas; - } - - prune() { - outer: + expireCache() { while (this.canExpireCache()) { - const key = this.peekLastKey(); - for (const consumerId in this.consumers) { - if (key in this.consumers[consumerId]) { - break outer; - } - } - const canvas = this.pop(); - canvas.width = 0; - canvas.height = 0; - for (const consumerId in this.consumers) { - delete this.consumers[consumerId][key]; - } + this.pop(); } } - - /** - * @param {import("./Executor.js").default} consumer Label consumer. - */ - release(consumer) { - delete this.consumers[getUid(consumer)]; - } } export default LabelCache; diff --git a/src/ol/render/canvas/TextBuilder.js b/src/ol/render/canvas/TextBuilder.js index 40c760256e..641801dba5 100644 --- a/src/ol/render/canvas/TextBuilder.js +++ b/src/ol/render/canvas/TextBuilder.js @@ -131,8 +131,6 @@ class CanvasTextBuilder extends CanvasBuilder { * @type {string} */ this.strokeKey_ = ''; - - labelCache.prune(); } /** @@ -140,6 +138,7 @@ class CanvasTextBuilder extends CanvasBuilder { */ finish() { const instructions = super.finish(); + labelCache.expireCache(); instructions.textStates = this.textStates; instructions.fillStates = this.fillStates; instructions.strokeStates = this.strokeStates; diff --git a/src/ol/renderer/canvas/VectorLayer.js b/src/ol/renderer/canvas/VectorLayer.js index b451a01b88..8fd84962ac 100644 --- a/src/ol/renderer/canvas/VectorLayer.js +++ b/src/ol/renderer/canvas/VectorLayer.js @@ -384,9 +384,6 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer { return true; } - if (this.replayGroup_) { - this.replayGroup_.dispose(); - } this.replayGroup_ = null; this.dirty_ = false; diff --git a/src/ol/renderer/canvas/VectorTileLayer.js b/src/ol/renderer/canvas/VectorTileLayer.js index 834725493e..9c0974fa91 100644 --- a/src/ol/renderer/canvas/VectorTileLayer.js +++ b/src/ol/renderer/canvas/VectorTileLayer.js @@ -218,12 +218,6 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { const sourceTiles = source.getSourceTiles(pixelRatio, projection, tile); const layerUid = getUid(layer); - const executorGroups = tile.executorGroups[layerUid]; - if (executorGroups) { - for (let i = 0, ii = executorGroups.length; i < ii; ++i) { - executorGroups[i].dispose(); - } - } delete tile.hitDetectionImageData[layerUid]; tile.executorGroups[layerUid] = []; for (let t = 0, tt = sourceTiles.length; t < tt; ++t) { diff --git a/test/spec/ol/render/canvas/labelcache.test.js b/test/spec/ol/render/canvas/labelcache.test.js index fa2fcd8f79..d6c5fb8531 100644 --- a/test/spec/ol/render/canvas/labelcache.test.js +++ b/test/spec/ol/render/canvas/labelcache.test.js @@ -2,25 +2,11 @@ import LabelCache from '../../../../../src/ol/render/canvas/LabelCache.js'; describe('ol.render.canvas.LabelCache', function() { - it('#prune()', function() { + it('#expireCache()', function() { const labelCache = new LabelCache(1); labelCache.set('key1', document.createElement('canvas')); labelCache.set('key2', document.createElement('canvas')); - labelCache.prune(); - expect(labelCache.getCount()).to.be(1); - }); - - it('#prune() leaves used labels untouched until consumer is released', function() { - const labelCache = new LabelCache(1); - labelCache.set('key1', document.createElement('canvas')); - labelCache.set('key2', document.createElement('canvas')); - const consumer = {}; - labelCache.get('key1', consumer); - labelCache.get('key2', consumer); - labelCache.prune(); - expect(labelCache.getCount()).to.be(2); - labelCache.release(consumer); - labelCache.prune(); + labelCache.expireCache(); expect(labelCache.getCount()).to.be(1); }); From 6affeb0beb754f733f8dde6373f3e8dcc40baa34 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Sun, 5 Jan 2020 11:52:45 +0100 Subject: [PATCH 036/246] Do not dispose VectorRenderTiles --- src/ol/VectorRenderTile.js | 30 +----------------------------- src/ol/source/VectorTile.js | 12 ++++-------- 2 files changed, 5 insertions(+), 37 deletions(-) diff --git a/src/ol/VectorRenderTile.js b/src/ol/VectorRenderTile.js index 1bff7afcc3..7425990573 100644 --- a/src/ol/VectorRenderTile.js +++ b/src/ol/VectorRenderTile.js @@ -4,7 +4,6 @@ import {getUid} from './util.js'; import Tile from './Tile.js'; import {createCanvasContext2D} from './dom.js'; -import {unlistenByKey} from './events.js'; /** @@ -29,10 +28,8 @@ class VectorRenderTile extends Tile { * @param {import("./tilegrid/TileGrid.js").default} sourceTileGrid Tile grid of the source. * @param {function(VectorRenderTile):Array} getSourceTiles Function * to get an source tiles for this tile. - * @param {function(VectorRenderTile):void} removeSourceTiles Function to remove this tile from its - * source tiles's consumer count. */ - constructor(tileCoord, state, urlTileCoord, sourceTileGrid, getSourceTiles, removeSourceTiles) { + constructor(tileCoord, state, urlTileCoord, sourceTileGrid, getSourceTiles) { super(tileCoord, state, {transition: 0}); @@ -81,22 +78,12 @@ class VectorRenderTile extends Tile { */ this.getSourceTiles = getSourceTiles.bind(this, this); - /** - * @type {!function(import("./VectorRenderTile.js").default):void} - */ - this.removeSourceTiles_ = removeSourceTiles; - /** * @private * @type {import("./tilegrid/TileGrid.js").default} */ this.sourceTileGrid_ = sourceTileGrid; - /** - * @type {Array} - */ - this.sourceTileListenerKeys = []; - /** * z of the source tiles of the last getSourceTiles call. * @type {number} @@ -115,21 +102,6 @@ class VectorRenderTile extends Tile { this.wrappedTileCoord = urlTileCoord; } - /** - * @inheritDoc - */ - disposeInternal() { - this.sourceTileListenerKeys.forEach(unlistenByKey); - this.sourceTileListenerKeys.length = 0; - this.removeSourceTiles_(this); - for (const key in this.context_) { - const canvas = this.context_[key].canvas; - canvas.width = 0; - canvas.height = 0; - } - super.disposeInternal(); - } - /** * @param {import("./layer/Layer.js").default} layer Layer. * @return {CanvasRenderingContext2D} The rendering context. diff --git a/src/ol/source/VectorTile.js b/src/ol/source/VectorTile.js index bd430a81d4..9cb28efb14 100644 --- a/src/ol/source/VectorTile.js +++ b/src/ol/source/VectorTile.js @@ -12,8 +12,7 @@ import {createXYZ, extentFromProjection, createForProjection} from '../tilegrid. import {buffer as bufferExtent, getIntersection, intersects} from '../extent.js'; import EventType from '../events/EventType.js'; import {loadFeaturesXhr} from '../featureloader.js'; -import {equals, remove} from '../array.js'; -import {listen, unlistenByKey} from '../events.js'; +import {equals} from '../array.js'; /** * @typedef {Object} Options @@ -294,13 +293,12 @@ class VectorTile extends UrlTile { } if (sourceTile.getState() !== TileState.EMPTY && tile.getState() === TileState.IDLE) { tile.loadingSourceTiles++; - const key = listen(sourceTile, EventType.CHANGE, function() { + sourceTile.addEventListener(EventType.CHANGE, function listenChange() { const state = sourceTile.getState(); const sourceTileKey = sourceTile.getKey(); if (state === TileState.LOADED || state === TileState.ERROR) { if (state === TileState.LOADED) { - remove(tile.sourceTileListenerKeys, key); - unlistenByKey(key); + sourceTile.removeEventListener(EventType.CHANGE, listenChange); tile.loadingSourceTiles--; delete tile.errorSourceTileKeys[sourceTileKey]; } else if (state === TileState.ERROR) { @@ -314,7 +312,6 @@ class VectorTile extends UrlTile { } } }); - tile.sourceTileListenerKeys.push(key); } }.bind(this)); if (!covered) { @@ -411,8 +408,7 @@ class VectorTile extends UrlTile { empty ? TileState.EMPTY : TileState.IDLE, urlTileCoord, this.tileGrid, - this.getSourceTiles.bind(this, pixelRatio, projection), - this.removeSourceTiles.bind(this)); + this.getSourceTiles.bind(this, pixelRatio, projection)); newTile.key = key; if (tile) { From bec747e513dca160b04c409ca5af95e1a6cd1024 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Sun, 5 Jan 2020 11:54:01 +0100 Subject: [PATCH 037/246] Remove unused argument and member --- src/ol/VectorRenderTile.js | 9 +-------- src/ol/source/VectorTile.js | 1 - test/spec/ol/renderer/canvas/vectortilelayer.test.js | 5 ++--- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/src/ol/VectorRenderTile.js b/src/ol/VectorRenderTile.js index 7425990573..0384fc3566 100644 --- a/src/ol/VectorRenderTile.js +++ b/src/ol/VectorRenderTile.js @@ -25,11 +25,10 @@ class VectorRenderTile extends Tile { * @param {import("./tilecoord.js").TileCoord} tileCoord Tile coordinate. * @param {import("./TileState.js").default} state State. * @param {import("./tilecoord.js").TileCoord} urlTileCoord Wrapped tile coordinate for source urls. - * @param {import("./tilegrid/TileGrid.js").default} sourceTileGrid Tile grid of the source. * @param {function(VectorRenderTile):Array} getSourceTiles Function * to get an source tiles for this tile. */ - constructor(tileCoord, state, urlTileCoord, sourceTileGrid, getSourceTiles) { + constructor(tileCoord, state, urlTileCoord, getSourceTiles) { super(tileCoord, state, {transition: 0}); @@ -78,12 +77,6 @@ class VectorRenderTile extends Tile { */ this.getSourceTiles = getSourceTiles.bind(this, this); - /** - * @private - * @type {import("./tilegrid/TileGrid.js").default} - */ - this.sourceTileGrid_ = sourceTileGrid; - /** * z of the source tiles of the last getSourceTiles call. * @type {number} diff --git a/src/ol/source/VectorTile.js b/src/ol/source/VectorTile.js index 9cb28efb14..abd76c21db 100644 --- a/src/ol/source/VectorTile.js +++ b/src/ol/source/VectorTile.js @@ -407,7 +407,6 @@ class VectorTile extends UrlTile { tileCoord, empty ? TileState.EMPTY : TileState.IDLE, urlTileCoord, - this.tileGrid, this.getSourceTiles.bind(this, pixelRatio, projection)); newTile.key = key; diff --git a/test/spec/ol/renderer/canvas/vectortilelayer.test.js b/test/spec/ol/renderer/canvas/vectortilelayer.test.js index eb3193223b..570a693f6d 100644 --- a/test/spec/ol/renderer/canvas/vectortilelayer.test.js +++ b/test/spec/ol/renderer/canvas/vectortilelayer.test.js @@ -255,11 +255,10 @@ describe('ol.renderer.canvas.VectorTileLayer', function() { sourceTile.getImage = function() { return document.createElement('canvas'); }; - const tile = new VectorRenderTile([0, 0, 0], 1, [0, 0, 0], createXYZ(), + const tile = new VectorRenderTile([0, 0, 0], 1, [0, 0, 0], function() { return sourceTile; - }, - function() {}); + }); tile.transition_ = 0; tile.setState(TileState.LOADED); layer.getSource().getTile = function() { From ae1ee192f3114c9c664731743cb8f36c742fbd96 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Sun, 5 Jan 2020 12:09:07 +0100 Subject: [PATCH 038/246] Avoid misleading bind argument --- src/ol/VectorRenderTile.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ol/VectorRenderTile.js b/src/ol/VectorRenderTile.js index 0384fc3566..bb2bd38f5d 100644 --- a/src/ol/VectorRenderTile.js +++ b/src/ol/VectorRenderTile.js @@ -26,7 +26,7 @@ class VectorRenderTile extends Tile { * @param {import("./TileState.js").default} state State. * @param {import("./tilecoord.js").TileCoord} urlTileCoord Wrapped tile coordinate for source urls. * @param {function(VectorRenderTile):Array} getSourceTiles Function - * to get an source tiles for this tile. + * to get source tiles for this tile. */ constructor(tileCoord, state, urlTileCoord, getSourceTiles) { @@ -75,7 +75,7 @@ class VectorRenderTile extends Tile { /** * @type {!function():Array} */ - this.getSourceTiles = getSourceTiles.bind(this, this); + this.getSourceTiles = getSourceTiles.bind(undefined, this); /** * z of the source tiles of the last getSourceTiles call. From 2875685b3c350f15f0e11eb37d196c82fe0b6809 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Sun, 5 Jan 2020 12:25:44 +0100 Subject: [PATCH 039/246] Use TileCache instead of custom structure --- src/ol/VectorTile.js | 5 --- src/ol/source/VectorTile.js | 31 ++++++------------- .../renderer/canvas/vectortilelayer.test.js | 2 +- 3 files changed, 10 insertions(+), 28 deletions(-) diff --git a/src/ol/VectorTile.js b/src/ol/VectorTile.js index 7c79cbc36f..ecf13ed8ea 100644 --- a/src/ol/VectorTile.js +++ b/src/ol/VectorTile.js @@ -18,11 +18,6 @@ class VectorTile extends Tile { super(tileCoord, state, opt_options); - /** - * @type {number} - */ - this.consumers = 0; - /** * Extent of this tile; set by the source. * @type {import("./extent.js").Extent} diff --git a/src/ol/source/VectorTile.js b/src/ol/source/VectorTile.js index abd76c21db..e2ec40c495 100644 --- a/src/ol/source/VectorTile.js +++ b/src/ol/source/VectorTile.js @@ -13,6 +13,7 @@ import {buffer as bufferExtent, getIntersection, intersects} from '../extent.js' import EventType from '../events/EventType.js'; import {loadFeaturesXhr} from '../featureloader.js'; import {equals} from '../array.js'; +import TileCache from '../TileCache.js'; /** * @typedef {Object} Options @@ -139,9 +140,9 @@ class VectorTile extends UrlTile { /** * @private - * @type {Object} + * @type {TileCache} */ - this.sourceTileByKey_ = {}; + this.sourceTileCache = new TileCache(this.tileCache.highWaterMark); /** * @private @@ -227,7 +228,7 @@ class VectorTile extends UrlTile { */ clear() { this.tileCache.clear(); - this.sourceTileByKey_ = {}; + this.sourceTileCache.clear(); this.sourceTilesByTileKey_ = {}; } @@ -269,8 +270,8 @@ class VectorTile extends UrlTile { const tileUrl = this.tileUrlFunction(sourceTileCoord, pixelRatio, projection); let sourceTile; if (tileUrl !== undefined) { - if (tileUrl in this.sourceTileByKey_) { - sourceTile = this.sourceTileByKey_[tileUrl]; + if (this.sourceTileCache.containsKey(tileUrl)) { + sourceTile = this.sourceTileCache.get(tileUrl); const state = sourceTile.getState(); if (state === TileState.LOADED || state === TileState.ERROR || state === TileState.EMPTY) { sourceTiles.push(sourceTile); @@ -282,7 +283,7 @@ class VectorTile extends UrlTile { sourceTile.extent = sourceTileGrid.getTileCoordExtent(sourceTileCoord); sourceTile.projection = projection; sourceTile.resolution = sourceTileGrid.getResolution(sourceTileCoord[0]); - this.sourceTileByKey_[tileUrl] = sourceTile; + this.sourceTileCache.set(tileUrl, sourceTile); sourceTile.addEventListener(EventType.CHANGE, this.handleTileChange.bind(this)); sourceTile.load(); } @@ -333,6 +334,7 @@ class VectorTile extends UrlTile { this.addSourceTiles(tile, sourceTiles); } } + this.sourceTileCache.expireCache({}); return sourceTiles; } @@ -342,28 +344,13 @@ class VectorTile extends UrlTile { */ addSourceTiles(tile, sourceTiles) { this.sourceTilesByTileKey_[tile.getKey()] = sourceTiles; - for (let i = 0, ii = sourceTiles.length; i < ii; ++i) { - sourceTiles[i].consumers++; - } } /** * @param {VectorRenderTile} tile Tile. */ removeSourceTiles(tile) { - const tileKey = tile.getKey(); - if (tileKey in this.sourceTilesByTileKey_) { - const sourceTiles = this.sourceTilesByTileKey_[tileKey]; - for (let i = 0, ii = sourceTiles.length; i < ii; ++i) { - const sourceTile = sourceTiles[i]; - sourceTile.consumers--; - if (sourceTile.consumers === 0) { - sourceTile.dispose(); - delete this.sourceTileByKey_[sourceTile.getKey()]; - } - } - } - delete this.sourceTilesByTileKey_[tileKey]; + delete this.sourceTilesByTileKey_[tile.getKey()]; } /** diff --git a/test/spec/ol/renderer/canvas/vectortilelayer.test.js b/test/spec/ol/renderer/canvas/vectortilelayer.test.js index 570a693f6d..aaeb91d0ca 100644 --- a/test/spec/ol/renderer/canvas/vectortilelayer.test.js +++ b/test/spec/ol/renderer/canvas/vectortilelayer.test.js @@ -315,7 +315,7 @@ describe('ol.renderer.canvas.VectorTileLayer', function() { tileClass: TileClass, tileGrid: createXYZ() }); - source.sourceTileByKey_[sourceTile.getKey()] = sourceTile; + source.sourceTileCache.set('0/0/0.mvt', sourceTile); source.sourceTilesByTileKey_[sourceTile.getKey()] = [sourceTile]; executorGroup = {}; source.getTile = function() { From 90d61033e02b8965b93815f742b87b2b761693be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Harrtell?= Date: Wed, 6 Nov 2019 22:24:05 +0100 Subject: [PATCH 040/246] Rework to make DOMImplementation lazy and injectable --- src/ol/dom.js | 29 +++++++++++++++++++++++++++++ src/ol/format/xsd.js | 13 +++++++------ src/ol/xml.js | 12 ++---------- 3 files changed, 38 insertions(+), 16 deletions(-) diff --git a/src/ol/dom.js b/src/ol/dom.js index 900fa6d559..74e3f45f6c 100644 --- a/src/ol/dom.js +++ b/src/ol/dom.js @@ -122,3 +122,32 @@ export function replaceChildren(node, children) { node.insertBefore(newChild, oldChild); } } + +let domImplementation_ = undefined; + +/** + * Register an external DOMImplementation. Can be used to supply a DOMImplementation + * in non-browser environments. + * + * @param {DOMImplementation} domImplementation A DOMImplementation. + * @api + */ +export function registerDOMImplementation(domImplementation) { + domImplementation_ = document; +} + +let document_ = undefined; + +/** + * Get a document that should be used when creating nodes for XML serializations. + * @return {Document} The document. + */ +export function getDocument() { + if (document_ === undefined) { + if (!domImplementation_ && typeof document !== 'undefined') { + domImplementation_ = document.implementation; + } + document_ = domImplementation_.createDocument('', '', null); + } + return document_; +} diff --git a/src/ol/format/xsd.js b/src/ol/format/xsd.js index 5e7f8436e9..0aeb2c5c01 100644 --- a/src/ol/format/xsd.js +++ b/src/ol/format/xsd.js @@ -1,7 +1,8 @@ /** * @module ol/format/xsd */ -import {getAllTextContent, DOCUMENT} from '../xml.js'; +import {getDocument} from '../dom.js'; +import {getAllTextContent} from '../xml.js'; import {padNumber} from '../string.js'; @@ -112,7 +113,7 @@ export function writeBooleanTextNode(node, bool) { * @param {string} string String. */ export function writeCDATASection(node, string) { - node.appendChild(DOCUMENT.createCDATASection(string)); + node.appendChild(getDocument().createCDATASection(string)); } @@ -128,7 +129,7 @@ export function writeDateTimeTextNode(node, dateTime) { padNumber(date.getUTCHours(), 2) + ':' + padNumber(date.getUTCMinutes(), 2) + ':' + padNumber(date.getUTCSeconds(), 2) + 'Z'; - node.appendChild(DOCUMENT.createTextNode(string)); + node.appendChild(getDocument().createTextNode(string)); } @@ -138,7 +139,7 @@ export function writeDateTimeTextNode(node, dateTime) { */ export function writeDecimalTextNode(node, decimal) { const string = decimal.toPrecision(); - node.appendChild(DOCUMENT.createTextNode(string)); + node.appendChild(getDocument().createTextNode(string)); } @@ -148,7 +149,7 @@ export function writeDecimalTextNode(node, decimal) { */ export function writeNonNegativeIntegerTextNode(node, nonNegativeInteger) { const string = nonNegativeInteger.toString(); - node.appendChild(DOCUMENT.createTextNode(string)); + node.appendChild(getDocument().createTextNode(string)); } @@ -157,5 +158,5 @@ export function writeNonNegativeIntegerTextNode(node, nonNegativeInteger) { * @param {string} string String. */ export function writeStringTextNode(node, string) { - node.appendChild(DOCUMENT.createTextNode(string)); + node.appendChild(getDocument().createTextNode(string)); } diff --git a/src/ol/xml.js b/src/ol/xml.js index 0f47f57a4a..cee71100eb 100644 --- a/src/ol/xml.js +++ b/src/ol/xml.js @@ -2,6 +2,7 @@ * @module ol/xml */ import {extend} from './array.js'; +import {getDocument} from './dom.js'; /** @@ -23,15 +24,6 @@ import {extend} from './array.js'; */ -/** - * This document should be used when creating nodes for XML serializations. This - * document is also used by {@link module:ol/xml~createElementNS} - * @const - * @type {Document} - */ -export const DOCUMENT = document.implementation.createDocument('', '', null); - - /** * @type {string} */ @@ -44,7 +36,7 @@ export const XML_SCHEMA_INSTANCE_URI = 'http://www.w3.org/2001/XMLSchema-instanc * @return {Element} Node. */ export function createElementNS(namespaceURI, qualifiedName) { - return DOCUMENT.createElementNS(namespaceURI, qualifiedName); + return getDocument().createElementNS(namespaceURI, qualifiedName); } From fc461668214ef42cffa8b037194aa5ad75aa7acc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Harrtell?= Date: Thu, 7 Nov 2019 20:39:28 +0100 Subject: [PATCH 041/246] Fix argument name mixup --- src/ol/dom.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ol/dom.js b/src/ol/dom.js index 74e3f45f6c..94604f4ae3 100644 --- a/src/ol/dom.js +++ b/src/ol/dom.js @@ -133,7 +133,7 @@ let domImplementation_ = undefined; * @api */ export function registerDOMImplementation(domImplementation) { - domImplementation_ = document; + domImplementation_ = domImplementation; } let document_ = undefined; From bdc20e0293d7d4b23c12bc86bc25fb345d319ba4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Harrtell?= Date: Wed, 13 Nov 2019 22:54:56 +0100 Subject: [PATCH 042/246] Rework to register Document and add XMLSerializer --- src/ol/dom.js | 21 ++++++++------------- src/ol/format/XMLFeature.js | 4 ++-- src/ol/xml.js | 24 ++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/ol/dom.js b/src/ol/dom.js index 94604f4ae3..bf3274686a 100644 --- a/src/ol/dom.js +++ b/src/ol/dom.js @@ -123,31 +123,26 @@ export function replaceChildren(node, children) { } } -let domImplementation_ = undefined; +let document_ = undefined; /** - * Register an external DOMImplementation. Can be used to supply a DOMImplementation - * in non-browser environments. + * Register a Document to use when creating nodes for XML serializations. Can be used + * to inject a Document where there is no globally available implementation. * - * @param {DOMImplementation} domImplementation A DOMImplementation. + * @param {Document} document A Document. * @api */ -export function registerDOMImplementation(domImplementation) { - domImplementation_ = domImplementation; +export function registerDocument(document) { + document_ = document; } -let document_ = undefined; - /** * Get a document that should be used when creating nodes for XML serializations. * @return {Document} The document. */ export function getDocument() { - if (document_ === undefined) { - if (!domImplementation_ && typeof document !== 'undefined') { - domImplementation_ = document.implementation; - } - document_ = domImplementation_.createDocument('', '', null); + if (document_ === undefined && typeof document !== 'undefined') { + document_ = document.implementation.createDocument('', '', null); } return document_; } diff --git a/src/ol/format/XMLFeature.js b/src/ol/format/XMLFeature.js index b0bed3b402..0f413e21c3 100644 --- a/src/ol/format/XMLFeature.js +++ b/src/ol/format/XMLFeature.js @@ -5,7 +5,7 @@ import {abstract} from '../util.js'; import {extend} from '../array.js'; import FeatureFormat from '../format/Feature.js'; import FormatType from '../format/FormatType.js'; -import {isDocument, parse} from '../xml.js'; +import {isDocument, parse, getXMLSerializer} from '../xml.js'; /** * @classdesc @@ -23,7 +23,7 @@ class XMLFeature extends FeatureFormat { * @type {XMLSerializer} * @private */ - this.xmlSerializer_ = new XMLSerializer(); + this.xmlSerializer_ = getXMLSerializer(); } /** diff --git a/src/ol/xml.js b/src/ol/xml.js index cee71100eb..27b2ee9e6f 100644 --- a/src/ol/xml.js +++ b/src/ol/xml.js @@ -486,3 +486,27 @@ export function pushSerializeAndPop(object, serializersNS, nodeFactory, values, serialize(serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this); return /** @type {O|undefined} */ (objectStack.pop()); } + +let xmlSerializer_ = undefined; + +/** + * Register a XMLSerializer. Can be used + * to inject a XMLSerializer where there is no globally available implementation. + * + * @param {XMLSerializer} xmlSerializer A XMLSerializer. + * @api + */ +export function registerXMLSerializer(xmlSerializer) { + xmlSerializer_ = xmlSerializer; +} + +/** + * Get a document that should be used when creating nodes for XML serializations. + * @return {XMLSerializer} The XMLSerializer. + */ +export function getXMLSerializer() { + if (xmlSerializer_ === undefined && typeof XMLSerializer !== 'undefined') { + xmlSerializer_ = new XMLSerializer(); + } + return xmlSerializer_; +} From 5b661ed84ca2ca15c7019f1decd115b1440d30cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Harrtell?= Date: Wed, 13 Nov 2019 23:00:34 +0100 Subject: [PATCH 043/246] Fix jsdoc --- src/ol/xml.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/ol/xml.js b/src/ol/xml.js index 27b2ee9e6f..5d040a3ae1 100644 --- a/src/ol/xml.js +++ b/src/ol/xml.js @@ -490,8 +490,8 @@ export function pushSerializeAndPop(object, serializersNS, nodeFactory, values, let xmlSerializer_ = undefined; /** - * Register a XMLSerializer. Can be used - * to inject a XMLSerializer where there is no globally available implementation. + * Register a XMLSerializer. Can be used to inject a XMLSerializer + * where there is no globally available implementation. * * @param {XMLSerializer} xmlSerializer A XMLSerializer. * @api @@ -501,7 +501,6 @@ export function registerXMLSerializer(xmlSerializer) { } /** - * Get a document that should be used when creating nodes for XML serializations. * @return {XMLSerializer} The XMLSerializer. */ export function getXMLSerializer() { From 05a5f162d482d593adc1e3a687b85b1d23a249d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Harrtell?= Date: Sun, 5 Jan 2020 13:12:27 +0100 Subject: [PATCH 044/246] Move logic from dom to xml module --- src/ol/dom.js | 24 ------------------------ src/ol/format/xsd.js | 3 +-- src/ol/xml.js | 26 +++++++++++++++++++++++++- 3 files changed, 26 insertions(+), 27 deletions(-) diff --git a/src/ol/dom.js b/src/ol/dom.js index bf3274686a..900fa6d559 100644 --- a/src/ol/dom.js +++ b/src/ol/dom.js @@ -122,27 +122,3 @@ export function replaceChildren(node, children) { node.insertBefore(newChild, oldChild); } } - -let document_ = undefined; - -/** - * Register a Document to use when creating nodes for XML serializations. Can be used - * to inject a Document where there is no globally available implementation. - * - * @param {Document} document A Document. - * @api - */ -export function registerDocument(document) { - document_ = document; -} - -/** - * Get a document that should be used when creating nodes for XML serializations. - * @return {Document} The document. - */ -export function getDocument() { - if (document_ === undefined && typeof document !== 'undefined') { - document_ = document.implementation.createDocument('', '', null); - } - return document_; -} diff --git a/src/ol/format/xsd.js b/src/ol/format/xsd.js index 0aeb2c5c01..271b590679 100644 --- a/src/ol/format/xsd.js +++ b/src/ol/format/xsd.js @@ -1,8 +1,7 @@ /** * @module ol/format/xsd */ -import {getDocument} from '../dom.js'; -import {getAllTextContent} from '../xml.js'; +import {getAllTextContent, getDocument} from '../xml.js'; import {padNumber} from '../string.js'; diff --git a/src/ol/xml.js b/src/ol/xml.js index 5d040a3ae1..276a9c4482 100644 --- a/src/ol/xml.js +++ b/src/ol/xml.js @@ -2,7 +2,6 @@ * @module ol/xml */ import {extend} from './array.js'; -import {getDocument} from './dom.js'; /** @@ -509,3 +508,28 @@ export function getXMLSerializer() { } return xmlSerializer_; } + + +let document_ = undefined; + +/** + * Register a Document to use when creating nodes for XML serializations. Can be used + * to inject a Document where there is no globally available implementation. + * + * @param {Document} document A Document. + * @api + */ +export function registerDocument(document) { + document_ = document; +} + +/** + * Get a document that should be used when creating nodes for XML serializations. + * @return {Document} The document. + */ +export function getDocument() { + if (document_ === undefined && typeof document !== 'undefined') { + document_ = document.implementation.createDocument('', '', null); + } + return document_; +} From c840d29f9fd952d347d1bc4c2a09e1f04377c094 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2020 07:36:59 +0000 Subject: [PATCH 045/246] Bump rollup from 1.27.14 to 1.28.0 Bumps [rollup](https://github.com/rollup/rollup) from 1.27.14 to 1.28.0. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v1.27.14...v1.28.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 52f5a15fe0..042a73c594 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10467,9 +10467,9 @@ } }, "rollup": { - "version": "1.27.14", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.27.14.tgz", - "integrity": "sha512-DuDjEyn8Y79ALYXMt+nH/EI58L5pEw5HU9K38xXdRnxQhvzUTI/nxAawhkAHUQeudANQ//8iyrhVRHJBuR6DSQ==", + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.28.0.tgz", + "integrity": "sha512-v2J/DmQi9+Nf6frGqzwZRvbiuTTrqH0yzoUF4Eybf8sONT4UpLZzJYnYzW96Zm9X1+4SJmijfnFBWCzHDAXYnQ==", "dev": true, "requires": { "@types/estree": "*", From 77c2c04ae6fea0cb8b3a937aeaea7899af7cdde1 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2020 07:37:44 +0000 Subject: [PATCH 046/246] Bump mocha from 6.2.2 to 7.0.0 Bumps [mocha](https://github.com/mochajs/mocha) from 6.2.2 to 7.0.0. - [Release notes](https://github.com/mochajs/mocha/releases) - [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md) - [Commits](https://github.com/mochajs/mocha/compare/v6.2.2...v7.0.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 203 +++++++++++++++++++++++++++++++++++++++++++--- package.json | 2 +- 2 files changed, 192 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 52f5a15fe0..e120a16e57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8842,13 +8842,14 @@ } }, "mocha": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.2.tgz", - "integrity": "sha512-FgDS9Re79yU1xz5d+C4rv1G7QagNGHZ+iXF81hO8zY35YZZcLEsJVfFolfsqKFWunATEvNzMK0r/CwWd/szO9A==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.0.0.tgz", + "integrity": "sha512-CirsOPbO3jU86YKjjMzFLcXIb5YiGLUrjrXFHoJ3e2z9vWiaZVCZQ2+gtRGMPWF+nFhN6AWwLM/juzAQ6KRkbA==", "dev": true, "requires": { "ansi-colors": "3.2.3", "browser-stdout": "1.3.1", + "chokidar": "3.3.0", "debug": "3.2.6", "diff": "3.5.0", "escape-string-regexp": "1.0.5", @@ -8861,7 +8862,7 @@ "minimatch": "3.0.4", "mkdirp": "0.5.1", "ms": "2.1.1", - "node-environment-flags": "1.0.5", + "node-environment-flags": "1.0.6", "object.assign": "4.1.0", "strip-json-comments": "2.0.1", "supports-color": "6.0.0", @@ -8884,6 +8885,47 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + } + }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", @@ -8904,6 +8946,22 @@ "ms": "^2.1.1" } }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", + "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "dev": true, + "optional": true + }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -8918,6 +8976,39 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.4" + } + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -8947,6 +9038,15 @@ "has-flag": "^3.0.0" } }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", @@ -9085,9 +9185,9 @@ } }, "node-environment-flags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", + "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", "dev": true, "requires": { "object.getownpropertydescriptors": "^2.0.3", @@ -9287,13 +9387,92 @@ } }, "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + } } }, "object.pick": { diff --git a/package.json b/package.json index b5245ef23d..64b055a44c 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "karma-webpack": "^4.0.0-rc.2", "loglevelnext": "^3.0.1", "marked": "0.8.0", - "mocha": "6.2.2", + "mocha": "7.0.0", "ol-mapbox-style": "^5.0.2", "pixelmatch": "^5.1.0", "pngjs": "^3.4.0", From 780e4f5fbd25b3375008200b58ea185d9936e265 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2020 07:38:20 +0000 Subject: [PATCH 047/246] Bump yargs from 15.0.2 to 15.1.0 Bumps [yargs](https://github.com/yargs/yargs) from 15.0.2 to 15.1.0. - [Release notes](https://github.com/yargs/yargs/releases) - [Changelog](https://github.com/yargs/yargs/blob/master/CHANGELOG.md) - [Commits](https://github.com/yargs/yargs/compare/v15.0.2...v15.1.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 52f5a15fe0..4572a3c416 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13087,9 +13087,9 @@ "dev": true }, "yargs": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.0.2.tgz", - "integrity": "sha512-GH/X/hYt+x5hOat4LMnCqMd8r5Cv78heOMIJn1hr7QPPBqfeC6p89Y78+WB9yGDvfpCvgasfmWLzNzEioOUD9Q==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.1.0.tgz", + "integrity": "sha512-T39FNN1b6hCW4SOIk1XyTOWxtXdcen0t+XYrysQmChzSipvhBO8Bj0nK1ozAasdk24dNWuMZvr4k24nz+8HHLg==", "dev": true, "requires": { "cliui": "^6.0.0", @@ -13112,9 +13112,9 @@ "dev": true }, "ansi-styles": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.0.tgz", - "integrity": "sha512-7kFQgnEaMdRtwf6uSfUnVr9gSGC7faurn+J/Mv90/W+iTtN0405/nLdopfMWwchyxhbGYl6TC4Sccn9TUkGAgg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "dev": true, "requires": { "@types/color-name": "^1.1.1", From 68de72d1cce9cadf6990b9d820bec93bb56e295e Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2020 07:38:58 +0000 Subject: [PATCH 048/246] Bump sinon from 8.0.1 to 8.0.2 Bumps [sinon](https://github.com/sinonjs/sinon) from 8.0.1 to 8.0.2. - [Release notes](https://github.com/sinonjs/sinon/releases) - [Changelog](https://github.com/sinonjs/sinon/blob/master/CHANGELOG.md) - [Commits](https://github.com/sinonjs/sinon/compare/v8.0.1...v8.0.2) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 52f5a15fe0..1f4bda4722 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2091,14 +2091,14 @@ } }, "@sinonjs/samsam": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-4.2.0.tgz", - "integrity": "sha512-yG7QbUz38ZPIegfuSMEcbOo0kkLGmPa8a0Qlz4dk7+cXYALDScWjIZzAm/u2+Frh+bcdZF6wZJZwwuJjY0WAjA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-4.2.1.tgz", + "integrity": "sha512-7+5S4C4wpug5pzHS+z/63+XUwsH7dtyYELDafoT1QnfruFh7eFjlDWwZXltUB0GLk6y5eMeAt34Bjx8wJ4KfSA==", "dev": true, "requires": { "@sinonjs/commons": "^1.6.0", - "array-from": "^2.1.1", - "lodash.get": "^4.4.2" + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" } }, "@sinonjs/text-encoding": { @@ -2581,12 +2581,6 @@ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, - "array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", - "dev": true - }, "array-includes": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", @@ -9071,9 +9065,9 @@ "dev": true }, "nise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/nise/-/nise-3.0.0.tgz", - "integrity": "sha512-EObFx5tioBMePHpU/gGczaY2YDqL255iwjmZwswu2CiwEW8xIGrr3E2xij+efIppS1nLQo9NyXSIUySGHUOhHQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/nise/-/nise-3.0.1.tgz", + "integrity": "sha512-fYcH9y0drBGSoi88kvhpbZEsenX58Yr+wOJ4/Mi1K4cy+iGP/a73gNoyNhu5E9QxPdgTlVChfIaAlnyOy/gHUA==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0", @@ -10949,17 +10943,17 @@ "dev": true }, "sinon": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-8.0.1.tgz", - "integrity": "sha512-vbXMHBszVioyPsuRDLEiPEgvkZnbjfdCFvLYV4jONNJqZNLWTwZ/gYSNh3SuiT1w9MRXUz+S7aX0B4Ar2XI8iw==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-8.0.2.tgz", + "integrity": "sha512-8W1S7BnCyvk7SK+Xi15B1QAVLuS81G/NGmWefPb31+ly6xI3fXaug/g5oUdfc8+7ruC4Ay51AxuLlYm8diq6kA==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0", "@sinonjs/formatio": "^4.0.1", - "@sinonjs/samsam": "^4.0.1", + "@sinonjs/samsam": "^4.2.1", "diff": "^4.0.1", "lolex": "^5.1.2", - "nise": "^3.0.0", + "nise": "^3.0.1", "supports-color": "^7.1.0" }, "dependencies": { From 5a1921d7bd2dcec456a4aa43c38cbdb5b6e09712 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Mon, 6 Jan 2020 10:52:16 +0100 Subject: [PATCH 049/246] Use a function to get the value of the gradient --- src/ol/layer/Heatmap.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ol/layer/Heatmap.js b/src/ol/layer/Heatmap.js index 646777a0d3..eb7abdf0ad 100644 --- a/src/ol/layer/Heatmap.js +++ b/src/ol/layer/Heatmap.js @@ -294,7 +294,9 @@ class Heatmap extends VectorLayer { gl_FragColor.rgb *= gl_FragColor.a; }`, uniforms: { - u_gradientTexture: this.gradient_ + u_gradientTexture: function() { + return this.gradient_; + }.bind(this) } } ] From cb665b7ea762f0a81e15f20a069176e4d0663919 Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Mon, 6 Jan 2020 17:31:38 +0000 Subject: [PATCH 050/246] Simplify to return false if layer has no source --- src/ol/renderer/canvas/VectorLayer.js | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/ol/renderer/canvas/VectorLayer.js b/src/ol/renderer/canvas/VectorLayer.js index 3915ba8a66..d18b83a6df 100644 --- a/src/ol/renderer/canvas/VectorLayer.js +++ b/src/ol/renderer/canvas/VectorLayer.js @@ -11,16 +11,6 @@ import CanvasLayerRenderer from './Layer.js'; import {defaultOrder as defaultRenderOrder, getTolerance as getRenderTolerance, getSquaredTolerance as getSquaredRenderTolerance, renderFeature} from '../vector.js'; import {toString as transformToString, makeScale, makeInverse, apply} from '../../transform.js'; import {createHitDetectionImageData, hitDetect} from '../../render/canvas/hitdetect.js'; -import VectorSource from '../../source/Vector.js'; - - -/** - * @const - * @type {VectorSource} - * @private - */ -const emptySource = new VectorSource(); - /** * @classdesc @@ -338,7 +328,10 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer { */ prepareFrame(frameState) { const vectorLayer = this.getLayer(); - const vectorSource = vectorLayer.getSource() || emptySource; + const vectorSource = vectorLayer.getSource(); + if (!vectorSource) { + return false; + } const animating = frameState.viewHints[ViewHint.ANIMATING]; const interacting = frameState.viewHints[ViewHint.INTERACTING]; From 21e9601d7b589fd0b6f18667faf9bb233e0756e8 Mon Sep 17 00:00:00 2001 From: Dan Lim Date: Tue, 7 Jan 2020 16:12:06 -0800 Subject: [PATCH 051/246] typo in view.fit --- src/ol/View.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ol/View.js b/src/ol/View.js index b55aad9186..3bcc05219b 100644 --- a/src/ol/View.js +++ b/src/ol/View.js @@ -1109,7 +1109,7 @@ class View extends BaseObject { } else { const userProjection = getUserProjection(); if (userProjection) { - geometry = /** @type {import("./geom/SimpleGeometry.js").default} */ (geometry.clone().transform(userProjection, this.getProjection())); + geometry = /** @type {import("./geom/SimpleGeometry.js").default} */ (geometryOrExtent.clone().transform(userProjection, this.getProjection())); } else { geometry = geometryOrExtent; } From 46d98201c3898fcb04a2e6ddb89ed45beb4abbfe Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Sun, 5 Jan 2020 21:07:38 +0100 Subject: [PATCH 052/246] Store source tiles on render tile instead of source --- src/ol/VectorRenderTile.js | 5 ++++ src/ol/source/VectorTile.js | 27 ++----------------- .../renderer/canvas/vectortilelayer.test.js | 2 +- 3 files changed, 8 insertions(+), 26 deletions(-) diff --git a/src/ol/VectorRenderTile.js b/src/ol/VectorRenderTile.js index bb2bd38f5d..1b05c5659b 100644 --- a/src/ol/VectorRenderTile.js +++ b/src/ol/VectorRenderTile.js @@ -67,6 +67,11 @@ class VectorRenderTile extends Tile { */ this.replayState_ = {}; + /** + * @type {Array} + */ + this.sourceTiles = null; + /** * @type {number} */ diff --git a/src/ol/source/VectorTile.js b/src/ol/source/VectorTile.js index e2ec40c495..c4ac79a917 100644 --- a/src/ol/source/VectorTile.js +++ b/src/ol/source/VectorTile.js @@ -144,12 +144,6 @@ class VectorTile extends UrlTile { */ this.sourceTileCache = new TileCache(this.tileCache.highWaterMark); - /** - * @private - * @type {Object>} - */ - this.sourceTilesByTileKey_ = {}; - /** * @private * @type {boolean} @@ -229,7 +223,6 @@ class VectorTile extends UrlTile { clear() { this.tileCache.clear(); this.sourceTileCache.clear(); - this.sourceTilesByTileKey_ = {}; } /** @@ -254,7 +247,7 @@ class VectorTile extends UrlTile { const sourceZ = sourceTileGrid.getZForResolution(resolution, 1); const minZoom = sourceTileGrid.getMinZoom(); - const previousSourceTiles = this.sourceTilesByTileKey_[tile.getKey()]; + const previousSourceTiles = tile.sourceTiles; let sourceTiles, covered, loadedZ; if (previousSourceTiles && previousSourceTiles.length > 0 && previousSourceTiles[0].tileCoord[0] === sourceZ) { sourceTiles = previousSourceTiles; @@ -330,29 +323,13 @@ class VectorTile extends UrlTile { if (tile.getState() < TileState.LOADED) { tile.setState(TileState.LOADED); } else if (!previousSourceTiles || !equals(sourceTiles, previousSourceTiles)) { - this.removeSourceTiles(tile); - this.addSourceTiles(tile, sourceTiles); + tile.sourceTiles = sourceTiles; } } this.sourceTileCache.expireCache({}); return sourceTiles; } - /** - * @param {VectorRenderTile} tile Tile. - * @param {Array} sourceTiles Source tiles. - */ - addSourceTiles(tile, sourceTiles) { - this.sourceTilesByTileKey_[tile.getKey()] = sourceTiles; - } - - /** - * @param {VectorRenderTile} tile Tile. - */ - removeSourceTiles(tile) { - delete this.sourceTilesByTileKey_[tile.getKey()]; - } - /** * @inheritDoc */ diff --git a/test/spec/ol/renderer/canvas/vectortilelayer.test.js b/test/spec/ol/renderer/canvas/vectortilelayer.test.js index aaeb91d0ca..27abdf7871 100644 --- a/test/spec/ol/renderer/canvas/vectortilelayer.test.js +++ b/test/spec/ol/renderer/canvas/vectortilelayer.test.js @@ -316,10 +316,10 @@ describe('ol.renderer.canvas.VectorTileLayer', function() { tileGrid: createXYZ() }); source.sourceTileCache.set('0/0/0.mvt', sourceTile); - source.sourceTilesByTileKey_[sourceTile.getKey()] = [sourceTile]; executorGroup = {}; source.getTile = function() { const tile = VectorTileSource.prototype.getTile.apply(source, arguments); + tile.sourceTiles = [sourceTile]; tile.executorGroups[getUid(layer)] = [executorGroup]; return tile; }; From 5a8df1d4e298b901b0b7b6ad5d4ca0a2c864582c Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Sun, 5 Jan 2020 22:30:54 +0100 Subject: [PATCH 053/246] We no longer need to increase the cache size --- src/ol/renderer/canvas/TileLayer.js | 22 ------------------- .../spec/ol/renderer/canvas/tilelayer.test.js | 9 -------- 2 files changed, 31 deletions(-) diff --git a/src/ol/renderer/canvas/TileLayer.js b/src/ol/renderer/canvas/TileLayer.js index 518a77a610..51fb12939f 100644 --- a/src/ol/renderer/canvas/TileLayer.js +++ b/src/ol/renderer/canvas/TileLayer.js @@ -362,7 +362,6 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer { this.manageTilePyramid(frameState, tileSource, tileGrid, pixelRatio, projection, extent, z, tileLayer.getPreload()); - this.updateCacheSize_(frameState, tileSource); this.scheduleExpireCache(frameState, tileSource); this.postRender(context, frameState); @@ -474,27 +473,6 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer { usedTiles[tileSourceKey][tile.getKey()] = true; } - /** - * Check if the cache is big enough, and increase its size if necessary. - * @param {import("../../PluggableMap.js").FrameState} frameState Frame state. - * @param {import("../../source/Tile.js").default} tileSource Tile source. - * @private - */ - updateCacheSize_(frameState, tileSource) { - const tileSourceKey = getUid(tileSource); - let size = 0; - if (tileSourceKey in frameState.usedTiles) { - size += Object.keys(frameState.usedTiles[tileSourceKey]).length; - } - if (tileSourceKey in frameState.wantedTiles) { - size += Object.keys(frameState.wantedTiles[tileSourceKey]).length; - } - const tileCache = tileSource.tileCache; - if (tileCache.highWaterMark < size) { - tileCache.highWaterMark = size; - } - } - /** * Manage tile pyramid. * This function performs a number of functions related to the tiles at the diff --git a/test/spec/ol/renderer/canvas/tilelayer.test.js b/test/spec/ol/renderer/canvas/tilelayer.test.js index d326d9d7d0..bf5a6c784e 100644 --- a/test/spec/ol/renderer/canvas/tilelayer.test.js +++ b/test/spec/ol/renderer/canvas/tilelayer.test.js @@ -78,15 +78,6 @@ describe('ol.renderer.canvas.TileLayer', function() { disposeMap(map); }); - it('increases the cache size if necessary', function(done) { - const tileCache = layer.getSource().tileCache; - expect(tileCache.highWaterMark).to.be(1); - map.once('rendercomplete', function() { - expect(tileCache.highWaterMark).to.be(2); - done(); - }); - }); - it('respects the source\'s zDirection setting', function(done) { layer.getSource().zDirection = 1; map.getView().setZoom(5.8); // would lead to z6 tile request with the default zDirection From 9f4dbd3c350edb976ef6907e945af3299e2dcb2c Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Wed, 8 Jan 2020 10:42:34 +0100 Subject: [PATCH 054/246] Reuse existing canvases from vector render tiles --- src/ol/Tile.js | 6 ++++++ src/ol/TileCache.js | 3 ++- src/ol/VectorRenderTile.js | 16 +++++++++++++++- src/ol/dom.js | 6 ++++-- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/ol/Tile.js b/src/ol/Tile.js index e0a393854c..f49c97e616 100644 --- a/src/ol/Tile.js +++ b/src/ol/Tile.js @@ -144,6 +144,12 @@ class Tile extends EventTarget { this.dispatchEvent(EventType.CHANGE); } + /** + * Called by the tile cache when the tile is removed from the cache due to expiry + */ + release() { + } + /** * @return {string} Key. */ diff --git a/src/ol/TileCache.js b/src/ol/TileCache.js index d1527388f4..37f6113df7 100644 --- a/src/ol/TileCache.js +++ b/src/ol/TileCache.js @@ -15,7 +15,7 @@ class TileCache extends LRUCache { if (tile.getKey() in usedTiles) { break; } else { - this.pop(); + this.pop().release(); } } } @@ -33,6 +33,7 @@ class TileCache extends LRUCache { this.forEach(function(tile) { if (tile.tileCoord[0] !== z) { this.remove(getKey(tile.tileCoord)); + tile.release(); } }.bind(this)); } diff --git a/src/ol/VectorRenderTile.js b/src/ol/VectorRenderTile.js index 1b05c5659b..372fc8a3a0 100644 --- a/src/ol/VectorRenderTile.js +++ b/src/ol/VectorRenderTile.js @@ -18,6 +18,10 @@ import {createCanvasContext2D} from './dom.js'; * @property {number} renderedTileZ */ +/** + * @type {Array} + */ +const canvasPool = []; class VectorRenderTile extends Tile { @@ -107,7 +111,7 @@ class VectorRenderTile extends Tile { getContext(layer) { const key = getUid(layer); if (!(key in this.context_)) { - this.context_[key] = createCanvasContext2D(); + this.context_[key] = createCanvasContext2D(1, 1, canvasPool); } return this.context_[key]; } @@ -156,6 +160,16 @@ class VectorRenderTile extends Tile { load() { this.getSourceTiles(); } + + /** + * @inheritDoc + */ + release() { + for (const key in this.context_) { + canvasPool.push(this.context_[key].canvas); + } + super.release(); + } } diff --git a/src/ol/dom.js b/src/ol/dom.js index 900fa6d559..ad10c14671 100644 --- a/src/ol/dom.js +++ b/src/ol/dom.js @@ -7,10 +7,12 @@ * Create an html canvas element and returns its 2d context. * @param {number=} opt_width Canvas width. * @param {number=} opt_height Canvas height. + * @param {Array=} opt_canvasPool Canvas pool to take existing canvas from. * @return {CanvasRenderingContext2D} The context. */ -export function createCanvasContext2D(opt_width, opt_height) { - const canvas = document.createElement('canvas'); +export function createCanvasContext2D(opt_width, opt_height, opt_canvasPool) { + const canvas = opt_canvasPool && opt_canvasPool.length ? + opt_canvasPool.shift() : document.createElement('canvas'); if (opt_width) { canvas.width = opt_width; } From b26f570cb70fd9799262b8dc31651987af39b9ea Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Wed, 8 Jan 2020 21:39:29 +0100 Subject: [PATCH 055/246] Do not stop events when dragging --- src/ol/PluggableMap.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/ol/PluggableMap.js b/src/ol/PluggableMap.js index 8ddf303321..fac2b185e2 100644 --- a/src/ol/PluggableMap.js +++ b/src/ol/PluggableMap.js @@ -933,11 +933,13 @@ class PluggableMap extends BaseObject { return; } let target = /** @type {Node} */ (mapBrowserEvent.originalEvent.target); - while (target) { - if (target.parentElement === this.overlayContainerStopEvent_) { - return; + if (!mapBrowserEvent.dragging) { + while (target && target !== this.viewport_) { + if (target.parentElement === this.overlayContainerStopEvent_) { + return; + } + target = target.parentElement; } - target = target.parentElement; } mapBrowserEvent.frameState = this.frameState_; const interactionsArray = this.getInteractions().getArray(); From 420e7d87ae39c3e12ccccc269b3606efd083477a Mon Sep 17 00:00:00 2001 From: gazza0 Date: Thu, 9 Jan 2020 02:52:21 -0800 Subject: [PATCH 056/246] Fixing issue #10497 on behalf of LarryHuang Since Larry is not able to access github, i'm committing on behalf of him, explanation of the issue and he's original fix can be found https://github.com/openlayers/openlayers/issues/10497 --- src/ol/render/canvas/TextBuilder.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ol/render/canvas/TextBuilder.js b/src/ol/render/canvas/TextBuilder.js index 641801dba5..c14b3ce367 100644 --- a/src/ol/render/canvas/TextBuilder.js +++ b/src/ol/render/canvas/TextBuilder.js @@ -460,7 +460,7 @@ class CanvasTextBuilder extends CanvasBuilder { strokeState.lineCap + strokeState.lineDashOffset + '|' + strokeState.lineWidth + strokeState.lineJoin + strokeState.miterLimit + '[' + strokeState.lineDash.join() + ']' : ''; - this.textKey_ = textState.font + textState.scale + (textState.textAlign || '?'); + this.textKey_ = textState.font + textState.scale + (textState.textAlign || '?') + (textState.textBaseline || '?'); this.fillKey_ = fillState ? (typeof fillState.fillStyle == 'string' ? fillState.fillStyle : ('|' + getUid(fillState.fillStyle))) : ''; From 34dc53812274638ceaa731c932ab5fd2f5139e76 Mon Sep 17 00:00:00 2001 From: Matt Walker Date: Fri, 10 Jan 2020 10:48:15 +0000 Subject: [PATCH 057/246] Stop events that originate with a removed target As discussed in https://github.com/openlayers/openlayers/issues/6948#issuecomment-565375694 The check to see if the target is within the "page" uses the viewport as the MapBrowserEventHandler instance adds it's listeners to the viewport. Using Node.contains appears to have a slight performance benefit over manually walking the DOM. --- src/ol/PluggableMap.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/ol/PluggableMap.js b/src/ol/PluggableMap.js index fac2b185e2..f5252ed81b 100644 --- a/src/ol/PluggableMap.js +++ b/src/ol/PluggableMap.js @@ -934,11 +934,13 @@ class PluggableMap extends BaseObject { } let target = /** @type {Node} */ (mapBrowserEvent.originalEvent.target); if (!mapBrowserEvent.dragging) { - while (target && target !== this.viewport_) { - if (target.parentElement === this.overlayContainerStopEvent_) { - return; - } - target = target.parentElement; + if (this.overlayContainerStopEvent_.contains(target) || !this.viewport_.contains(target)) { + // Abort if the event target is a child of the container that doesn't allow + // event propagation or is no longer in the page. It's possible for the target to no longer + // be in the page if it has been removed in an event listener, this might happen in a Control + // that recreates it's content based on user interaction either manually or via a render + // in something like https://reactjs.org/ + return; } } mapBrowserEvent.frameState = this.frameState_; From f3d94b31324266f98f1e42602d2aba49abcb9547 Mon Sep 17 00:00:00 2001 From: Matt Walker Date: Fri, 10 Jan 2020 11:16:54 +0000 Subject: [PATCH 058/246] Fix lint error --- src/ol/PluggableMap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ol/PluggableMap.js b/src/ol/PluggableMap.js index f5252ed81b..1966a43035 100644 --- a/src/ol/PluggableMap.js +++ b/src/ol/PluggableMap.js @@ -932,7 +932,7 @@ class PluggableMap extends BaseObject { // coordinates so interactions cannot be used. return; } - let target = /** @type {Node} */ (mapBrowserEvent.originalEvent.target); + const target = /** @type {Node} */ (mapBrowserEvent.originalEvent.target); if (!mapBrowserEvent.dragging) { if (this.overlayContainerStopEvent_.contains(target) || !this.viewport_.contains(target)) { // Abort if the event target is a child of the container that doesn't allow From 0512c690f864979c09712ca258c0846b8d0fc909 Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Fri, 10 Jan 2020 13:39:29 +0000 Subject: [PATCH 059/246] Fix for reset north when rotation is 360 degrees Animated reset north doesn't work and isn't needed if rotation is 360 degrees (or a multiple of 360) --- src/ol/control/Rotate.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ol/control/Rotate.js b/src/ol/control/Rotate.js index 5ba8a0db34..f4dd50c54d 100644 --- a/src/ol/control/Rotate.js +++ b/src/ol/control/Rotate.js @@ -131,8 +131,9 @@ class Rotate extends Control { // upon it return; } - if (view.getRotation() !== undefined) { - if (this.duration_ > 0) { + const rotation = view.getRotation(); + if (rotation !== undefined) { + if (this.duration_ > 0 && rotation % (2 * Math.PI) !== 0) { view.animate({ rotation: 0, duration: this.duration_, From 3bac2e49d1dabdc06bf09f3dd75ca7eae6d72eba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Kr=C3=B6g?= Date: Sat, 11 Jan 2020 17:40:56 +0100 Subject: [PATCH 060/246] Remove build/apidoc before running jsdoc again --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 64b055a44c..013bdb9d32 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "copy-css": "shx cp src/ol/ol.css build/ol/ol.css", "transpile": "shx rm -rf build/ol && shx mkdir -p build/ol && shx cp -rf src/ol build/ol/src && node tasks/serialize-workers && tsc --project config/tsconfig-build.json", "typecheck": "tsc --pretty", - "apidoc": "jsdoc -R config/jsdoc/api/index.md -c config/jsdoc/api/conf.json -P package.json -d build/apidoc" + "apidoc": "shx rm -rf build/apidoc && jsdoc -R config/jsdoc/api/index.md -c config/jsdoc/api/conf.json -P package.json -d build/apidoc" }, "main": "index.js", "repository": { From 986e6d940c6cca57a6e017691fd5d7f88dbb044c Mon Sep 17 00:00:00 2001 From: "Gubler, Florian" Date: Mon, 13 Jan 2020 08:45:29 +0100 Subject: [PATCH 061/246] fixed flag-name in upgrade notes: "constrainOnlyCenter" instead of "constrainCenterOnly" --- changelog/upgrade-notes.md | 2 +- changelog/v6.0.0.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/changelog/upgrade-notes.md b/changelog/upgrade-notes.md index 865f3858ae..6e40f9164a 100644 --- a/changelog/upgrade-notes.md +++ b/changelog/upgrade-notes.md @@ -77,7 +77,7 @@ Generally, the responsibility of applying center/rotation/resolutions constraint ##### The view `extent` option now applies to the whole viewport -Previously, this options only constrained the view *center*. This behaviour can still be obtained by specifying `constrainCenterOnly` in the view options. +Previously, this options only constrained the view *center*. This behaviour can still be obtained by specifying `constrainOnlyCenter` in the view options. As a side effect, the view `rotate` method is gone and has been replaced with `adjustRotation` which takes a delta as input. diff --git a/changelog/v6.0.0.md b/changelog/v6.0.0.md index b109e2d2d1..02d7aafb5f 100644 --- a/changelog/v6.0.0.md +++ b/changelog/v6.0.0.md @@ -83,7 +83,7 @@ Generally, the responsibility of applying center/rotation/resolutions constraint ##### The view `extent` option now applies to the whole viewport -Previously, this options only constrained the view *center*. This behaviour can still be obtained by specifying `constrainCenterOnly` in the view options. +Previously, this options only constrained the view *center*. This behaviour can still be obtained by specifying `constrainOnlyCenter` in the view options. As a side effect, the view `rotate` method is gone and has been replaced with `adjustRotation` which takes a delta as input. From 95a319a6704936ee46585914528a1954f02f1e91 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:02:43 +0000 Subject: [PATCH 062/246] Bump terser-webpack-plugin from 2.3.1 to 2.3.2 Bumps [terser-webpack-plugin](https://github.com/webpack-contrib/terser-webpack-plugin) from 2.3.1 to 2.3.2. - [Release notes](https://github.com/webpack-contrib/terser-webpack-plugin/releases) - [Changelog](https://github.com/webpack-contrib/terser-webpack-plugin/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/terser-webpack-plugin/compare/v2.3.1...v2.3.2) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5df371f260..4c942f23e8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11955,9 +11955,9 @@ } }, "terser-webpack-plugin": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.1.tgz", - "integrity": "sha512-dNxivOXmDgZqrGxOttBH6B4xaxT4zNC+Xd+2K8jwGDMK5q2CZI+KZMA1AAnSRT+BTRvuzKsDx+fpxzPAmAMVcA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.2.tgz", + "integrity": "sha512-SmvB/6gtEPv+CJ88MH5zDOsZdKXPS/Uzv2//e90+wM1IHFUhsguPKEILgzqrM1nQ4acRXN/SV4Obr55SXC+0oA==", "dev": true, "requires": { "cacache": "^13.0.1", @@ -12123,12 +12123,6 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "serialize-javascript": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", - "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", - "dev": true - }, "ssri": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", @@ -12140,9 +12134,9 @@ } }, "terser": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.3.tgz", - "integrity": "sha512-0ikKraVtRDKGzHrzkCv5rUNDzqlhmhowOBqC0XqUHFpW+vJ45+20/IFBcebwKfiS2Z9fJin6Eo+F1zLZsxi8RA==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.2.tgz", + "integrity": "sha512-6FUjJdY2i3WZAtYBtnV06OOcOfzl+4hSKYE9wgac8rkLRBToPDDrBB2AcHwQD/OKDxbnvhVy2YgOPWO2SsKWqg==", "dev": true, "requires": { "commander": "^2.20.0", From 02931d54b5dc7aa96074ed288548428c42a770fb Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:03:35 +0000 Subject: [PATCH 063/246] Bump @babel/preset-env from 7.7.7 to 7.8.2 Bumps [@babel/preset-env](https://github.com/babel/babel) from 7.7.7 to 7.8.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) - [Commits](https://github.com/babel/babel/compare/v7.7.7...v7.8.2) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 1693 +++++++++++++++++++++++++-------------------- 1 file changed, 961 insertions(+), 732 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5df371f260..7abffd177c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,17 @@ "@babel/highlight": "^7.0.0" } }, + "@babel/compat-data": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.1.tgz", + "integrity": "sha512-Z+6ZOXvyOWYxJ50BwxzdhRnRsGST8Y3jaZgxYig575lTjVSs3KtJnmESwZegg6e2Dn0td1eDhoWlp1wI4BTCPw==", + "dev": true, + "requires": { + "browserslist": "^4.8.2", + "invariant": "^2.2.4", + "semver": "^5.5.0" + } + }, "@babel/core": { "version": "7.7.7", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.7.tgz", @@ -190,18 +201,18 @@ } }, "@babel/helper-annotate-as-pure": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz", - "integrity": "sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.0.tgz", + "integrity": "sha512-WWj+1amBdowU2g18p3/KUc1Y5kWnaNm1paohq2tT4/RreeMNssYkv6ul9wkE2iIqjwLBwNMZGH4pTGlMSUqMMg==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" }, "dependencies": { "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -212,19 +223,19 @@ } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz", - "integrity": "sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.0.tgz", + "integrity": "sha512-KbBloNiBHM3ZyHg1ViDRs4QcnAunwMJ+rLpAEA8l3cWb3Z1xof7ag1iHvX16EwhUfaTG3+YSvTRPv4xHIrseUQ==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-explode-assignable-expression": "^7.8.0", + "@babel/types": "^7.8.0" }, "dependencies": { "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -235,104 +246,115 @@ } }, "@babel/helper-call-delegate": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz", - "integrity": "sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.0.tgz", + "integrity": "sha512-Vi8K1LScr8ZgLicfuCNSE7JWUPG/H/9Bw9zn+3vQyy4vA54FEGTCuUTOXCFwmBM93OD6jHfjrQ6ZnivM5U+bHg==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-hoist-variables": "^7.8.0", + "@babel/traverse": "^7.8.0", + "@babel/types": "^7.8.0" }, "dependencies": { "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", + "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.8.0" } }, "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.0.tgz", + "integrity": "sha512-2Lp2e02CV2C7j/H4n4D9YvsvdhPVVg9GDIamr6Tu4tU35mL3mzOrzl1lZ8ZJtysfZXh+y+AGORc2rPS7yHxBUg==", "dev": true, "requires": { - "@babel/types": "^7.7.4", + "@babel/types": "^7.8.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", + "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-get-function-arity": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", + "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", + "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" + } + }, + "@babel/highlight": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", + "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", "dev": true }, "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", + "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/code-frame": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", + "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", "dev": true, "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/code-frame": "^7.8.0", + "@babel/generator": "^7.8.0", + "@babel/helper-function-name": "^7.8.0", + "@babel/helper-split-export-declaration": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -354,13 +376,26 @@ } } }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz", - "integrity": "sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A==", + "@babel/helper-compilation-targets": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.1.tgz", + "integrity": "sha512-Fsrljg8DHSdnKSzC0YFopX7lseRpVfWMYuC1Dnvf7tw972E2KDjZ4XEaqjO9aJL0sLcG4KNRXxowDxHYIcZ+Cw==", "dev": true, "requires": { - "@babel/helper-regex": "^7.4.4", + "@babel/compat-data": "^7.8.1", + "browserslist": "^4.8.2", + "invariant": "^2.2.4", + "levenary": "^1.1.0", + "semver": "^5.5.0" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.0.tgz", + "integrity": "sha512-vJj2hPbxxLUWJEV86iZiac5curAnC3ZVc+rFmFeWZigUOcuCPpbF+KxoEmxrkmuCGylHFF9t4lkpcDUcxnhQ5g==", + "dev": true, + "requires": { + "@babel/helper-regex": "^7.8.0", "regexpu-core": "^4.6.0" }, "dependencies": { @@ -390,57 +425,77 @@ } }, "@babel/helper-define-map": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz", - "integrity": "sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.0.tgz", + "integrity": "sha512-Go06lUlZ4YImNEmdyAH5iO38yh5mbpOPSwA2PtV1vyczFhTZfX0OtzkiIL2pACo6AOYf89pLh42nhhDrqgzC3A==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/helper-function-name": "^7.8.0", + "@babel/types": "^7.8.0", "lodash": "^4.17.13" }, "dependencies": { - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", + "@babel/code-frame": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", + "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/highlight": "^7.8.0" + } + }, + "@babel/helper-function-name": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", + "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", + "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" + } + }, + "@babel/highlight": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", + "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", "dev": true }, "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", + "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/code-frame": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -451,103 +506,114 @@ } }, "@babel/helper-explode-assignable-expression": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz", - "integrity": "sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.0.tgz", + "integrity": "sha512-w4mRQqKAh4M7BSLwvDMm8jYFroEzpqMCtXDhFHP+kNjMIQWpbC6b0Q/RUQsJNSf54rIx6XMdci1Stf60DWw+og==", "dev": true, "requires": { - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/traverse": "^7.8.0", + "@babel/types": "^7.8.0" }, "dependencies": { "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", + "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.8.0" } }, "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.0.tgz", + "integrity": "sha512-2Lp2e02CV2C7j/H4n4D9YvsvdhPVVg9GDIamr6Tu4tU35mL3mzOrzl1lZ8ZJtysfZXh+y+AGORc2rPS7yHxBUg==", "dev": true, "requires": { - "@babel/types": "^7.7.4", + "@babel/types": "^7.8.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", + "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-get-function-arity": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", + "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", + "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" + } + }, + "@babel/highlight": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", + "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", "dev": true }, "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", + "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/code-frame": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", + "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", "dev": true, "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/code-frame": "^7.8.0", + "@babel/generator": "^7.8.0", + "@babel/helper-function-name": "^7.8.0", + "@babel/helper-split-export-declaration": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -590,18 +656,18 @@ } }, "@babel/helper-hoist-variables": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz", - "integrity": "sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.0.tgz", + "integrity": "sha512-jDl66KvuklTXUADcoXDMur1jDtAZUZZkzLIaQ54+z38ih8C0V0hC56hMaoVoyoxN60MwQmmrHctBwcLqP0c/Lw==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" }, "dependencies": { "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -612,18 +678,18 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz", - "integrity": "sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.0.tgz", + "integrity": "sha512-0m1QabGrdXuoxX/g+KOAGndoHwskC70WweqHRQyCsaO67KOEELYh4ECcGw6ZGKjDKa5Y7SW4Qbhw6ly4Fah/jQ==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" }, "dependencies": { "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -643,58 +709,78 @@ } }, "@babel/helper-module-transforms": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz", - "integrity": "sha512-A7pSxyJf1gN5qXVcidwLWydjftUN878VkalhXX5iQDuGyiGK3sOrrKKHF4/A4fwHtnsotv/NipwAeLzY4KQPvw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.0.tgz", + "integrity": "sha512-fvGhX4FY7YwRdWW/zfddNaKpYl8TaA8hvwONIYhv1/a1ZbgxbTrjsmH6IGWUgUNki7QzbpZ27OEh88sZdft3YA==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.7.4", - "@babel/helper-simple-access": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/helper-module-imports": "^7.8.0", + "@babel/helper-simple-access": "^7.8.0", + "@babel/helper-split-export-declaration": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/types": "^7.8.0", "lodash": "^4.17.13" }, "dependencies": { - "@babel/helper-module-imports": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz", - "integrity": "sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ==", + "@babel/code-frame": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", + "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/highlight": "^7.8.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.0.tgz", + "integrity": "sha512-ylY9J6ZxEcjmJaJ4P6aVs/fZdrZVctCGnxxfYXwCnSMapqd544zT8lWK2qI/vBPjE5gS0o2jILnH+AkpsPauEQ==", + "dev": true, + "requires": { + "@babel/types": "^7.8.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", + "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" + } + }, + "@babel/highlight": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", + "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", "dev": true }, "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", + "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/code-frame": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -705,18 +791,18 @@ } }, "@babel/helper-optimise-call-expression": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz", - "integrity": "sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.0.tgz", + "integrity": "sha512-aiJt1m+K57y0n10fTw+QXcCXzmpkG+o+NoQmAZqlZPstkTE0PZT+Z27QSd/6Gf00nuXJQO4NiJ0/YagSW5kC2A==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" }, "dependencies": { "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -727,123 +813,132 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", + "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==", "dev": true }, "@babel/helper-regex": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", - "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.0.tgz", + "integrity": "sha512-haD8fRsPtyFZkbtxBIaGBBHRtbn0YsyecdYrxNgO0Bl6SlGokJPQX9M2tDuVbeQBYHZVLUPMSwGQn4obHevsMQ==", "dev": true, "requires": { "lodash": "^4.17.13" } }, "@babel/helper-remap-async-to-generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz", - "integrity": "sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.0.tgz", + "integrity": "sha512-+aKyBd4oHAaIZgOLq/uLjkUz7ExZ0ppdNBc8Qr72BmtKNAy3A6EJa/ifjj0//CIzQtUDPs3E6HjKM2cV6bnXsQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.7.4", - "@babel/helper-wrap-function": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-annotate-as-pure": "^7.8.0", + "@babel/helper-wrap-function": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/traverse": "^7.8.0", + "@babel/types": "^7.8.0" }, "dependencies": { - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", + "@babel/code-frame": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", + "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", "dev": true, "requires": { - "@babel/types": "^7.7.4", + "@babel/highlight": "^7.8.0" + } + }, + "@babel/generator": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.0.tgz", + "integrity": "sha512-2Lp2e02CV2C7j/H4n4D9YvsvdhPVVg9GDIamr6Tu4tU35mL3mzOrzl1lZ8ZJtysfZXh+y+AGORc2rPS7yHxBUg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", + "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-get-function-arity": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", + "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", + "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" + } + }, + "@babel/highlight": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", + "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", "dev": true }, "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", + "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/code-frame": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", + "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", "dev": true, "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/code-frame": "^7.8.0", + "@babel/generator": "^7.8.0", + "@babel/helper-function-name": "^7.8.0", + "@babel/helper-split-export-declaration": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - } } }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -866,105 +961,116 @@ } }, "@babel/helper-replace-supers": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz", - "integrity": "sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.0.tgz", + "integrity": "sha512-R2CyorW4tcO3YzdkClLpt6MS84G+tPkOi0MmiCn1bvYVnmDpdl9R15XOi3NQW2mhOAEeBnuQ4g1Bh7pT2sX8fg==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.7.4", - "@babel/helper-optimise-call-expression": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-member-expression-to-functions": "^7.8.0", + "@babel/helper-optimise-call-expression": "^7.8.0", + "@babel/traverse": "^7.8.0", + "@babel/types": "^7.8.0" }, "dependencies": { "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", + "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.8.0" } }, "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.0.tgz", + "integrity": "sha512-2Lp2e02CV2C7j/H4n4D9YvsvdhPVVg9GDIamr6Tu4tU35mL3mzOrzl1lZ8ZJtysfZXh+y+AGORc2rPS7yHxBUg==", "dev": true, "requires": { - "@babel/types": "^7.7.4", + "@babel/types": "^7.8.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", + "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-get-function-arity": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", + "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", + "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" + } + }, + "@babel/highlight": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", + "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", "dev": true }, "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", + "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/code-frame": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", + "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", "dev": true, "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/code-frame": "^7.8.0", + "@babel/generator": "^7.8.0", + "@babel/helper-function-name": "^7.8.0", + "@babel/helper-split-export-declaration": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -987,36 +1093,56 @@ } }, "@babel/helper-simple-access": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz", - "integrity": "sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.0.tgz", + "integrity": "sha512-I+7yKZJnxp7VIC2UFzXfVjLiJuU16rYFF59x27c+boINkO/pLETgZcoesCryg9jmU4jxEa0foFueW+2wjc9Gsw==", "dev": true, "requires": { - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/template": "^7.8.0", + "@babel/types": "^7.8.0" }, "dependencies": { + "@babel/code-frame": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", + "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.0" + } + }, + "@babel/highlight": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", + "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", "dev": true }, "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", + "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/code-frame": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -1036,107 +1162,116 @@ } }, "@babel/helper-wrap-function": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz", - "integrity": "sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.0.tgz", + "integrity": "sha512-2j6idN2jt8Y+8nJ4UPN/6AZa53DAkcETMVmroJQh50qZc59PuQKVjgOIIqmrLoQf6Ia9bs90MHRcID1OW5tfag==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-function-name": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/traverse": "^7.8.0", + "@babel/types": "^7.8.0" }, "dependencies": { - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", + "@babel/code-frame": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", + "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", "dev": true, "requires": { - "@babel/types": "^7.7.4", + "@babel/highlight": "^7.8.0" + } + }, + "@babel/generator": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.0.tgz", + "integrity": "sha512-2Lp2e02CV2C7j/H4n4D9YvsvdhPVVg9GDIamr6Tu4tU35mL3mzOrzl1lZ8ZJtysfZXh+y+AGORc2rPS7yHxBUg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", + "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-get-function-arity": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", + "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", + "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" + } + }, + "@babel/highlight": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", + "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", "dev": true }, "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", + "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/code-frame": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", + "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", "dev": true, "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/code-frame": "^7.8.0", + "@babel/generator": "^7.8.0", + "@babel/helper-function-name": "^7.8.0", + "@babel/helper-split-export-declaration": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - } } }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -1298,153 +1433,191 @@ "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz", - "integrity": "sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.0.tgz", + "integrity": "sha512-8vIQf8JYced7gCeKDsGETNGKE+zdD/JmP1LBlRn+w3UXc1aSpZv2Y330bB/fnOEbUgPbuFv+IEi+gopg+Fu0kQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.7.4", - "@babel/plugin-syntax-async-generators": "^7.7.4" + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-remap-async-to-generator": "^7.8.0", + "@babel/plugin-syntax-async-generators": "^7.8.0" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz", - "integrity": "sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.0.tgz", + "integrity": "sha512-YzMq0AqeTR4Mh2pz3GrCWqhcEV38HgUMMR/56/YR5GPc4Y2p1KJ4Le6j92vMnW8TJqVj+qJz/KDNglpMeww9Yg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.7.4" + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz", - "integrity": "sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.0.tgz", + "integrity": "sha512-pSpuhwn926vtNeUH2FHx1OzIXaUMgklG0MzlFZJVEg37fB904gOxN572NgBae+KDwFyZDpkLMyEkVA011lBJrQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.7.4" + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.0.tgz", + "integrity": "sha512-cQMI+RQdcK2IyMm13NKKFCYfOSBUtFxEeRBOdFCi2Pubv/CpkrCubc/ikdeKMT6Lu+uQ+lNSDEJvDCOQZkUy0g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.7.tgz", - "integrity": "sha512-3qp9I8lelgzNedI3hrhkvhaEYree6+WHnyA/q4Dza9z7iEIs1eyhWyJnetk3jJ69RT0AT4G0UhEGwyGFJ7GUuQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.0.tgz", + "integrity": "sha512-SjJ2ZXCylpWC+5DTES0/pbpNmw/FnjU/3dF068xF0DU9aN+oOKah+3MCSFcb4pnZ9IwmxfOy4KnbGJSQR+hAZA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.7.4" + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz", - "integrity": "sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.0.tgz", + "integrity": "sha512-tHP3eez6TrpPJYttBZ/6uItRbIuXUIDpQ9xwvzKwR+RboWGMJ7WzFC5dDJ3vjLuCx0/DG1tM0MVkmgcBybth9w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.7.4" + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.0.tgz", + "integrity": "sha512-PNBHxPHE91m+LLOdGwlvyGicWfrMgiVwng5WdB3CMjd61+vn3vPw0GbgECIAUCZnyi7Jqs5htUIZRztGuV8/5g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.7.tgz", - "integrity": "sha512-80PbkKyORBUVm1fbTLrHpYdJxMThzM1UqFGh0ALEhO9TYbG86Ah9zQYAB/84axz2vcxefDLdZwWwZNlYARlu9w==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.0.tgz", + "integrity": "sha512-3oK0Qt5w4arb+es3rWBribDbtc0TYJP7dFZ1dXcYul3cXderqfIOoSx9YUC1oD208nJwJO/++fvrgLmkYSbe8A==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-create-regexp-features-plugin": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-async-generators": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz", - "integrity": "sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.0.tgz", + "integrity": "sha512-a8w8k7pK8nYhem07rXdAq03T+DlTX8LFojUptrh9JEx80AgLqGiuoFIyQOGTWif39kFnDOQqbzl1s6KQqrfV+A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-dynamic-import": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz", - "integrity": "sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.0.tgz", + "integrity": "sha512-Mx2RzpCHJaBfmFdA2abXDKRHVJdzJ6R0Wqwb6TxCgM7NRR5wcC4cyiAsRL7Ga+lwG8GG1cKvb+4ENjic8y15jA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-json-strings": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz", - "integrity": "sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.0.tgz", + "integrity": "sha512-LPykaAbH86L5NnDfCRSpNxtEHZk+6GaFzXfWEFU/6R4v69EXQr6GOp7hwH+Uw0QlYVN++s6TukTJ3flFcspahA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.0.tgz", + "integrity": "sha512-Rv2hnBToN6rbA9hO2a4vtwXZLzNa+TWkoSIMMvUezFz5+D9NPeX7SFrArwtFzzbwndmWiqboTr5rNpzAz0MPpA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-object-rest-spread": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz", - "integrity": "sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.0.tgz", + "integrity": "sha512-dt89fDlkfkTrQcy5KavMQPyF2A6tR0kYp8HAnIoQv5hO34iAUffHghP/hMGd7Gf/+uYTmLQO0ar7peX1SUWyIA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz", - "integrity": "sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.0.tgz", + "integrity": "sha512-EIgJVy+u1RvR2gJfX4ReLwAupO/twllUue1wPrRxhu18+eC3bGTEcOSXLQdaE9ya9NG1rE0eQs0GSiloUGFEwg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.0.tgz", + "integrity": "sha512-LV1c+TTAO8Vawe3t+WXBHYWbS7endP8MSlqKPKEZOyWPEJX2akl3jfvFG828/OE7RpyoC3JXfLJDFj/jN7A8hg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz", - "integrity": "sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.0.tgz", + "integrity": "sha512-iXR/Cw32fMfWlD1sK2zD/nXtuLStkalRv+xee6VrX84CFrn2LKwb/EOs/4UaDNUpUsws8YZYKeQjPagacFquug==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz", - "integrity": "sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.0.tgz", + "integrity": "sha512-9KfteDp9d8cF388dxFMOh3Dum41qpOVUPVjQhXGd1kPyQBE05FJgYndiAriML2yhMIbZ2bjgweh2nnvBXDH2MQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz", - "integrity": "sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.0.tgz", + "integrity": "sha512-9dvBvJnEdsDWYMrykoMyLNVRPGoub6SFlARtsYgSQ1riTjnyBjhctihSME4XsSku86F59PDeFpC9PCU+9I154w==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.7.4" + "@babel/helper-module-imports": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-remap-async-to-generator": "^7.8.0" }, "dependencies": { "@babel/helper-module-imports": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz", - "integrity": "sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.0.tgz", + "integrity": "sha512-ylY9J6ZxEcjmJaJ4P6aVs/fZdrZVctCGnxxfYXwCnSMapqd544zT8lWK2qI/vBPjE5gS0o2jILnH+AkpsPauEQ==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" } }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -1455,90 +1628,110 @@ } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz", - "integrity": "sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.0.tgz", + "integrity": "sha512-bim6gUfHq2kPN+aQst33ZEMeglpaUXAo6PWTZvOA8BOnWpNKgZcUzBvpZhh2ofL6YhZgzGoRwVVfzwynDEf47g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz", - "integrity": "sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.0.tgz", + "integrity": "sha512-FKTK4hzg7W950Yu9iqMl12WBixCmusMc5HBt3/ErvpFLnvr3/6mu/EBTZoCEJ0mw/lQUDfU01vTcZY9oEahlMg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-plugin-utils": "^7.8.0", "lodash": "^4.17.13" } }, "@babel/plugin-transform-classes": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz", - "integrity": "sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.0.tgz", + "integrity": "sha512-18RLDwKtGXCLLbf5V03GojebPH7dKYCmIBqQGhgfZDoYsyEzR9kMZ6IxlJP72K5ROC9ADa4KPI6ywuh7NfQOgQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.7.4", - "@babel/helper-define-map": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-optimise-call-expression": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", + "@babel/helper-annotate-as-pure": "^7.8.0", + "@babel/helper-define-map": "^7.8.0", + "@babel/helper-function-name": "^7.8.0", + "@babel/helper-optimise-call-expression": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-replace-supers": "^7.8.0", + "@babel/helper-split-export-declaration": "^7.8.0", "globals": "^11.1.0" }, "dependencies": { - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", + "@babel/code-frame": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", + "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/highlight": "^7.8.0" + } + }, + "@babel/helper-function-name": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", + "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", + "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", + "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" + } + }, + "@babel/highlight": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", + "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", "dev": true }, "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", + "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/code-frame": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -1549,112 +1742,132 @@ } }, "@babel/plugin-transform-computed-properties": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz", - "integrity": "sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.0.tgz", + "integrity": "sha512-FaODHuQRdnWFVwxLPlTN85Lk/aitfvQBHTXahf58FnatCynfhkeNUO8ID+AqAxY4IJsZjeH6OnKDzcGfgKJcVw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-destructuring": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz", - "integrity": "sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.0.tgz", + "integrity": "sha512-D+69HT//cE86aBTLULzSBFLC5A7HcPQzJPiny6P4SLHkDF750MylRKO3iWvdgvb+OSp5dOrOxwXajvaxk1ZfYA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.7.tgz", - "integrity": "sha512-b4in+YlTeE/QmTgrllnb3bHA0HntYvjz8O3Mcbx75UBPJA2xhb5A8nle498VhxSXJHQefjtQxpnLPehDJ4TRlg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.0.tgz", + "integrity": "sha512-pq/XLkDB4MPvTe9ktHJInfWksalXogrIGRZJUG7RiDXhEfdNrlducoMPbACZQuCFtelVgVpD0VyreiY0l38G7g==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-create-regexp-features-plugin": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz", - "integrity": "sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.0.tgz", + "integrity": "sha512-REtYWvpP4TDw4oVeP01vQJcAeewjgk8/i7tPFP11vUjvarUGGyxJLeq79WEnIdnKPQJirZaoDRT4kEWEdSWkDw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz", - "integrity": "sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.0.tgz", + "integrity": "sha512-vaDgF3gPLzVcoe3UZqnra6FA7O797sZc+UCHPd9eQTI34cPtpCA270LzopIXS3Fhc3UmFrijLmre9mHTmUKVgg==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-for-of": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz", - "integrity": "sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.0.tgz", + "integrity": "sha512-9j9g0qViCAo8E5qCBSaQdghymn7A9bRXSfS9jU7oLpYccYFZg9A+1KO8X+HV7fhJYH6mZ+e7MRg4p3sLo+RG6Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz", - "integrity": "sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.0.tgz", + "integrity": "sha512-YL8Ol54UKeIyY1uUGfry+B9ppXAB3aVBB1gG9gxqhg/OBCPpV2QUNswmjvfmyXEdaWv8qODssBgX7on792h44w==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-function-name": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0" }, "dependencies": { - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", + "@babel/code-frame": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", + "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/highlight": "^7.8.0" + } + }, + "@babel/helper-function-name": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", + "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", + "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" + } + }, + "@babel/highlight": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", + "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", "dev": true }, "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", + "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/code-frame": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -1665,119 +1878,120 @@ } }, "@babel/plugin-transform-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz", - "integrity": "sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.0.tgz", + "integrity": "sha512-7UDPKG+uVltsZt98Hw+rMbLg772r8fQC6YJ2fNDckcpAXgIWqQbMCmCpfYo0hBNhdhqocM73auk4P/zziQshQw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz", - "integrity": "sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.0.tgz", + "integrity": "sha512-lJSdaWR56wmrosCiyqKFRVnLrFYoVAk2mtZAyegt7akeJky/gguv0Rukx9GV3XwHGuM1ZPE06cZMjNlcLp8LrQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.5.tgz", - "integrity": "sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.0.tgz", + "integrity": "sha512-mFr1O3TaDL4XozM3AzNPz9AsxzzjTxwn4aOShYP5TlO+4rufvjagV2KKDTPMZTQm1ZA/C/PxJDsDekEnnUGz5A==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.7.5", - "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-module-transforms": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.5.tgz", - "integrity": "sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.0.tgz", + "integrity": "sha512-w2g8tmL7NgBYt6alc8YawMcmPiYqnVvvI0kLB++VOUOssqdJMAkfQOMGV+2M8H5uhJYDaAghAVMUYps3s+jMrw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.7.5", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.7.4", + "@babel/helper-module-transforms": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-simple-access": "^7.8.0", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz", - "integrity": "sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.0.tgz", + "integrity": "sha512-tKF9KLiIsiKyWTVU0yo+NcNAylGn7euggYwXw63/tMxGtDTPsB9Y7Ecqv4EoXEwtoJOJ0Lewf17oaWQtindxIA==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-hoist-variables": "^7.8.0", + "@babel/helper-module-transforms": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz", - "integrity": "sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.0.tgz", + "integrity": "sha512-lAwNfXwmfTy7fl2XOyoVpMXnLkJANgH0vdSYNFcS4RuJPBtHfunGA+Y0L7wsHmfPzyVYt8sUglLjaWtdZMNJNg==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-module-transforms": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz", - "integrity": "sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.0.tgz", + "integrity": "sha512-kq1rxQ1HviCP13SMGZ4WjBBpdogTGK7yn/g/+p+g1AQledgHOWKVeMY1DwKYGlGJ/grDGTOqpJLF1v3Sb7ghKA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4" + "@babel/helper-create-regexp-features-plugin": "^7.8.0" } }, "@babel/plugin-transform-new-target": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz", - "integrity": "sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.0.tgz", + "integrity": "sha512-hH1Afz9Xy/wkcxhoI0vYw48kTBJqYUhMmhp3SLI1p817iByM6ItH4LS8tZatDAIKmAQAXj8d3Ups1BgVJECDrA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-object-super": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz", - "integrity": "sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.0.tgz", + "integrity": "sha512-2DYqQ811nRlFVlni6iqfxBVVGqkBgfvEv/lcvmdNu2CaG+EA7zSP1hqYUsqamR+uCdDbsrV7uY6/0rkXbJo5YQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.7.4" + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-replace-supers": "^7.8.0" } }, "@babel/plugin-transform-parameters": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.7.tgz", - "integrity": "sha512-OhGSrf9ZBrr1fw84oFXj5hgi8Nmg+E2w5L7NhnG0lPvpDtqd7dbyilM2/vR8CKbJ907RyxPh2kj6sBCSSfI9Ew==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.0.tgz", + "integrity": "sha512-9R2yykk7H92rntETO0fq52vJ4OFaTcDA49K9s8bQPyoD4o3/SkWEklukArCsQC6fowEuraPkH/umopr9uO539g==", "dev": true, "requires": { - "@babel/helper-call-delegate": "^7.7.4", - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-call-delegate": "^7.8.0", + "@babel/helper-get-function-arity": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0" }, "dependencies": { "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", + "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" } }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -1788,161 +2002,167 @@ } }, "@babel/plugin-transform-property-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz", - "integrity": "sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.0.tgz", + "integrity": "sha512-vjZaQlojnZIahu5ofEW+hPJfDI5A6r2Sbi5C0RuCaAOFj7viDIR5kOR7ul3Fz5US8V1sVk5Zd2yuPaz7iBeysg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-regenerator": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz", - "integrity": "sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.0.tgz", + "integrity": "sha512-n88GT8PZuOHWxqxCJORW3g1QaYzQhHu5sEslxYeQkHVoewfnfuWN37t7YGaRLaNUdaZUlRPXhDcLGT7zBa/u0g==", "dev": true, "requires": { "regenerator-transform": "^0.14.0" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz", - "integrity": "sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.0.tgz", + "integrity": "sha512-DnshRyDTXZhmAgO2c1QKZI4CfZjoP2t3fSwRsnbCP9P/FSBpf9I7ovnAELswklw5OeY+/D/JIiaGLoUt2II3LA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz", - "integrity": "sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.0.tgz", + "integrity": "sha512-sExhzq63Gl2PMbl7ETpN7Z1A38rLD6GeCT6EEEIIKjTVt9u6dRqJ6nHhaquL7QgR3egj/8fcvq23UvzfPqGAYA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-spread": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz", - "integrity": "sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.0.tgz", + "integrity": "sha512-6Zjl0pv6x10YmFVRI0VhwJ/rE++geVHNJ9xwd+UIt3ON2VMRO7qI2lPsyLnzidR5HYNd/JXj47kdU9Rrn4YcnQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz", - "integrity": "sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.0.tgz", + "integrity": "sha512-uksok0Bqox8YeIRFhr6RRtlBXeGpN1ogiEVjEd7A7rVLPZBXKGbL7kODpE7MQ+avjDLv5EEKtDCeYuWZK7FF7g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-regex": "^7.8.0" } }, "@babel/plugin-transform-template-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz", - "integrity": "sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.0.tgz", + "integrity": "sha512-EF7Q7LEgeMpogHcvmHMNXBWdLWG1tpA1ErXH3i8zTu3+UEKo6aBn+FldPAJ16UbbbOwSCUCiDP6oZxvVRPhwnQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-annotate-as-pure": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz", - "integrity": "sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.0.tgz", + "integrity": "sha512-rEUBEFzsA9mCS2r7EtXFlM/6GqtzgLdC4WVYM9fIgJX+HcSJ8oMmj8LinfKhbo0ipRauvUM2teE2iNDNqDwO1g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz", - "integrity": "sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.0.tgz", + "integrity": "sha512-qDg8wsnE47B/Sj8ZtOndPHrGBxJMssZJ71SzXrItum9n++iVFN7kYuJO+OHhjom7+/or0zzYqvJNzCkUjyNKqg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-create-regexp-features-plugin": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/preset-env": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.7.tgz", - "integrity": "sha512-pCu0hrSSDVI7kCVUOdcMNQEbOPJ52E+LrQ14sN8uL2ALfSqePZQlKrOy+tM4uhEdYlCHi4imr8Zz2cZe9oSdIg==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.2.tgz", + "integrity": "sha512-AF2YUl2bGsLWTtFL68upTTB7nDo05aEcKjHmXJE+aXRvsx5K+9yRsHQP3MjnTrLOWe/eFyUr93dfILROsKC4eg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.7.4", - "@babel/plugin-proposal-dynamic-import": "^7.7.4", - "@babel/plugin-proposal-json-strings": "^7.7.4", - "@babel/plugin-proposal-object-rest-spread": "^7.7.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.7.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.7.7", - "@babel/plugin-syntax-async-generators": "^7.7.4", - "@babel/plugin-syntax-dynamic-import": "^7.7.4", - "@babel/plugin-syntax-json-strings": "^7.7.4", - "@babel/plugin-syntax-object-rest-spread": "^7.7.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.7.4", - "@babel/plugin-syntax-top-level-await": "^7.7.4", - "@babel/plugin-transform-arrow-functions": "^7.7.4", - "@babel/plugin-transform-async-to-generator": "^7.7.4", - "@babel/plugin-transform-block-scoped-functions": "^7.7.4", - "@babel/plugin-transform-block-scoping": "^7.7.4", - "@babel/plugin-transform-classes": "^7.7.4", - "@babel/plugin-transform-computed-properties": "^7.7.4", - "@babel/plugin-transform-destructuring": "^7.7.4", - "@babel/plugin-transform-dotall-regex": "^7.7.7", - "@babel/plugin-transform-duplicate-keys": "^7.7.4", - "@babel/plugin-transform-exponentiation-operator": "^7.7.4", - "@babel/plugin-transform-for-of": "^7.7.4", - "@babel/plugin-transform-function-name": "^7.7.4", - "@babel/plugin-transform-literals": "^7.7.4", - "@babel/plugin-transform-member-expression-literals": "^7.7.4", - "@babel/plugin-transform-modules-amd": "^7.7.5", - "@babel/plugin-transform-modules-commonjs": "^7.7.5", - "@babel/plugin-transform-modules-systemjs": "^7.7.4", - "@babel/plugin-transform-modules-umd": "^7.7.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.7.4", - "@babel/plugin-transform-new-target": "^7.7.4", - "@babel/plugin-transform-object-super": "^7.7.4", - "@babel/plugin-transform-parameters": "^7.7.7", - "@babel/plugin-transform-property-literals": "^7.7.4", - "@babel/plugin-transform-regenerator": "^7.7.5", - "@babel/plugin-transform-reserved-words": "^7.7.4", - "@babel/plugin-transform-shorthand-properties": "^7.7.4", - "@babel/plugin-transform-spread": "^7.7.4", - "@babel/plugin-transform-sticky-regex": "^7.7.4", - "@babel/plugin-transform-template-literals": "^7.7.4", - "@babel/plugin-transform-typeof-symbol": "^7.7.4", - "@babel/plugin-transform-unicode-regex": "^7.7.4", - "@babel/types": "^7.7.4", - "browserslist": "^4.6.0", - "core-js-compat": "^3.6.0", + "@babel/compat-data": "^7.8.0", + "@babel/helper-compilation-targets": "^7.8.0", + "@babel/helper-module-imports": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.0", + "@babel/plugin-proposal-async-generator-functions": "^7.8.0", + "@babel/plugin-proposal-dynamic-import": "^7.8.0", + "@babel/plugin-proposal-json-strings": "^7.8.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-proposal-object-rest-spread": "^7.8.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.8.0", + "@babel/plugin-proposal-optional-chaining": "^7.8.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.8.0", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.8.0", + "@babel/plugin-transform-arrow-functions": "^7.8.0", + "@babel/plugin-transform-async-to-generator": "^7.8.0", + "@babel/plugin-transform-block-scoped-functions": "^7.8.0", + "@babel/plugin-transform-block-scoping": "^7.8.0", + "@babel/plugin-transform-classes": "^7.8.0", + "@babel/plugin-transform-computed-properties": "^7.8.0", + "@babel/plugin-transform-destructuring": "^7.8.0", + "@babel/plugin-transform-dotall-regex": "^7.8.0", + "@babel/plugin-transform-duplicate-keys": "^7.8.0", + "@babel/plugin-transform-exponentiation-operator": "^7.8.0", + "@babel/plugin-transform-for-of": "^7.8.0", + "@babel/plugin-transform-function-name": "^7.8.0", + "@babel/plugin-transform-literals": "^7.8.0", + "@babel/plugin-transform-member-expression-literals": "^7.8.0", + "@babel/plugin-transform-modules-amd": "^7.8.0", + "@babel/plugin-transform-modules-commonjs": "^7.8.0", + "@babel/plugin-transform-modules-systemjs": "^7.8.0", + "@babel/plugin-transform-modules-umd": "^7.8.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.0", + "@babel/plugin-transform-new-target": "^7.8.0", + "@babel/plugin-transform-object-super": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.8.0", + "@babel/plugin-transform-property-literals": "^7.8.0", + "@babel/plugin-transform-regenerator": "^7.8.0", + "@babel/plugin-transform-reserved-words": "^7.8.0", + "@babel/plugin-transform-shorthand-properties": "^7.8.0", + "@babel/plugin-transform-spread": "^7.8.0", + "@babel/plugin-transform-sticky-regex": "^7.8.0", + "@babel/plugin-transform-template-literals": "^7.8.0", + "@babel/plugin-transform-typeof-symbol": "^7.8.0", + "@babel/plugin-transform-unicode-regex": "^7.8.0", + "@babel/types": "^7.8.0", + "browserslist": "^4.8.2", + "core-js-compat": "^3.6.2", "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", + "levenary": "^1.1.0", "semver": "^5.5.0" }, "dependencies": { "@babel/helper-module-imports": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz", - "integrity": "sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.0.tgz", + "integrity": "sha512-ylY9J6ZxEcjmJaJ4P6aVs/fZdrZVctCGnxxfYXwCnSMapqd544zT8lWK2qI/vBPjE5gS0o2jILnH+AkpsPauEQ==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" } }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -3250,14 +3470,14 @@ } }, "browserslist": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.2.tgz", - "integrity": "sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", + "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001015", + "caniuse-lite": "^1.0.30001017", "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.42" + "node-releases": "^1.1.44" } }, "buble": { @@ -3442,9 +3662,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001016", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001016.tgz", - "integrity": "sha512-yYQ2QfotceRiH4U+h1Us86WJXtVHDmy3nEKIdYPsZCYnOV5/tMgGbmoIlrMzmh2VXlproqYtVaKeGDBkMZifFA==", + "version": "1.0.30001020", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001020.tgz", + "integrity": "sha512-yWIvwA68wRHKanAVS1GjN8vajAv7MBFshullKCeq/eKpK7pJBVDgFFEqvgWTkcP2+wIDeQGYFRXECjKZnLkUjA==", "dev": true }, "caseless": { @@ -3953,12 +4173,12 @@ "dev": true }, "core-js-compat": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.0.tgz", - "integrity": "sha512-Z3eCNjGgoYluH89Jt4wVkfYsc/VdLrA2/woX5lm0isO/pCT+P+Y+o65bOuEnjDJLthdwTBxbCVzptTXtc18fJg==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.3.tgz", + "integrity": "sha512-Y3YNGU3bU1yrnzVodop23ghArbKv4IqkZg9MMOWv/h7KT6NRk1/SzHhWDDlubg2+tlcUzAqgj1/GyeJ9fUKMeg==", "dev": true, "requires": { - "browserslist": "^4.8.2", + "browserslist": "^4.8.3", "semver": "7.0.0" }, "dependencies": { @@ -4420,9 +4640,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.322", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz", - "integrity": "sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA==", + "version": "1.3.332", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.332.tgz", + "integrity": "sha512-AP2HkLhfSOIxP7gDjlyZ4ywGWIcxRMZoU9+JriuVkQe2pSLDdWBsE6+eI6BQOqun1dohLrUTOPHsQLLhhFA7Eg==", "dev": true }, "elliptic": { @@ -7725,12 +7945,6 @@ "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==", "dev": true }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "dev": true - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -8228,6 +8442,21 @@ "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", "dev": true }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levenary": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.0.tgz", + "integrity": "sha512-VHcwhO0UTpUW7rLPN2/OiWJdgA1e9BqEDALhrgCe/F+uUJnep6CoUsTzMeP8Rh0NGr9uKquXxqe7lwLZo509nQ==", + "dev": true, + "requires": { + "leven": "^3.1.0" + } + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -9234,9 +9463,9 @@ } }, "node-releases": { - "version": "1.1.43", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.43.tgz", - "integrity": "sha512-Rmfnj52WNhvr83MvuAWHEqXVoZXCcDQssSOffU4n4XOL9sPrP61mSZ88g25NqmABDvH7PiAlFCzoSCSdzA293w==", + "version": "1.1.45", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.45.tgz", + "integrity": "sha512-cXvGSfhITKI8qsV116u2FTzH5EWZJfgG7d4cpqwF8I8+1tWpD6AsvvGRKq2onR0DNj1jfqsjkXZsm14JMS7Cyg==", "dev": true, "requires": { "semver": "^6.3.0" From 8935cb509a7d9db1d081698eb2f344a2e67aaad4 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:05:32 +0000 Subject: [PATCH 064/246] Bump karma-firefox-launcher from 1.2.0 to 1.3.0 Bumps [karma-firefox-launcher](https://github.com/karma-runner/karma-firefox-launcher) from 1.2.0 to 1.3.0. - [Release notes](https://github.com/karma-runner/karma-firefox-launcher/releases) - [Changelog](https://github.com/karma-runner/karma-firefox-launcher/blob/master/CHANGELOG.md) - [Commits](https://github.com/karma-runner/karma-firefox-launcher/compare/v1.2.0...v1.3.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5df371f260..99527bb1ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8105,9 +8105,9 @@ } }, "karma-firefox-launcher": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.2.0.tgz", - "integrity": "sha512-j9Zp8M8+VLq1nI/5xZGfzeaEPtGQ/vk3G+Y8vpmFWLvKLNZ2TDjD6cu2dUu7lDbu1HXNgatsAX4jgCZTkR9qhQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.3.0.tgz", + "integrity": "sha512-Fi7xPhwrRgr+94BnHX0F5dCl1miIW4RHnzjIGxF8GaIEp7rNqX7LSi7ok63VXs3PS/5MQaQMhGxw+bvD+pibBQ==", "dev": true, "requires": { "is-wsl": "^2.1.0" From bacc159fc6a372902889c906275ca2e27acd83a8 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:07:01 +0000 Subject: [PATCH 065/246] Bump @babel/core from 7.7.7 to 7.8.0 Bumps [@babel/core](https://github.com/babel/babel) from 7.7.7 to 7.8.0. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) - [Commits](https://github.com/babel/babel/compare/v7.7.7...v7.8.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 247 +++++++++++++++++++++++++--------------------- 1 file changed, 137 insertions(+), 110 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5df371f260..7c1fc47cea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,20 +14,21 @@ } }, "@babel/core": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.7.tgz", - "integrity": "sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.0.tgz", + "integrity": "sha512-3rqPi/bv/Xfu2YzHvBz4XqMI1fKVwnhntPA1/fjoECrSjrhbOCxlTrbVu5gUtr8zkxW+RpkDOa/HCW93gzS2Dw==", "dev": true, "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.7", - "@babel/helpers": "^7.7.4", - "@babel/parser": "^7.7.7", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/code-frame": "^7.8.0", + "@babel/generator": "^7.8.0", + "@babel/helpers": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/traverse": "^7.8.0", + "@babel/types": "^7.8.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", "json5": "^2.1.0", "lodash": "^4.17.13", "resolve": "^1.3.2", @@ -36,93 +37,104 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", + "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.8.0" } }, "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.0.tgz", + "integrity": "sha512-2Lp2e02CV2C7j/H4n4D9YvsvdhPVVg9GDIamr6Tu4tU35mL3mzOrzl1lZ8ZJtysfZXh+y+AGORc2rPS7yHxBUg==", "dev": true, "requires": { - "@babel/types": "^7.7.4", + "@babel/types": "^7.8.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", + "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-get-function-arity": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", + "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", + "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" + } + }, + "@babel/highlight": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", + "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", "dev": true }, "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", + "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/code-frame": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", + "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", "dev": true, "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/code-frame": "^7.8.0", + "@babel/generator": "^7.8.0", + "@babel/helper-function-name": "^7.8.0", + "@babel/helper-split-export-declaration": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -1159,106 +1171,115 @@ } }, "@babel/helpers": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.4.tgz", - "integrity": "sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.0.tgz", + "integrity": "sha512-srWKpjAFbiut5JoCReZJ098hLqoZ9HufOnKZPggc7j74XaPuQ+9b3RYPV1M/HfjL63lCNd8uI1O487qIWxAFNA==", "dev": true, "requires": { - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/template": "^7.8.0", + "@babel/traverse": "^7.8.0", + "@babel/types": "^7.8.0" }, "dependencies": { - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", + "@babel/code-frame": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", + "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", "dev": true, "requires": { - "@babel/types": "^7.7.4", + "@babel/highlight": "^7.8.0" + } + }, + "@babel/generator": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.0.tgz", + "integrity": "sha512-2Lp2e02CV2C7j/H4n4D9YvsvdhPVVg9GDIamr6Tu4tU35mL3mzOrzl1lZ8ZJtysfZXh+y+AGORc2rPS7yHxBUg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", + "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-get-function-arity": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", + "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", + "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", "dev": true, "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.0" + } + }, + "@babel/highlight": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", + "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", "dev": true }, "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", + "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/code-frame": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", + "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", "dev": true, "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/code-frame": "^7.8.0", + "@babel/generator": "^7.8.0", + "@babel/helper-function-name": "^7.8.0", + "@babel/helper-split-export-declaration": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - } } }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -6457,6 +6478,12 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "dev": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", From e05641b6b8de71554aa4a17ebae313c901734f44 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:08:00 +0000 Subject: [PATCH 066/246] Bump globby from 10.0.1 to 11.0.0 Bumps [globby](https://github.com/sindresorhus/globby) from 10.0.1 to 11.0.0. - [Release notes](https://github.com/sindresorhus/globby/releases) - [Commits](https://github.com/sindresorhus/globby/compare/v10.0.1...v11.0.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 69 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 34 insertions(+), 37 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5df371f260..edcf4aef2f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2027,28 +2027,28 @@ "dev": true }, "@nodelib/fs.scandir": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.1.tgz", - "integrity": "sha512-NT/skIZjgotDSiXs0WqYhgcuBKhUMgfekCmCGtkUAiLqZdOnrdjmZr9wRl3ll64J9NF79uZ4fk16Dx0yMc/Xbg==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.1", + "@nodelib/fs.stat": "2.0.3", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.1.tgz", - "integrity": "sha512-+RqhBlLn6YRBGOIoVYthsG0J9dfpO79eJyN7BYBkZJtfqrBwf2KK+rD/M/yjZR6WBmIhAgOV7S60eCgaSWtbFw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.2.tgz", - "integrity": "sha512-J/DR3+W12uCzAJkw7niXDcqcKBg6+5G5Q/ZpThpGNzAUz70eOR6RV4XnnSN01qHZiVl0eavoxJsBypQoKsV2QQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.1", + "@nodelib/fs.scandir": "2.1.3", "fastq": "^1.6.0" } }, @@ -5425,16 +5425,15 @@ "dev": true }, "fast-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.0.4.tgz", - "integrity": "sha512-wkIbV6qg37xTJwqSsdnIphL1e+LaGz4AIQqr00mIubMaEhv1/HEmJ0uuCGZRNRUkZZmOB5mJKO0ZUTVq+SxMQg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.1.tgz", + "integrity": "sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g==", "dev": true, "requires": { - "@nodelib/fs.stat": "^2.0.1", - "@nodelib/fs.walk": "^1.2.1", - "glob-parent": "^5.0.0", - "is-glob": "^4.0.1", - "merge2": "^1.2.3", + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", "micromatch": "^4.0.2" }, "dependencies": { @@ -5457,9 +5456,9 @@ } }, "glob-parent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", - "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -6570,18 +6569,16 @@ "dev": true }, "globby": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", - "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.0.tgz", + "integrity": "sha512-iuehFnR3xu5wBBtm4xi0dMe92Ob87ufyu/dHwpDYfbcpYpIbrO5OnS8M1vWvrBhSGEJ3/Ecj7gnX76P8YxpPEg==", "dev": true, "requires": { - "@types/glob": "^7.1.1", "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", "slash": "^3.0.0" }, "dependencies": { @@ -6601,9 +6598,9 @@ } }, "ignore": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.2.tgz", - "integrity": "sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", + "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", "dev": true }, "path-type": { @@ -8633,9 +8630,9 @@ "dev": true }, "merge2": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.4.tgz", - "integrity": "sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", + "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", "dev": true }, "methods": { diff --git a/package.json b/package.json index 013bdb9d32..e867014556 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "front-matter": "^3.0.2", "fs-extra": "^8.0.0", "glob": "^7.1.5", - "globby": "^10.0.0", + "globby": "^11.0.0", "handlebars": "4.5.3", "html-to-image": "^0.1.0", "istanbul": "0.4.5", From 87a953c4ecbb87b27111e3de9900388c36b84aec Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:09:06 +0000 Subject: [PATCH 067/246] Bump rollup-plugin-terser from 5.1.3 to 5.2.0 Bumps [rollup-plugin-terser](https://github.com/TrySound/rollup-plugin-terser) from 5.1.3 to 5.2.0. - [Release notes](https://github.com/TrySound/rollup-plugin-terser/releases) - [Commits](https://github.com/TrySound/rollup-plugin-terser/compare/v5.1.3...v5.2.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 58 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5df371f260..ac5b5cad2a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10717,23 +10717,57 @@ } }, "rollup-plugin-terser": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.1.3.tgz", - "integrity": "sha512-FuFuXE5QUJ7snyxHLPp/0LFXJhdomKlIx/aK7Tg88Yubsx/UU/lmInoJafXJ4jwVVNcORJ1wRUC5T9cy5yk0wA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.2.0.tgz", + "integrity": "sha512-jQI+nYhtDBc9HFRBz8iGttQg7li9klmzR62RG2W2nN6hJ/FI2K2ItYQ7kJ7/zn+vs+BP1AEccmVRjRN989I+Nw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "jest-worker": "^24.6.0", - "rollup-pluginutils": "^2.8.1", + "@babel/code-frame": "^7.5.5", + "jest-worker": "^24.9.0", + "rollup-pluginutils": "^2.8.2", "serialize-javascript": "^2.1.2", - "terser": "^4.1.0" + "terser": "^4.6.2" }, "dependencies": { - "serialize-javascript": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", - "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", - "dev": true + "@babel/code-frame": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", + "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.0" + } + }, + "@babel/highlight": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", + "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + }, + "terser": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.2.tgz", + "integrity": "sha512-6FUjJdY2i3WZAtYBtnV06OOcOfzl+4hSKYE9wgac8rkLRBToPDDrBB2AcHwQD/OKDxbnvhVy2YgOPWO2SsKWqg==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } } } }, From e9ab684ef3d1493d78f2df36f4a635c7e7bea3aa Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:09:49 +0000 Subject: [PATCH 068/246] Bump rollup from 1.28.0 to 1.29.0 Bumps [rollup](https://github.com/rollup/rollup) from 1.28.0 to 1.29.0. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v1.28.0...v1.29.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5df371f260..e06104b55a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10640,9 +10640,9 @@ } }, "rollup": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.28.0.tgz", - "integrity": "sha512-v2J/DmQi9+Nf6frGqzwZRvbiuTTrqH0yzoUF4Eybf8sONT4UpLZzJYnYzW96Zm9X1+4SJmijfnFBWCzHDAXYnQ==", + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.29.0.tgz", + "integrity": "sha512-V63Iz0dSdI5qPPN5HmCN6OBRzBFhMqNWcvwgq863JtSCTU6Vdvqq6S2fYle/dSCyoPrBkIP3EIr1RVs3HTRqqg==", "dev": true, "requires": { "@types/estree": "*", From ea1070193ee1acab740c7905b30c654abf90187e Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:10:42 +0000 Subject: [PATCH 069/246] Bump sinon from 8.0.2 to 8.0.4 Bumps [sinon](https://github.com/sinonjs/sinon) from 8.0.2 to 8.0.4. - [Release notes](https://github.com/sinonjs/sinon/releases) - [Changelog](https://github.com/sinonjs/sinon/blob/master/CHANGELOG.md) - [Commits](https://github.com/sinonjs/sinon/compare/v8.0.2...v8.0.4) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5df371f260..724494863d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2091,9 +2091,9 @@ } }, "@sinonjs/samsam": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-4.2.1.tgz", - "integrity": "sha512-7+5S4C4wpug5pzHS+z/63+XUwsH7dtyYELDafoT1QnfruFh7eFjlDWwZXltUB0GLk6y5eMeAt34Bjx8wJ4KfSA==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-4.2.2.tgz", + "integrity": "sha512-z9o4LZUzSD9Hl22zV38aXNykgFeVj8acqfFabCY6FY83n/6s/XwNJyYYldz6/9lBJanpno9h+oL6HTISkviweA==", "dev": true, "requires": { "@sinonjs/commons": "^1.6.0", @@ -11122,9 +11122,9 @@ "dev": true }, "sinon": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-8.0.2.tgz", - "integrity": "sha512-8W1S7BnCyvk7SK+Xi15B1QAVLuS81G/NGmWefPb31+ly6xI3fXaug/g5oUdfc8+7ruC4Ay51AxuLlYm8diq6kA==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-8.0.4.tgz", + "integrity": "sha512-cFsmgmvsgFb87e7SV7IcekogITlHX2KmlplyI9Pda0FH1Z8Ms/kWbpLs25Idp0m6ZJ3HEEjhaYYXbcTtWWUn4w==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0", @@ -11137,9 +11137,9 @@ }, "dependencies": { "diff": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", - "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, "has-flag": { From f79cc24ff3b2df6f746dbf4836d9ce07dd2fe397 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:33:06 +0000 Subject: [PATCH 070/246] Bump handlebars from 4.5.3 to 4.7.1 Bumps [handlebars](https://github.com/wycats/handlebars.js) from 4.5.3 to 4.7.1. - [Release notes](https://github.com/wycats/handlebars.js/releases) - [Changelog](https://github.com/wycats/handlebars.js/blob/v4.7.1/release-notes.md) - [Commits](https://github.com/wycats/handlebars.js/compare/v4.5.3...v4.7.1) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 41c5c0f658..e36ec160a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6636,9 +6636,9 @@ "dev": true }, "handlebars": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz", - "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.1.tgz", + "integrity": "sha512-2dd6soo60cwKNJ90VewNLIzdZPR/E2YhszOTgHpN9V0YuwZk7x33/iZoIBnASwDFVHMY7iJ6NPL8d9f/DWYCTA==", "dev": true, "requires": { "neo-async": "^2.6.0", @@ -12402,9 +12402,9 @@ "dev": true }, "uglify-js": { - "version": "3.6.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.9.tgz", - "integrity": "sha512-pcnnhaoG6RtrvHJ1dFncAe8Od6Nuy30oaJ82ts6//sGSXOP5UjBMEthiProjXmMNHOfd93sqlkztifFMcb+4yw==", + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.5.tgz", + "integrity": "sha512-GFZ3EXRptKGvb/C1Sq6nO1iI7AGcjyqmIyOw0DrD0675e+NNbGO72xmMM2iEBdFbxaTLo70NbjM/Wy54uZIlsg==", "dev": true, "optional": true, "requires": { diff --git a/package.json b/package.json index e867014556..20f5b239ce 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "fs-extra": "^8.0.0", "glob": "^7.1.5", "globby": "^11.0.0", - "handlebars": "4.5.3", + "handlebars": "4.7.1", "html-to-image": "^0.1.0", "istanbul": "0.4.5", "istanbul-instrumenter-loader": "^3.0.1", From 6d5602b569de86ef3cf891f7e5413ba9a5114084 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2020 08:33:08 +0000 Subject: [PATCH 071/246] Bump front-matter from 3.0.2 to 3.1.0 Bumps [front-matter](https://github.com/jxson/front-matter) from 3.0.2 to 3.1.0. - [Release notes](https://github.com/jxson/front-matter/releases) - [Commits](https://github.com/jxson/front-matter/compare/v3.0.2...v3.1.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 41c5c0f658..2547be21f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5776,9 +5776,9 @@ } }, "front-matter": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-3.0.2.tgz", - "integrity": "sha512-iBGZaWyzqgsrPGsqrXZP6N4hp5FzSKDi18nfAoYpgz3qK5sAwFv/ojmn3VS60SOgLvq6CtojNqy0y6ZNz05IzQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-3.1.0.tgz", + "integrity": "sha512-RFEK8N6waWTdwBZOPNEtvwMjZ/hUfpwXkYUYkmmOhQGdhSulXhWrFwiUhdhkduLDiIwbROl/faF1X/PC/GGRMw==", "dev": true, "requires": { "js-yaml": "^3.13.1" From 5ce532e3e44cd329505c42c92f7905ed24d95b39 Mon Sep 17 00:00:00 2001 From: Matt Walker Date: Mon, 13 Jan 2020 10:46:40 +0000 Subject: [PATCH 072/246] Mock PointerEvent in tests to include target The `target` Event property is readonly as it is set internally when an event is dispatched. This change uses a plain object with the essential properties that a PointerEvent has which is sufficent for map event handling --- test/spec/ol/interaction/draw.test.js | 3 ++- test/spec/ol/interaction/extent.test.js | 3 ++- test/spec/ol/interaction/modify.test.js | 1 + test/spec/ol/interaction/select.test.js | 6 ++++-- test/spec/ol/interaction/translate.test.js | 16 +++++++++------- 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/test/spec/ol/interaction/draw.test.js b/test/spec/ol/interaction/draw.test.js index 7a12b66887..835d765b55 100644 --- a/test/spec/ol/interaction/draw.test.js +++ b/test/spec/ol/interaction/draw.test.js @@ -73,8 +73,9 @@ describe('ol.interaction.Draw', function() { // calculated in case body has top < 0 (test runner with small window) const position = viewport.getBoundingClientRect(); const shiftKey = opt_shiftKey !== undefined ? opt_shiftKey : false; - const event = new Event(); + const event = {}; event.type = type; + event.target = viewport.firstChild; event.clientX = position.left + x + width / 2; event.clientY = position.top + y + height / 2; event.shiftKey = shiftKey; diff --git a/test/spec/ol/interaction/extent.test.js b/test/spec/ol/interaction/extent.test.js index 56fd15765e..7bd5f9e86c 100644 --- a/test/spec/ol/interaction/extent.test.js +++ b/test/spec/ol/interaction/extent.test.js @@ -50,8 +50,9 @@ describe('ol.interaction.Extent', function() { // calculated in case body has top < 0 (test runner with small window) const position = viewport.getBoundingClientRect(); const shiftKey = opt_shiftKey !== undefined ? opt_shiftKey : false; - const pointerEvent = new Event(); + const pointerEvent = {}; pointerEvent.type = type; + pointerEvent.target = viewport.firstChild; pointerEvent.button = button; pointerEvent.clientX = position.left + x + width / 2; pointerEvent.clientY = position.top - y + height / 2; diff --git a/test/spec/ol/interaction/modify.test.js b/test/spec/ol/interaction/modify.test.js index 7deae8d5d7..18b2c28063 100644 --- a/test/spec/ol/interaction/modify.test.js +++ b/test/spec/ol/interaction/modify.test.js @@ -84,6 +84,7 @@ describe('ol.interaction.Modify', function() { const position = viewport.getBoundingClientRect(); const pointerEvent = new Event(); pointerEvent.type = type; + pointerEvent.target = viewport.firstChild; pointerEvent.clientX = position.left + x + width / 2; pointerEvent.clientY = position.top + y + height / 2; pointerEvent.shiftKey = modifiers.shift || false; diff --git a/test/spec/ol/interaction/select.test.js b/test/spec/ol/interaction/select.test.js index 50f7bb2c70..e64eb2dc28 100644 --- a/test/spec/ol/interaction/select.test.js +++ b/test/spec/ol/interaction/select.test.js @@ -91,11 +91,13 @@ describe('ol.interaction.Select', function() { // calculated in case body has top < 0 (test runner with small window) const position = viewport.getBoundingClientRect(); const shiftKey = opt_shiftKey !== undefined ? opt_shiftKey : false; - const event = new PointerEvent(type, { + const event = { + type: type, + target: viewport.firstChild, clientX: position.left + x + width / 2, clientY: position.top + y + height / 2, shiftKey: shiftKey - }); + }; map.handleMapBrowserEvent(new MapBrowserPointerEvent(type, map, event)); } diff --git a/test/spec/ol/interaction/translate.test.js b/test/spec/ol/interaction/translate.test.js index a3df2ccebe..79efde34bb 100644 --- a/test/spec/ol/interaction/translate.test.js +++ b/test/spec/ol/interaction/translate.test.js @@ -65,13 +65,15 @@ describe('ol.interaction.Translate', function() { // calculated in case body has top < 0 (test runner with small window) const position = viewport.getBoundingClientRect(); const shiftKey = opt_shiftKey !== undefined ? opt_shiftKey : false; - const event = new MapBrowserPointerEvent(type, map, - new PointerEvent(type, { - clientX: position.left + x + width / 2, - clientY: position.top + y + height / 2, - shiftKey: shiftKey, - preventDefault: function() {} - })); + const event = new MapBrowserPointerEvent(type, map, { + type: type, + target: viewport.firstChild, + pointerId: 0, + clientX: position.left + x + width / 2, + clientY: position.top + y + height / 2, + shiftKey: shiftKey, + preventDefault: function() {} + }); map.handleMapBrowserEvent(event); } From 4e599a370ba95f31d8b27c12bed551ce5b68afaa Mon Sep 17 00:00:00 2001 From: Matt Walker Date: Mon, 13 Jan 2020 10:56:41 +0000 Subject: [PATCH 073/246] Use document.body to check if an event target is within the page Some events will originate outside the map viewport such as keyboard events which originate with the element specified by keyboardEventTarget which could be document.body --- src/ol/PluggableMap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ol/PluggableMap.js b/src/ol/PluggableMap.js index 1966a43035..75c1f4a7be 100644 --- a/src/ol/PluggableMap.js +++ b/src/ol/PluggableMap.js @@ -934,7 +934,7 @@ class PluggableMap extends BaseObject { } const target = /** @type {Node} */ (mapBrowserEvent.originalEvent.target); if (!mapBrowserEvent.dragging) { - if (this.overlayContainerStopEvent_.contains(target) || !this.viewport_.contains(target)) { + if (this.overlayContainerStopEvent_.contains(target) || !document.body.contains(target)) { // Abort if the event target is a child of the container that doesn't allow // event propagation or is no longer in the page. It's possible for the target to no longer // be in the page if it has been removed in an event listener, this might happen in a Control From eeec2b9e7db4a586234607877f340116906df105 Mon Sep 17 00:00:00 2001 From: Matt Walker Date: Mon, 13 Jan 2020 11:32:40 +0000 Subject: [PATCH 074/246] Lint: remove unused imports --- test/spec/ol/interaction/draw.test.js | 1 - test/spec/ol/interaction/extent.test.js | 1 - 2 files changed, 2 deletions(-) diff --git a/test/spec/ol/interaction/draw.test.js b/test/spec/ol/interaction/draw.test.js index 835d765b55..fc571891d8 100644 --- a/test/spec/ol/interaction/draw.test.js +++ b/test/spec/ol/interaction/draw.test.js @@ -15,7 +15,6 @@ import Polygon from '../../../../src/ol/geom/Polygon.js'; import Draw, {createRegularPolygon, createBox} from '../../../../src/ol/interaction/Draw.js'; import Interaction from '../../../../src/ol/interaction/Interaction.js'; import VectorLayer from '../../../../src/ol/layer/Vector.js'; -import Event from '../../../../src/ol/events/Event.js'; import VectorSource from '../../../../src/ol/source/Vector.js'; import {clearUserProjection, setUserProjection, transform} from '../../../../src/ol/proj.js'; import {register} from '../../../../src/ol/proj/proj4.js'; diff --git a/test/spec/ol/interaction/extent.test.js b/test/spec/ol/interaction/extent.test.js index 7bd5f9e86c..63fc0e59c9 100644 --- a/test/spec/ol/interaction/extent.test.js +++ b/test/spec/ol/interaction/extent.test.js @@ -2,7 +2,6 @@ import Map from '../../../../src/ol/Map.js'; import MapBrowserPointerEvent from '../../../../src/ol/MapBrowserPointerEvent.js'; import View from '../../../../src/ol/View.js'; import ExtentInteraction from '../../../../src/ol/interaction/Extent.js'; -import Event from '../../../../src/ol/events/Event.js'; describe('ol.interaction.Extent', function() { let map, interaction; From fd935bae53151658f3c718263b64d17a47968906 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Mon, 13 Jan 2020 21:52:55 +0100 Subject: [PATCH 075/246] Remove label cache, render text directly to target canvas --- src/ol/render/canvas.js | 65 ++++--- src/ol/render/canvas/Executor.js | 178 ++++++++++-------- src/ol/render/canvas/LabelCache.js | 20 -- src/ol/render/canvas/TextBuilder.js | 5 +- src/ol/renderer/Composite.js | 8 +- src/ol/structs/LRUCache.js | 7 +- test/spec/ol/render/canvas/index.test.js | 44 ++--- test/spec/ol/render/canvas/labelcache.test.js | 13 -- .../spec/ol/render/canvas/textbuilder.test.js | 8 +- .../ol/renderer/canvas/vectorlayer.test.js | 7 +- .../renderer/canvas/vectortilelayer.test.js | 7 +- 11 files changed, 175 insertions(+), 187 deletions(-) delete mode 100644 src/ol/render/canvas/LabelCache.js delete mode 100644 test/spec/ol/render/canvas/labelcache.test.js diff --git a/src/ol/render/canvas.js b/src/ol/render/canvas.js index d345568a64..d4c7498451 100644 --- a/src/ol/render/canvas.js +++ b/src/ol/render/canvas.js @@ -5,7 +5,9 @@ import {getFontParameters} from '../css.js'; import {createCanvasContext2D} from '../dom.js'; import {clear} from '../obj.js'; import {create as createTransform} from '../transform.js'; -import LabelCache from './canvas/LabelCache.js'; +import {executeLabelInstructions} from './canvas/Executor.js'; +import BaseObject from '../Object.js'; +import EventTarget from '../events/Target.js'; /** @@ -164,21 +166,23 @@ export const defaultPadding = [0, 0, 0, 0]; */ export const defaultLineWidth = 1; +/** + * @type {BaseObject} + */ +export const checkedFonts = new BaseObject(); /** * The label cache for text rendering. To change the default cache size of 2048 * entries, use {@link module:ol/structs/LRUCache#setSize}. - * @type {LabelCache} + * Deprecated - there is no label cache any more. + * @type {?} * @api + * @deprecated */ -export const labelCache = new LabelCache(); - - -/** - * @type {!Object} - */ -export const checkedFonts = {}; - +export const labelCache = new EventTarget(); +labelCache.setSize = function() { + console.warn('labelCache is deprecated.'); //eslint-disable-line +}; /** * @type {CanvasRenderingContext2D} @@ -200,9 +204,8 @@ export const textHeights = {}; * Clears the label cache when a font becomes available. * @param {string} fontSpec CSS font spec. */ -export const checkFont = (function() { +export const registerFont = (function() { const retries = 100; - const checked = checkedFonts; const size = '32px '; const referenceFonts = ['monospace', 'serif']; const len = referenceFonts.length; @@ -235,19 +238,18 @@ export const checkFont = (function() { function check() { let done = true; - for (const font in checked) { - if (checked[font] < retries) { + const fonts = checkedFonts.getKeys(); + for (let i = 0, ii = fonts.length; i < ii; ++i) { + const font = fonts[i]; + if (checkedFonts.get(font) < retries) { if (isAvailable.apply(this, font.split('\n'))) { - checked[font] = retries; clear(textHeights); // Make sure that loaded fonts are picked up by Safari measureContext = null; measureFont = undefined; - if (labelCache.getCount()) { - labelCache.clear(); - } + checkedFonts.set(font, retries); } else { - ++checked[font]; + checkedFonts.set(font, checkedFonts.get(font) + 1, true); done = false; } } @@ -267,10 +269,10 @@ export const checkFont = (function() { for (let i = 0, ii = families.length; i < ii; ++i) { const family = families[i]; const key = font.style + '\n' + font.weight + '\n' + family; - if (!(key in checked)) { - checked[key] = retries; + if (checkedFonts.get(key) === undefined) { + checkedFonts.set(key, retries, true); if (!isAvailable(font.style, font.weight, family)) { - checked[key] = 0; + checkedFonts.set(key, 0, true); if (interval === undefined) { interval = setInterval(check, 32); } @@ -388,7 +390,7 @@ export const resetTransform = createTransform(); * @param {CanvasRenderingContext2D} context Context. * @param {import("../transform.js").Transform|null} transform Transform. * @param {number} opacity Opacity. - * @param {HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} image Image. + * @param {import("./canvas/Executor.js").Label|HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} labelOrImage Label. * @param {number} originX Origin X. * @param {number} originY Origin Y. * @param {number} w Width. @@ -397,8 +399,8 @@ export const resetTransform = createTransform(); * @param {number} y Y. * @param {number} scale Scale. */ -export function drawImage(context, - transform, opacity, image, originX, originY, w, h, x, y, scale) { +export function drawImageOrLabel(context, + transform, opacity, labelOrImage, originX, originY, w, h, x, y, scale) { let alpha; if (opacity != 1) { alpha = context.globalAlpha; @@ -408,12 +410,21 @@ export function drawImage(context, context.setTransform.apply(context, transform); } - context.drawImage(image, originX, originY, w, h, x, y, w * scale, h * scale); + const isLabel = !!(/** @type {*} */ (labelOrImage).contextInstructions); + + if (isLabel) { + context.translate(x, y); + context.scale(scale, scale); + executeLabelInstructions(/** @type {import("./canvas/Executor.js").Label} */ (labelOrImage), context); + } else { + context.drawImage(/** @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} */ (labelOrImage), originX, originY, w, h, x, y, w * scale, h * scale); + } if (opacity != 1) { context.globalAlpha = alpha; } - if (transform) { + + if (transform || isLabel) { context.setTransform.apply(context, resetTransform); } } diff --git a/src/ol/render/canvas/Executor.js b/src/ol/render/canvas/Executor.js index 5ec354c5b0..e94f666554 100644 --- a/src/ol/render/canvas/Executor.js +++ b/src/ol/render/canvas/Executor.js @@ -7,7 +7,7 @@ import {createEmpty, createOrUpdate, import {lineStringLength} from '../../geom/flat/length.js'; import {drawTextOnPath} from '../../geom/flat/textpath.js'; import {transform2D} from '../../geom/flat/transform.js'; -import {drawImage, defaultPadding, defaultTextBaseline} from '../canvas.js'; +import {drawImageOrLabel, defaultPadding, defaultTextBaseline} from '../canvas.js'; import CanvasInstruction from './Instruction.js'; import {TEXT_ALIGN} from './TextBuilder.js'; import { @@ -16,8 +16,7 @@ import { apply as applyTransform, setFromArray as transformSetFromArray } from '../../transform.js'; -import {createCanvasContext2D} from '../../dom.js'; -import {labelCache, defaultTextAlign, measureTextHeight, measureAndCacheTextWidth, measureTextWidths} from '../canvas.js'; +import {defaultTextAlign, measureTextHeight, measureAndCacheTextWidth, measureTextWidths} from '../canvas.js'; import RBush from 'rbush/rbush.js'; @@ -31,6 +30,28 @@ import RBush from 'rbush/rbush.js'; * @property {!Object} strokeStates The stroke states (decluttering). */ +/** + * @typedef Label + * @property {number} width + * @property {number} height + * @property {Array} contextInstructions + */ + +/** + * @param {Label} label Label. + * @param {CanvasRenderingContext2D} context Context. + */ +export function executeLabelInstructions(label, context) { + const contextInstructions = label.contextInstructions; + for (let i = 0, ii = contextInstructions.length; i < ii; i += 2) { + if (Array.isArray(contextInstructions[i + 1])) { + CanvasRenderingContext2D.prototype[contextInstructions[i]].apply(context, contextInstructions[i + 1]); + } else { + context[contextInstructions[i]] = contextInstructions[i + 1]; + } + } +} + /** * @type {import("../../extent.js").Extent} */ @@ -159,69 +180,66 @@ class Executor { * @param {string} textKey Text style key. * @param {string} fillKey Fill style key. * @param {string} strokeKey Stroke style key. - * @return {HTMLCanvasElement} Image. + * @return {Label} Label. */ - getTextImage(text, textKey, fillKey, strokeKey) { - let label; - const key = strokeKey + textKey + text + fillKey + this.pixelRatio; + createLabel(text, textKey, fillKey, strokeKey) { + const strokeState = strokeKey ? this.strokeStates[strokeKey] : null; + const fillState = fillKey ? this.fillStates[fillKey] : null; + const textState = this.textStates[textKey]; + const pixelRatio = this.pixelRatio; + const scale = textState.scale * pixelRatio; + const align = TEXT_ALIGN[textState.textAlign || defaultTextAlign]; + const strokeWidth = strokeKey && strokeState.lineWidth ? strokeState.lineWidth : 0; - if (!labelCache.containsKey(key)) { - const strokeState = strokeKey ? this.strokeStates[strokeKey] : null; - const fillState = fillKey ? this.fillStates[fillKey] : null; - const textState = this.textStates[textKey]; - const pixelRatio = this.pixelRatio; - const scale = textState.scale * pixelRatio; - const align = TEXT_ALIGN[textState.textAlign || defaultTextAlign]; - const strokeWidth = strokeKey && strokeState.lineWidth ? strokeState.lineWidth : 0; - - const lines = text.split('\n'); - const numLines = lines.length; - const widths = []; - const width = measureTextWidths(textState.font, lines, widths); - const lineHeight = measureTextHeight(textState.font); - const height = lineHeight * numLines; - const renderWidth = width + strokeWidth; - const context = createCanvasContext2D( - // make canvas 2 pixels wider to account for italic text width measurement errors - Math.ceil((renderWidth + 2) * scale), - Math.ceil((height + strokeWidth) * scale)); - label = context.canvas; - labelCache.set(key, label); - if (scale != 1) { - context.scale(scale, scale); - } - context.font = textState.font; - if (strokeKey) { - context.strokeStyle = strokeState.strokeStyle; - context.lineWidth = strokeWidth; - context.lineCap = strokeState.lineCap; - context.lineJoin = strokeState.lineJoin; - context.miterLimit = strokeState.miterLimit; - if (context.setLineDash && strokeState.lineDash.length) { - context.setLineDash(strokeState.lineDash); - context.lineDashOffset = strokeState.lineDashOffset; - } - } - if (fillKey) { - context.fillStyle = fillState.fillStyle; - } - context.textBaseline = 'middle'; - context.textAlign = 'center'; - const leftRight = (0.5 - align); - const x = align * renderWidth + leftRight * strokeWidth; - let i; - if (strokeKey) { - for (i = 0; i < numLines; ++i) { - context.strokeText(lines[i], x + leftRight * widths[i], 0.5 * (strokeWidth + lineHeight) + i * lineHeight); - } - } - if (fillKey) { - for (i = 0; i < numLines; ++i) { - context.fillText(lines[i], x + leftRight * widths[i], 0.5 * (strokeWidth + lineHeight) + i * lineHeight); - } + const lines = text.split('\n'); + const numLines = lines.length; + const widths = []; + const width = measureTextWidths(textState.font, lines, widths); + const lineHeight = measureTextHeight(textState.font); + const height = lineHeight * numLines; + const renderWidth = width + strokeWidth; + const contextInstructions = []; + /** @type {Label} */ + const label = { + // make canvas 2 pixels wider to account for italic text width measurement errors + width: Math.ceil((renderWidth + 2) * scale), + height: Math.ceil((height + strokeWidth) * scale), + contextInstructions: contextInstructions + }; + if (scale != 1) { + contextInstructions.push('scale', [scale, scale]); + } + contextInstructions.push('font', textState.font); + if (strokeKey) { + contextInstructions.push('strokeStyle', strokeState.strokeStyle); + contextInstructions.push('lineWidth', strokeWidth); + contextInstructions.push('lineCap', strokeState.lineCap); + contextInstructions.push('lineJoin', strokeState.lineJoin); + contextInstructions.push('miterLimit', strokeState.miterLimit); + if (CanvasRenderingContext2D.prototype.setLineDash && strokeState.lineDash.length) { + contextInstructions.push('setLineDash', [strokeState.lineDash]); + contextInstructions.push('lineDashOffset', strokeState.lineDashOffset); } } - return labelCache.get(key, this); + if (fillKey) { + contextInstructions.push('fillStyle', fillState.fillStyle); + } + contextInstructions.push('textBaseline', 'middle'); + contextInstructions.push('textAlign', 'center'); + const leftRight = (0.5 - align); + const x = align * renderWidth + leftRight * strokeWidth; + let i; + if (strokeKey) { + for (i = 0; i < numLines; ++i) { + contextInstructions.push('strokeText', [lines[i], x + leftRight * widths[i], 0.5 * (strokeWidth + lineHeight) + i * lineHeight]); + } + } + if (fillKey) { + for (i = 0; i < numLines; ++i) { + contextInstructions.push('fillText', [lines[i], x + leftRight * widths[i], 0.5 * (strokeWidth + lineHeight) + i * lineHeight]); + } + } + return label; } /** @@ -254,7 +272,7 @@ class Executor { * @param {CanvasRenderingContext2D} context Context. * @param {number} x X. * @param {number} y Y. - * @param {HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} image Image. + * @param {Label|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} imageOrLabel Image. * @param {number} anchorX Anchor X. * @param {number} anchorY Anchor Y. * @param {import("../canvas.js").DeclutterGroup} declutterGroup Declutter group. @@ -270,11 +288,11 @@ class Executor { * @param {Array<*>} fillInstruction Fill instruction. * @param {Array<*>} strokeInstruction Stroke instruction. */ - replayImage_( + replayImageOrLabel_( context, x, y, - image, + imageOrLabel, anchorX, anchorY, declutterGroup, @@ -296,8 +314,8 @@ class Executor { x -= anchorX; y -= anchorY; - const w = (width + originX > image.width) ? image.width - originX : width; - const h = (height + originY > image.height) ? image.height - originY : height; + const w = (width + originX > imageOrLabel.width) ? imageOrLabel.width - originX : width; + const h = (height + originY > imageOrLabel.height) ? imageOrLabel.height - originY : height; const boxW = padding[3] + w * scale + padding[1]; const boxH = padding[0] + h * scale + padding[2]; const boxX = x - padding[3]; @@ -351,7 +369,7 @@ class Executor { } extend(declutterGroup, tmpExtent); const declutterArgs = intersects ? - [context, transform ? transform.slice(0) : null, opacity, image, originX, originY, w, h, x, y, scale] : + [context, transform ? transform.slice(0) : null, opacity, imageOrLabel, originX, originY, w, h, x, y, scale] : null; if (declutterArgs) { if (fillStroke) { @@ -365,7 +383,7 @@ class Executor { /** @type {Array<*>} */ (fillInstruction), /** @type {Array<*>} */ (strokeInstruction)); } - drawImage(context, transform, opacity, image, originX, originY, w, h, x, y, scale); + drawImageOrLabel(context, transform, opacity, imageOrLabel, originX, originY, w, h, x, y, scale); } } @@ -440,7 +458,7 @@ class Executor { declutterData[13], declutterData[14], declutterData[15], declutterData[16], declutterData[11], declutterData[12]); } - drawImage.apply(undefined, declutterData); + drawImageOrLabel.apply(undefined, declutterData); if (currentAlpha !== opacity) { context.globalAlpha = currentAlpha; } @@ -459,12 +477,12 @@ class Executor { * @param {string} textKey The key of the text state. * @param {string} strokeKey The key for the stroke state. * @param {string} fillKey The key for the fill state. - * @return {{label: HTMLCanvasElement, anchorX: number, anchorY: number}} The text image and its anchor. + * @return {{label: Label, anchorX: number, anchorY: number}} The text image and its anchor. */ - drawTextImageWithPointPlacement_(text, textKey, strokeKey, fillKey) { + drawLabelWithPointPlacement_(text, textKey, strokeKey, fillKey) { const textState = this.textStates[textKey]; - const label = this.getTextImage(text, textKey, fillKey, strokeKey); + const label = this.createLabel(text, textKey, fillKey, strokeKey); const strokeState = this.strokeStates[strokeKey]; const pixelRatio = this.pixelRatio; @@ -472,7 +490,7 @@ class Executor { const baseline = TEXT_ALIGN[textState.textBaseline || defaultTextBaseline]; const strokeWidth = strokeState && strokeState.lineWidth ? strokeState.lineWidth : 0; - // Remove the 2 pixels we added in getTextImage() for the anchor + // Remove the 2 pixels we added in createLabel() for the anchor const width = label.width / pixelRatio - 2 * textState.scale; const anchorX = align * width + 2 * (0.5 - align) * strokeWidth; const anchorY = baseline * label.height / pixelRatio + 2 * (0.5 - baseline) * strokeWidth; @@ -637,7 +655,7 @@ class Executor { textKey = /** @type {string} */ (instruction[19]); strokeKey = /** @type {string} */ (instruction[20]); fillKey = /** @type {string} */ (instruction[21]); - const labelWithAnchor = this.drawTextImageWithPointPlacement_(text, textKey, strokeKey, fillKey); + const labelWithAnchor = this.drawLabelWithPointPlacement_(text, textKey, strokeKey, fillKey); image = labelWithAnchor.label; instruction[3] = image; const textOffsetX = /** @type {number} */ (instruction[22]); @@ -690,7 +708,7 @@ class Executor { } declutterGroup = declutterGroups[index]; } - this.replayImage_(context, + this.replayImageOrLabel_(context, pixelCoordinates[d], pixelCoordinates[d + 1], image, anchorX, anchorY, declutterGroup, height, opacity, originX, originY, rotation, scale, snapToPixel, width, padding, @@ -747,10 +765,10 @@ class Executor { for (c = 0, cc = parts.length; c < cc; ++c) { part = parts[c]; // x, y, anchorX, rotation, chunk chars = /** @type {string} */ (part[4]); - label = this.getTextImage(chars, textKey, '', strokeKey); + label = this.createLabel(chars, textKey, '', strokeKey); anchorX = /** @type {number} */ (part[2]) + strokeWidth; anchorY = baseline * label.height + (0.5 - baseline) * 2 * strokeWidth - offsetY; - this.replayImage_(context, + this.replayImageOrLabel_(context, /** @type {number} */ (part[0]), /** @type {number} */ (part[1]), label, anchorX, anchorY, declutterGroup, label.height, 1, 0, 0, /** @type {number} */ (part[3]), pixelRatioScale, false, label.width, @@ -761,10 +779,10 @@ class Executor { for (c = 0, cc = parts.length; c < cc; ++c) { part = parts[c]; // x, y, anchorX, rotation, chunk chars = /** @type {string} */ (part[4]); - label = this.getTextImage(chars, textKey, fillKey, ''); + label = this.createLabel(chars, textKey, fillKey, ''); anchorX = /** @type {number} */ (part[2]); anchorY = baseline * label.height - offsetY; - this.replayImage_(context, + this.replayImageOrLabel_(context, /** @type {number} */ (part[0]), /** @type {number} */ (part[1]), label, anchorX, anchorY, declutterGroup, label.height, 1, 0, 0, /** @type {number} */ (part[3]), pixelRatioScale, false, label.width, diff --git a/src/ol/render/canvas/LabelCache.js b/src/ol/render/canvas/LabelCache.js deleted file mode 100644 index 37de689738..0000000000 --- a/src/ol/render/canvas/LabelCache.js +++ /dev/null @@ -1,20 +0,0 @@ -import LRUCache from '../../structs/LRUCache.js'; - -/** - * @module ol/render/canvas/LabelCache - */ - -/** - * @classdesc - * Cache of pre-rendered labels. - */ -class LabelCache extends LRUCache { - - expireCache() { - while (this.canExpireCache()) { - this.pop(); - } - } -} - -export default LabelCache; diff --git a/src/ol/render/canvas/TextBuilder.js b/src/ol/render/canvas/TextBuilder.js index c14b3ce367..aec72113ad 100644 --- a/src/ol/render/canvas/TextBuilder.js +++ b/src/ol/render/canvas/TextBuilder.js @@ -6,7 +6,7 @@ import {asColorLike} from '../../colorlike.js'; import {intersects} from '../../extent.js'; import {matchingChunk} from '../../geom/flat/straightchunk.js'; import GeometryType from '../../geom/GeometryType.js'; -import {labelCache, defaultTextAlign, defaultPadding, defaultLineCap, defaultLineDashOffset, defaultLineDash, defaultLineJoin, defaultFillStyle, checkFont, defaultFont, defaultLineWidth, defaultMiterLimit, defaultStrokeStyle, defaultTextBaseline} from '../canvas.js'; +import {defaultTextAlign, defaultPadding, defaultLineCap, defaultLineDashOffset, defaultLineDash, defaultLineJoin, defaultFillStyle, registerFont, defaultFont, defaultLineWidth, defaultMiterLimit, defaultStrokeStyle, defaultTextBaseline} from '../canvas.js'; import CanvasInstruction from './Instruction.js'; import CanvasBuilder from './Builder.js'; import TextPlacement from '../../style/TextPlacement.js'; @@ -138,7 +138,6 @@ class CanvasTextBuilder extends CanvasBuilder { */ finish() { const instructions = super.finish(); - labelCache.expireCache(); instructions.textStates = this.textStates; instructions.fillStates = this.fillStates; instructions.strokeStates = this.strokeStates; @@ -432,7 +431,7 @@ class CanvasTextBuilder extends CanvasBuilder { textState = this.textState_; const font = textStyle.getFont() || defaultFont; - checkFont(font); + registerFont(font); const textScale = textStyle.getScale(); textState.overflow = textStyle.getOverflow(); textState.font = font; diff --git a/src/ol/renderer/Composite.js b/src/ol/renderer/Composite.js index 12cce9ba7c..24ee0ef801 100644 --- a/src/ol/renderer/Composite.js +++ b/src/ol/renderer/Composite.js @@ -8,9 +8,9 @@ import RenderEventType from '../render/EventType.js'; import MapRenderer from './Map.js'; import SourceState from '../source/State.js'; import {replaceChildren} from '../dom.js'; -import {labelCache} from '../render/canvas.js'; -import EventType from '../events/EventType.js'; import {listen, unlistenByKey} from '../events.js'; +import {checkedFonts} from '../render/canvas.js'; +import ObjectEventType from '../ObjectEventType.js'; /** @@ -29,7 +29,7 @@ class CompositeMapRenderer extends MapRenderer { /** * @type {import("../events.js").EventsKey} */ - this.labelCacheKey_ = listen(labelCache, EventType.CLEAR, map.redrawText.bind(map)); + this.fontChangeListenerKey_ = listen(checkedFonts, ObjectEventType.PROPERTYCHANGE, map.redrawText.bind(map)); /** * @private @@ -73,7 +73,7 @@ class CompositeMapRenderer extends MapRenderer { } disposeInternal() { - unlistenByKey(this.labelCacheKey_); + unlistenByKey(this.fontChangeListenerKey_); this.element_.parentNode.removeChild(this.element_); super.disposeInternal(); } diff --git a/src/ol/structs/LRUCache.js b/src/ol/structs/LRUCache.js index 0e57889820..be36c25717 100644 --- a/src/ol/structs/LRUCache.js +++ b/src/ol/structs/LRUCache.js @@ -3,8 +3,6 @@ */ import {assert} from '../asserts.js'; -import EventTarget from '../events/Target.js'; -import EventType from '../events/EventType.js'; /** @@ -25,15 +23,13 @@ import EventType from '../events/EventType.js'; * @fires import("../events/Event.js").default * @template T */ -class LRUCache extends EventTarget { +class LRUCache { /** * @param {number=} opt_highWaterMark High water mark. */ constructor(opt_highWaterMark) { - super(); - /** * @type {number} */ @@ -82,7 +78,6 @@ class LRUCache extends EventTarget { this.entries_ = {}; this.oldest_ = null; this.newest_ = null; - this.dispatchEvent(EventType.CLEAR); } diff --git a/test/spec/ol/render/canvas/index.test.js b/test/spec/ol/render/canvas/index.test.js index f2d4d23ca1..58a4a5551d 100644 --- a/test/spec/ol/render/canvas/index.test.js +++ b/test/spec/ol/render/canvas/index.test.js @@ -1,4 +1,3 @@ -import {clear} from '../../../../../src/ol/obj.js'; import * as render from '../../../../../src/ol/render/canvas.js'; @@ -9,69 +8,70 @@ describe('ol.render.canvas', function() { font.rel = 'stylesheet'; const head = document.getElementsByTagName('head')[0]; - describe('ol.render.canvas.checkFont()', function() { + describe('ol.render.canvas.registerFont()', function() { beforeEach(function() { - clear(render.checkedFonts); + render.checkedFonts.values_ = {}; render.measureTextHeight('12px sans-serif'); }); const retries = 100; - it('does not clear label cache and measurements for unavailable fonts', function(done) { + it('does not trigger redraw and clear measurements for unavailable fonts', function(done) { this.timeout(4000); const spy = sinon.spy(); - render.labelCache.addEventListener('clear', spy); + render.checkedFonts.addEventListener('propertychange', spy); const interval = setInterval(function() { - if (render.checkedFonts['normal\nnormal\nfoo'] == retries && render.checkedFonts['normal\nnormal\nsans-serif'] == retries) { + if (render.checkedFonts.get('normal\nnormal\nfoo') == retries && render.checkedFonts.get('normal\nnormal\nsans-serif') == retries) { clearInterval(interval); - render.labelCache.removeEventListener('clear', spy); + render.checkedFonts.removeEventListener('propertychange', spy); expect(spy.callCount).to.be(0); expect(render.textHeights).to.not.eql({}); done(); } }, 32); - render.checkFont('12px foo,sans-serif'); + render.registerFont('12px foo,sans-serif'); }); - it('does not clear label cache and measurements for available fonts', function(done) { + it('does not trigger redraw and clear measurements for available fonts', function(done) { const spy = sinon.spy(); - render.labelCache.addEventListener('clear', spy); + render.checkedFonts.addEventListener('propertychange', spy); const interval = setInterval(function() { - if (render.checkedFonts['normal\nnormal\nsans-serif'] == retries) { + if (render.checkedFonts.get('normal\nnormal\nsans-serif') == retries) { clearInterval(interval); - render.labelCache.removeEventListener('clear', spy); + render.checkedFonts.removeEventListener('propertychange', spy); expect(spy.callCount).to.be(0); expect(render.textHeights).to.not.eql({}); done(); } }, 32); - render.checkFont('12px sans-serif'); + render.registerFont('12px sans-serif'); }); - it('does not clear label cache and measurements for the \'monospace\' font', function(done) { + it('does not trigger redraw and clear measurements for the \'monospace\' font', function(done) { const spy = sinon.spy(); - render.labelCache.addEventListener('clear', spy); + render.checkedFonts.addEventListener('propertychange', spy); const interval = setInterval(function() { - if (render.checkedFonts['normal\nnormal\nmonospace'] == retries) { + if (render.checkedFonts.get('normal\nnormal\nmonospace') == retries) { clearInterval(interval); - render.labelCache.removeEventListener('clear', spy); + render.checkedFonts.removeEventListener('propertychange', spy); expect(spy.callCount).to.be(0); expect(render.textHeights).to.not.eql({}); done(); } }, 32); - render.checkFont('12px monospace'); + render.registerFont('12px monospace'); }); - it('clears label cache and measurements for fonts that become available', function(done) { + it('triggers redraw and clear measurements for fonts that become available', function(done) { head.appendChild(font); - render.labelCache.set('dummy', {}); - render.labelCache.addEventListener('clear', function() { + render.checkedFonts.addEventListener('propertychange', function onPropertyChange(e) { + render.checkedFonts.removeEventListener('propertychange', onPropertyChange); + expect(e.key).to.be('normal\nnormal\nAbel'); expect(render.textHeights).to.eql({}); done(); }); - render.checkFont('12px Abel'); + render.registerFont('12px Abel'); }); }); diff --git a/test/spec/ol/render/canvas/labelcache.test.js b/test/spec/ol/render/canvas/labelcache.test.js deleted file mode 100644 index d6c5fb8531..0000000000 --- a/test/spec/ol/render/canvas/labelcache.test.js +++ /dev/null @@ -1,13 +0,0 @@ -import LabelCache from '../../../../../src/ol/render/canvas/LabelCache.js'; - -describe('ol.render.canvas.LabelCache', function() { - - it('#expireCache()', function() { - const labelCache = new LabelCache(1); - labelCache.set('key1', document.createElement('canvas')); - labelCache.set('key2', document.createElement('canvas')); - labelCache.expireCache(); - expect(labelCache.getCount()).to.be(1); - }); - -}); diff --git a/test/spec/ol/render/canvas/textbuilder.test.js b/test/spec/ol/render/canvas/textbuilder.test.js index 850134b675..c4f90fe651 100644 --- a/test/spec/ol/render/canvas/textbuilder.test.js +++ b/test/spec/ol/render/canvas/textbuilder.test.js @@ -29,11 +29,11 @@ function executeInstructions(builder, expectedDrawTextImageCalls, expectedBuilde const transform = createTransform(); const context = createContext(); const executor = new Executor(0.02, 1, false, builder.finish()); - sinon.spy(executor, 'drawTextImageWithPointPlacement_'); - const replayImageStub = sinon.stub(executor, 'replayImage_'); + sinon.spy(executor, 'drawLabelWithPointPlacement_'); + const replayImageOrLabelStub = sinon.stub(executor, 'replayImageOrLabel_'); executor.execute(context, transform); - expect(executor.drawTextImageWithPointPlacement_.callCount).to.be(expectedDrawTextImageCalls); - expect(replayImageStub.callCount).to.be(expectedBuilderImageCalls); + expect(executor.drawLabelWithPointPlacement_.callCount).to.be(expectedDrawTextImageCalls); + expect(replayImageOrLabelStub.callCount).to.be(expectedBuilderImageCalls); } describe('ol.render.canvas.TextBuilder', function() { diff --git a/test/spec/ol/renderer/canvas/vectorlayer.test.js b/test/spec/ol/renderer/canvas/vectorlayer.test.js index 280fc4d8c6..a766fdb767 100644 --- a/test/spec/ol/renderer/canvas/vectorlayer.test.js +++ b/test/spec/ol/renderer/canvas/vectorlayer.test.js @@ -6,7 +6,6 @@ import Circle from '../../../../../src/ol/geom/Circle.js'; import Point from '../../../../../src/ol/geom/Point.js'; import {fromExtent} from '../../../../../src/ol/geom/Polygon.js'; import VectorLayer from '../../../../../src/ol/layer/Vector.js'; -import {clear} from '../../../../../src/ol/obj.js'; import {get as getProjection} from '../../../../../src/ol/proj.js'; import {checkedFonts} from '../../../../../src/ol/render/canvas.js'; import CanvasVectorLayerRenderer from '../../../../../src/ol/renderer/canvas/VectorLayer.js'; @@ -88,7 +87,7 @@ describe('ol.renderer.canvas.VectorLayer', function() { }); it('does not re-render for unavailable fonts', function(done) { - clear(checkedFonts); + checkedFonts.values_ = {}; const map = new Map({ view: new View({ center: [0, 0], @@ -119,7 +118,7 @@ describe('ol.renderer.canvas.VectorLayer', function() { }); it('does not re-render for available fonts', function(done) { - clear(checkedFonts); + checkedFonts.values_ = {}; const map = new Map({ view: new View({ center: [0, 0], @@ -150,7 +149,7 @@ describe('ol.renderer.canvas.VectorLayer', function() { }); it('re-renders for fonts that become available', function(done) { - clear(checkedFonts); + checkedFonts.values_ = {}; head.appendChild(font); const map = new Map({ view: new View({ diff --git a/test/spec/ol/renderer/canvas/vectortilelayer.test.js b/test/spec/ol/renderer/canvas/vectortilelayer.test.js index 27abdf7871..718187bac3 100644 --- a/test/spec/ol/renderer/canvas/vectortilelayer.test.js +++ b/test/spec/ol/renderer/canvas/vectortilelayer.test.js @@ -1,4 +1,3 @@ -import {clear} from '../../../../../src/ol/obj.js'; import Feature from '../../../../../src/ol/Feature.js'; import Map from '../../../../../src/ol/Map.js'; import TileState from '../../../../../src/ol/TileState.js'; @@ -171,7 +170,7 @@ describe('ol.renderer.canvas.VectorTileLayer', function() { it('does not re-render for unavailable fonts', function(done) { map.renderSync(); - clear(checkedFonts); + checkedFonts.values_ = {}; layerStyle[0].getText().setFont('12px "Unavailable font",sans-serif'); layer.changed(); const revision = layer.getRevision(); @@ -183,7 +182,7 @@ describe('ol.renderer.canvas.VectorTileLayer', function() { it('does not re-render for available fonts', function(done) { map.renderSync(); - clear(checkedFonts); + checkedFonts.values_ = {}; layerStyle[0].getText().setFont('12px sans-serif'); layer.changed(); const revision = layer.getRevision(); @@ -195,7 +194,7 @@ describe('ol.renderer.canvas.VectorTileLayer', function() { it('re-renders for fonts that become available', function(done) { map.renderSync(); - clear(checkedFonts); + checkedFonts.values_ = {}; head.appendChild(font); layerStyle[0].getText().setFont('12px "Dancing Script",sans-serif'); layer.changed(); From bc6f34d691016cbc7bcd37bd3804a01d2af28f16 Mon Sep 17 00:00:00 2001 From: wussup Date: Wed, 15 Jan 2020 10:13:18 +0100 Subject: [PATCH 076/246] Read projection from CRS type EPSG CRS also may have type 'EPSG' and then the code is reading from property 'code' in object 'properties' --- src/ol/format/GeoJSON.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ol/format/GeoJSON.js b/src/ol/format/GeoJSON.js index 8448457c1e..a45907f95e 100644 --- a/src/ol/format/GeoJSON.js +++ b/src/ol/format/GeoJSON.js @@ -162,6 +162,8 @@ class GeoJSON extends JSONFeature { if (crs) { if (crs['type'] == 'name') { projection = getProjection(crs['properties']['name']); + } else if (crs['type'] === 'EPSG') { + projection = getProjection("EPSG:" + crs['properties']['code']); } else { assert(false, 36); // Unknown SRS type } From cbdd63a38ba45c6b64de5c8f11306a2e677ed519 Mon Sep 17 00:00:00 2001 From: wussup Date: Wed, 15 Jan 2020 10:29:14 +0100 Subject: [PATCH 077/246] Strings must have singlequotes Strings must have singlequotes --- src/ol/format/GeoJSON.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ol/format/GeoJSON.js b/src/ol/format/GeoJSON.js index a45907f95e..2e3f30dee2 100644 --- a/src/ol/format/GeoJSON.js +++ b/src/ol/format/GeoJSON.js @@ -163,7 +163,7 @@ class GeoJSON extends JSONFeature { if (crs['type'] == 'name') { projection = getProjection(crs['properties']['name']); } else if (crs['type'] === 'EPSG') { - projection = getProjection("EPSG:" + crs['properties']['code']); + projection = getProjection('EPSG:' + crs['properties']['code']); } else { assert(false, 36); // Unknown SRS type } From 601bd7bae6d7619a434f36e1a959823e2cd2b7bd Mon Sep 17 00:00:00 2001 From: jkonieczny Date: Mon, 16 Dec 2019 21:22:34 +0100 Subject: [PATCH 078/246] add offset option to RegularShape --- src/ol/style/RegularShape.js | 21 +++++++++++++++++++-- test/spec/ol/style/regularshape.test.js | 23 ++++++++++++++++++++++- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/ol/style/RegularShape.js b/src/ol/style/RegularShape.js index b313c07ab7..2b464d5c9b 100644 --- a/src/ol/style/RegularShape.js +++ b/src/ol/style/RegularShape.js @@ -20,6 +20,7 @@ import ImageStyle from './Image.js'; * @property {number} [radius1] Outer radius of a star. * @property {number} [radius2] Inner radius of a star. * @property {number} [angle=0] Shape's angle in radians. A value of 0 will have one of the shape's point facing up. + * @property {Array} [offset] Offset of the shape * @property {import("./Stroke.js").default} [stroke] Stroke style. * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise). * @property {boolean} [rotateWithView=false] Whether to rotate the shape with the view. @@ -88,6 +89,12 @@ class RegularShape extends ImageStyle { */ this.origin_ = [0, 0]; + /** + * @private + * @type {Array} + */ + this.offset_ = options.offset ? options.offset : [0, 0]; + /** * @private * @type {number} @@ -160,7 +167,8 @@ class RegularShape extends ImageStyle { angle: this.getAngle(), stroke: this.getStroke() ? this.getStroke().clone() : undefined, rotation: this.getRotation(), - rotateWithView: this.getRotateWithView() + rotateWithView: this.getRotateWithView(), + offset: this.getOffset() }); style.setOpacity(this.getOpacity()); style.setScale(this.getScale()); @@ -184,6 +192,15 @@ class RegularShape extends ImageStyle { return this.angle_; } + /** + * Get the offset of the shape + * @return {Array} Shape's center offset + * @api + */ + getOffset() { + return this.offset_; + } + /** * Get the fill style for the shape. * @return {import("./Fill.js").default} Fill style. @@ -354,7 +371,7 @@ class RegularShape extends ImageStyle { size = this.canvas_.width; const imageSize = size; - this.draw_(renderOptions, context, 0, 0); + this.draw_(renderOptions, context, this.offset_[0], this.offset_[1]); this.createHitDetectionCanvas_(renderOptions); diff --git a/test/spec/ol/style/regularshape.test.js b/test/spec/ol/style/regularshape.test.js index aaff4b2d7d..76b4a39aff 100644 --- a/test/spec/ol/style/regularshape.test.js +++ b/test/spec/ol/style/regularshape.test.js @@ -82,6 +82,24 @@ describe('ol.style.RegularShape', function() { expect(style.getHitDetectionImageSize()).to.eql([21, 21]); }); + it('sets default offset [0, 0]', function() { + const style = new RegularShape({ + radius: 5 + }); + expect(style.getOffset()).to.an('array'); + expect(style.getOffset()[0]).to.eql(0); + expect(style.getOffset()[1]).to.eql(0); + }); + + it('can use offset', function() { + const style = new RegularShape({ + radius: 5, + offset: [10, 20] + }); + expect(style.getOffset()).to.an('array'); + expect(style.getOffset()[0]).to.eql(10); + expect(style.getOffset()[1]).to.eql(20); + }); }); describe('#clone', function() { @@ -108,7 +126,8 @@ describe('ol.style.RegularShape', function() { color: '#319FD3' }), rotation: 2, - rotateWithView: true + rotateWithView: true, + offest: [10, 20] }); original.setOpacity(0.5); original.setScale(1.5); @@ -123,6 +142,8 @@ describe('ol.style.RegularShape', function() { expect(original.getRotateWithView()).to.eql(clone.getRotateWithView()); expect(original.getScale()).to.eql(clone.getScale()); expect(original.getStroke().getColor()).to.eql(clone.getStroke().getColor()); + expect(original.getOffset()[0]).to.eql(clone.getOffset()[0]); + expect(original.getOffset()[1]).to.eql(clone.getOffset()[1]); }); it('the clone does not reference the same objects as the original', function() { From 1506e13b601605804f9a6bd8964fc94c905aaee5 Mon Sep 17 00:00:00 2001 From: jkonieczny Date: Mon, 16 Dec 2019 23:24:31 +0100 Subject: [PATCH 079/246] use anchor for offsetting --- rendering/cases/regularshape-style/main.js | 7 ++++--- src/ol/style/RegularShape.js | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/rendering/cases/regularshape-style/main.js b/rendering/cases/regularshape-style/main.js index 9d98bcd573..625fe9265c 100644 --- a/rendering/cases/regularshape-style/main.js +++ b/rendering/cases/regularshape-style/main.js @@ -13,16 +13,17 @@ const vectorSource = new VectorSource(); function createFeatures(stroke, fill, offSet = [0, 0]) { let feature; feature = new Feature({ - geometry: new Point([-15 + offSet[0], 15 + offSet[1]]) + geometry: new Point([offSet[0], offSet[1]]) }); - // square + // square with offset feature.setStyle(new Style({ image: new RegularShape({ fill: fill, stroke: stroke, points: 4, radius: 10, - angle: Math.PI / 4 + angle: Math.PI / 4, + offset: [-15, 15] }) })); vectorSource.addFeature(feature); diff --git a/src/ol/style/RegularShape.js b/src/ol/style/RegularShape.js index 2b464d5c9b..42b4063fe7 100644 --- a/src/ol/style/RegularShape.js +++ b/src/ol/style/RegularShape.js @@ -371,11 +371,11 @@ class RegularShape extends ImageStyle { size = this.canvas_.width; const imageSize = size; - this.draw_(renderOptions, context, this.offset_[0], this.offset_[1]); + this.draw_(renderOptions, context, 0, 0); this.createHitDetectionCanvas_(renderOptions); - this.anchor_ = [size / 2, size / 2]; + this.anchor_ = [size / 2 - this.offset_[0], size / 2 + this.offset_[1]]; this.size_ = [size, size]; this.imageSize_ = [imageSize, imageSize]; } From ee1b038714e701053dab6276c4a114e679c73e81 Mon Sep 17 00:00:00 2001 From: jkonieczny Date: Tue, 17 Dec 2019 09:06:19 +0100 Subject: [PATCH 080/246] add example to regularshape --- examples/regularshape.html | 4 +++- examples/regularshape.js | 27 ++++++++++++++++++++++++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/examples/regularshape.html b/examples/regularshape.html index 1e3430a20a..990a9ec148 100644 --- a/examples/regularshape.html +++ b/examples/regularshape.html @@ -5,7 +5,9 @@ shortdesc: Example of some Regular Shape styles. docs: > This example shows how several regular shapes or symbols (representing `x`, `cross`, `star`, - `triangle` and `square`) can be created. + `triangle`, `square` and `stacked`) can be created. + + Style `stacked` represents possility to stack multiple shapes with offset tags: "vector, symbol, regularshape, style, square, cross, star, triangle, x" ---
diff --git a/examples/regularshape.js b/examples/regularshape.js index 6d26f9d3e3..4431efcd25 100644 --- a/examples/regularshape.js +++ b/examples/regularshape.js @@ -59,18 +59,39 @@ const styles = { radius2: 0, angle: Math.PI / 4 }) - }) + }), + 'stacked': [ + new Style({ + image: new RegularShape({ + fill: fill, + stroke: stroke, + points: 4, + radius: 5, + angle: Math.PI / 4, + offset: [0, 10] + }) + }), + new Style({ + image: new RegularShape({ + fill: fill, + stroke: stroke, + points: 4, + radius: 10, + angle: Math.PI / 4 + }) + }) + ] }; -const styleKeys = ['x', 'cross', 'star', 'triangle', 'square']; +const styleKeys = ['x', 'cross', 'star', 'triangle', 'square', 'stacked']; const count = 250; const features = new Array(count); const e = 4500000; for (let i = 0; i < count; ++i) { const coordinates = [2 * e * Math.random() - e, 2 * e * Math.random() - e]; features[i] = new Feature(new Point(coordinates)); - features[i].setStyle(styles[styleKeys[Math.floor(Math.random() * 5)]]); + features[i].setStyle(styles[styleKeys[Math.floor(Math.random() * 6)]]); } const source = new VectorSource({ From 4c7f52c8a426c548e024a3ecdaca66f63b47e0e4 Mon Sep 17 00:00:00 2001 From: jkonieczny Date: Wed, 18 Dec 2019 08:22:40 +0100 Subject: [PATCH 081/246] Offset for ImageStyle --- src/ol/style/Circle.js | 7 +++++-- src/ol/style/Icon.js | 7 +------ src/ol/style/Image.js | 19 ++++++++++++++++++- src/ol/style/RegularShape.js | 22 ++++------------------ 4 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/ol/style/Circle.js b/src/ol/style/Circle.js index 59161e0456..9ac4a5939e 100644 --- a/src/ol/style/Circle.js +++ b/src/ol/style/Circle.js @@ -10,6 +10,7 @@ import RegularShape from './RegularShape.js'; * @property {import("./Fill.js").default} [fill] Fill style. * @property {number} radius Circle radius. * @property {import("./Stroke.js").default} [stroke] Stroke style. + * @property {Array} [offset=[0,0]] offset */ @@ -30,7 +31,8 @@ class CircleStyle extends RegularShape { points: Infinity, fill: options.fill, radius: options.radius, - stroke: options.stroke + stroke: options.stroke, + offset: options.offset !== undefined ? options.offset : [0, 0] }); } @@ -45,7 +47,8 @@ class CircleStyle extends RegularShape { const style = new CircleStyle({ fill: this.getFill() ? this.getFill().clone() : undefined, stroke: this.getStroke() ? this.getStroke().clone() : undefined, - radius: this.getRadius() + radius: this.getRadius(), + offset: this.getOffset().slice() }); style.setOpacity(this.getOpacity()); style.setScale(this.getScale()); diff --git a/src/ol/style/Icon.js b/src/ol/style/Icon.js index b918487247..100f8892e8 100644 --- a/src/ol/style/Icon.js +++ b/src/ol/style/Icon.js @@ -84,6 +84,7 @@ class Icon extends ImageStyle { opacity: opacity, rotation: rotation, scale: scale, + offset: options.offset !== undefined ? options.offset : [0, 0], rotateWithView: rotateWithView }); @@ -172,12 +173,6 @@ class Icon extends ImageStyle { this.iconImage_ = getIconImage( image, /** @type {string} */ (src), imgSize, this.crossOrigin_, imageState, this.color_); - /** - * @private - * @type {Array} - */ - this.offset_ = options.offset !== undefined ? options.offset : [0, 0]; - /** * @private * @type {import("./IconOrigin.js").default} diff --git a/src/ol/style/Image.js b/src/ol/style/Image.js index 6d8fd421b0..a5d552b197 100644 --- a/src/ol/style/Image.js +++ b/src/ol/style/Image.js @@ -10,6 +10,7 @@ import {abstract} from '../util.js'; * @property {boolean} rotateWithView * @property {number} rotation * @property {number} scale + * @property {Array} offset */ @@ -51,6 +52,12 @@ class ImageStyle { */ this.scale_ = options.scale; + /** + * @private + * @type {Array} + */ + this.offset_ = options.offset; + } /** @@ -63,7 +70,8 @@ class ImageStyle { opacity: this.getOpacity(), scale: this.getScale(), rotation: this.getRotation(), - rotateWithView: this.getRotateWithView() + rotateWithView: this.getRotateWithView(), + offset: this.getOffset().slice() }); } @@ -103,6 +111,15 @@ class ImageStyle { return this.scale_; } + /** + * Get the offset of the shape + * @return {Array} Shape's center offset + * @api + */ + getOffset() { + return this.offset_; + } + /** * Get the anchor point in pixels. The anchor determines the center point for the * symbolizer. diff --git a/src/ol/style/RegularShape.js b/src/ol/style/RegularShape.js index 42b4063fe7..1ab5ab500d 100644 --- a/src/ol/style/RegularShape.js +++ b/src/ol/style/RegularShape.js @@ -20,7 +20,7 @@ import ImageStyle from './Image.js'; * @property {number} [radius1] Outer radius of a star. * @property {number} [radius2] Inner radius of a star. * @property {number} [angle=0] Shape's angle in radians. A value of 0 will have one of the shape's point facing up. - * @property {Array} [offset] Offset of the shape + * @property {Array} [offset=[0,0]] Offset of the shape * @property {import("./Stroke.js").default} [stroke] Stroke style. * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise). * @property {boolean} [rotateWithView=false] Whether to rotate the shape with the view. @@ -62,7 +62,8 @@ class RegularShape extends ImageStyle { opacity: 1, rotateWithView: rotateWithView, rotation: options.rotation !== undefined ? options.rotation : 0, - scale: 1 + scale: 1, + offset: options.offset !== undefined ? options.offset : [0, 0] }); /** @@ -89,12 +90,6 @@ class RegularShape extends ImageStyle { */ this.origin_ = [0, 0]; - /** - * @private - * @type {Array} - */ - this.offset_ = options.offset ? options.offset : [0, 0]; - /** * @private * @type {number} @@ -168,7 +163,7 @@ class RegularShape extends ImageStyle { stroke: this.getStroke() ? this.getStroke().clone() : undefined, rotation: this.getRotation(), rotateWithView: this.getRotateWithView(), - offset: this.getOffset() + offset: this.getOffset().slice() }); style.setOpacity(this.getOpacity()); style.setScale(this.getScale()); @@ -192,15 +187,6 @@ class RegularShape extends ImageStyle { return this.angle_; } - /** - * Get the offset of the shape - * @return {Array} Shape's center offset - * @api - */ - getOffset() { - return this.offset_; - } - /** * Get the fill style for the shape. * @return {import("./Fill.js").default} Fill style. From 78378f02537477131a58329fd94b04058fe23d84 Mon Sep 17 00:00:00 2001 From: jkonieczny Date: Thu, 26 Dec 2019 21:41:43 +0100 Subject: [PATCH 082/246] refactor `offset` to `displacement` --- rendering/cases/regularshape-style/main.js | 2 +- src/ol/style/Circle.js | 6 ++--- src/ol/style/Icon.js | 11 ++++++++- src/ol/style/Image.js | 14 ++++++------ src/ol/style/RegularShape.js | 9 ++++---- test/spec/ol/style/regularshape.test.js | 26 ++++++++++++---------- 6 files changed, 40 insertions(+), 28 deletions(-) diff --git a/rendering/cases/regularshape-style/main.js b/rendering/cases/regularshape-style/main.js index 625fe9265c..eec94e8c25 100644 --- a/rendering/cases/regularshape-style/main.js +++ b/rendering/cases/regularshape-style/main.js @@ -23,7 +23,7 @@ function createFeatures(stroke, fill, offSet = [0, 0]) { points: 4, radius: 10, angle: Math.PI / 4, - offset: [-15, 15] + displacement: [-15, 15] }) })); vectorSource.addFeature(feature); diff --git a/src/ol/style/Circle.js b/src/ol/style/Circle.js index 9ac4a5939e..64dc96cd3a 100644 --- a/src/ol/style/Circle.js +++ b/src/ol/style/Circle.js @@ -10,7 +10,7 @@ import RegularShape from './RegularShape.js'; * @property {import("./Fill.js").default} [fill] Fill style. * @property {number} radius Circle radius. * @property {import("./Stroke.js").default} [stroke] Stroke style. - * @property {Array} [offset=[0,0]] offset + * @property {Array} [displacement=[0,0]] displacement */ @@ -32,7 +32,7 @@ class CircleStyle extends RegularShape { fill: options.fill, radius: options.radius, stroke: options.stroke, - offset: options.offset !== undefined ? options.offset : [0, 0] + displacement: options.displacement !== undefined ? options.displacement : [0, 0] }); } @@ -48,7 +48,7 @@ class CircleStyle extends RegularShape { fill: this.getFill() ? this.getFill().clone() : undefined, stroke: this.getStroke() ? this.getStroke().clone() : undefined, radius: this.getRadius(), - offset: this.getOffset().slice() + displacement: this.getDisplacement().slice() }); style.setOpacity(this.getOpacity()); style.setScale(this.getScale()); diff --git a/src/ol/style/Icon.js b/src/ol/style/Icon.js index 100f8892e8..9206227430 100644 --- a/src/ol/style/Icon.js +++ b/src/ol/style/Icon.js @@ -33,6 +33,7 @@ import ImageStyle from './Image.js'; * to provide the size of the image, with the `imgSize` option. * @property {Array} [offset=[0, 0]] Offset, which, together with the size and the offset origin, define the * sub-rectangle to use from the original icon image. + * @property {Array} [displacement=[0,0]] Displacement the icon from the center * @property {import("./IconOrigin.js").default} [offsetOrigin='top-left'] Origin of the offset: `bottom-left`, `bottom-right`, * `top-left` or `top-right`. * @property {number} [opacity=1] Opacity of the icon. @@ -84,7 +85,7 @@ class Icon extends ImageStyle { opacity: opacity, rotation: rotation, scale: scale, - offset: options.offset !== undefined ? options.offset : [0, 0], + displacement: options.displacement !== undefined ? options.displacement : [0, 0], rotateWithView: rotateWithView }); @@ -173,6 +174,11 @@ class Icon extends ImageStyle { this.iconImage_ = getIconImage( image, /** @type {string} */ (src), imgSize, this.crossOrigin_, imageState, this.color_); + /** + * @private + * @type {Array} + */ + this.offset_ = options.offset !== undefined ? options.offset : [0, 0]; /** * @private * @type {import("./IconOrigin.js").default} @@ -331,6 +337,7 @@ class Icon extends ImageStyle { return this.origin_; } let offset = this.offset_; + const displacement = this.getDisplacement(); if (this.offsetOrigin_ != IconOrigin.TOP_LEFT) { const size = this.getSize(); @@ -348,6 +355,8 @@ class Icon extends ImageStyle { offset[1] = iconImageSize[1] - size[1] - offset[1]; } } + offset[0] += displacement[0]; + offset[1] += displacement[1]; this.origin_ = offset; return this.origin_; } diff --git a/src/ol/style/Image.js b/src/ol/style/Image.js index a5d552b197..3e01ddc84f 100644 --- a/src/ol/style/Image.js +++ b/src/ol/style/Image.js @@ -10,7 +10,7 @@ import {abstract} from '../util.js'; * @property {boolean} rotateWithView * @property {number} rotation * @property {number} scale - * @property {Array} offset + * @property {Array} displacement */ @@ -56,7 +56,7 @@ class ImageStyle { * @private * @type {Array} */ - this.offset_ = options.offset; + this.displacement_ = options.displacement; } @@ -71,7 +71,7 @@ class ImageStyle { scale: this.getScale(), rotation: this.getRotation(), rotateWithView: this.getRotateWithView(), - offset: this.getOffset().slice() + displacement: this.getDisplacement().slice() }); } @@ -112,12 +112,12 @@ class ImageStyle { } /** - * Get the offset of the shape - * @return {Array} Shape's center offset + * Get the displacement of the shape + * @return {Array} Shape's center displacement * @api */ - getOffset() { - return this.offset_; + getDisplacement() { + return this.displacement_; } /** diff --git a/src/ol/style/RegularShape.js b/src/ol/style/RegularShape.js index 1ab5ab500d..579008e11c 100644 --- a/src/ol/style/RegularShape.js +++ b/src/ol/style/RegularShape.js @@ -20,7 +20,7 @@ import ImageStyle from './Image.js'; * @property {number} [radius1] Outer radius of a star. * @property {number} [radius2] Inner radius of a star. * @property {number} [angle=0] Shape's angle in radians. A value of 0 will have one of the shape's point facing up. - * @property {Array} [offset=[0,0]] Offset of the shape + * @property {Array} [displacement=[0,0]] Offset of the shape * @property {import("./Stroke.js").default} [stroke] Stroke style. * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise). * @property {boolean} [rotateWithView=false] Whether to rotate the shape with the view. @@ -63,7 +63,7 @@ class RegularShape extends ImageStyle { rotateWithView: rotateWithView, rotation: options.rotation !== undefined ? options.rotation : 0, scale: 1, - offset: options.offset !== undefined ? options.offset : [0, 0] + displacement: options.displacement !== undefined ? options.displacement : [0, 0] }); /** @@ -163,7 +163,7 @@ class RegularShape extends ImageStyle { stroke: this.getStroke() ? this.getStroke().clone() : undefined, rotation: this.getRotation(), rotateWithView: this.getRotateWithView(), - offset: this.getOffset().slice() + displacement: this.getDisplacement().slice() }); style.setOpacity(this.getOpacity()); style.setScale(this.getScale()); @@ -356,12 +356,13 @@ class RegularShape extends ImageStyle { // canvas.width and height are rounded to the closest integer size = this.canvas_.width; const imageSize = size; + const displacement = this.getDisplacement(); this.draw_(renderOptions, context, 0, 0); this.createHitDetectionCanvas_(renderOptions); - this.anchor_ = [size / 2 - this.offset_[0], size / 2 + this.offset_[1]]; + this.anchor_ = [size / 2 - displacement[0], size / 2 + displacement[1]]; this.size_ = [size, size]; this.imageSize_ = [imageSize, imageSize]; } diff --git a/test/spec/ol/style/regularshape.test.js b/test/spec/ol/style/regularshape.test.js index 76b4a39aff..3b2c81cb1f 100644 --- a/test/spec/ol/style/regularshape.test.js +++ b/test/spec/ol/style/regularshape.test.js @@ -82,23 +82,23 @@ describe('ol.style.RegularShape', function() { expect(style.getHitDetectionImageSize()).to.eql([21, 21]); }); - it('sets default offset [0, 0]', function() { + it('sets default displacement [0, 0]', function() { const style = new RegularShape({ radius: 5 }); - expect(style.getOffset()).to.an('array'); - expect(style.getOffset()[0]).to.eql(0); - expect(style.getOffset()[1]).to.eql(0); + expect(style.getDisplacement()).to.an('array'); + expect(style.getDisplacement()[0]).to.eql(0); + expect(style.getDisplacement()[1]).to.eql(0); }); it('can use offset', function() { const style = new RegularShape({ radius: 5, - offset: [10, 20] + displacement: [10, 20] }); - expect(style.getOffset()).to.an('array'); - expect(style.getOffset()[0]).to.eql(10); - expect(style.getOffset()[1]).to.eql(20); + expect(style.getDisplacement()).to.an('array'); + expect(style.getDisplacement()[0]).to.eql(10); + expect(style.getDisplacement()[1]).to.eql(20); }); }); @@ -127,7 +127,7 @@ describe('ol.style.RegularShape', function() { }), rotation: 2, rotateWithView: true, - offest: [10, 20] + displacement: [10, 20] }); original.setOpacity(0.5); original.setScale(1.5); @@ -142,8 +142,8 @@ describe('ol.style.RegularShape', function() { expect(original.getRotateWithView()).to.eql(clone.getRotateWithView()); expect(original.getScale()).to.eql(clone.getScale()); expect(original.getStroke().getColor()).to.eql(clone.getStroke().getColor()); - expect(original.getOffset()[0]).to.eql(clone.getOffset()[0]); - expect(original.getOffset()[1]).to.eql(clone.getOffset()[1]); + expect(original.getDisplacement()[0]).to.eql(clone.getDisplacement()[0]); + expect(original.getDisplacement()[1]).to.eql(clone.getDisplacement()[1]); }); it('the clone does not reference the same objects as the original', function() { @@ -153,11 +153,13 @@ describe('ol.style.RegularShape', function() { }), stroke: new Stroke({ color: '#319FD3' - }) + }), + displacement: [0, 5] }); const clone = original.clone(); expect(original.getFill()).to.not.be(clone.getFill()); expect(original.getStroke()).to.not.be(clone.getStroke()); + expect(original.getDisplacement()).to.not.be(clone.getDisplacement()); clone.getFill().setColor('#012345'); clone.getStroke().setColor('#012345'); From 2112478b6b75efabab487e16eaef90ed2b337340 Mon Sep 17 00:00:00 2001 From: jkonieczny Date: Thu, 26 Dec 2019 22:07:05 +0100 Subject: [PATCH 083/246] Added test + jsdoc --- src/ol/style/Icon.js | 2 +- src/ol/style/RegularShape.js | 2 +- test/spec/ol/style/icon.test.js | 18 +++++++++++++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/ol/style/Icon.js b/src/ol/style/Icon.js index 9206227430..9882e4e274 100644 --- a/src/ol/style/Icon.js +++ b/src/ol/style/Icon.js @@ -33,7 +33,7 @@ import ImageStyle from './Image.js'; * to provide the size of the image, with the `imgSize` option. * @property {Array} [offset=[0, 0]] Offset, which, together with the size and the offset origin, define the * sub-rectangle to use from the original icon image. - * @property {Array} [displacement=[0,0]] Displacement the icon from the center + * @property {Array} [displacement=[0,0]] Displacement the icon * @property {import("./IconOrigin.js").default} [offsetOrigin='top-left'] Origin of the offset: `bottom-left`, `bottom-right`, * `top-left` or `top-right`. * @property {number} [opacity=1] Opacity of the icon. diff --git a/src/ol/style/RegularShape.js b/src/ol/style/RegularShape.js index 579008e11c..30f017ef91 100644 --- a/src/ol/style/RegularShape.js +++ b/src/ol/style/RegularShape.js @@ -20,7 +20,7 @@ import ImageStyle from './Image.js'; * @property {number} [radius1] Outer radius of a star. * @property {number} [radius2] Inner radius of a star. * @property {number} [angle=0] Shape's angle in radians. A value of 0 will have one of the shape's point facing up. - * @property {Array} [displacement=[0,0]] Offset of the shape + * @property {Array} [displacement=[0,0]] Displacement of the shape * @property {import("./Stroke.js").default} [stroke] Stroke style. * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise). * @property {boolean} [rotateWithView=false] Whether to rotate the shape with the view. diff --git a/test/spec/ol/style/icon.test.js b/test/spec/ol/style/icon.test.js index 6c790e32a1..b8e9cc35d2 100644 --- a/test/spec/ol/style/icon.test.js +++ b/test/spec/ol/style/icon.test.js @@ -97,22 +97,26 @@ describe('ol.style.Icon', function() { color: [1, 2, 3, 0.4], src: src, offset: [1, 2], - size: [10, 12] + size: [10, 12], + displacement: [5, 6] }); const clone = original.clone(); expect(original.getAnchor()).not.to.be(clone.getAnchor()); expect(original.offset_).not.to.be(clone.offset_); expect(original.getColor()).not.to.be(clone.getColor()); expect(original.getSize()).not.to.be(clone.getSize()); + expect(original.getDisplacement()).not.to.be(clone.getDisplacement()); clone.anchor_[0] = 0; clone.offset_[0] = 0; clone.color_[0] = 0; clone.size_[0] = 5; + clone.displacement_[0] = 10; expect(original.anchor_).not.to.eql(clone.anchor_); expect(original.offset_).not.to.eql(clone.offset_); expect(original.color_).not.to.eql(clone.color_); expect(original.size_).not.to.eql(clone.size_); + expect(original.displacement_).not.to.eql(clone.displacement_); }); }); @@ -229,6 +233,18 @@ describe('ol.style.Icon', function() { iconStyle.iconImage_.size_ = imageSize; expect(iconStyle.getOrigin()).to.eql([92, 20]); }); + + it('uses a top right offset origin + displacement', function() { + const iconStyle = new Icon({ + src: 'test.png', + size: size, + offset: offset, + offsetOrigin: 'top-right', + displacement: [20, 10] + }); + iconStyle.iconImage_.size_ = imageSize; + expect(iconStyle.getOrigin()).to.eql([92 + 20, 20 + 10]); + }); }); describe('#getImageSize', function() { From df710e4d6f2b9bdd4907e25a0a1188dcb779d8c8 Mon Sep 17 00:00:00 2001 From: jkonieczny Date: Mon, 13 Jan 2020 17:24:12 +0100 Subject: [PATCH 084/246] fix example with displacement --- examples/regularshape.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/regularshape.js b/examples/regularshape.js index 4431efcd25..0c194892d3 100644 --- a/examples/regularshape.js +++ b/examples/regularshape.js @@ -68,7 +68,7 @@ const styles = { points: 4, radius: 5, angle: Math.PI / 4, - offset: [0, 10] + displacement: [0, 10] }) }), new Style({ From 62cd0cbcc9494c9729f8a47e6e99eb6b904054d0 Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Fri, 17 Jan 2020 21:47:32 +0000 Subject: [PATCH 085/246] Replace Bing layer with MapTiler --- examples/kml.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/kml.html b/examples/kml.html index 74cb28ecb3..c6f392d5c0 100644 --- a/examples/kml.html +++ b/examples/kml.html @@ -4,10 +4,10 @@ title: KML shortdesc: Rendering KML with a vector source. docs: > This example uses the ol/format/KML to parse KML for rendering with a vector source. -tags: "KML" +tags: "KML, maptiler" cloak: - - key: As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5 - value: Your Bing Maps Key from http://www.bingmapsportal.com/ here + - key: get_your_own_D6rA4zTHduk6KOKTXzGB + value: Get your own API key at https://www.maptiler.com/cloud/ ---
 
From 3ac33ee723a78d0a329c42eea049d1e3d806d2ae Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Fri, 17 Jan 2020 21:53:52 +0000 Subject: [PATCH 086/246] Replace Bing layer with MapTiler --- examples/kml.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/examples/kml.js b/examples/kml.js index e7b6ef5c7f..611cd5beaa 100644 --- a/examples/kml.js +++ b/examples/kml.js @@ -2,13 +2,18 @@ import Map from '../src/ol/Map.js'; import View from '../src/ol/View.js'; import KML from '../src/ol/format/KML.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js'; -import BingMaps from '../src/ol/source/BingMaps.js'; +import XYZ from '../src/ol/source/XYZ.js'; import VectorSource from '../src/ol/source/Vector.js'; +const key = 'get_your_own_D6rA4zTHduk6KOKTXzGB'; +const attributions = '© MapTiler ' + + '© OpenStreetMap contributors'; + const raster = new TileLayer({ - source: new BingMaps({ - imagerySet: 'Aerial', - key: 'As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5' + source: new XYZ({ + attributions: attributions, + url: 'https://api.maptiler.com/tiles/satellite/{z}/{x}/{y}.jpg?key=' + key, + maxZoom: 20 }) }); From 9cc7ef4b96db8a3a7bb92a0246e0a038dd8a6c5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Kr=C3=B6g?= Date: Sat, 18 Jan 2020 17:43:30 +0100 Subject: [PATCH 087/246] Use correct config for tags which must not have a value. --- config/jsdoc/api/plugins/api.js | 2 +- config/jsdoc/api/plugins/inheritdoc.js | 2 +- config/jsdoc/info/virtual-plugin.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/jsdoc/api/plugins/api.js b/config/jsdoc/api/plugins/api.js index 866b04064a..c036ef1da9 100644 --- a/config/jsdoc/api/plugins/api.js +++ b/config/jsdoc/api/plugins/api.js @@ -4,7 +4,7 @@ */ exports.defineTags = function(dictionary) { dictionary.defineTag('api', { - mustHaveValue: false, + mustNotHaveValue: true, canHaveType: false, canHaveName: false, onTagged: function(doclet, tag) { diff --git a/config/jsdoc/api/plugins/inheritdoc.js b/config/jsdoc/api/plugins/inheritdoc.js index a399ae1007..7bc5636a23 100755 --- a/config/jsdoc/api/plugins/inheritdoc.js +++ b/config/jsdoc/api/plugins/inheritdoc.js @@ -5,7 +5,7 @@ exports.defineTags = function(dictionary) { dictionary.defineTag('inheritDoc', { - mustHaveValue: false, + mustNotHaveValue: true, canHaveType: false, canHaveName: false, onTagged: function(doclet, tag) { diff --git a/config/jsdoc/info/virtual-plugin.js b/config/jsdoc/info/virtual-plugin.js index 9209724c27..a1cb8ee8ec 100644 --- a/config/jsdoc/info/virtual-plugin.js +++ b/config/jsdoc/info/virtual-plugin.js @@ -6,7 +6,7 @@ exports.defineTags = function(dictionary) { const classTag = dictionary.lookUp('class'); dictionary.defineTag('interface', { - mustHaveValue: false, + mustNotHaveValue: true, onTagged: function(doclet, tag) { classTag.onTagged.apply(this, arguments); doclet.virtual = true; From 258bfeaecc688e2deef827fa9059ed96a94ab75b Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Sat, 18 Jan 2020 19:37:18 +0000 Subject: [PATCH 088/246] Make feature styles compatible with declutter Return a single style object for image and text for point features as concatenating two styles in an array is not compatible with decluttering --- src/ol/format/KML.js | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/ol/format/KML.js b/src/ol/format/KML.js index 11c1ec076c..b3273fcf42 100644 --- a/src/ol/format/KML.js +++ b/src/ol/format/KML.js @@ -911,9 +911,8 @@ function createNameStyleFunction(foundStyle, name) { textStyle.setOffsetY(textOffset[1]); textStyle.setTextAlign(textAlign); - const nameStyle = new Style({ - text: textStyle - }); + const nameStyle = foundStyle.clone(); + nameStyle.setText(textStyle); return nameStyle; } @@ -932,12 +931,11 @@ function createFeatureStyleFunction(style, styleUrl, defaultStyle, sharedStyles, /** * @param {Feature} feature feature. * @param {number} resolution Resolution. - * @return {Array' + - ' ' + - ' ' + - ' normal' + - ' #sn_ylw-pushpin' + - ' ' + - ' ' + - ' highlight' + - ' #sh_ylw-pushpin' + - ' ' + - ' ' + - ' ' + - ' Test' + - ' #msn_ylw-pushpin0' + - ' ' + - ' 1,2' + - ' ' + - ' ' + - ''; - const fs = format.readFeatures(text); - expect(fs).to.have.length(1); - const f = fs[0]; - expect(f).to.be.an(Feature); - const styleFunction = f.getStyleFunction(); - expect(styleFunction).not.to.be(undefined); - const styleArray = styleFunction(f, 0); - expect(styleArray).to.be.an(Array); - expect(styleArray).to.have.length(2); - const style = styleArray[1]; + const style = styleFunction(f, 0); expect(style).to.be.an(Style); expect(style.getText().getText()).to.eql(f.getProperties()['name']); }); From 9493d682170cbed1013d15b71f5332a690db14d6 Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Sat, 18 Jan 2020 20:19:56 +0000 Subject: [PATCH 090/246] Make feature styles compatible with declutter Remove type def relating to deleted line --- src/ol/format/KML.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ol/format/KML.js b/src/ol/format/KML.js index b3273fcf42..0c2a2b2186 100644 --- a/src/ol/format/KML.js +++ b/src/ol/format/KML.js @@ -935,7 +935,6 @@ function createFeatureStyleFunction(style, styleUrl, defaultStyle, sharedStyles, */ function(feature, resolution) { let drawName = showPointNames; - /** @type {Style|undefined} */ let name = ''; if (drawName) { const geometry = feature.getGeometry(); From 23858dc09d381c8121ca08751712748d8b710334 Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Sun, 19 Jan 2020 11:28:05 +0000 Subject: [PATCH 091/246] Convert any html character codes in labels --- src/ol/format/KML.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/ol/format/KML.js b/src/ol/format/KML.js index 0c2a2b2186..2773f53392 100644 --- a/src/ol/format/KML.js +++ b/src/ol/format/KML.js @@ -946,6 +946,12 @@ function createFeatureStyleFunction(style, styleUrl, defaultStyle, sharedStyles, if (drawName) { name = /** @type {string} */ (feature.get('name')); drawName = drawName && !!name; + // convert any html character codes + if (drawName && name.search(/&[^&]+;/) > -1) { + const text = document.createElement('textarea'); + text.innerHTML = name; + name = text.value; + } } if (style) { From bf23dca068f82d8af9968720d3a07e3bdb77da71 Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Sun, 19 Jan 2020 11:42:59 +0000 Subject: [PATCH 092/246] Include html character code in text style test --- test/spec/ol/format/kml.test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/spec/ol/format/kml.test.js b/test/spec/ol/format/kml.test.js index 926327abdd..ded663c858 100644 --- a/test/spec/ol/format/kml.test.js +++ b/test/spec/ol/format/kml.test.js @@ -2238,7 +2238,7 @@ describe('ol.format.KML', function() { expect(style.getZIndex()).to.be(undefined); }); - it('can create text style for named point placemarks', function() { + it('can create text style for named point placemarks (including html character codes)', function() { const text = '' + ' ' + ' ' + - ' Test' + + ' Joe's Test' + ' #msn_ylw-pushpin0' + ' ' + ' 1,2' + @@ -2281,7 +2281,7 @@ describe('ol.format.KML', function() { expect(styleFunction).not.to.be(undefined); const style = styleFunction(f, 0); expect(style).to.be.an(Style); - expect(style.getText().getText()).to.eql(f.getProperties()['name']); + expect(style.getText().getText()).to.eql('Joe's Test'); }); it('can write an feature\'s icon style', function() { From e2b42c100fc682f3d5fb8c59e134bdc2d90e8b01 Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Sun, 19 Jan 2020 12:02:16 +0000 Subject: [PATCH 093/246] Include html character code in text style test --- test/spec/ol/format/kml.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/spec/ol/format/kml.test.js b/test/spec/ol/format/kml.test.js index ded663c858..6f4e2fe2d6 100644 --- a/test/spec/ol/format/kml.test.js +++ b/test/spec/ol/format/kml.test.js @@ -2281,7 +2281,7 @@ describe('ol.format.KML', function() { expect(styleFunction).not.to.be(undefined); const style = styleFunction(f, 0); expect(style).to.be.an(Style); - expect(style.getText().getText()).to.eql('Joe's Test'); + expect(style.getText().getText()).to.eql('Joe\'s Test'); }); it('can write an feature\'s icon style', function() { From e2dc67546eaa6d73c7cd62afad6feceea0f956e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Kr=C3=B6g?= Date: Sun, 19 Jan 2020 15:51:48 +0100 Subject: [PATCH 094/246] Only generate module apidoc pages when it contains api tags --- config/jsdoc/api/plugins/api.js | 1 - 1 file changed, 1 deletion(-) diff --git a/config/jsdoc/api/plugins/api.js b/config/jsdoc/api/plugins/api.js index 866b04064a..3aeddbc23d 100644 --- a/config/jsdoc/api/plugins/api.js +++ b/config/jsdoc/api/plugins/api.js @@ -119,7 +119,6 @@ exports.handlers = { api.push(doclet); } if (doclet.kind == 'class') { - modules[doclet.longname.split(/[~\.]/).shift()] = true; if (!(doclet.longname in classes)) { classes[doclet.longname] = doclet; } else if ('augments' in doclet) { From fa9d4586a39e9cb2b285e4bcfd46e44ba747c33e Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2020 07:52:12 +0000 Subject: [PATCH 095/246] Bump @babel/core from 7.8.0 to 7.8.3 Bumps [@babel/core](https://github.com/babel/babel) from 7.8.0 to 7.8.3. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) - [Commits](https://github.com/babel/babel/compare/v7.8.0...v7.8.3) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 216 +++++++++++++++++++++++----------------------- 1 file changed, 108 insertions(+), 108 deletions(-) diff --git a/package-lock.json b/package-lock.json index 15a0ac9028..7b8957044f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,18 +25,18 @@ } }, "@babel/core": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.0.tgz", - "integrity": "sha512-3rqPi/bv/Xfu2YzHvBz4XqMI1fKVwnhntPA1/fjoECrSjrhbOCxlTrbVu5gUtr8zkxW+RpkDOa/HCW93gzS2Dw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.3.tgz", + "integrity": "sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/generator": "^7.8.0", - "@babel/helpers": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/traverse": "^7.8.0", - "@babel/types": "^7.8.0", + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helpers": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", @@ -48,59 +48,59 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", - "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "dev": true, "requires": { - "@babel/highlight": "^7.8.0" + "@babel/highlight": "^7.8.3" } }, "@babel/generator": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.0.tgz", - "integrity": "sha512-2Lp2e02CV2C7j/H4n4D9YvsvdhPVVg9GDIamr6Tu4tU35mL3mzOrzl1lZ8ZJtysfZXh+y+AGORc2rPS7yHxBUg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", + "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", "dev": true, "requires": { - "@babel/types": "^7.8.0", + "@babel/types": "^7.8.3", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", - "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-get-function-arity": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", - "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", - "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/highlight": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", - "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -109,43 +109,43 @@ } }, "@babel/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", + "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", "dev": true }, "@babel/template": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", - "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", + "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/traverse": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", - "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", + "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/generator": "^7.8.0", - "@babel/helper-function-name": "^7.8.0", - "@babel/helper-split-export-declaration": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0", + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -1306,70 +1306,70 @@ } }, "@babel/helpers": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.0.tgz", - "integrity": "sha512-srWKpjAFbiut5JoCReZJ098hLqoZ9HufOnKZPggc7j74XaPuQ+9b3RYPV1M/HfjL63lCNd8uI1O487qIWxAFNA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.3.tgz", + "integrity": "sha512-LmU3q9Pah/XyZU89QvBgGt+BCsTPoQa+73RxAQh8fb8qkDyIfeQnmgs+hvzhTCKTzqOyk7JTkS3MS1S8Mq5yrQ==", "dev": true, "requires": { - "@babel/template": "^7.8.0", - "@babel/traverse": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", - "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "dev": true, "requires": { - "@babel/highlight": "^7.8.0" + "@babel/highlight": "^7.8.3" } }, "@babel/generator": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.0.tgz", - "integrity": "sha512-2Lp2e02CV2C7j/H4n4D9YvsvdhPVVg9GDIamr6Tu4tU35mL3mzOrzl1lZ8ZJtysfZXh+y+AGORc2rPS7yHxBUg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", + "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", "dev": true, "requires": { - "@babel/types": "^7.8.0", + "@babel/types": "^7.8.3", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", - "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-get-function-arity": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", - "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", - "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/highlight": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", - "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -1378,43 +1378,43 @@ } }, "@babel/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", + "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", "dev": true }, "@babel/template": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", - "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", + "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/traverse": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", - "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", + "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/generator": "^7.8.0", - "@babel/helper-function-name": "^7.8.0", - "@babel/helper-split-export-declaration": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0", + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", From e00cfeec069009719ee2e31a3d4d7324b4bd4cd6 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2020 07:53:02 +0000 Subject: [PATCH 096/246] Bump sinon from 8.0.4 to 8.1.0 Bumps [sinon](https://github.com/sinonjs/sinon) from 8.0.4 to 8.1.0. - [Release notes](https://github.com/sinonjs/sinon/releases) - [Changelog](https://github.com/sinonjs/sinon/blob/master/CHANGELOG.md) - [Commits](https://github.com/sinonjs/sinon/compare/v8.0.4...v8.1.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 15a0ac9028..6f0c87b653 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11409,15 +11409,15 @@ "dev": true }, "sinon": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-8.0.4.tgz", - "integrity": "sha512-cFsmgmvsgFb87e7SV7IcekogITlHX2KmlplyI9Pda0FH1Z8Ms/kWbpLs25Idp0m6ZJ3HEEjhaYYXbcTtWWUn4w==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-8.1.0.tgz", + "integrity": "sha512-6/05TR+8QhEgTbyMWaConm8iPL609Eno7SqToPq63wC/jS/6NMEI4NxqtzlLkk3r/KcZT9xPXQodH0oJ917Hbg==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0", "@sinonjs/formatio": "^4.0.1", - "@sinonjs/samsam": "^4.2.1", - "diff": "^4.0.1", + "@sinonjs/samsam": "^4.2.2", + "diff": "^4.0.2", "lolex": "^5.1.2", "nise": "^3.0.1", "supports-color": "^7.1.0" From f2ae509d07f6642f705465e1d9494ac1e0f6ec78 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2020 07:54:16 +0000 Subject: [PATCH 097/246] Bump @babel/preset-env from 7.8.2 to 7.8.3 Bumps [@babel/preset-env](https://github.com/babel/babel) from 7.8.2 to 7.8.3. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) - [Commits](https://github.com/babel/babel/compare/v7.8.2...v7.8.3) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 1504 ++++++++++++++++++++++----------------------- 1 file changed, 752 insertions(+), 752 deletions(-) diff --git a/package-lock.json b/package-lock.json index 15a0ac9028..4036af0957 100644 --- a/package-lock.json +++ b/package-lock.json @@ -213,18 +213,18 @@ } }, "@babel/helper-annotate-as-pure": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.0.tgz", - "integrity": "sha512-WWj+1amBdowU2g18p3/KUc1Y5kWnaNm1paohq2tT4/RreeMNssYkv6ul9wkE2iIqjwLBwNMZGH4pTGlMSUqMMg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", + "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" }, "dependencies": { "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -235,19 +235,19 @@ } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.0.tgz", - "integrity": "sha512-KbBloNiBHM3ZyHg1ViDRs4QcnAunwMJ+rLpAEA8l3cWb3Z1xof7ag1iHvX16EwhUfaTG3+YSvTRPv4xHIrseUQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", + "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-explode-assignable-expression": "^7.8.3", + "@babel/types": "^7.8.3" }, "dependencies": { "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -258,70 +258,70 @@ } }, "@babel/helper-call-delegate": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.0.tgz", - "integrity": "sha512-Vi8K1LScr8ZgLicfuCNSE7JWUPG/H/9Bw9zn+3vQyy4vA54FEGTCuUTOXCFwmBM93OD6jHfjrQ6ZnivM5U+bHg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz", + "integrity": "sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.8.0", - "@babel/traverse": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", - "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "dev": true, "requires": { - "@babel/highlight": "^7.8.0" + "@babel/highlight": "^7.8.3" } }, "@babel/generator": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.0.tgz", - "integrity": "sha512-2Lp2e02CV2C7j/H4n4D9YvsvdhPVVg9GDIamr6Tu4tU35mL3mzOrzl1lZ8ZJtysfZXh+y+AGORc2rPS7yHxBUg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", + "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", "dev": true, "requires": { - "@babel/types": "^7.8.0", + "@babel/types": "^7.8.3", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", - "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-get-function-arity": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", - "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", - "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/highlight": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", - "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -330,43 +330,43 @@ } }, "@babel/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", + "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", "dev": true }, "@babel/template": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", - "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", + "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/traverse": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", - "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", + "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/generator": "^7.8.0", - "@babel/helper-function-name": "^7.8.0", - "@babel/helper-split-export-declaration": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0", + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -389,9 +389,9 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.1.tgz", - "integrity": "sha512-Fsrljg8DHSdnKSzC0YFopX7lseRpVfWMYuC1Dnvf7tw972E2KDjZ4XEaqjO9aJL0sLcG4KNRXxowDxHYIcZ+Cw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.3.tgz", + "integrity": "sha512-JLylPCsFjhLN+6uBSSh3iYdxKdeO9MNmoY96PE/99d8kyBFaXLORtAVhqN6iHa+wtPeqxKLghDOZry0+Aiw9Tw==", "dev": true, "requires": { "@babel/compat-data": "^7.8.1", @@ -402,12 +402,12 @@ } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.0.tgz", - "integrity": "sha512-vJj2hPbxxLUWJEV86iZiac5curAnC3ZVc+rFmFeWZigUOcuCPpbF+KxoEmxrkmuCGylHFF9t4lkpcDUcxnhQ5g==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz", + "integrity": "sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q==", "dev": true, "requires": { - "@babel/helper-regex": "^7.8.0", + "@babel/helper-regex": "^7.8.3", "regexpu-core": "^4.6.0" }, "dependencies": { @@ -437,49 +437,49 @@ } }, "@babel/helper-define-map": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.0.tgz", - "integrity": "sha512-Go06lUlZ4YImNEmdyAH5iO38yh5mbpOPSwA2PtV1vyczFhTZfX0OtzkiIL2pACo6AOYf89pLh42nhhDrqgzC3A==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", + "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.8.0", - "@babel/types": "^7.8.0", + "@babel/helper-function-name": "^7.8.3", + "@babel/types": "^7.8.3", "lodash": "^4.17.13" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", - "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "dev": true, "requires": { - "@babel/highlight": "^7.8.0" + "@babel/highlight": "^7.8.3" } }, "@babel/helper-function-name": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", - "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-get-function-arity": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", - "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/highlight": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", - "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -488,26 +488,26 @@ } }, "@babel/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", + "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", "dev": true }, "@babel/template": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", - "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", + "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -518,69 +518,69 @@ } }, "@babel/helper-explode-assignable-expression": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.0.tgz", - "integrity": "sha512-w4mRQqKAh4M7BSLwvDMm8jYFroEzpqMCtXDhFHP+kNjMIQWpbC6b0Q/RUQsJNSf54rIx6XMdci1Stf60DWw+og==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", + "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", "dev": true, "requires": { - "@babel/traverse": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", - "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "dev": true, "requires": { - "@babel/highlight": "^7.8.0" + "@babel/highlight": "^7.8.3" } }, "@babel/generator": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.0.tgz", - "integrity": "sha512-2Lp2e02CV2C7j/H4n4D9YvsvdhPVVg9GDIamr6Tu4tU35mL3mzOrzl1lZ8ZJtysfZXh+y+AGORc2rPS7yHxBUg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", + "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", "dev": true, "requires": { - "@babel/types": "^7.8.0", + "@babel/types": "^7.8.3", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", - "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-get-function-arity": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", - "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", - "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/highlight": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", - "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -589,43 +589,43 @@ } }, "@babel/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", + "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", "dev": true }, "@babel/template": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", - "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", + "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/traverse": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", - "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", + "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/generator": "^7.8.0", - "@babel/helper-function-name": "^7.8.0", - "@babel/helper-split-export-declaration": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0", + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -668,18 +668,18 @@ } }, "@babel/helper-hoist-variables": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.0.tgz", - "integrity": "sha512-jDl66KvuklTXUADcoXDMur1jDtAZUZZkzLIaQ54+z38ih8C0V0hC56hMaoVoyoxN60MwQmmrHctBwcLqP0c/Lw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", + "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" }, "dependencies": { "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -690,18 +690,18 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.0.tgz", - "integrity": "sha512-0m1QabGrdXuoxX/g+KOAGndoHwskC70WweqHRQyCsaO67KOEELYh4ECcGw6ZGKjDKa5Y7SW4Qbhw6ly4Fah/jQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", + "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" }, "dependencies": { "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -721,50 +721,50 @@ } }, "@babel/helper-module-transforms": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.0.tgz", - "integrity": "sha512-fvGhX4FY7YwRdWW/zfddNaKpYl8TaA8hvwONIYhv1/a1ZbgxbTrjsmH6IGWUgUNki7QzbpZ27OEh88sZdft3YA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz", + "integrity": "sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.8.0", - "@babel/helper-simple-access": "^7.8.0", - "@babel/helper-split-export-declaration": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0", + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3", "lodash": "^4.17.13" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", - "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "dev": true, "requires": { - "@babel/highlight": "^7.8.0" + "@babel/highlight": "^7.8.3" } }, "@babel/helper-module-imports": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.0.tgz", - "integrity": "sha512-ylY9J6ZxEcjmJaJ4P6aVs/fZdrZVctCGnxxfYXwCnSMapqd544zT8lWK2qI/vBPjE5gS0o2jILnH+AkpsPauEQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", - "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/highlight": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", - "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -773,26 +773,26 @@ } }, "@babel/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", + "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", "dev": true }, "@babel/template": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", - "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", + "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -803,18 +803,18 @@ } }, "@babel/helper-optimise-call-expression": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.0.tgz", - "integrity": "sha512-aiJt1m+K57y0n10fTw+QXcCXzmpkG+o+NoQmAZqlZPstkTE0PZT+Z27QSd/6Gf00nuXJQO4NiJ0/YagSW5kC2A==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", + "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" }, "dependencies": { "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -825,87 +825,87 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", - "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", "dev": true }, "@babel/helper-regex": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.0.tgz", - "integrity": "sha512-haD8fRsPtyFZkbtxBIaGBBHRtbn0YsyecdYrxNgO0Bl6SlGokJPQX9M2tDuVbeQBYHZVLUPMSwGQn4obHevsMQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", + "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", "dev": true, "requires": { "lodash": "^4.17.13" } }, "@babel/helper-remap-async-to-generator": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.0.tgz", - "integrity": "sha512-+aKyBd4oHAaIZgOLq/uLjkUz7ExZ0ppdNBc8Qr72BmtKNAy3A6EJa/ifjj0//CIzQtUDPs3E6HjKM2cV6bnXsQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", + "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.8.0", - "@babel/helper-wrap-function": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/traverse": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-wrap-function": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", - "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "dev": true, "requires": { - "@babel/highlight": "^7.8.0" + "@babel/highlight": "^7.8.3" } }, "@babel/generator": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.0.tgz", - "integrity": "sha512-2Lp2e02CV2C7j/H4n4D9YvsvdhPVVg9GDIamr6Tu4tU35mL3mzOrzl1lZ8ZJtysfZXh+y+AGORc2rPS7yHxBUg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", + "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", "dev": true, "requires": { - "@babel/types": "^7.8.0", + "@babel/types": "^7.8.3", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", - "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-get-function-arity": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", - "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", - "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/highlight": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", - "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -914,43 +914,43 @@ } }, "@babel/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", + "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", "dev": true }, "@babel/template": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", - "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", + "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/traverse": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", - "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", + "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/generator": "^7.8.0", - "@babel/helper-function-name": "^7.8.0", - "@babel/helper-split-export-declaration": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0", + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -973,71 +973,71 @@ } }, "@babel/helper-replace-supers": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.0.tgz", - "integrity": "sha512-R2CyorW4tcO3YzdkClLpt6MS84G+tPkOi0MmiCn1bvYVnmDpdl9R15XOi3NQW2mhOAEeBnuQ4g1Bh7pT2sX8fg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz", + "integrity": "sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.8.0", - "@babel/helper-optimise-call-expression": "^7.8.0", - "@babel/traverse": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", - "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "dev": true, "requires": { - "@babel/highlight": "^7.8.0" + "@babel/highlight": "^7.8.3" } }, "@babel/generator": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.0.tgz", - "integrity": "sha512-2Lp2e02CV2C7j/H4n4D9YvsvdhPVVg9GDIamr6Tu4tU35mL3mzOrzl1lZ8ZJtysfZXh+y+AGORc2rPS7yHxBUg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", + "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", "dev": true, "requires": { - "@babel/types": "^7.8.0", + "@babel/types": "^7.8.3", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", - "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-get-function-arity": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", - "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", - "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/highlight": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", - "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -1046,43 +1046,43 @@ } }, "@babel/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", + "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", "dev": true }, "@babel/template": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", - "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", + "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/traverse": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", - "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", + "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/generator": "^7.8.0", - "@babel/helper-function-name": "^7.8.0", - "@babel/helper-split-export-declaration": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0", + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -1105,28 +1105,28 @@ } }, "@babel/helper-simple-access": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.0.tgz", - "integrity": "sha512-I+7yKZJnxp7VIC2UFzXfVjLiJuU16rYFF59x27c+boINkO/pLETgZcoesCryg9jmU4jxEa0foFueW+2wjc9Gsw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", + "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", "dev": true, "requires": { - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", - "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "dev": true, "requires": { - "@babel/highlight": "^7.8.0" + "@babel/highlight": "^7.8.3" } }, "@babel/highlight": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", - "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -1135,26 +1135,26 @@ } }, "@babel/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", + "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", "dev": true }, "@babel/template": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", - "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", + "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -1174,71 +1174,71 @@ } }, "@babel/helper-wrap-function": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.0.tgz", - "integrity": "sha512-2j6idN2jt8Y+8nJ4UPN/6AZa53DAkcETMVmroJQh50qZc59PuQKVjgOIIqmrLoQf6Ia9bs90MHRcID1OW5tfag==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", + "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/traverse": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-function-name": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", - "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "dev": true, "requires": { - "@babel/highlight": "^7.8.0" + "@babel/highlight": "^7.8.3" } }, "@babel/generator": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.0.tgz", - "integrity": "sha512-2Lp2e02CV2C7j/H4n4D9YvsvdhPVVg9GDIamr6Tu4tU35mL3mzOrzl1lZ8ZJtysfZXh+y+AGORc2rPS7yHxBUg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", + "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", "dev": true, "requires": { - "@babel/types": "^7.8.0", + "@babel/types": "^7.8.3", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", - "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-get-function-arity": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", - "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", - "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/highlight": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", - "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -1247,43 +1247,43 @@ } }, "@babel/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", + "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", "dev": true }, "@babel/template": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", - "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", + "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/traverse": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", - "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", + "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/generator": "^7.8.0", - "@babel/helper-function-name": "^7.8.0", - "@babel/helper-split-export-declaration": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0", + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -1454,191 +1454,191 @@ "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.0.tgz", - "integrity": "sha512-8vIQf8JYced7gCeKDsGETNGKE+zdD/JmP1LBlRn+w3UXc1aSpZv2Y330bB/fnOEbUgPbuFv+IEi+gopg+Fu0kQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", + "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0", - "@babel/helper-remap-async-to-generator": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3", "@babel/plugin-syntax-async-generators": "^7.8.0" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.0.tgz", - "integrity": "sha512-YzMq0AqeTR4Mh2pz3GrCWqhcEV38HgUMMR/56/YR5GPc4Y2p1KJ4Le6j92vMnW8TJqVj+qJz/KDNglpMeww9Yg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz", + "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-dynamic-import": "^7.8.0" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.0.tgz", - "integrity": "sha512-pSpuhwn926vtNeUH2FHx1OzIXaUMgklG0MzlFZJVEg37fB904gOxN572NgBae+KDwFyZDpkLMyEkVA011lBJrQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", + "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.0" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.0.tgz", - "integrity": "sha512-cQMI+RQdcK2IyMm13NKKFCYfOSBUtFxEeRBOdFCi2Pubv/CpkrCubc/ikdeKMT6Lu+uQ+lNSDEJvDCOQZkUy0g==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.0.tgz", - "integrity": "sha512-SjJ2ZXCylpWC+5DTES0/pbpNmw/FnjU/3dF068xF0DU9aN+oOKah+3MCSFcb4pnZ9IwmxfOy4KnbGJSQR+hAZA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-object-rest-spread": "^7.8.0" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.0.tgz", - "integrity": "sha512-tHP3eez6TrpPJYttBZ/6uItRbIuXUIDpQ9xwvzKwR+RboWGMJ7WzFC5dDJ3vjLuCx0/DG1tM0MVkmgcBybth9w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.0.tgz", - "integrity": "sha512-PNBHxPHE91m+LLOdGwlvyGicWfrMgiVwng5WdB3CMjd61+vn3vPw0GbgECIAUCZnyi7Jqs5htUIZRztGuV8/5g==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz", + "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.0" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.0.tgz", - "integrity": "sha512-3oK0Qt5w4arb+es3rWBribDbtc0TYJP7dFZ1dXcYul3cXderqfIOoSx9YUC1oD208nJwJO/++fvrgLmkYSbe8A==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz", + "integrity": "sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-syntax-async-generators": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.0.tgz", - "integrity": "sha512-a8w8k7pK8nYhem07rXdAq03T+DlTX8LFojUptrh9JEx80AgLqGiuoFIyQOGTWif39kFnDOQqbzl1s6KQqrfV+A==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.0.tgz", - "integrity": "sha512-Mx2RzpCHJaBfmFdA2abXDKRHVJdzJ6R0Wqwb6TxCgM7NRR5wcC4cyiAsRL7Ga+lwG8GG1cKvb+4ENjic8y15jA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-json-strings": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.0.tgz", - "integrity": "sha512-LPykaAbH86L5NnDfCRSpNxtEHZk+6GaFzXfWEFU/6R4v69EXQr6GOp7hwH+Uw0QlYVN++s6TukTJ3flFcspahA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.0.tgz", - "integrity": "sha512-Rv2hnBToN6rbA9hO2a4vtwXZLzNa+TWkoSIMMvUezFz5+D9NPeX7SFrArwtFzzbwndmWiqboTr5rNpzAz0MPpA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.0.tgz", - "integrity": "sha512-dt89fDlkfkTrQcy5KavMQPyF2A6tR0kYp8HAnIoQv5hO34iAUffHghP/hMGd7Gf/+uYTmLQO0ar7peX1SUWyIA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.0.tgz", - "integrity": "sha512-EIgJVy+u1RvR2gJfX4ReLwAupO/twllUue1wPrRxhu18+eC3bGTEcOSXLQdaE9ya9NG1rE0eQs0GSiloUGFEwg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.0.tgz", - "integrity": "sha512-LV1c+TTAO8Vawe3t+WXBHYWbS7endP8MSlqKPKEZOyWPEJX2akl3jfvFG828/OE7RpyoC3JXfLJDFj/jN7A8hg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.0.tgz", - "integrity": "sha512-iXR/Cw32fMfWlD1sK2zD/nXtuLStkalRv+xee6VrX84CFrn2LKwb/EOs/4UaDNUpUsws8YZYKeQjPagacFquug==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz", + "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.0.tgz", - "integrity": "sha512-9KfteDp9d8cF388dxFMOh3Dum41qpOVUPVjQhXGd1kPyQBE05FJgYndiAriML2yhMIbZ2bjgweh2nnvBXDH2MQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", + "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.0.tgz", - "integrity": "sha512-9dvBvJnEdsDWYMrykoMyLNVRPGoub6SFlARtsYgSQ1riTjnyBjhctihSME4XsSku86F59PDeFpC9PCU+9I154w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", + "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0", - "@babel/helper-remap-async-to-generator": "^7.8.0" + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3" }, "dependencies": { "@babel/helper-module-imports": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.0.tgz", - "integrity": "sha512-ylY9J6ZxEcjmJaJ4P6aVs/fZdrZVctCGnxxfYXwCnSMapqd544zT8lWK2qI/vBPjE5gS0o2jILnH+AkpsPauEQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -1649,82 +1649,82 @@ } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.0.tgz", - "integrity": "sha512-bim6gUfHq2kPN+aQst33ZEMeglpaUXAo6PWTZvOA8BOnWpNKgZcUzBvpZhh2ofL6YhZgzGoRwVVfzwynDEf47g==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", + "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.0.tgz", - "integrity": "sha512-FKTK4hzg7W950Yu9iqMl12WBixCmusMc5HBt3/ErvpFLnvr3/6mu/EBTZoCEJ0mw/lQUDfU01vTcZY9oEahlMg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", + "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-plugin-utils": "^7.8.3", "lodash": "^4.17.13" } }, "@babel/plugin-transform-classes": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.0.tgz", - "integrity": "sha512-18RLDwKtGXCLLbf5V03GojebPH7dKYCmIBqQGhgfZDoYsyEzR9kMZ6IxlJP72K5ROC9ADa4KPI6ywuh7NfQOgQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz", + "integrity": "sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.8.0", - "@babel/helper-define-map": "^7.8.0", - "@babel/helper-function-name": "^7.8.0", - "@babel/helper-optimise-call-expression": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0", - "@babel/helper-replace-supers": "^7.8.0", - "@babel/helper-split-export-declaration": "^7.8.0", + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-define-map": "^7.8.3", + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", "globals": "^11.1.0" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", - "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "dev": true, "requires": { - "@babel/highlight": "^7.8.0" + "@babel/highlight": "^7.8.3" } }, "@babel/helper-function-name": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", - "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-get-function-arity": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", - "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-split-export-declaration": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", - "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/highlight": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", - "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -1733,26 +1733,26 @@ } }, "@babel/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", + "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", "dev": true }, "@babel/template": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", - "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", + "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -1763,104 +1763,104 @@ } }, "@babel/plugin-transform-computed-properties": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.0.tgz", - "integrity": "sha512-FaODHuQRdnWFVwxLPlTN85Lk/aitfvQBHTXahf58FnatCynfhkeNUO8ID+AqAxY4IJsZjeH6OnKDzcGfgKJcVw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", + "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-destructuring": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.0.tgz", - "integrity": "sha512-D+69HT//cE86aBTLULzSBFLC5A7HcPQzJPiny6P4SLHkDF750MylRKO3iWvdgvb+OSp5dOrOxwXajvaxk1ZfYA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz", + "integrity": "sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.0.tgz", - "integrity": "sha512-pq/XLkDB4MPvTe9ktHJInfWksalXogrIGRZJUG7RiDXhEfdNrlducoMPbACZQuCFtelVgVpD0VyreiY0l38G7g==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", + "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.0.tgz", - "integrity": "sha512-REtYWvpP4TDw4oVeP01vQJcAeewjgk8/i7tPFP11vUjvarUGGyxJLeq79WEnIdnKPQJirZaoDRT4kEWEdSWkDw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", + "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.0.tgz", - "integrity": "sha512-vaDgF3gPLzVcoe3UZqnra6FA7O797sZc+UCHPd9eQTI34cPtpCA270LzopIXS3Fhc3UmFrijLmre9mHTmUKVgg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", + "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-for-of": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.0.tgz", - "integrity": "sha512-9j9g0qViCAo8E5qCBSaQdghymn7A9bRXSfS9jU7oLpYccYFZg9A+1KO8X+HV7fhJYH6mZ+e7MRg4p3sLo+RG6Q==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.3.tgz", + "integrity": "sha512-ZjXznLNTxhpf4Q5q3x1NsngzGA38t9naWH8Gt+0qYZEJAcvPI9waSStSh56u19Ofjr7QmD0wUsQ8hw8s/p1VnA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-function-name": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.0.tgz", - "integrity": "sha512-YL8Ol54UKeIyY1uUGfry+B9ppXAB3aVBB1gG9gxqhg/OBCPpV2QUNswmjvfmyXEdaWv8qODssBgX7on792h44w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", + "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" }, "dependencies": { "@babel/code-frame": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", - "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "dev": true, "requires": { - "@babel/highlight": "^7.8.0" + "@babel/highlight": "^7.8.3" } }, "@babel/helper-function-name": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", - "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", + "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.8.0", - "@babel/template": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-get-function-arity": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", - "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/highlight": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", - "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -1869,26 +1869,26 @@ } }, "@babel/parser": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", - "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", + "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", "dev": true }, "@babel/template": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", - "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", + "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.0", - "@babel/parser": "^7.8.0", - "@babel/types": "^7.8.0" + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -1899,120 +1899,120 @@ } }, "@babel/plugin-transform-literals": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.0.tgz", - "integrity": "sha512-7UDPKG+uVltsZt98Hw+rMbLg772r8fQC6YJ2fNDckcpAXgIWqQbMCmCpfYo0hBNhdhqocM73auk4P/zziQshQw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", + "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.0.tgz", - "integrity": "sha512-lJSdaWR56wmrosCiyqKFRVnLrFYoVAk2mtZAyegt7akeJky/gguv0Rukx9GV3XwHGuM1ZPE06cZMjNlcLp8LrQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz", + "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.0.tgz", - "integrity": "sha512-mFr1O3TaDL4XozM3AzNPz9AsxzzjTxwn4aOShYP5TlO+4rufvjagV2KKDTPMZTQm1ZA/C/PxJDsDekEnnUGz5A==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", + "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.0.tgz", - "integrity": "sha512-w2g8tmL7NgBYt6alc8YawMcmPiYqnVvvI0kLB++VOUOssqdJMAkfQOMGV+2M8H5uhJYDaAghAVMUYps3s+jMrw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz", + "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0", - "@babel/helper-simple-access": "^7.8.0", + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-simple-access": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.0.tgz", - "integrity": "sha512-tKF9KLiIsiKyWTVU0yo+NcNAylGn7euggYwXw63/tMxGtDTPsB9Y7Ecqv4EoXEwtoJOJ0Lewf17oaWQtindxIA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", + "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.8.0", - "@babel/helper-module-transforms": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0", + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.0.tgz", - "integrity": "sha512-lAwNfXwmfTy7fl2XOyoVpMXnLkJANgH0vdSYNFcS4RuJPBtHfunGA+Y0L7wsHmfPzyVYt8sUglLjaWtdZMNJNg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", + "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.0.tgz", - "integrity": "sha512-kq1rxQ1HviCP13SMGZ4WjBBpdogTGK7yn/g/+p+g1AQledgHOWKVeMY1DwKYGlGJ/grDGTOqpJLF1v3Sb7ghKA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", + "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.0" + "@babel/helper-create-regexp-features-plugin": "^7.8.3" } }, "@babel/plugin-transform-new-target": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.0.tgz", - "integrity": "sha512-hH1Afz9Xy/wkcxhoI0vYw48kTBJqYUhMmhp3SLI1p817iByM6ItH4LS8tZatDAIKmAQAXj8d3Ups1BgVJECDrA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", + "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-object-super": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.0.tgz", - "integrity": "sha512-2DYqQ811nRlFVlni6iqfxBVVGqkBgfvEv/lcvmdNu2CaG+EA7zSP1hqYUsqamR+uCdDbsrV7uY6/0rkXbJo5YQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", + "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0", - "@babel/helper-replace-supers": "^7.8.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3" } }, "@babel/plugin-transform-parameters": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.0.tgz", - "integrity": "sha512-9R2yykk7H92rntETO0fq52vJ4OFaTcDA49K9s8bQPyoD4o3/SkWEklukArCsQC6fowEuraPkH/umopr9uO539g==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.3.tgz", + "integrity": "sha512-/pqngtGb54JwMBZ6S/D3XYylQDFtGjWrnoCF4gXZOUpFV/ujbxnoNGNvDGu6doFWRPBveE72qTx/RRU44j5I/Q==", "dev": true, "requires": { - "@babel/helper-call-delegate": "^7.8.0", - "@babel/helper-get-function-arity": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-call-delegate": "^7.8.3", + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" }, "dependencies": { "@babel/helper-get-function-arity": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", - "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -2023,107 +2023,107 @@ } }, "@babel/plugin-transform-property-literals": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.0.tgz", - "integrity": "sha512-vjZaQlojnZIahu5ofEW+hPJfDI5A6r2Sbi5C0RuCaAOFj7viDIR5kOR7ul3Fz5US8V1sVk5Zd2yuPaz7iBeysg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz", + "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-regenerator": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.0.tgz", - "integrity": "sha512-n88GT8PZuOHWxqxCJORW3g1QaYzQhHu5sEslxYeQkHVoewfnfuWN37t7YGaRLaNUdaZUlRPXhDcLGT7zBa/u0g==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz", + "integrity": "sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA==", "dev": true, "requires": { "regenerator-transform": "^0.14.0" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.0.tgz", - "integrity": "sha512-DnshRyDTXZhmAgO2c1QKZI4CfZjoP2t3fSwRsnbCP9P/FSBpf9I7ovnAELswklw5OeY+/D/JIiaGLoUt2II3LA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz", + "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.0.tgz", - "integrity": "sha512-sExhzq63Gl2PMbl7ETpN7Z1A38rLD6GeCT6EEEIIKjTVt9u6dRqJ6nHhaquL7QgR3egj/8fcvq23UvzfPqGAYA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", + "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-spread": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.0.tgz", - "integrity": "sha512-6Zjl0pv6x10YmFVRI0VhwJ/rE++geVHNJ9xwd+UIt3ON2VMRO7qI2lPsyLnzidR5HYNd/JXj47kdU9Rrn4YcnQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", + "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.0.tgz", - "integrity": "sha512-uksok0Bqox8YeIRFhr6RRtlBXeGpN1ogiEVjEd7A7rVLPZBXKGbL7kODpE7MQ+avjDLv5EEKtDCeYuWZK7FF7g==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", + "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0", - "@babel/helper-regex": "^7.8.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-regex": "^7.8.3" } }, "@babel/plugin-transform-template-literals": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.0.tgz", - "integrity": "sha512-EF7Q7LEgeMpogHcvmHMNXBWdLWG1tpA1ErXH3i8zTu3+UEKo6aBn+FldPAJ16UbbbOwSCUCiDP6oZxvVRPhwnQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", + "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.0.tgz", - "integrity": "sha512-rEUBEFzsA9mCS2r7EtXFlM/6GqtzgLdC4WVYM9fIgJX+HcSJ8oMmj8LinfKhbo0ipRauvUM2teE2iNDNqDwO1g==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.3.tgz", + "integrity": "sha512-3TrkKd4LPqm4jHs6nPtSDI/SV9Cm5PRJkHLUgTcqRQQTMAZ44ZaAdDZJtvWFSaRcvT0a1rTmJ5ZA5tDKjleF3g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.0.tgz", - "integrity": "sha512-qDg8wsnE47B/Sj8ZtOndPHrGBxJMssZJ71SzXrItum9n++iVFN7kYuJO+OHhjom7+/or0zzYqvJNzCkUjyNKqg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", + "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/preset-env": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.2.tgz", - "integrity": "sha512-AF2YUl2bGsLWTtFL68upTTB7nDo05aEcKjHmXJE+aXRvsx5K+9yRsHQP3MjnTrLOWe/eFyUr93dfILROsKC4eg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.3.tgz", + "integrity": "sha512-Rs4RPL2KjSLSE2mWAx5/iCH+GC1ikKdxPrhnRS6PfFVaiZeom22VFKN4X8ZthyN61kAaR05tfXTbCvatl9WIQg==", "dev": true, "requires": { "@babel/compat-data": "^7.8.0", - "@babel/helper-compilation-targets": "^7.8.0", - "@babel/helper-module-imports": "^7.8.0", - "@babel/helper-plugin-utils": "^7.8.0", - "@babel/plugin-proposal-async-generator-functions": "^7.8.0", - "@babel/plugin-proposal-dynamic-import": "^7.8.0", - "@babel/plugin-proposal-json-strings": "^7.8.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-proposal-object-rest-spread": "^7.8.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.8.0", - "@babel/plugin-proposal-optional-chaining": "^7.8.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.8.0", + "@babel/helper-compilation-targets": "^7.8.3", + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-proposal-async-generator-functions": "^7.8.3", + "@babel/plugin-proposal-dynamic-import": "^7.8.3", + "@babel/plugin-proposal-json-strings": "^7.8.3", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.8.3", + "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.8.3", + "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", "@babel/plugin-syntax-async-generators": "^7.8.0", "@babel/plugin-syntax-dynamic-import": "^7.8.0", "@babel/plugin-syntax-json-strings": "^7.8.0", @@ -2131,39 +2131,39 @@ "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.8.0", - "@babel/plugin-transform-arrow-functions": "^7.8.0", - "@babel/plugin-transform-async-to-generator": "^7.8.0", - "@babel/plugin-transform-block-scoped-functions": "^7.8.0", - "@babel/plugin-transform-block-scoping": "^7.8.0", - "@babel/plugin-transform-classes": "^7.8.0", - "@babel/plugin-transform-computed-properties": "^7.8.0", - "@babel/plugin-transform-destructuring": "^7.8.0", - "@babel/plugin-transform-dotall-regex": "^7.8.0", - "@babel/plugin-transform-duplicate-keys": "^7.8.0", - "@babel/plugin-transform-exponentiation-operator": "^7.8.0", - "@babel/plugin-transform-for-of": "^7.8.0", - "@babel/plugin-transform-function-name": "^7.8.0", - "@babel/plugin-transform-literals": "^7.8.0", - "@babel/plugin-transform-member-expression-literals": "^7.8.0", - "@babel/plugin-transform-modules-amd": "^7.8.0", - "@babel/plugin-transform-modules-commonjs": "^7.8.0", - "@babel/plugin-transform-modules-systemjs": "^7.8.0", - "@babel/plugin-transform-modules-umd": "^7.8.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.0", - "@babel/plugin-transform-new-target": "^7.8.0", - "@babel/plugin-transform-object-super": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.8.0", - "@babel/plugin-transform-property-literals": "^7.8.0", - "@babel/plugin-transform-regenerator": "^7.8.0", - "@babel/plugin-transform-reserved-words": "^7.8.0", - "@babel/plugin-transform-shorthand-properties": "^7.8.0", - "@babel/plugin-transform-spread": "^7.8.0", - "@babel/plugin-transform-sticky-regex": "^7.8.0", - "@babel/plugin-transform-template-literals": "^7.8.0", - "@babel/plugin-transform-typeof-symbol": "^7.8.0", - "@babel/plugin-transform-unicode-regex": "^7.8.0", - "@babel/types": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.8.3", + "@babel/plugin-transform-async-to-generator": "^7.8.3", + "@babel/plugin-transform-block-scoped-functions": "^7.8.3", + "@babel/plugin-transform-block-scoping": "^7.8.3", + "@babel/plugin-transform-classes": "^7.8.3", + "@babel/plugin-transform-computed-properties": "^7.8.3", + "@babel/plugin-transform-destructuring": "^7.8.3", + "@babel/plugin-transform-dotall-regex": "^7.8.3", + "@babel/plugin-transform-duplicate-keys": "^7.8.3", + "@babel/plugin-transform-exponentiation-operator": "^7.8.3", + "@babel/plugin-transform-for-of": "^7.8.3", + "@babel/plugin-transform-function-name": "^7.8.3", + "@babel/plugin-transform-literals": "^7.8.3", + "@babel/plugin-transform-member-expression-literals": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.8.3", + "@babel/plugin-transform-modules-commonjs": "^7.8.3", + "@babel/plugin-transform-modules-systemjs": "^7.8.3", + "@babel/plugin-transform-modules-umd": "^7.8.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", + "@babel/plugin-transform-new-target": "^7.8.3", + "@babel/plugin-transform-object-super": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.8.3", + "@babel/plugin-transform-property-literals": "^7.8.3", + "@babel/plugin-transform-regenerator": "^7.8.3", + "@babel/plugin-transform-reserved-words": "^7.8.3", + "@babel/plugin-transform-shorthand-properties": "^7.8.3", + "@babel/plugin-transform-spread": "^7.8.3", + "@babel/plugin-transform-sticky-regex": "^7.8.3", + "@babel/plugin-transform-template-literals": "^7.8.3", + "@babel/plugin-transform-typeof-symbol": "^7.8.3", + "@babel/plugin-transform-unicode-regex": "^7.8.3", + "@babel/types": "^7.8.3", "browserslist": "^4.8.2", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", @@ -2172,18 +2172,18 @@ }, "dependencies": { "@babel/helper-module-imports": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.0.tgz", - "integrity": "sha512-ylY9J6ZxEcjmJaJ4P6aVs/fZdrZVctCGnxxfYXwCnSMapqd544zT8lWK2qI/vBPjE5gS0o2jILnH+AkpsPauEQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", "dev": true, "requires": { - "@babel/types": "^7.8.0" + "@babel/types": "^7.8.3" } }, "@babel/types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", - "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", + "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -3683,9 +3683,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001020", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001020.tgz", - "integrity": "sha512-yWIvwA68wRHKanAVS1GjN8vajAv7MBFshullKCeq/eKpK7pJBVDgFFEqvgWTkcP2+wIDeQGYFRXECjKZnLkUjA==", + "version": "1.0.30001021", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001021.tgz", + "integrity": "sha512-wuMhT7/hwkgd8gldgp2jcrUjOU9RXJ4XxGumQeOsUr91l3WwmM68Cpa/ymCnWEDqakwFXhuDQbaKNHXBPgeE9g==", "dev": true }, "caseless": { @@ -4194,9 +4194,9 @@ "dev": true }, "core-js-compat": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.3.tgz", - "integrity": "sha512-Y3YNGU3bU1yrnzVodop23ghArbKv4IqkZg9MMOWv/h7KT6NRk1/SzHhWDDlubg2+tlcUzAqgj1/GyeJ9fUKMeg==", + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.4.tgz", + "integrity": "sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA==", "dev": true, "requires": { "browserslist": "^4.8.3", @@ -4661,9 +4661,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.332", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.332.tgz", - "integrity": "sha512-AP2HkLhfSOIxP7gDjlyZ4ywGWIcxRMZoU9+JriuVkQe2pSLDdWBsE6+eI6BQOqun1dohLrUTOPHsQLLhhFA7Eg==", + "version": "1.3.338", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.338.tgz", + "integrity": "sha512-wlmfixuHEc9CkfOKgcqdtzBmRW4NStM9ptl5oPILY2UDyHuSXb3Yit+yLVyLObTgGuMMU36hhnfs2GDJId7ctA==", "dev": true }, "elliptic": { @@ -9487,9 +9487,9 @@ } }, "node-releases": { - "version": "1.1.45", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.45.tgz", - "integrity": "sha512-cXvGSfhITKI8qsV116u2FTzH5EWZJfgG7d4cpqwF8I8+1tWpD6AsvvGRKq2onR0DNj1jfqsjkXZsm14JMS7Cyg==", + "version": "1.1.46", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.46.tgz", + "integrity": "sha512-YOjdx+Uoh9FbRO7yVYbnbt1puRWPQMemR3SutLeyv2XfxKs1ihpe0OLAUwBPEP2ImNH/PZC7SEiC6j32dwRZ7g==", "dev": true, "requires": { "semver": "^6.3.0" From 9ce0d6159ce32c7bc23072c846fad9452cd8d636 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2020 07:55:15 +0000 Subject: [PATCH 098/246] Bump handlebars from 4.7.1 to 4.7.2 Bumps [handlebars](https://github.com/wycats/handlebars.js) from 4.7.1 to 4.7.2. - [Release notes](https://github.com/wycats/handlebars.js/releases) - [Changelog](https://github.com/wycats/handlebars.js/blob/master/release-notes.md) - [Commits](https://github.com/wycats/handlebars.js/compare/v4.7.1...v4.7.2) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 15a0ac9028..1de758382f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6883,9 +6883,9 @@ "dev": true }, "handlebars": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.1.tgz", - "integrity": "sha512-2dd6soo60cwKNJ90VewNLIzdZPR/E2YhszOTgHpN9V0YuwZk7x33/iZoIBnASwDFVHMY7iJ6NPL8d9f/DWYCTA==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.2.tgz", + "integrity": "sha512-4PwqDL2laXtTWZghzzCtunQUTLbo31pcCJrd/B/9JP8XbhVzpS5ZXuKqlOzsd1rtcaLo4KqAn8nl8mkknS4MHw==", "dev": true, "requires": { "neo-async": "^2.6.0", diff --git a/package.json b/package.json index 20f5b239ce..5af8107a2a 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "fs-extra": "^8.0.0", "glob": "^7.1.5", "globby": "^11.0.0", - "handlebars": "4.7.1", + "handlebars": "4.7.2", "html-to-image": "^0.1.0", "istanbul": "0.4.5", "istanbul-instrumenter-loader": "^3.0.1", From c221cc7a46124144c26d5325337bf790001563f7 Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Mon, 20 Jan 2020 10:24:57 +0000 Subject: [PATCH 099/246] Convert any html character codes in labels reuse single textarea element --- src/ol/format/KML.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/ol/format/KML.js b/src/ol/format/KML.js index 2773f53392..e77f33afc1 100644 --- a/src/ol/format/KML.js +++ b/src/ol/format/KML.js @@ -378,6 +378,11 @@ function createStyleDefaults() { } +/** + * @type {HTMLElement} + */ +let TEXTAREA; + /** * @typedef {Object} Options @@ -948,9 +953,11 @@ function createFeatureStyleFunction(style, styleUrl, defaultStyle, sharedStyles, drawName = drawName && !!name; // convert any html character codes if (drawName && name.search(/&[^&]+;/) > -1) { - const text = document.createElement('textarea'); - text.innerHTML = name; - name = text.value; + if (!TEXTAREA) { + TEXTAREA = document.createElement('textarea'); + } + TEXTAREA.innerHTML = name; + name = TEXTAREA.value; } } From 83d65b61e16bac0880e09b016da24743cebf4bbd Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Mon, 20 Jan 2020 10:30:44 +0000 Subject: [PATCH 100/246] Convert any html character codes in labels fix typedef --- src/ol/format/KML.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ol/format/KML.js b/src/ol/format/KML.js index e77f33afc1..d29ef7b4f4 100644 --- a/src/ol/format/KML.js +++ b/src/ol/format/KML.js @@ -379,7 +379,7 @@ function createStyleDefaults() { } /** - * @type {HTMLElement} + * @type {Textarea} */ let TEXTAREA; From 5830a361316b06b2deb5978d639238836e55e397 Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Mon, 20 Jan 2020 10:37:04 +0000 Subject: [PATCH 101/246] Convert any html character codes in labels fix typedef --- src/ol/format/KML.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ol/format/KML.js b/src/ol/format/KML.js index d29ef7b4f4..77dc5a7aff 100644 --- a/src/ol/format/KML.js +++ b/src/ol/format/KML.js @@ -379,7 +379,7 @@ function createStyleDefaults() { } /** - * @type {Textarea} + * @type {HTMLTextAreaElement} */ let TEXTAREA; From 4db204698eb97bd3cd401244aae62767931a3d14 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Tue, 21 Jan 2020 22:27:28 +0100 Subject: [PATCH 102/246] More compatible way of exporting a map as pdf --- examples/export-pdf.js | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/examples/export-pdf.js b/examples/export-pdf.js index b37d23cc5e..125c95d05d 100644 --- a/examples/export-pdf.js +++ b/examples/export-pdf.js @@ -4,8 +4,6 @@ import WKT from '../src/ol/format/WKT.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js'; import {OSM, Vector as VectorSource} from '../src/ol/source.js'; -import {toJpeg} from 'html-to-image'; - const raster = new TileLayer({ source: new OSM() }); @@ -44,14 +42,6 @@ const dims = { }; -// export options for html-to-image. -// See: https://github.com/bubkoo/html-to-image#options -const exportOptions = { - filter: function(element) { - return element.className.indexOf('ol-control') === -1; - } -}; - const exportButton = document.getElementById('export-pdf'); exportButton.addEventListener('click', function() { @@ -68,18 +58,28 @@ exportButton.addEventListener('click', function() { const viewResolution = map.getView().getResolution(); map.once('rendercomplete', function() { - exportOptions.width = width; - exportOptions.height = height; - toJpeg(map.getViewport(), exportOptions).then(function(dataUrl) { - const pdf = new jsPDF('landscape', undefined, format); - pdf.addImage(dataUrl, 'JPEG', 0, 0, dim[0], dim[1]); - pdf.save('map.pdf'); - // Reset original map size - map.setSize(size); - map.getView().setResolution(viewResolution); - exportButton.disabled = false; - document.body.style.cursor = 'auto'; + const mapCanvas = document.createElement('canvas'); + mapCanvas.width = width; + mapCanvas.height = height; + const mapContext = mapCanvas.getContext('2d'); + document.querySelectorAll('.ol-layer canvas').forEach(function(canvas) { + if (canvas.width > 0) { + const transform = canvas.style.transform; + // Get the transform parameters from the style's transform matrix + const matrix = transform.match(/^matrix\(([^\(]*)\)$/)[1].split(',').map(Number); + // Apply the transform to the export map context + CanvasRenderingContext2D.prototype.setTransform.apply(mapContext, matrix); + mapContext.drawImage(canvas, 0, 0); + } }); + const pdf = new jsPDF('landscape', undefined, format); + pdf.addImage(mapCanvas.toDataURL('image/jpeg'), 'JPEG', 0, 0, dim[0], dim[1]); + pdf.save('map.pdf'); + // Reset original map size + map.setSize(size); + map.getView().setResolution(viewResolution); + exportButton.disabled = false; + document.body.style.cursor = 'auto'; }); // Set print size From 3a5c8d637cc3069987b061f67c91108bd8feaf78 Mon Sep 17 00:00:00 2001 From: Vincent Lecrubier Date: Tue, 21 Jan 2020 20:50:33 +0000 Subject: [PATCH 103/246] Zoomify: Separate the service pixel ratio and the device pixel ratio --- examples/zoomify.html | 1 - examples/zoomify.js | 103 +++++++++------------------------------ src/ol/source/Zoomify.js | 6 ++- 3 files changed, 27 insertions(+), 83 deletions(-) diff --git a/examples/zoomify.html b/examples/zoomify.html index d5b18997ca..fb7503d075 100644 --- a/examples/zoomify.html +++ b/examples/zoomify.html @@ -10,7 +10,6 @@ tags: "zoomify, deep zoom, IIP, pixel, projection"
diff --git a/examples/zoomify.js b/examples/zoomify.js index 19c469dfdf..0da330b013 100644 --- a/examples/zoomify.js +++ b/examples/zoomify.js @@ -3,17 +3,13 @@ import View from '../src/ol/View.js'; import TileLayer from '../src/ol/layer/Tile.js'; import Zoomify from '../src/ol/source/Zoomify.js'; -const imgWidth = 9911; -const imgHeight = 6100; +const imgWidth = 4000; +const imgHeight = 3000; -const zoomifyUrl = 'http://vips.vtech.fr/cgi-bin/iipsrv.fcgi?zoomify=' + - '/mnt/MD1/AD00/plan_CHU-4HD-01/FOND.TIF/'; -const iipUrl = 'http://vips.vtech.fr/cgi-bin/iipsrv.fcgi?FIF=' + '/mnt/MD1/AD00/plan_CHU-4HD-01/FOND.TIF' + '&JTL={z},{tileIndex}'; +const zoomifyUrl = 'https://ol-zoomify.surge.sh/zoomify/'; const layer = new TileLayer({ source: new Zoomify({ - tileSize: 256, - tilePixelRatio: 1, url: zoomifyUrl, size: [imgWidth, imgHeight], crossOrigin: 'anonymous' @@ -22,17 +18,15 @@ const layer = new TileLayer({ const extent = [0, -imgHeight, imgWidth, 0]; -const resolutions = layer.getSource().getTileGrid().getResolutions(); - const map = new Map({ layers: [layer], target: 'map', view: new View({ // adjust zoom levels to those provided by the source - minResolution: resolutions[resolutions.length - 1], - maxResolution: resolutions[0], + resolutions: layer.getSource().getTileGrid().getResolutions(), // constrain the center: center cannot be set outside this extent - extent: extent + extent: extent, + constrainOnlyCenter: true }) }); map.getView().fit(extent); @@ -40,74 +34,23 @@ map.getView().fit(extent); const control = document.getElementById('zoomifyProtocol'); control.addEventListener('change', function(event) { const value = event.currentTarget.value; - if (value === 'iip') { - const extent = [0, -imgHeight, imgWidth, 0]; - layer.setSource( - new Zoomify({ - tileSize: 256, - tilePixelRatio: 1, - url: iipUrl, - size: [imgWidth, imgHeight], - crossOrigin: 'anonymous' - }) - ); - const resolutions = layer.getSource().getTileGrid().getResolutions(); - map.setView( - new View({ - // adjust zoom levels to those provided by the source - minResolution: resolutions[resolutions.length - 1], - maxResolution: resolutions[0], - // constrain the center: center cannot be set outside this extent - extent: extent - }) - ); - map.getView().fit(extent); - } else if (value === 'zoomify') { - const extent = [0, -imgHeight, imgWidth, 0]; - layer.setSource( - new Zoomify({ - tileSize: 256, - tilePixelRatio: 1, - url: zoomifyUrl, - size: [imgWidth, imgHeight], - crossOrigin: 'anonymous' - }) - ); - const resolutions = layer.getSource().getTileGrid().getResolutions(); - map.setView( - new View({ - // adjust zoom levels to those provided by the source - minResolution: resolutions[resolutions.length - 1], - maxResolution: resolutions[0], - // constrain the center: center cannot be set outside this extent - extent: extent - }) - ); - map.getView().fit(extent); + if (value === 'zoomify') { + layer.setSource(new Zoomify({ + url: zoomifyUrl, + size: [imgWidth, imgHeight], + crossOrigin: 'anonymous' + })); } else if (value === 'zoomifyretina') { - const pixelRatio = 4; - // Be careful! Image extent will be modified by pixel ratio - const extent = [0, -imgHeight / pixelRatio, imgWidth / pixelRatio, 0]; - layer.setSource( - new Zoomify({ - tileSize: 256 / pixelRatio, - tilePixelRatio: pixelRatio, - url: zoomifyUrl, - size: [imgWidth / pixelRatio, imgHeight / pixelRatio], - crossOrigin: 'anonymous' - }) - ); - const resolutions = layer.getSource().getTileGrid().getResolutions(); - map.setView( - new View({ - // adjust zoom levels to those provided by the source - minResolution: resolutions[resolutions.length - 1] / pixelRatio, - maxResolution: resolutions[0], - // constrain the center: center cannot be set outside this extent - extent: extent - }) - ); - map.getView().fit(extent); + layer.setSource(new Zoomify({ + tileSize: 256, // The tile size is 256px on the server, this is the default value + tilePixelRatio: 2, // We want to display this on a retina screen + tilePixelRatioOriginal: 1, // But the server serves 256px tiles, not 512px tiles that would be needed nominally. + zDirection: -1, //Ensure we get the most precise tile in any case + url: zoomifyUrl, + size: [imgWidth, imgHeight], + crossOrigin: 'anonymous' + })); } - }); + + diff --git a/src/ol/source/Zoomify.js b/src/ol/source/Zoomify.js index 5a5bd2efa1..cc2ec00c34 100644 --- a/src/ol/source/Zoomify.js +++ b/src/ol/source/Zoomify.js @@ -90,7 +90,8 @@ export class CustomTile extends ImageTile { * you must provide a `crossOrigin` value you want to access pixel data with the Canvas renderer. * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail. * @property {import("../proj.js").ProjectionLike} [projection] Projection. - * @property {number} [tilePixelRatio] The pixel ratio used by the tile service. For example, if the tile service advertizes 256px by 256px tiles but actually sends 512px by 512px images (for retina/hidpi devices) then `tilePixelRatio` should be set to `2` + * @property {number} [tilePixelRatio] The pixel ratio to display on screen. If on a retina screen then `tilePixelRatio` should be 2, else it should be 1. + * @property {number} [tilePixelRatioOriginal] The pixel ratio used by the tile service. For example, if the tile service advertizes 256px by 256px tiles but actually sends 512px by 512px images (for retina/hidpi devices) then `tilePixelRatioOriginal` should be set to `2` * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels). * Higher values can increase reprojection performance, but decrease precision. * @property {string} [url] URL template or base URL of the Zoomify service. @@ -147,6 +148,7 @@ class Zoomify extends TileImage { const tierSizeInTiles = []; const tileSize = options.tileSize || DEFAULT_TILE_SIZE; const tilePixelRatio = options.tilePixelRatio || 1; + const tilePixelRatioOriginal = options.tilePixelRatioOriginal || tilePixelRatio; let tileSizeForTierSizeCalculation = tileSize; switch (tierSizeCalculation) { @@ -246,7 +248,7 @@ class Zoomify extends TileImage { const tileUrlFunction = createFromTileUrlFunctions(urls.map(createFromTemplate)); - const ZoomifyTileClass = CustomTile.bind(null, tilePixelRatio, tileGrid); + const ZoomifyTileClass = CustomTile.bind(null, tilePixelRatioOriginal, tileGrid); super({ attributions: options.attributions, From 89c5364b2f869c5210dd56952045fb678e67c63d Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Fri, 24 Jan 2020 13:50:02 +0100 Subject: [PATCH 104/246] Use correct extent for the vector image --- src/ol/renderer/canvas/VectorImageLayer.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ol/renderer/canvas/VectorImageLayer.js b/src/ol/renderer/canvas/VectorImageLayer.js index fdda1d0129..6f85052a20 100644 --- a/src/ol/renderer/canvas/VectorImageLayer.js +++ b/src/ol/renderer/canvas/VectorImageLayer.js @@ -105,6 +105,7 @@ class CanvasVectorImageLayerRenderer extends CanvasImageLayerRenderer { const context = vectorRenderer.context; const imageFrameState = /** @type {import("../../PluggableMap.js").FrameState} */ (assign({}, frameState, { declutterItems: [], + extent: renderedExtent, size: [width, height], viewState: /** @type {import("../../View.js").State} */ (assign({}, frameState.viewState, { rotation: 0 From 8c89ddceca3712780fee996aa2dbd3589d859118 Mon Sep 17 00:00:00 2001 From: Vincent Lecrubier Date: Fri, 24 Jan 2020 15:33:42 +0000 Subject: [PATCH 105/246] Revert #9489 and solves retina tiles on zoomify apparently. --- examples/zoomify.js | 11 +++++------ src/ol/source/Zoomify.js | 26 ++++++++++---------------- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/examples/zoomify.js b/examples/zoomify.js index 0da330b013..047dbd1146 100644 --- a/examples/zoomify.js +++ b/examples/zoomify.js @@ -38,17 +38,16 @@ control.addEventListener('change', function(event) { layer.setSource(new Zoomify({ url: zoomifyUrl, size: [imgWidth, imgHeight], - crossOrigin: 'anonymous' + crossOrigin: 'anonymous', + zDirection: -1 // Ensure we get the most precise tile in any case })); } else if (value === 'zoomifyretina') { layer.setSource(new Zoomify({ - tileSize: 256, // The tile size is 256px on the server, this is the default value - tilePixelRatio: 2, // We want to display this on a retina screen - tilePixelRatioOriginal: 1, // But the server serves 256px tiles, not 512px tiles that would be needed nominally. - zDirection: -1, //Ensure we get the most precise tile in any case url: zoomifyUrl, size: [imgWidth, imgHeight], - crossOrigin: 'anonymous' + crossOrigin: 'anonymous', + zDirection: -1, // Ensure we get the most precise tile in any case + tilePixelRatio: 2 // Display retina tiles })); } }); diff --git a/src/ol/source/Zoomify.js b/src/ol/source/Zoomify.js index cc2ec00c34..e42ebaddeb 100644 --- a/src/ol/source/Zoomify.js +++ b/src/ol/source/Zoomify.js @@ -26,7 +26,6 @@ const TierSizeCalculation = { export class CustomTile extends ImageTile { /** - * @param {number} tilePixelRatio Tile pixel ratio to display the tile * @param {import("../tilegrid/TileGrid.js").default} tileGrid TileGrid that the tile belongs to. * @param {import("../tilecoord.js").TileCoord} tileCoord Tile coordinate. * @param {TileState} state State. @@ -35,7 +34,8 @@ export class CustomTile extends ImageTile { * @param {import("../Tile.js").LoadFunction} tileLoadFunction Tile load function. * @param {import("../Tile.js").Options=} opt_options Tile options. */ - constructor(tilePixelRatio, tileGrid, tileCoord, state, src, crossOrigin, tileLoadFunction, opt_options) { + constructor(tileGrid, tileCoord, state, src, crossOrigin, tileLoadFunction, opt_options) { + super(tileCoord, state, src, crossOrigin, tileLoadFunction, opt_options); /** @@ -48,11 +48,8 @@ export class CustomTile extends ImageTile { * @private * @type {import("../size.js").Size} */ - this.tileSize_ = toSize(tileGrid.getTileSize(tileCoord[0])).map( - function(x) { - return x * tilePixelRatio; - } - ); + this.tileSize_ = toSize(tileGrid.getTileSize(tileCoord[0])); + } /** @@ -90,8 +87,7 @@ export class CustomTile extends ImageTile { * you must provide a `crossOrigin` value you want to access pixel data with the Canvas renderer. * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail. * @property {import("../proj.js").ProjectionLike} [projection] Projection. - * @property {number} [tilePixelRatio] The pixel ratio to display on screen. If on a retina screen then `tilePixelRatio` should be 2, else it should be 1. - * @property {number} [tilePixelRatioOriginal] The pixel ratio used by the tile service. For example, if the tile service advertizes 256px by 256px tiles but actually sends 512px by 512px images (for retina/hidpi devices) then `tilePixelRatioOriginal` should be set to `2` + * @property {number} [tilePixelRatio] The pixel ratio used by the tile service. For example, if the tile service advertizes 256px by 256px tiles but actually sends 512px by 512px images (for retina/hidpi devices) then `tilePixelRatio` should be set to `2` * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels). * Higher values can increase reprojection performance, but decrease precision. * @property {string} [url] URL template or base URL of the Zoomify service. @@ -115,8 +111,8 @@ export class CustomTile extends ImageTile { * @property {number} [transition] Duration of the opacity transition for rendering. * To disable the opacity transition, pass `transition: 0`. * @property {number} [tileSize=256] Tile size. Same tile size is used for all zoom levels. - * @property {number} [zDirection=0] Indicate which resolution should be used - * by a renderer if the view resolution does not match any resolution of the tile source. + * @property {number} [zDirection] Indicate which resolution should be used + * by a renderer if the views resolution does not match any resolution of the tile source. * If 0, the nearest resolution will be used. If 1, the nearest lower resolution * will be used. If -1, the nearest higher resolution will be used. */ @@ -147,8 +143,6 @@ class Zoomify extends TileImage { const extent = options.extent || [0, -size[1], size[0], 0]; const tierSizeInTiles = []; const tileSize = options.tileSize || DEFAULT_TILE_SIZE; - const tilePixelRatio = options.tilePixelRatio || 1; - const tilePixelRatioOriginal = options.tilePixelRatioOriginal || tilePixelRatio; let tileSizeForTierSizeCalculation = tileSize; switch (tierSizeCalculation) { @@ -248,14 +242,14 @@ class Zoomify extends TileImage { const tileUrlFunction = createFromTileUrlFunctions(urls.map(createFromTemplate)); - const ZoomifyTileClass = CustomTile.bind(null, tilePixelRatioOriginal, tileGrid); + const ZoomifyTileClass = CustomTile.bind(null, tileGrid); super({ attributions: options.attributions, cacheSize: options.cacheSize, crossOrigin: options.crossOrigin, projection: options.projection, - tilePixelRatio: tilePixelRatio, + tilePixelRatio: options.tilePixelRatio, reprojectionErrorThreshold: options.reprojectionErrorThreshold, tileClass: ZoomifyTileClass, tileGrid: tileGrid, @@ -272,4 +266,4 @@ class Zoomify extends TileImage { } -export default Zoomify; +export default Zoomify; \ No newline at end of file From e11db6de440308fe5038be3c07a7f7f62566a87c Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Fri, 24 Jan 2020 15:49:08 +0000 Subject: [PATCH 106/246] Replace Bing layer with MapTiler --- examples/drag-and-drop-image-vector.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/examples/drag-and-drop-image-vector.js b/examples/drag-and-drop-image-vector.js index 6b0fb4a3c2..56491c33dd 100644 --- a/examples/drag-and-drop-image-vector.js +++ b/examples/drag-and-drop-image-vector.js @@ -3,7 +3,7 @@ import View from '../src/ol/View.js'; import {GPX, GeoJSON, IGC, KML, TopoJSON} from '../src/ol/format.js'; import {defaults as defaultInteractions, DragAndDrop} from '../src/ol/interaction.js'; import {VectorImage as VectorImageLayer, Tile as TileLayer} from '../src/ol/layer.js'; -import {BingMaps, Vector as VectorSource} from '../src/ol/source.js'; +import {XYZ, Vector as VectorSource} from '../src/ol/source.js'; const dragAndDropInteraction = new DragAndDrop({ formatConstructors: [ @@ -15,13 +15,18 @@ const dragAndDropInteraction = new DragAndDrop({ ] }); +const key = 'get_your_own_D6rA4zTHduk6KOKTXzGB'; +const attributions = '© MapTiler ' + + '© OpenStreetMap contributors'; + const map = new Map({ interactions: defaultInteractions().extend([dragAndDropInteraction]), layers: [ new TileLayer({ - source: new BingMaps({ - imagerySet: 'Aerial', - key: 'As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5' + source: new XYZ({ + attributions: attributions, + url: 'https://api.maptiler.com/tiles/satellite/{z}/{x}/{y}.jpg?key=' + key, + maxZoom: 20 }) }) ], From 1eac18f94a6dc91aa0dfc4cf6953e82fa790c1be Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Fri, 24 Jan 2020 15:51:41 +0000 Subject: [PATCH 107/246] Replace Bing layer with MapTiler --- examples/drag-and-drop.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/drag-and-drop.html b/examples/drag-and-drop.html index 41c82fd81e..c8f0772329 100644 --- a/examples/drag-and-drop.html +++ b/examples/drag-and-drop.html @@ -4,10 +4,10 @@ title: Drag-and-Drop shortdesc: Example of using the drag-and-drop interaction. docs: > Example of using the drag-and-drop interaction. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map. There is no projection transform support, so this will only work with data in EPSG:4326 and EPSG:3857. -tags: "drag-and-drop, gpx, geojson, igc, kml, topojson" +tags: "drag-and-drop, gpx, geojson, igc, kml, topojson, maptiler" cloak: - - key: As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5 - value: Your Bing Maps Key from http://www.bingmapsportal.com/ here + - key: get_your_own_D6rA4zTHduk6KOKTXzGB + value: Get your own API key at https://www.maptiler.com/cloud/ ---
 
From c9c616bd6fdde92c2ab725a9a3737827b8dc3fe0 Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Fri, 24 Jan 2020 16:31:08 +0000 Subject: [PATCH 108/246] Replace Bing layer with MapTiler --- examples/drag-and-drop.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/examples/drag-and-drop.js b/examples/drag-and-drop.js index 3ed202752c..d8b04b100b 100644 --- a/examples/drag-and-drop.js +++ b/examples/drag-and-drop.js @@ -15,13 +15,18 @@ const dragAndDropInteraction = new DragAndDrop({ ] }); +const key = 'get_your_own_D6rA4zTHduk6KOKTXzGB'; +const attributions = '© MapTiler ' + + '© OpenStreetMap contributors'; + const map = new Map({ interactions: defaultInteractions().extend([dragAndDropInteraction]), layers: [ new TileLayer({ - source: new BingMaps({ - imagerySet: 'Aerial', - key: 'As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5' + source: new XYZ({ + attributions: attributions, + url: 'https://api.maptiler.com/tiles/satellite/{z}/{x}/{y}.jpg?key=' + key, + maxZoom: 20 }) }) ], From a9e738c919f8e757b324ab9109bf8b24d3fd16a5 Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Fri, 24 Jan 2020 16:33:34 +0000 Subject: [PATCH 109/246] Replace Bing layer with MapTiler --- examples/drag-and-drop-image-vector.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/drag-and-drop-image-vector.html b/examples/drag-and-drop-image-vector.html index f6f791278f..2c0e0eab50 100644 --- a/examples/drag-and-drop-image-vector.html +++ b/examples/drag-and-drop-image-vector.html @@ -4,10 +4,10 @@ title: Drag-and-Drop Image Vector shortdesc: Example of using the drag-and-drop interaction with image vector rendering. docs: > Example of using the drag-and-drop interaction with an `ol/layer/VectorImage` layer. Drag and drop GPX, GeoJSON, IGC, KML, or TopoJSON files on to the map. Each file is rendered to an image on the client. -tags: "drag-and-drop-image-vector, gpx, geojson, igc, kml, topojson, vector, image" +tags: "drag-and-drop-image-vector, gpx, geojson, igc, kml, topojson, maptiler, vector, image" cloak: - - key: As1HiMj1PvLPlqc_gtM7AqZfBL8ZL3VrjaS3zIb22Uvb9WKhuJObROC-qUpa81U5 - value: Your Bing Maps Key from http://www.bingmapsportal.com/ here + - key: get_your_own_D6rA4zTHduk6KOKTXzGB + value: Get your own API key at https://www.maptiler.com/cloud/ ---
 
From 96ebacca1fb726c12dc5af2158aef2b436fe4526 Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Fri, 24 Jan 2020 16:34:43 +0000 Subject: [PATCH 110/246] Replace Bing layer with MapTiler --- examples/drag-and-drop.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/drag-and-drop.js b/examples/drag-and-drop.js index d8b04b100b..0f407fec82 100644 --- a/examples/drag-and-drop.js +++ b/examples/drag-and-drop.js @@ -3,7 +3,7 @@ import View from '../src/ol/View.js'; import {GPX, GeoJSON, IGC, KML, TopoJSON} from '../src/ol/format.js'; import {defaults as defaultInteractions, DragAndDrop} from '../src/ol/interaction.js'; import {Tile as TileLayer, Vector as VectorLayer} from '../src/ol/layer.js'; -import {BingMaps, Vector as VectorSource} from '../src/ol/source.js'; +import {XYZ, Vector as VectorSource} from '../src/ol/source.js'; const dragAndDropInteraction = new DragAndDrop({ formatConstructors: [ From 1ee03decdd66409094e3ea47ee05ac3a46c755da Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Fri, 24 Jan 2020 16:05:58 +0100 Subject: [PATCH 111/246] Assert each layer is only added to the map once --- doc/errors/index.md | 4 ++++ src/ol/layer/Layer.js | 9 ++++++++- test/spec/ol/layer/layer.test.js | 4 ++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/doc/errors/index.md b/doc/errors/index.md index a762cfa599..e45f47bd3b 100644 --- a/doc/errors/index.md +++ b/doc/errors/index.md @@ -245,3 +245,7 @@ Layer opacity must be a number. `forEachFeatureAtCoordinate` cannot be used on a WebGL layer if the hit detection logic has not been enabled. This is done by providing adequate shaders using the `hitVertexShader` and `hitFragmentShader` properties of `WebGLPointsLayerRenderer`. + +### 67 + +A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both. \ No newline at end of file diff --git a/src/ol/layer/Layer.js b/src/ol/layer/Layer.js index bef87a803e..4d3d846845 100644 --- a/src/ol/layer/Layer.js +++ b/src/ol/layer/Layer.js @@ -9,6 +9,7 @@ import LayerProperty from './Property.js'; import {assign} from '../obj.js'; import RenderEventType from '../render/EventType.js'; import SourceState from '../source/State.js'; +import {assert} from '../asserts.js'; /** * @typedef {function(import("../PluggableMap.js").FrameState):HTMLElement} RenderFunction @@ -243,7 +244,13 @@ class Layer extends BaseLayer { if (map) { this.mapPrecomposeKey_ = listen(map, RenderEventType.PRECOMPOSE, function(evt) { const renderEvent = /** @type {import("../render/Event.js").default} */ (evt); - renderEvent.frameState.layerStatesArray.push(this.getLayerState(false)); + const layerStatesArray = renderEvent.frameState.layerStatesArray; + const layerState = this.getLayerState(false); + // A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both. + assert(!layerStatesArray.some(function(arrayLayerState) { + return arrayLayerState.layer === layerState.layer; + }), 67); + layerStatesArray.push(layerState); }, this); this.mapRenderKey_ = listen(this, EventType.CHANGE, map.render, map); this.changed(); diff --git a/test/spec/ol/layer/layer.test.js b/test/spec/ol/layer/layer.test.js index eb090511ac..f7c3aeb13e 100644 --- a/test/spec/ol/layer/layer.test.js +++ b/test/spec/ol/layer/layer.test.js @@ -631,8 +631,7 @@ describe('ol.layer.Layer', function() { map: map }); frameState = { - layerStatesArray: [], - layerStates: {} + layerStatesArray: [] }; }); @@ -651,6 +650,7 @@ describe('ol.layer.Layer', function() { layer.setZIndex(index); map.dispatchEvent(new RenderEvent('precompose', null, frameState, null)); const layerState = frameState.layerStatesArray[0]; + frameState.layerStatesArray.length = 0; expect(layerState.zIndex).to.be(index); }); }); From 23d441f9f27469b1bac9ec1aaf8e62ea2e885c3f Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Sat, 25 Jan 2020 14:24:12 +0100 Subject: [PATCH 112/246] Handle tileSize and tilePixelRatio properly --- examples/zoomify.js | 41 ++++++++++++++++++++-------------------- src/ol/source/IIIF.js | 7 +++++-- src/ol/source/Zoomify.js | 29 +++++++++++++--------------- 3 files changed, 39 insertions(+), 38 deletions(-) diff --git a/examples/zoomify.js b/examples/zoomify.js index 047dbd1146..47a32ae0db 100644 --- a/examples/zoomify.js +++ b/examples/zoomify.js @@ -8,15 +8,27 @@ const imgHeight = 3000; const zoomifyUrl = 'https://ol-zoomify.surge.sh/zoomify/'; -const layer = new TileLayer({ - source: new Zoomify({ - url: zoomifyUrl, - size: [imgWidth, imgHeight], - crossOrigin: 'anonymous' - }) +const source = new Zoomify({ + url: zoomifyUrl, + size: [imgWidth, imgHeight], + crossOrigin: 'anonymous', + zDirection: -1 // Ensure we get a tile with the screen resolution or higher +}); +const extent = source.getTileGrid().getExtent(); + +const retinaPixelRatio = 2; +const retinaSource = new Zoomify({ + url: zoomifyUrl, + size: [imgWidth, imgHeight], + crossOrigin: 'anonymous', + zDirection: -1, // Ensure we get a tile with the screen resolution or higher + tilePixelRatio: retinaPixelRatio, // Display retina tiles + tileSize: 256 / retinaPixelRatio // from a higher zoom level }); -const extent = [0, -imgHeight, imgWidth, 0]; +const layer = new TileLayer({ + source: source +}); const map = new Map({ layers: [layer], @@ -35,20 +47,9 @@ const control = document.getElementById('zoomifyProtocol'); control.addEventListener('change', function(event) { const value = event.currentTarget.value; if (value === 'zoomify') { - layer.setSource(new Zoomify({ - url: zoomifyUrl, - size: [imgWidth, imgHeight], - crossOrigin: 'anonymous', - zDirection: -1 // Ensure we get the most precise tile in any case - })); + layer.setSource(source); } else if (value === 'zoomifyretina') { - layer.setSource(new Zoomify({ - url: zoomifyUrl, - size: [imgWidth, imgHeight], - crossOrigin: 'anonymous', - zDirection: -1, // Ensure we get the most precise tile in any case - tilePixelRatio: 2 // Display retina tiles - })); + layer.setSource(retinaSource); } }); diff --git a/src/ol/source/IIIF.js b/src/ol/source/IIIF.js index 2fb4014673..8370a936f3 100644 --- a/src/ol/source/IIIF.js +++ b/src/ol/source/IIIF.js @@ -9,6 +9,7 @@ import {Versions} from '../format/IIIFInfo.js'; import {assert} from '../asserts.js'; import TileGrid from '../tilegrid/TileGrid.js'; import TileImage from './TileImage.js'; +import {toSize} from '../size.js'; /** * @typedef {Object} Options @@ -87,7 +88,7 @@ class IIIF extends TileImage { const extent = options.extent || [0, -height, width, 0]; const supportsListedSizes = sizes != undefined && Array.isArray(sizes) && sizes.length > 0; - const supportsListedTiles = tileSize != undefined && (typeof tileSize === 'number' && Number.isInteger(tileSize) && tileSize > 0 || Array.isArray(tileSize) && tileSize.length > 0); + const supportsListedTiles = tileSize !== undefined && (typeof tileSize === 'number' && Number.isInteger(tileSize) && tileSize > 0 || Array.isArray(tileSize) && tileSize.length > 0); const supportsArbitraryTiling = supports != undefined && Array.isArray(supports) && (supports.includes('regionByPx') || supports.includes('regionByPct')) && (supports.includes('sizeByWh') || supports.includes('sizeByH') || @@ -265,7 +266,9 @@ class IIIF extends TileImage { return baseUrl + regionParam + '/' + sizeParam + '/0/' + quality + '.' + format; }; - const IiifTileClass = CustomTile.bind(null, tilePixelRatio, tileGrid); + const IiifTileClass = CustomTile.bind(null, toSize(tileSize || 256).map(function(size) { + return size * tilePixelRatio; + })); super({ attributions: options.attributions, diff --git a/src/ol/source/Zoomify.js b/src/ol/source/Zoomify.js index e42ebaddeb..509a7e0ae2 100644 --- a/src/ol/source/Zoomify.js +++ b/src/ol/source/Zoomify.js @@ -8,7 +8,6 @@ import TileState from '../TileState.js'; import {expandUrl, createFromTileUrlFunctions} from '../tileurlfunction.js'; import {assert} from '../asserts.js'; import {createCanvasContext2D} from '../dom.js'; -import {getTopLeft} from '../extent.js'; import {toSize} from '../size.js'; import TileImage from './TileImage.js'; import TileGrid from '../tilegrid/TileGrid.js'; @@ -26,7 +25,7 @@ const TierSizeCalculation = { export class CustomTile extends ImageTile { /** - * @param {import("../tilegrid/TileGrid.js").default} tileGrid TileGrid that the tile belongs to. + * @param {import("../size.js").Size} tileSize Full tile size. * @param {import("../tilecoord.js").TileCoord} tileCoord Tile coordinate. * @param {TileState} state State. * @param {string} src Image source URI. @@ -34,7 +33,7 @@ export class CustomTile extends ImageTile { * @param {import("../Tile.js").LoadFunction} tileLoadFunction Tile load function. * @param {import("../Tile.js").Options=} opt_options Tile options. */ - constructor(tileGrid, tileCoord, state, src, crossOrigin, tileLoadFunction, opt_options) { + constructor(tileSize, tileCoord, state, src, crossOrigin, tileLoadFunction, opt_options) { super(tileCoord, state, src, crossOrigin, tileLoadFunction, opt_options); @@ -45,10 +44,9 @@ export class CustomTile extends ImageTile { this.zoomifyImage_ = null; /** - * @private * @type {import("../size.js").Size} */ - this.tileSize_ = toSize(tileGrid.getTileSize(tileCoord[0])); + this.tileSize_ = tileSize; } @@ -138,12 +136,12 @@ class Zoomify extends TileImage { options.tierSizeCalculation : TierSizeCalculation.DEFAULT; + const tilePixelRatio = options.tilePixelRatio || 1; const imageWidth = size[0]; const imageHeight = size[1]; - const extent = options.extent || [0, -size[1], size[0], 0]; const tierSizeInTiles = []; const tileSize = options.tileSize || DEFAULT_TILE_SIZE; - let tileSizeForTierSizeCalculation = tileSize; + let tileSizeForTierSizeCalculation = tileSize * tilePixelRatio; switch (tierSizeCalculation) { case TierSizeCalculation.DEFAULT: @@ -175,10 +173,10 @@ class Zoomify extends TileImage { tierSizeInTiles.push([1, 1]); tierSizeInTiles.reverse(); - const resolutions = [1]; + const resolutions = [tilePixelRatio]; const tileCountUpToTier = [0]; for (let i = 1, ii = tierSizeInTiles.length; i < ii; i++) { - resolutions.push(1 << i); + resolutions.push(tilePixelRatio << i); tileCountUpToTier.push( tierSizeInTiles[i - 1][0] * tierSizeInTiles[i - 1][1] + tileCountUpToTier[i - 1] @@ -188,8 +186,7 @@ class Zoomify extends TileImage { const tileGrid = new TileGrid({ tileSize: tileSize, - extent: extent, - origin: getTopLeft(extent), + extent: options.extent || [0, -imageHeight, imageWidth, 0], resolutions: resolutions }); @@ -199,6 +196,8 @@ class Zoomify extends TileImage { } const urls = expandUrl(url); + const tileWidth = tileSize * tilePixelRatio; + /** * @param {string} template Template. * @return {import("../Tile.js").UrlFunction} Tile URL function. @@ -222,8 +221,6 @@ class Zoomify extends TileImage { const tileIndex = tileCoordX + tileCoordY * tierSizeInTiles[tileCoordZ][0]; - const tileSize = tileGrid.getTileSize(tileCoordZ); - const tileWidth = Array.isArray(tileSize) ? tileSize[0] : tileSize; const tileGroup = ((tileIndex + tileCountUpToTier[tileCoordZ]) / tileWidth) | 0; const localContext = { 'z': tileCoordZ, @@ -242,14 +239,14 @@ class Zoomify extends TileImage { const tileUrlFunction = createFromTileUrlFunctions(urls.map(createFromTemplate)); - const ZoomifyTileClass = CustomTile.bind(null, tileGrid); + const ZoomifyTileClass = CustomTile.bind(null, toSize(tileSize * tilePixelRatio)); super({ attributions: options.attributions, cacheSize: options.cacheSize, crossOrigin: options.crossOrigin, projection: options.projection, - tilePixelRatio: options.tilePixelRatio, + tilePixelRatio: tilePixelRatio, reprojectionErrorThreshold: options.reprojectionErrorThreshold, tileClass: ZoomifyTileClass, tileGrid: tileGrid, @@ -266,4 +263,4 @@ class Zoomify extends TileImage { } -export default Zoomify; \ No newline at end of file +export default Zoomify; From a7bdee43b310eb6f428204981bbbf760e01b76c7 Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Sun, 26 Jan 2020 13:51:11 +0000 Subject: [PATCH 113/246] Fix ol/layer/Graticule rendercomplete problem Use custom loading strategy to avoid problems caused by calling removeLoadedExtent in the loader function --- src/ol/layer/Graticule.js | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/ol/layer/Graticule.js b/src/ol/layer/Graticule.js index 9287cbb7fc..9170814aa2 100644 --- a/src/ol/layer/Graticule.js +++ b/src/ol/layer/Graticule.js @@ -19,7 +19,6 @@ import {getCenter, intersects, equals, getIntersection, isEmpty} from '../extent import {clamp} from '../math.js'; import Style from '../style/Style.js'; import Feature from '../Feature.js'; -import {bbox} from '../loadingstrategy.js'; import {meridian, parallel} from '../geom/flat/geodesic.js'; import GeometryLayout from '../geom/GeometryLayout.js'; import Point from '../geom/Point.js'; @@ -391,7 +390,7 @@ class Graticule extends VectorLayer { this.setSource( new VectorSource({ loader: this.loaderFunction.bind(this), - strategy: bbox, + strategy: this.strategyFunction.bind(this), features: new Collection(), overlaps: false, useSpatialIndex: false, @@ -414,6 +413,11 @@ class Graticule extends VectorLayer { stroke: this.strokeStyle_ }); + /** + * @type {?import("../extent.js").Extent} + */ + this.loadedExtent_ = null; + /** * @type {?import("../extent.js").Extent} */ @@ -421,7 +425,21 @@ class Graticule extends VectorLayer { this.setRenderOrder(null); - this.tmpExtent_ = null; + } + + /** + * Strategy function for loading features based on the view's extent and + * resolution. + * @param {import("./extent.js").Extent} extent Extent. + * @param {number} resolution Resolution. + * @return {Array} Extents. + */ + strategyFunction(extent, resolution) { + if (this.loadedExtent_ && !equals(this.loadedExtent_, extent)) { + // we should not keep track of loaded extents + this.getSource().removeLoadedExtent(this.loadedExtent_); + } + return [extent]; } /** @@ -431,16 +449,12 @@ class Graticule extends VectorLayer { * @param {import("../proj/Projection.js").default} projection Projection */ loaderFunction(extent, resolution, projection) { + this.loadedExtent_ = extent; const source = this.getSource(); // only consider the intersection between our own extent & the requested one const layerExtent = this.getExtent() || [-Infinity, -Infinity, Infinity, Infinity]; - const renderExtent = getIntersection(layerExtent, extent, this.tmpExtent_); - - // we should not keep track of loaded extents - setTimeout(function() { - source.removeLoadedExtent(extent); - }, 0); + const renderExtent = getIntersection(layerExtent, extent); if (this.renderedExtent_ && equals(this.renderedExtent_, renderExtent)) { return; From e820042748e4b45712f241b1ad9169a68a5bcb05 Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Sun, 26 Jan 2020 14:04:05 +0000 Subject: [PATCH 114/246] Fix ol/layer/Graticule rendercomplete problem fix typedef imports --- src/ol/layer/Graticule.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ol/layer/Graticule.js b/src/ol/layer/Graticule.js index 9170814aa2..0c5e34f6e7 100644 --- a/src/ol/layer/Graticule.js +++ b/src/ol/layer/Graticule.js @@ -430,9 +430,9 @@ class Graticule extends VectorLayer { /** * Strategy function for loading features based on the view's extent and * resolution. - * @param {import("./extent.js").Extent} extent Extent. + * @param {import("../extent.js").Extent} extent Extent. * @param {number} resolution Resolution. - * @return {Array} Extents. + * @return {Array} Extents. */ strategyFunction(extent, resolution) { if (this.loadedExtent_ && !equals(this.loadedExtent_, extent)) { From bf57a23940d35e4e15a96a220073bb92970f27a2 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2020 07:45:55 +0000 Subject: [PATCH 115/246] Bump rollup from 1.29.0 to 1.29.1 Bumps [rollup](https://github.com/rollup/rollup) from 1.29.0 to 1.29.1. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v1.29.0...v1.29.1) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f50fc3157b..0c6f24bc11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10893,9 +10893,9 @@ } }, "rollup": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.29.0.tgz", - "integrity": "sha512-V63Iz0dSdI5qPPN5HmCN6OBRzBFhMqNWcvwgq863JtSCTU6Vdvqq6S2fYle/dSCyoPrBkIP3EIr1RVs3HTRqqg==", + "version": "1.29.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.29.1.tgz", + "integrity": "sha512-dGQ+b9d1FOX/gluiggTAVnTvzQZUEkCi/TwZcax7ujugVRHs0nkYJlV9U4hsifGEMojnO+jvEML2CJQ6qXgbHA==", "dev": true, "requires": { "@types/estree": "*", From 2205937b2d06b231c8f690e0f50a41a7a35eb36b Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2020 07:46:34 +0000 Subject: [PATCH 116/246] Bump mocha from 7.0.0 to 7.0.1 Bumps [mocha](https://github.com/mochajs/mocha) from 7.0.0 to 7.0.1. - [Release notes](https://github.com/mochajs/mocha/releases) - [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md) - [Commits](https://github.com/mochajs/mocha/compare/v7.0.0...v7.0.1) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index f50fc3157b..61b15f7951 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9089,9 +9089,9 @@ } }, "mocha": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.0.0.tgz", - "integrity": "sha512-CirsOPbO3jU86YKjjMzFLcXIb5YiGLUrjrXFHoJ3e2z9vWiaZVCZQ2+gtRGMPWF+nFhN6AWwLM/juzAQ6KRkbA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.0.1.tgz", + "integrity": "sha512-9eWmWTdHLXh72rGrdZjNbG3aa1/3NRPpul1z0D979QpEnFdCG0Q5tv834N+94QEN2cysfV72YocQ3fn87s70fg==", "dev": true, "requires": { "ansi-colors": "3.2.3", @@ -9644,9 +9644,9 @@ }, "dependencies": { "es-abstract": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", - "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", diff --git a/package.json b/package.json index 5af8107a2a..5c8456927e 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "karma-webpack": "^4.0.0-rc.2", "loglevelnext": "^3.0.1", "marked": "0.8.0", - "mocha": "7.0.0", + "mocha": "7.0.1", "ol-mapbox-style": "^5.0.2", "pixelmatch": "^5.1.0", "pngjs": "^3.4.0", From 7f6d77d811456535549b6bc07e05b9805132fc7c Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2020 07:47:19 +0000 Subject: [PATCH 117/246] Bump sinon from 8.1.0 to 8.1.1 Bumps [sinon](https://github.com/sinonjs/sinon) from 8.1.0 to 8.1.1. - [Release notes](https://github.com/sinonjs/sinon/releases) - [Changelog](https://github.com/sinonjs/sinon/blob/master/CHANGELOG.md) - [Commits](https://github.com/sinonjs/sinon/compare/v8.1.0...v8.1.1) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f50fc3157b..b8ef766bad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11409,9 +11409,9 @@ "dev": true }, "sinon": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-8.1.0.tgz", - "integrity": "sha512-6/05TR+8QhEgTbyMWaConm8iPL609Eno7SqToPq63wC/jS/6NMEI4NxqtzlLkk3r/KcZT9xPXQodH0oJ917Hbg==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-8.1.1.tgz", + "integrity": "sha512-E+tWr3acRdoe1nXbHMu86SSqA1WGM7Yw3jZRLvlCMnXwTHP8lgFFVn5BnKnF26uc5SfZ3D7pA9sN7S3Y2jG4Ew==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0", From 02b1ab71f1b4edcd106943aca6810a31c1be2eae Mon Sep 17 00:00:00 2001 From: Daniel Ruf Date: Tue, 28 Jan 2020 11:13:50 +0100 Subject: [PATCH 118/246] Use package-lock.json for the checksum calculation - closes #10069 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e2c130225d..a1ada88c0b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -11,7 +11,7 @@ jobs: - restore_cache: keys: - - v1-dependencies-{{ checksum "package.json" }} + - v1-dependencies-{{ checksum "package-lock.json" }} - v1-dependencies- - run: @@ -21,7 +21,7 @@ jobs: - save_cache: paths: - node_modules - key: v1-dependencies-{{ checksum "package.json" }} + key: v1-dependencies-{{ checksum "package-lock.json" }} - run: name: Run Tests From 902bdbabdc530629efd59144c87a19d619cfa41e Mon Sep 17 00:00:00 2001 From: Jakob Gerstmayer Date: Tue, 28 Jan 2020 17:39:21 +0100 Subject: [PATCH 119/246] fixed issue with version throwing an error if it is null --- src/ol/format/WMTSCapabilities.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ol/format/WMTSCapabilities.js b/src/ol/format/WMTSCapabilities.js index f125e357a8..64dd2dac8d 100644 --- a/src/ol/format/WMTSCapabilities.js +++ b/src/ol/format/WMTSCapabilities.js @@ -74,7 +74,10 @@ class WMTSCapabilities extends XML { * @inheritDoc */ readFromNode(node) { - const version = node.getAttribute('version').trim(); + let version = node.getAttribute('version'); + if(version) { + version = version.trim(); + } let WMTSCapabilityObject = this.owsParser_.readFromNode(node); if (!WMTSCapabilityObject) { return null; From 153bd7f5d1cd0d0c2686e2a766aa9e694b87dcf5 Mon Sep 17 00:00:00 2001 From: Jakob Gerstmayer Date: Tue, 28 Jan 2020 17:48:45 +0100 Subject: [PATCH 120/246] fixed spacing after if --- src/ol/format/WMTSCapabilities.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ol/format/WMTSCapabilities.js b/src/ol/format/WMTSCapabilities.js index 64dd2dac8d..bd1629f1d7 100644 --- a/src/ol/format/WMTSCapabilities.js +++ b/src/ol/format/WMTSCapabilities.js @@ -75,7 +75,7 @@ class WMTSCapabilities extends XML { */ readFromNode(node) { let version = node.getAttribute('version'); - if(version) { + if (version) { version = version.trim(); } let WMTSCapabilityObject = this.owsParser_.readFromNode(node); From 4151e86c0a5e35d469c2a270f45c1fc449edaf2b Mon Sep 17 00:00:00 2001 From: Jeremy Smith Date: Wed, 29 Jan 2020 14:36:56 +1000 Subject: [PATCH 121/246] Adds option to View for using larger resolution value when clamping --- src/ol/View.js | 13 +++++++++---- src/ol/resolutionconstraint.js | 24 ++++++++++++++++-------- test/spec/ol/view.test.js | 26 ++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 12 deletions(-) diff --git a/src/ol/View.js b/src/ol/View.js index 3bcc05219b..b4e5605672 100644 --- a/src/ol/View.js +++ b/src/ol/View.js @@ -129,6 +129,8 @@ import {createMinMaxResolution} from './resolutionconstraint.js'; * @property {boolean} [smoothResolutionConstraint=true] If true, the resolution * min/max values will be applied smoothly, i. e. allow the view to exceed slightly * the given resolution or zoom bounds. + * @property {boolean} [largerResolutionConstraint=false] If true, the constrained + * resolution values will use the larger value to do so. * @property {import("./proj.js").ProjectionLike} [projection='EPSG:3857'] The * projection. The default is Spherical Mercator. * @property {number} [resolution] The initial resolution for the view. The @@ -1611,6 +1613,9 @@ export function createResolutionConstraint(options) { const smooth = options.smoothResolutionConstraint !== undefined ? options.smoothResolutionConstraint : true; + const larger = + options.largerResolutionConstraint !== undefined ? options.largerResolutionConstraint : false; + const projection = createProjection(options.projection, 'EPSG:3857'); const projExtent = projection.getExtent(); let constrainOnlyCenter = options.constrainOnlyCenter; @@ -1628,10 +1633,10 @@ export function createResolutionConstraint(options) { if (options.constrainResolution) { resolutionConstraint = createSnapToResolutions(resolutions, smooth, - !constrainOnlyCenter && extent); + !constrainOnlyCenter && extent, larger); } else { resolutionConstraint = createMinMaxResolution(maxResolution, minResolution, smooth, - !constrainOnlyCenter && extent); + !constrainOnlyCenter && extent, larger); } } else { // calculate the default min and max resolution @@ -1677,10 +1682,10 @@ export function createResolutionConstraint(options) { if (options.constrainResolution) { resolutionConstraint = createSnapToPower( zoomFactor, maxResolution, minResolution, smooth, - !constrainOnlyCenter && extent); + !constrainOnlyCenter && extent, larger); } else { resolutionConstraint = createMinMaxResolution(maxResolution, minResolution, smooth, - !constrainOnlyCenter && extent); + !constrainOnlyCenter && extent, larger); } } return {constraint: resolutionConstraint, maxResolution: maxResolution, diff --git a/src/ol/resolutionconstraint.js b/src/ol/resolutionconstraint.js index 0134bde876..3d14209ec9 100644 --- a/src/ol/resolutionconstraint.js +++ b/src/ol/resolutionconstraint.js @@ -11,16 +11,21 @@ import {clamp} from './math.js'; */ /** - * Returns a modified resolution taking into acocunt the viewport size and maximum + * Returns a modified resolution taking into account the viewport size and maximum * allowed extent. * @param {number} resolution Resolution * @param {import("./extent.js").Extent=} maxExtent Maximum allowed extent. * @param {import("./size.js").Size} viewportSize Viewport size. + * @param {boolean} larger Whether to use the larger resolution size. * @return {number} Capped resolution. */ -function getViewportClampedResolution(resolution, maxExtent, viewportSize) { +function getViewportClampedResolution(resolution, maxExtent, viewportSize, larger) { const xResolution = getWidth(maxExtent) / viewportSize[0]; const yResolution = getHeight(maxExtent) / viewportSize[1]; + + if (larger) { + return Math.min(resolution, Math.max(xResolution, yResolution)); + } return Math.min(resolution, Math.min(xResolution, yResolution)); } @@ -52,9 +57,10 @@ function getSmoothClampedResolution(resolution, maxResolution, minResolution) { * @param {Array} resolutions Resolutions. * @param {boolean=} opt_smooth If true, the view will be able to slightly exceed resolution limits. Default: true. * @param {import("./extent.js").Extent=} opt_maxExtent Maximum allowed extent. + * @param {boolean=} opt_larger If true, the view will constrain the larger resolution value. Default: false. * @return {Type} Zoom function. */ -export function createSnapToResolutions(resolutions, opt_smooth, opt_maxExtent) { +export function createSnapToResolutions(resolutions, opt_smooth, opt_maxExtent, opt_larger) { return ( /** * @param {number|undefined} resolution Resolution. @@ -68,7 +74,7 @@ export function createSnapToResolutions(resolutions, opt_smooth, opt_maxExtent) const maxResolution = resolutions[0]; const minResolution = resolutions[resolutions.length - 1]; const cappedMaxRes = opt_maxExtent ? - getViewportClampedResolution(maxResolution, opt_maxExtent, size) : + getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_larger) : maxResolution; // during interacting or animating, allow intermediary values @@ -100,9 +106,10 @@ export function createSnapToResolutions(resolutions, opt_smooth, opt_maxExtent) * @param {number=} opt_minResolution Minimum resolution. * @param {boolean=} opt_smooth If true, the view will be able to slightly exceed resolution limits. Default: true. * @param {import("./extent.js").Extent=} opt_maxExtent Maximum allowed extent. + * @param {boolean=} opt_larger If true, the view will constrain the larger resolution value. Default: false. * @return {Type} Zoom function. */ -export function createSnapToPower(power, maxResolution, opt_minResolution, opt_smooth, opt_maxExtent) { +export function createSnapToPower(power, maxResolution, opt_minResolution, opt_smooth, opt_maxExtent, opt_larger) { return ( /** * @param {number|undefined} resolution Resolution. @@ -114,7 +121,7 @@ export function createSnapToPower(power, maxResolution, opt_minResolution, opt_s function(resolution, direction, size, opt_isMoving) { if (resolution !== undefined) { const cappedMaxRes = opt_maxExtent ? - getViewportClampedResolution(maxResolution, opt_maxExtent, size) : + getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_larger) : maxResolution; const minResolution = opt_minResolution !== undefined ? opt_minResolution : 0; @@ -148,9 +155,10 @@ export function createSnapToPower(power, maxResolution, opt_minResolution, opt_s * @param {number} minResolution Min resolution. * @param {boolean=} opt_smooth If true, the view will be able to slightly exceed resolution limits. Default: true. * @param {import("./extent.js").Extent=} opt_maxExtent Maximum allowed extent. + * @param {boolean=} opt_larger If true, the view will constrain the larger resolution value. Default: false. * @return {Type} Zoom function. */ -export function createMinMaxResolution(maxResolution, minResolution, opt_smooth, opt_maxExtent) { +export function createMinMaxResolution(maxResolution, minResolution, opt_smooth, opt_maxExtent, opt_larger) { return ( /** * @param {number|undefined} resolution Resolution. @@ -162,7 +170,7 @@ export function createMinMaxResolution(maxResolution, minResolution, opt_smooth, function(resolution, direction, size, opt_isMoving) { if (resolution !== undefined) { const cappedMaxRes = opt_maxExtent ? - getViewportClampedResolution(maxResolution, opt_maxExtent, size) : + getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_larger) : maxResolution; const smooth = opt_smooth !== undefined ? opt_smooth : true; diff --git a/test/spec/ol/view.test.js b/test/spec/ol/view.test.js index 17c2f2733e..4d44e2fa43 100644 --- a/test/spec/ol/view.test.js +++ b/test/spec/ol/view.test.js @@ -380,6 +380,32 @@ describe('ol.View', function() { expect(constraint(1, 0, size)).to.be(5); }); + it('accepts extent and uses the smallest value', function() { + const constraint = getConstraint({ + extent: [0, 0, 4000, 6000] + }); + + expect(constraint(1000, 0, size)).to.be(20); + expect(constraint(500, 0, size)).to.be(20); + expect(constraint(100, 0, size)).to.be(20); + expect(constraint(50, 0, size)).to.be(20); + expect(constraint(10, 0, size)).to.be(10); + expect(constraint(1, 0, size)).to.be(1); + }); + + it('accepts extent and largerResolutionConstraint and uses the larger value', function() { + const constraint = getConstraint({ + extent: [0, 0, 4000, 6000], + largerResolutionConstraint: true + }); + + expect(constraint(1000, 0, size)).to.be(30); + expect(constraint(500, 0, size)).to.be(30); + expect(constraint(100, 0, size)).to.be(30); + expect(constraint(50, 0, size)).to.be(30); + expect(constraint(10, 0, size)).to.be(10); + expect(constraint(1, 0, size)).to.be(1); + }); }); describe('overspecified options (prefers resolution)', function() { From e3f9e250ab83f6d2af2f09f63f6bdbdbb18301df Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Wed, 29 Jan 2020 14:04:52 +0100 Subject: [PATCH 122/246] Sort doc navigation properly and add missing modules --- config/jsdoc/api/template/publish.js | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/config/jsdoc/api/template/publish.js b/config/jsdoc/api/template/publish.js index 4bc6c21445..8e9304cbd7 100644 --- a/config/jsdoc/api/template/publish.js +++ b/config/jsdoc/api/template/publish.js @@ -188,6 +188,12 @@ function attachModuleSymbols(doclets, modules) { }); } +function getPrettyName(longname) { + return longname + .split('~')[0] + .replace('module:', ''); +} + /** * Create the navigation sidebar. * @param {object} members The members that will be used to create the sidebar. @@ -206,10 +212,12 @@ function buildNav(members) { // merge namespaces and classes, then sort const merged = members.modules.concat(members.classes); merged.sort(function(a, b) { - if (a.longname > b.longname) { + const prettyNameA = getPrettyName(a.longname).toLowerCase(); + const prettyNameB = getPrettyName(b.longname).toLowerCase(); + if (prettyNameA > prettyNameB) { return 1; } - if (a.longname < b.longname) { + if (prettyNameA < prettyNameB) { return -1; } return 0; @@ -221,9 +229,7 @@ function buildNav(members) { nav.push({ type: 'class', longname: v.longname, - prettyname: v.longname - .split('~')[0] - .replace('module:', ''), + prettyname: getPrettyName(v.longname), name: v.name, module: find({ kind: 'module', @@ -269,13 +275,11 @@ function buildNav(members) { memberof: v.longname }); // only add modules that have more to show than just a single class - if (classes.length !== 1 && (classes.length + members.length + methods.length + typedefs.length + events.length > 0)) { + if (!classes.length || classes.length - 1 + members.length + methods.length + typedefs.length + events.length > 0) { nav.push({ type: 'module', longname: v.longname, - prettyname: v.longname - .split('~')[0] - .replace('module:', ''), + prettyname: getPrettyName(v.longname), name: v.name, members: members, methods: methods, From f8f7f83be7a92944b8cfbd394c4b0e76362cfec0 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Wed, 29 Jan 2020 17:33:04 +0100 Subject: [PATCH 123/246] Do not expose static render function of controls --- config/jsdoc/api/template/publish.js | 5 +++-- src/ol/control/Attribution.js | 1 - src/ol/control/Control.js | 13 ++++++++++++- src/ol/control/MousePosition.js | 1 - src/ol/control/OverviewMap.js | 1 - src/ol/control/Rotate.js | 1 - src/ol/control/ScaleLine.js | 1 - src/ol/control/ZoomSlider.js | 1 - test/spec/ol/control/scaleline.test.js | 4 ++-- 9 files changed, 17 insertions(+), 11 deletions(-) diff --git a/config/jsdoc/api/template/publish.js b/config/jsdoc/api/template/publish.js index 8e9304cbd7..5c40bb23ff 100644 --- a/config/jsdoc/api/template/publish.js +++ b/config/jsdoc/api/template/publish.js @@ -274,8 +274,9 @@ function buildNav(members) { kind: 'event', memberof: v.longname }); - // only add modules that have more to show than just a single class - if (!classes.length || classes.length - 1 + members.length + methods.length + typedefs.length + events.length > 0) { + // only add modules that have more to show than just classes + const numItems = classes.length - 1 + members.length + methods.length + typedefs.length + events.length; + if (!classes.length || (numItems > 0 && numItems !== classes.length)) { nav.push({ type: 'module', longname: v.longname, diff --git a/src/ol/control/Attribution.js b/src/ol/control/Attribution.js index 15a61f5318..f3409c829e 100644 --- a/src/ol/control/Attribution.js +++ b/src/ol/control/Attribution.js @@ -325,7 +325,6 @@ class Attribution extends Control { * Update the attribution element. * @param {import("../MapEvent.js").default} mapEvent Map event. * @this {Attribution} - * @api */ export function render(mapEvent) { this.updateElement_(mapEvent.frameState); diff --git a/src/ol/control/Control.js b/src/ol/control/Control.js index bcfd7f6ebd..2f03317507 100644 --- a/src/ol/control/Control.js +++ b/src/ol/control/Control.js @@ -79,9 +79,10 @@ class Control extends BaseObject { this.listenerKeys = []; /** + * @private * @type {function(import("../MapEvent.js").default): void} */ - this.render = options.render ? options.render : VOID; + this.render_ = options.render ? options.render : VOID; if (options.target) { this.setTarget(options.target); @@ -134,6 +135,16 @@ class Control extends BaseObject { } } + /** + * Update the projection. Rendering of the coordinates is done in + * `handleMouseMove` and `handleMouseUp`. + * @param {import("../MapEvent.js").default} mapEvent Map event. + * @api + */ + render(mapEvent) { + this.render_.call(this, mapEvent); + } + /** * This function is used to set a target element for the control. It has no * effect if it is called after the control has been added to the map (i.e. diff --git a/src/ol/control/MousePosition.js b/src/ol/control/MousePosition.js index e4f9aae624..3a2c017999 100644 --- a/src/ol/control/MousePosition.js +++ b/src/ol/control/MousePosition.js @@ -248,7 +248,6 @@ class MousePosition extends Control { * `handleMouseMove` and `handleMouseUp`. * @param {import("../MapEvent.js").default} mapEvent Map event. * @this {MousePosition} - * @api */ export function render(mapEvent) { const frameState = mapEvent.frameState; diff --git a/src/ol/control/OverviewMap.js b/src/ol/control/OverviewMap.js index 525bccdd22..5a83915198 100644 --- a/src/ol/control/OverviewMap.js +++ b/src/ol/control/OverviewMap.js @@ -603,7 +603,6 @@ class OverviewMap extends Control { * Update the overview map element. * @param {import("../MapEvent.js").default} mapEvent Map event. * @this {OverviewMap} - * @api */ export function render(mapEvent) { this.validateExtent_(); diff --git a/src/ol/control/Rotate.js b/src/ol/control/Rotate.js index f4dd50c54d..c4bdc237d3 100644 --- a/src/ol/control/Rotate.js +++ b/src/ol/control/Rotate.js @@ -151,7 +151,6 @@ class Rotate extends Control { * Update the rotate control element. * @param {import("../MapEvent.js").default} mapEvent Map event. * @this {Rotate} - * @api */ export function render(mapEvent) { const frameState = mapEvent.frameState; diff --git a/src/ol/control/ScaleLine.js b/src/ol/control/ScaleLine.js index 45c8ad3ff7..e0d7733ea3 100644 --- a/src/ol/control/ScaleLine.js +++ b/src/ol/control/ScaleLine.js @@ -418,7 +418,6 @@ class ScaleLine extends Control { * Update the scale line element. * @param {import("../MapEvent.js").default} mapEvent Map event. * @this {ScaleLine} - * @api */ export function render(mapEvent) { const frameState = mapEvent.frameState; diff --git a/src/ol/control/ZoomSlider.js b/src/ol/control/ZoomSlider.js index dcb8b4c223..58f2229d40 100644 --- a/src/ol/control/ZoomSlider.js +++ b/src/ol/control/ZoomSlider.js @@ -339,7 +339,6 @@ class ZoomSlider extends Control { * Update the zoomslider element. * @param {import("../MapEvent.js").default} mapEvent Map event. * @this {ZoomSlider} - * @api */ export function render(mapEvent) { if (!mapEvent.frameState) { diff --git a/test/spec/ol/control/scaleline.test.js b/test/spec/ol/control/scaleline.test.js index 954cc314b8..b88f4922e0 100644 --- a/test/spec/ol/control/scaleline.test.js +++ b/test/spec/ol/control/scaleline.test.js @@ -70,14 +70,14 @@ describe('ol.control.ScaleLine', function() { describe('render', function() { it('defaults to `ol.control.ScaleLine.render`', function() { const ctrl = new ScaleLine(); - expect(ctrl.render).to.be(render); + expect(ctrl.render_).to.be(render); }); it('can be configured', function() { const myRender = function() {}; const ctrl = new ScaleLine({ render: myRender }); - expect(ctrl.render).to.be(myRender); + expect(ctrl.render_).to.be(myRender); }); }); From 7805768942375cf6d0ceb7a07faeca12dc8ba575 Mon Sep 17 00:00:00 2001 From: Jeremy Smith Date: Thu, 30 Jan 2020 07:40:28 +1000 Subject: [PATCH 124/246] Renamed option to constrainOneAxis --- src/ol/View.js | 17 +++++++++-------- src/ol/resolutionconstraint.js | 24 ++++++++++++------------ 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/ol/View.js b/src/ol/View.js index b4e5605672..d2ab683f81 100644 --- a/src/ol/View.js +++ b/src/ol/View.js @@ -129,8 +129,9 @@ import {createMinMaxResolution} from './resolutionconstraint.js'; * @property {boolean} [smoothResolutionConstraint=true] If true, the resolution * min/max values will be applied smoothly, i. e. allow the view to exceed slightly * the given resolution or zoom bounds. - * @property {boolean} [largerResolutionConstraint=false] If true, the constrained - * resolution values will use the larger value to do so. + * @property {boolean} [constrainOneAxis=false] If true, the extent constraint can + * be exceeded along one but not both axes, allowing the whole extent to be visible + * on the map. * @property {import("./proj.js").ProjectionLike} [projection='EPSG:3857'] The * projection. The default is Spherical Mercator. * @property {number} [resolution] The initial resolution for the view. The @@ -1613,8 +1614,8 @@ export function createResolutionConstraint(options) { const smooth = options.smoothResolutionConstraint !== undefined ? options.smoothResolutionConstraint : true; - const larger = - options.largerResolutionConstraint !== undefined ? options.largerResolutionConstraint : false; + const oneAxis = + options.constrainOneAxis !== undefined ? options.constrainOneAxis : false; const projection = createProjection(options.projection, 'EPSG:3857'); const projExtent = projection.getExtent(); @@ -1633,10 +1634,10 @@ export function createResolutionConstraint(options) { if (options.constrainResolution) { resolutionConstraint = createSnapToResolutions(resolutions, smooth, - !constrainOnlyCenter && extent, larger); + !constrainOnlyCenter && extent, oneAxis); } else { resolutionConstraint = createMinMaxResolution(maxResolution, minResolution, smooth, - !constrainOnlyCenter && extent, larger); + !constrainOnlyCenter && extent, oneAxis); } } else { // calculate the default min and max resolution @@ -1682,10 +1683,10 @@ export function createResolutionConstraint(options) { if (options.constrainResolution) { resolutionConstraint = createSnapToPower( zoomFactor, maxResolution, minResolution, smooth, - !constrainOnlyCenter && extent, larger); + !constrainOnlyCenter && extent, oneAxis); } else { resolutionConstraint = createMinMaxResolution(maxResolution, minResolution, smooth, - !constrainOnlyCenter && extent, larger); + !constrainOnlyCenter && extent, oneAxis); } } return {constraint: resolutionConstraint, maxResolution: maxResolution, diff --git a/src/ol/resolutionconstraint.js b/src/ol/resolutionconstraint.js index 3d14209ec9..73dec32ace 100644 --- a/src/ol/resolutionconstraint.js +++ b/src/ol/resolutionconstraint.js @@ -16,14 +16,14 @@ import {clamp} from './math.js'; * @param {number} resolution Resolution * @param {import("./extent.js").Extent=} maxExtent Maximum allowed extent. * @param {import("./size.js").Size} viewportSize Viewport size. - * @param {boolean} larger Whether to use the larger resolution size. + * @param {boolean} oneAxis Whether we can exceed extent constraint along one axis but not both. * @return {number} Capped resolution. */ -function getViewportClampedResolution(resolution, maxExtent, viewportSize, larger) { +function getViewportClampedResolution(resolution, maxExtent, viewportSize, oneAxis) { const xResolution = getWidth(maxExtent) / viewportSize[0]; const yResolution = getHeight(maxExtent) / viewportSize[1]; - if (larger) { + if (oneAxis) { return Math.min(resolution, Math.max(xResolution, yResolution)); } return Math.min(resolution, Math.min(xResolution, yResolution)); @@ -57,10 +57,10 @@ function getSmoothClampedResolution(resolution, maxResolution, minResolution) { * @param {Array} resolutions Resolutions. * @param {boolean=} opt_smooth If true, the view will be able to slightly exceed resolution limits. Default: true. * @param {import("./extent.js").Extent=} opt_maxExtent Maximum allowed extent. - * @param {boolean=} opt_larger If true, the view will constrain the larger resolution value. Default: false. + * @param {boolean=} opt_oneAxis If true, can exceed extent constraint along one axis but not both. Default: false. * @return {Type} Zoom function. */ -export function createSnapToResolutions(resolutions, opt_smooth, opt_maxExtent, opt_larger) { +export function createSnapToResolutions(resolutions, opt_smooth, opt_maxExtent, opt_oneAxis) { return ( /** * @param {number|undefined} resolution Resolution. @@ -74,7 +74,7 @@ export function createSnapToResolutions(resolutions, opt_smooth, opt_maxExtent, const maxResolution = resolutions[0]; const minResolution = resolutions[resolutions.length - 1]; const cappedMaxRes = opt_maxExtent ? - getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_larger) : + getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_oneAxis) : maxResolution; // during interacting or animating, allow intermediary values @@ -106,10 +106,10 @@ export function createSnapToResolutions(resolutions, opt_smooth, opt_maxExtent, * @param {number=} opt_minResolution Minimum resolution. * @param {boolean=} opt_smooth If true, the view will be able to slightly exceed resolution limits. Default: true. * @param {import("./extent.js").Extent=} opt_maxExtent Maximum allowed extent. - * @param {boolean=} opt_larger If true, the view will constrain the larger resolution value. Default: false. + * @param {boolean=} opt_oneAxis If true, can exceed extent constraint along one axis but not both. Default: false. * @return {Type} Zoom function. */ -export function createSnapToPower(power, maxResolution, opt_minResolution, opt_smooth, opt_maxExtent, opt_larger) { +export function createSnapToPower(power, maxResolution, opt_minResolution, opt_smooth, opt_maxExtent, opt_oneAxis) { return ( /** * @param {number|undefined} resolution Resolution. @@ -121,7 +121,7 @@ export function createSnapToPower(power, maxResolution, opt_minResolution, opt_s function(resolution, direction, size, opt_isMoving) { if (resolution !== undefined) { const cappedMaxRes = opt_maxExtent ? - getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_larger) : + getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_oneAxis) : maxResolution; const minResolution = opt_minResolution !== undefined ? opt_minResolution : 0; @@ -155,10 +155,10 @@ export function createSnapToPower(power, maxResolution, opt_minResolution, opt_s * @param {number} minResolution Min resolution. * @param {boolean=} opt_smooth If true, the view will be able to slightly exceed resolution limits. Default: true. * @param {import("./extent.js").Extent=} opt_maxExtent Maximum allowed extent. - * @param {boolean=} opt_larger If true, the view will constrain the larger resolution value. Default: false. + * @param {boolean=} opt_oneAxis If true, can exceed extent constraint along one axis but not both. Default: false. * @return {Type} Zoom function. */ -export function createMinMaxResolution(maxResolution, minResolution, opt_smooth, opt_maxExtent, opt_larger) { +export function createMinMaxResolution(maxResolution, minResolution, opt_smooth, opt_maxExtent, opt_oneAxis) { return ( /** * @param {number|undefined} resolution Resolution. @@ -170,7 +170,7 @@ export function createMinMaxResolution(maxResolution, minResolution, opt_smooth, function(resolution, direction, size, opt_isMoving) { if (resolution !== undefined) { const cappedMaxRes = opt_maxExtent ? - getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_larger) : + getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_oneAxis) : maxResolution; const smooth = opt_smooth !== undefined ? opt_smooth : true; From 001cb989902f6c0d55422bcca355ed8fa8e61262 Mon Sep 17 00:00:00 2001 From: Jeremy Smith Date: Thu, 30 Jan 2020 08:03:02 +1000 Subject: [PATCH 125/246] Updated test to use renamed option --- test/spec/ol/view.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/spec/ol/view.test.js b/test/spec/ol/view.test.js index 4d44e2fa43..3d0bd026b0 100644 --- a/test/spec/ol/view.test.js +++ b/test/spec/ol/view.test.js @@ -393,10 +393,10 @@ describe('ol.View', function() { expect(constraint(1, 0, size)).to.be(1); }); - it('accepts extent and largerResolutionConstraint and uses the larger value', function() { + it('accepts extent and constrainOneAxis and uses the larger value', function() { const constraint = getConstraint({ extent: [0, 0, 4000, 6000], - largerResolutionConstraint: true + constrainOneAxis: true }); expect(constraint(1000, 0, size)).to.be(30); From a24c94487c614f0f8f6f7a881bfa5e3b6ddc1c3b Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Sat, 25 Jan 2020 20:53:28 +0100 Subject: [PATCH 126/246] Cache label instructions for better performance --- src/ol/render/canvas/Executor.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/ol/render/canvas/Executor.js b/src/ol/render/canvas/Executor.js index e94f666554..c109c6d04b 100644 --- a/src/ol/render/canvas/Executor.js +++ b/src/ol/render/canvas/Executor.js @@ -173,6 +173,12 @@ class Executor { * @type {Object>} */ this.widths_ = {}; + + /** + * @private + * @type {Object} + */ + this.labels_ = {}; } /** @@ -183,6 +189,10 @@ class Executor { * @return {Label} Label. */ createLabel(text, textKey, fillKey, strokeKey) { + const key = text + textKey + fillKey + strokeKey; + if (this.labels_[key]) { + return this.labels_[key]; + } const strokeState = strokeKey ? this.strokeStates[strokeKey] : null; const fillState = fillKey ? this.fillStates[fillKey] : null; const textState = this.textStates[textKey]; @@ -239,6 +249,7 @@ class Executor { contextInstructions.push('fillText', [lines[i], x + leftRight * widths[i], 0.5 * (strokeWidth + lineHeight) + i * lineHeight]); } } + this.labels_[key] = label; return label; } From 542b77eef89d389c36aa566cce02a33ec4bfc6d5 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Sat, 25 Jan 2020 20:53:50 +0100 Subject: [PATCH 127/246] Save and restore before rendering labels --- src/ol/render/canvas.js | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/src/ol/render/canvas.js b/src/ol/render/canvas.js index d4c7498451..726870e053 100644 --- a/src/ol/render/canvas.js +++ b/src/ol/render/canvas.js @@ -401,30 +401,21 @@ export const resetTransform = createTransform(); */ export function drawImageOrLabel(context, transform, opacity, labelOrImage, originX, originY, w, h, x, y, scale) { - let alpha; - if (opacity != 1) { - alpha = context.globalAlpha; - context.globalAlpha = alpha * opacity; - } + context.save(); + if (transform) { context.setTransform.apply(context, transform); } - const isLabel = !!(/** @type {*} */ (labelOrImage).contextInstructions); - - if (isLabel) { + if ((/** @type {*} */ (labelOrImage).contextInstructions)) { + // label context.translate(x, y); context.scale(scale, scale); executeLabelInstructions(/** @type {import("./canvas/Executor.js").Label} */ (labelOrImage), context); } else { + // image context.drawImage(/** @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} */ (labelOrImage), originX, originY, w, h, x, y, w * scale, h * scale); } - if (opacity != 1) { - context.globalAlpha = alpha; - } - - if (transform || isLabel) { - context.setTransform.apply(context, resetTransform); - } + context.restore(); } From 81d14fb6367c3f48be4b901dda9ec9e9e0e7aaab Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Thu, 30 Jan 2020 10:47:53 +0100 Subject: [PATCH 128/246] Remove obsolete license notice --- src/ol/sphere.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/ol/sphere.js b/src/ol/sphere.js index 931373be4a..b9e2d0bb72 100644 --- a/src/ol/sphere.js +++ b/src/ol/sphere.js @@ -1,10 +1,3 @@ -/** - * @license - * Latitude/longitude spherical geodesy formulae taken from - * http://www.movable-type.co.uk/scripts/latlong.html - * Licensed under CC-BY-3.0. - */ - /** * @module ol/sphere */ From 7266f37f85c1f7a77757dd1a37f7a9d12fade8a3 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Thu, 30 Jan 2020 14:52:04 +0100 Subject: [PATCH 129/246] Remove unused export and variable --- src/ol/render/canvas.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/ol/render/canvas.js b/src/ol/render/canvas.js index 726870e053..65b7453920 100644 --- a/src/ol/render/canvas.js +++ b/src/ol/render/canvas.js @@ -4,7 +4,6 @@ import {getFontParameters} from '../css.js'; import {createCanvasContext2D} from '../dom.js'; import {clear} from '../obj.js'; -import {create as createTransform} from '../transform.js'; import {executeLabelInstructions} from './canvas/Executor.js'; import BaseObject from '../Object.js'; import EventTarget from '../events/Target.js'; @@ -383,9 +382,6 @@ export function rotateAtOffset(context, rotation, offsetX, offsetY) { } -export const resetTransform = createTransform(); - - /** * @param {CanvasRenderingContext2D} context Context. * @param {import("../transform.js").Transform|null} transform Transform. From 38abbcbdd6c8f3e46897b9ba17ca3789a2ac1ba6 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Sat, 1 Feb 2020 19:06:37 +0100 Subject: [PATCH 130/246] Remove inheritDoc to work around JSDoc issue --- src/ol/source/Tile.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/ol/source/Tile.js b/src/ol/source/Tile.js index 6e99ed0c79..baf0386a39 100644 --- a/src/ol/source/Tile.js +++ b/src/ol/source/Tile.js @@ -317,9 +317,6 @@ class TileSource extends Source { this.tileCache.clear(); } - /** - * @inheritDoc - */ refresh() { this.clear(); super.refresh(); From f91ce5692f36b1d9b8977a74d6bbc5cf1a80cf30 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Sat, 1 Feb 2020 21:44:10 +0100 Subject: [PATCH 131/246] Remove apidoc annotation to show refresh for ol/source/Cluster --- src/ol/source/Vector.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/ol/source/Vector.js b/src/ol/source/Vector.js index 0d0905e5c2..49ac34296b 100644 --- a/src/ol/source/Vector.js +++ b/src/ol/source/Vector.js @@ -914,9 +914,6 @@ class VectorSource extends Source { } } - /** - * @inheritDoc - */ refresh() { this.clear(true); this.loadedExtentsRtree_.clear(); From 3c2dfb511afbaa52445c9456b376fe07fe37983a Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Mon, 27 Jan 2020 14:42:03 +0000 Subject: [PATCH 132/246] Fix Polystyle outline 0 conflict with Linestyle Return separate style objects for polygon geometries (including multipolygon and polygons in geometry collections) and other geometries if Polystyle outline is defined as 0 Rearrange code to reduce cloning of styles in createNameStyleFunction Update Polystyle outline 0 tests Check for separate style objects applying to LineString and Polygon geometries Test LineString and Polygon geometries in a collection --- src/ol/format/KML.js | 80 ++++++++++++++++++++++++++------- test/spec/ol/format/kml.test.js | 74 ++++++++++++++++++++++++++++-- 2 files changed, 133 insertions(+), 21 deletions(-) diff --git a/src/ol/format/KML.js b/src/ol/format/KML.js index 77dc5a7aff..5b4551035f 100644 --- a/src/ol/format/KML.js +++ b/src/ol/format/KML.js @@ -882,32 +882,32 @@ class KML extends XMLFeature { * @return {Style} style Style. */ function createNameStyleFunction(foundStyle, name) { - let textStyle = null; const textOffset = [0, 0]; let textAlign = 'start'; - if (foundStyle.getImage()) { - let imageSize = foundStyle.getImage().getImageSize(); + const imageStyle = foundStyle.getImage(); + if (imageStyle) { + let imageSize = imageStyle.getImageSize(); if (imageSize === null) { imageSize = DEFAULT_IMAGE_STYLE_SIZE; } if (imageSize.length == 2) { - const imageScale = foundStyle.getImage().getScale(); - // Offset the label to be centered to the right of the icon, if there is - // one. + const imageScale = imageStyle.getScale(); + // Offset the label to be centered to the right of the icon, + // if there is one. textOffset[0] = imageScale * imageSize[0] / 2; textOffset[1] = -imageScale * imageSize[1] / 2; textAlign = 'left'; } } - if (foundStyle.getText() !== null) { + let textStyle = foundStyle.getText(); + if (textStyle) { // clone the text style, customizing it with name, alignments and offset. // Note that kml does not support many text options that OpenLayers does (rotation, textBaseline). - const foundText = foundStyle.getText(); - textStyle = foundText.clone(); - textStyle.setFont(foundText.getFont() || DEFAULT_TEXT_STYLE.getFont()); - textStyle.setScale(foundText.getScale() || DEFAULT_TEXT_STYLE.getScale()); - textStyle.setFill(foundText.getFill() || DEFAULT_TEXT_STYLE.getFill()); - textStyle.setStroke(foundText.getStroke() || DEFAULT_TEXT_STROKE_STYLE); + textStyle = textStyle.clone(); + textStyle.setFont(textStyle.getFont() || DEFAULT_TEXT_STYLE.getFont()); + textStyle.setScale(textStyle.getScale() || DEFAULT_TEXT_STYLE.getScale()); + textStyle.setFill(textStyle.getFill() || DEFAULT_TEXT_STYLE.getFill()); + textStyle.setStroke(textStyle.getStroke() || DEFAULT_TEXT_STROKE_STYLE); } else { textStyle = DEFAULT_TEXT_STYLE.clone(); } @@ -916,8 +916,10 @@ function createNameStyleFunction(foundStyle, name) { textStyle.setOffsetY(textOffset[1]); textStyle.setTextAlign(textAlign); - const nameStyle = foundStyle.clone(); - nameStyle.setText(textStyle); + const nameStyle = new Style({ + image: imageStyle, + text: textStyle + }); return nameStyle; } @@ -1766,13 +1768,57 @@ function readStyle(node, objectStack) { const textStyle = /** @type {Text} */ ('textStyle' in styleObject ? styleObject['textStyle'] : DEFAULT_TEXT_STYLE); - let strokeStyle = /** @type {Stroke} */ + const strokeStyle = /** @type {Stroke} */ ('strokeStyle' in styleObject ? styleObject['strokeStyle'] : DEFAULT_STROKE_STYLE); const outline = /** @type {boolean|undefined} */ (styleObject['outline']); if (outline !== undefined && !outline) { - strokeStyle = null; + // if the polystyle specifies no outline two styles are needed, + // one for non-polygon geometries where linestrings require a stroke + // and one for polygons where there should be no stroke + return [ + new Style({ + geometry: function(feature) { + const geometry = feature.getGeometry(); + const type = geometry.getType(); + if (type === GeometryType.GEOMETRY_COLLECTION) { + return new GeometryCollection( + geometry.getGeometriesArray().filter(function(geometry) { + const type = geometry.getType(); + return type !== GeometryType.POLYGON && type !== GeometryType.MULTI_POLYGON; + }) + ); + } else if (type !== GeometryType.POLYGON && type !== GeometryType.MULTI_POLYGON) { + return geometry; + } + }, + fill: fillStyle, + image: imageStyle, + stroke: strokeStyle, + text: textStyle, + zIndex: undefined // FIXME + }), + new Style({ + geometry: function(feature) { + const geometry = feature.getGeometry(); + const type = geometry.getType(); + if (type === GeometryType.GEOMETRY_COLLECTION) { + return new GeometryCollection( + geometry.getGeometriesArray().filter(function(geometry) { + const type = geometry.getType(); + return type === GeometryType.POLYGON || type === GeometryType.MULTI_POLYGON; + }) + ); + } else if (type === GeometryType.POLYGON || type === GeometryType.MULTI_POLYGON) { + return geometry; + } + }, + fill: fillStyle, + stroke: null, + zIndex: undefined // FIXME + }) + ]; } return [new Style({ fill: fillStyle, diff --git a/test/spec/ol/format/kml.test.js b/test/spec/ol/format/kml.test.js index 6f4e2fe2d6..700d8273c8 100644 --- a/test/spec/ol/format/kml.test.js +++ b/test/spec/ol/format/kml.test.js @@ -2167,6 +2167,11 @@ describe('ol.format.KML', function() { }); it('disables the stroke when outline is \'0\'', function() { + const lineString = new LineString([[1, 2], [3, 4]]); + const polygon = new Polygon([[[0, 0], [0, 2], [2, 2], [2, 0], [0, 0]]]); + const lineStringFeature = new Feature(lineString); + const polygonFeature = new Feature(polygon); + const collectionFeature = new Feature(new GeometryCollection([lineString, polygon])); const text = '' + ' ' + @@ -2190,20 +2195,53 @@ describe('ol.format.KML', function() { expect(styleFunction).not.to.be(undefined); const styleArray = styleFunction(f, 0); expect(styleArray).to.be.an(Array); - expect(styleArray).to.have.length(1); + expect(styleArray).to.have.length(2); + const style = styleArray[0]; expect(style).to.be.an(Style); + expect(style.getGeometryFunction()(lineStringFeature)).to.be(lineString); + expect(style.getGeometryFunction()(polygonFeature)).to.be(undefined); + const gc = style.getGeometryFunction()(collectionFeature); + expect(gc).to.be.an(GeometryCollection); + const gs = gc.getGeometries(); + expect(gs).to.be.an(Array); + expect(gs).to.have.length(1); + expect(gs[0]).to.be.an(LineString); + expect(gs[0].getCoordinates()).to.eql(lineString.getCoordinates()); const fillStyle = style.getFill(); expect(fillStyle).to.be.an(Fill); expect(fillStyle.getColor()).to.eql([0x78, 0x56, 0x34, 0x12 / 255]); expect(style.getImage()).to.be(getDefaultImageStyle()); - expect(style.getStroke()).to.be(null); + const strokeStyle = style.getStroke(); + expect(strokeStyle).to.be.an(Stroke); + expect(strokeStyle.getColor()).to.eql([0x78, 0x56, 0x34, 0x12 / 255]); + expect(strokeStyle.getWidth()).to.be(9); expect(style.getText()).to.be(getDefaultTextStyle()); expect(style.getZIndex()).to.be(undefined); + + const style1 = styleArray[1]; + expect(style1).to.be.an(Style); + expect(style1.getGeometryFunction()(lineStringFeature)).to.be(undefined); + expect(style1.getGeometryFunction()(polygonFeature)).to.be(polygon); + const gc1 = style1.getGeometryFunction()(collectionFeature); + expect(gc1).to.be.an(GeometryCollection); + const gs1 = gc1.getGeometries(); + expect(gs1).to.be.an(Array); + expect(gs1).to.have.length(1); + expect(gs1[0]).to.be.an(Polygon); + expect(gs1[0].getCoordinates()).to.eql(polygon.getCoordinates()); + expect(style1.getFill()).to.be(fillStyle); + expect(style1.getStroke()).to.be(null); + expect(style1.getZIndex()).to.be(undefined); }); it('disables both fill and stroke when fill and outline are \'0\'', function() { + const lineString = new LineString([[1, 2], [3, 4]]); + const polygon = new Polygon([[[0, 0], [0, 2], [2, 2], [2, 0], [0, 0]]]); + const lineStringFeature = new Feature(lineString); + const polygonFeature = new Feature(polygon); + const collectionFeature = new Feature(new GeometryCollection([lineString, polygon])); const text = '' + ' ' + @@ -2228,14 +2266,42 @@ describe('ol.format.KML', function() { expect(styleFunction).not.to.be(undefined); const styleArray = styleFunction(f, 0); expect(styleArray).to.be.an(Array); - expect(styleArray).to.have.length(1); + expect(styleArray).to.have.length(2); + const style = styleArray[0]; expect(style).to.be.an(Style); + expect(style.getGeometryFunction()(lineStringFeature)).to.be(lineString); + expect(style.getGeometryFunction()(polygonFeature)).to.be(undefined); + const gc = style.getGeometryFunction()(collectionFeature); + expect(gc).to.be.an(GeometryCollection); + const gs = gc.getGeometries(); + expect(gs).to.be.an(Array); + expect(gs).to.have.length(1); + expect(gs[0]).to.be.an(LineString); + expect(gs[0].getCoordinates()).to.eql(lineString.getCoordinates()); expect(style.getFill()).to.be(null); expect(style.getImage()).to.be(getDefaultImageStyle()); - expect(style.getStroke()).to.be(null); + const strokeStyle = style.getStroke(); + expect(strokeStyle).to.be.an(Stroke); + expect(strokeStyle.getColor()).to.eql([0x78, 0x56, 0x34, 0x12 / 255]); + expect(strokeStyle.getWidth()).to.be(9); expect(style.getText()).to.be(getDefaultTextStyle()); expect(style.getZIndex()).to.be(undefined); + + const style1 = styleArray[1]; + expect(style1).to.be.an(Style); + expect(style1.getGeometryFunction()(lineStringFeature)).to.be(undefined); + expect(style1.getGeometryFunction()(polygonFeature)).to.be(polygon); + const gc1 = style1.getGeometryFunction()(collectionFeature); + expect(gc1).to.be.an(GeometryCollection); + const gs1 = gc1.getGeometries(); + expect(gs1).to.be.an(Array); + expect(gs1).to.have.length(1); + expect(gs1[0]).to.be.an(Polygon); + expect(gs1[0].getCoordinates()).to.eql(polygon.getCoordinates()); + expect(style1.getFill()).to.be(null); + expect(style1.getStroke()).to.be(null); + expect(style1.getZIndex()).to.be(undefined); }); it('can create text style for named point placemarks (including html character codes)', function() { From 564af3e4d5511e6f8e1ada3a5c181fb84995301d Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2020 08:14:11 +0000 Subject: [PATCH 133/246] Bump puppeteer from 2.0.0 to 2.1.0 Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 2.0.0 to 2.1.0. - [Release notes](https://github.com/puppeteer/puppeteer/releases) - [Commits](https://github.com/puppeteer/puppeteer/compare/v2.0.0...v2.1.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 78 ++++++++++++++++++++++------------------------- package.json | 2 +- 2 files changed, 37 insertions(+), 43 deletions(-) diff --git a/package-lock.json b/package-lock.json index e1903e27da..a0d2a3e890 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2389,6 +2389,12 @@ "@types/node": "*" } }, + "@types/mime-types": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.0.tgz", + "integrity": "sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM=", + "dev": true + }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -2654,13 +2660,10 @@ "dev": true }, "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "dev": true }, "aggregate-error": { "version": "3.0.1", @@ -4871,21 +4874,6 @@ "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=", "dev": true }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "^4.0.3" - } - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -7145,24 +7133,13 @@ "dev": true }, "https-proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", - "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", "dev": true, "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } + "agent-base": "5", + "debug": "4" } }, "iconv-lite": { @@ -10362,21 +10339,38 @@ "dev": true }, "puppeteer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-2.0.0.tgz", - "integrity": "sha512-t3MmTWzQxPRP71teU6l0jX47PHXlc4Z52sQv4LJQSZLq1ttkKS2yGM3gaI57uQwZkNaoGd0+HPPMELZkcyhlqA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-2.1.0.tgz", + "integrity": "sha512-PC4oKMtwAElo8YtS/cYnk2/dew/3TonsGKKzjpFLWwkhBCteFsOZCVOXTt2QlP6w53mH0YsJE+fPLPzOW+DCug==", "dev": true, "requires": { + "@types/mime-types": "^2.1.0", "debug": "^4.1.0", "extract-zip": "^1.6.6", - "https-proxy-agent": "^3.0.0", + "https-proxy-agent": "^4.0.0", "mime": "^2.0.3", + "mime-types": "^2.1.25", "progress": "^2.0.1", "proxy-from-env": "^1.0.0", "rimraf": "^2.6.1", "ws": "^6.1.0" }, "dependencies": { + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "dev": true, + "requires": { + "mime-db": "1.43.0" + } + }, "ws": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", diff --git a/package.json b/package.json index 5c8456927e..04425b1ebe 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "pixelmatch": "^5.1.0", "pngjs": "^3.4.0", "proj4": "2.6.0", - "puppeteer": "~2.0.0", + "puppeteer": "~2.1.0", "rollup": "^1.25.1", "rollup-plugin-babel": "^4.3.3", "rollup-plugin-commonjs": "^10.0.0", From cd3a205803102f1041d5b73f054abe4b244edf06 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2020 08:14:59 +0000 Subject: [PATCH 134/246] Bump terser-webpack-plugin from 2.3.2 to 2.3.4 Bumps [terser-webpack-plugin](https://github.com/webpack-contrib/terser-webpack-plugin) from 2.3.2 to 2.3.4. - [Release notes](https://github.com/webpack-contrib/terser-webpack-plugin/releases) - [Changelog](https://github.com/webpack-contrib/terser-webpack-plugin/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/terser-webpack-plugin/compare/v2.3.2...v2.3.4) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 77 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 59 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index e1903e27da..9f4c9f30be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6045,9 +6045,9 @@ } }, "fs-minipass": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.0.0.tgz", - "integrity": "sha512-40Qz+LFXmd9tzYVnnBmZvFfvAADfUA14TXPK1s7IfElJTIZ97rA8w4Kin7Wt5JBrC3ShnnFJO/5vPjPEeJIq9A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "requires": { "minipass": "^3.0.0" @@ -12242,15 +12242,16 @@ } }, "terser-webpack-plugin": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.2.tgz", - "integrity": "sha512-SmvB/6gtEPv+CJ88MH5zDOsZdKXPS/Uzv2//e90+wM1IHFUhsguPKEILgzqrM1nQ4acRXN/SV4Obr55SXC+0oA==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.4.tgz", + "integrity": "sha512-Nv96Nws2R2nrFOpbzF6IxRDpIkkIfmhvOws+IqMvYdFLO7o6wAILWFKONFgaYy8+T4LVz77DQW0f7wOeDEAjrg==", "dev": true, "requires": { "cacache": "^13.0.1", "find-cache-dir": "^3.2.0", - "jest-worker": "^24.9.0", - "schema-utils": "^2.6.1", + "jest-worker": "^25.1.0", + "p-limit": "^2.2.2", + "schema-utils": "^2.6.4", "serialize-javascript": "^2.1.2", "source-map": "^0.6.1", "terser": "^4.4.3", @@ -12258,12 +12259,12 @@ }, "dependencies": { "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", + "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -12307,6 +12308,12 @@ "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", "dev": true }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "dev": true + }, "find-cache-dir": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.2.0.tgz", @@ -12334,6 +12341,22 @@ "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", "dev": true }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-worker": { + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.1.0.tgz", + "integrity": "sha512-ZHhHtlxOWSxCoNOKHGbiLzXnl42ga9CxDr27H36Qn+15pQZd3R/F24jrmjDelw9j/iHUIWMWs08/u2QN50HHOg==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -12352,6 +12375,15 @@ "semver": "^6.0.0" } }, + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", @@ -12395,9 +12427,9 @@ } }, "schema-utils": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz", - "integrity": "sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.4.tgz", + "integrity": "sha512-VNjcaUxVnEeun6B2fiiUDjXXBtD4ZSH7pdbfIu1pOFwgptDPLMo/z9jr4sUfsjFVPqDCEin/F7IYlq7/E6yDbQ==", "dev": true, "requires": { "ajv": "^6.10.2", @@ -12420,10 +12452,19 @@ "minipass": "^3.1.1" } }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "terser": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.2.tgz", - "integrity": "sha512-6FUjJdY2i3WZAtYBtnV06OOcOfzl+4hSKYE9wgac8rkLRBToPDDrBB2AcHwQD/OKDxbnvhVy2YgOPWO2SsKWqg==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.3.tgz", + "integrity": "sha512-Lw+ieAXmY69d09IIc/yqeBqXpEQIpDGZqT34ui1QWXIUpR2RjbqEkT8X7Lgex19hslSqcWM5iMN2kM11eMsESQ==", "dev": true, "requires": { "commander": "^2.20.0", From f4ef2e15dbf43d773b0cb6c30123708e607e9fff Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2020 08:15:52 +0000 Subject: [PATCH 135/246] Bump url-polyfill from 1.1.7 to 1.1.8 Bumps [url-polyfill](https://github.com/lifaon74/url-polyfill) from 1.1.7 to 1.1.8. - [Release notes](https://github.com/lifaon74/url-polyfill/releases) - [Commits](https://github.com/lifaon74/url-polyfill/compare/1.1.7...1.1.8) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index e1903e27da..1daa780f6d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12843,9 +12843,9 @@ } }, "url-polyfill": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/url-polyfill/-/url-polyfill-1.1.7.tgz", - "integrity": "sha512-ZrAxYWCREjmMtL8gSbSiKKLZZticgihCvVBtrFbUVpyoETt8GQJeG2okMWA8XryDAaHMjJfhnc+rnhXRbI4DXA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/url-polyfill/-/url-polyfill-1.1.8.tgz", + "integrity": "sha512-Ey61F4FEqhcu1vHSOMmjl0Vd/RPRLEjMj402qszD/dhMBrVfoUsnIj8KSZo2yj+eIlxJGKFdnm6ES+7UzMgZ3Q==", "dev": true }, "use": { From 1e08750398365202dd2138a195244c19c7993ef1 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2020 08:17:08 +0000 Subject: [PATCH 136/246] Bump @babel/preset-env from 7.8.3 to 7.8.4 Bumps [@babel/preset-env](https://github.com/babel/babel) from 7.8.3 to 7.8.4. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) - [Commits](https://github.com/babel/babel/compare/v7.8.3...v7.8.4) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 234 +++++++++++++++++++++++----------------------- 1 file changed, 117 insertions(+), 117 deletions(-) diff --git a/package-lock.json b/package-lock.json index e1903e27da..33e205e9a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,12 +14,12 @@ } }, "@babel/compat-data": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.1.tgz", - "integrity": "sha512-Z+6ZOXvyOWYxJ50BwxzdhRnRsGST8Y3jaZgxYig575lTjVSs3KtJnmESwZegg6e2Dn0td1eDhoWlp1wI4BTCPw==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.5.tgz", + "integrity": "sha512-jWYUqQX/ObOhG1UiEkbH5SANsE/8oKXiQWjj7p7xgj9Zmnt//aUvyz4dBkK0HNsS8/cbyC5NmmH87VekW+mXFg==", "dev": true, "requires": { - "browserslist": "^4.8.2", + "browserslist": "^4.8.5", "invariant": "^2.2.4", "semver": "^5.5.0" } @@ -278,9 +278,9 @@ } }, "@babel/generator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", - "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", + "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", "dev": true, "requires": { "@babel/types": "^7.8.3", @@ -330,9 +330,9 @@ } }, "@babel/parser": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", - "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", + "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", "dev": true }, "@babel/template": { @@ -347,16 +347,16 @@ } }, "@babel/traverse": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", - "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", + "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.3", + "@babel/generator": "^7.8.4", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.3", + "@babel/parser": "^7.8.4", "@babel/types": "^7.8.3", "debug": "^4.1.0", "globals": "^11.1.0", @@ -389,15 +389,15 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.3.tgz", - "integrity": "sha512-JLylPCsFjhLN+6uBSSh3iYdxKdeO9MNmoY96PE/99d8kyBFaXLORtAVhqN6iHa+wtPeqxKLghDOZry0+Aiw9Tw==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.4.tgz", + "integrity": "sha512-3k3BsKMvPp5bjxgMdrFyq0UaEO48HciVrOVF0+lon8pp95cyJ2ujAh0TrBHNMnJGT2rr0iKOJPFFbSqjDyf/Pg==", "dev": true, "requires": { - "@babel/compat-data": "^7.8.1", - "browserslist": "^4.8.2", + "@babel/compat-data": "^7.8.4", + "browserslist": "^4.8.5", "invariant": "^2.2.4", - "levenary": "^1.1.0", + "levenary": "^1.1.1", "semver": "^5.5.0" } }, @@ -488,9 +488,9 @@ } }, "@babel/parser": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", - "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", + "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", "dev": true }, "@babel/template": { @@ -537,9 +537,9 @@ } }, "@babel/generator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", - "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", + "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", "dev": true, "requires": { "@babel/types": "^7.8.3", @@ -589,9 +589,9 @@ } }, "@babel/parser": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", - "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", + "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", "dev": true }, "@babel/template": { @@ -606,16 +606,16 @@ } }, "@babel/traverse": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", - "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", + "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.3", + "@babel/generator": "^7.8.4", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.3", + "@babel/parser": "^7.8.4", "@babel/types": "^7.8.3", "debug": "^4.1.0", "globals": "^11.1.0", @@ -773,9 +773,9 @@ } }, "@babel/parser": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", - "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", + "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", "dev": true }, "@babel/template": { @@ -862,9 +862,9 @@ } }, "@babel/generator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", - "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", + "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", "dev": true, "requires": { "@babel/types": "^7.8.3", @@ -914,9 +914,9 @@ } }, "@babel/parser": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", - "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", + "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", "dev": true }, "@babel/template": { @@ -931,16 +931,16 @@ } }, "@babel/traverse": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", - "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", + "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.3", + "@babel/generator": "^7.8.4", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.3", + "@babel/parser": "^7.8.4", "@babel/types": "^7.8.3", "debug": "^4.1.0", "globals": "^11.1.0", @@ -994,9 +994,9 @@ } }, "@babel/generator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", - "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", + "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", "dev": true, "requires": { "@babel/types": "^7.8.3", @@ -1046,9 +1046,9 @@ } }, "@babel/parser": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", - "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", + "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", "dev": true }, "@babel/template": { @@ -1063,16 +1063,16 @@ } }, "@babel/traverse": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", - "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", + "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.3", + "@babel/generator": "^7.8.4", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.3", + "@babel/parser": "^7.8.4", "@babel/types": "^7.8.3", "debug": "^4.1.0", "globals": "^11.1.0", @@ -1135,9 +1135,9 @@ } }, "@babel/parser": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", - "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", + "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", "dev": true }, "@babel/template": { @@ -1195,9 +1195,9 @@ } }, "@babel/generator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", - "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", + "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", "dev": true, "requires": { "@babel/types": "^7.8.3", @@ -1247,9 +1247,9 @@ } }, "@babel/parser": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", - "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", + "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", "dev": true }, "@babel/template": { @@ -1264,16 +1264,16 @@ } }, "@babel/traverse": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", - "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", + "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.3", + "@babel/generator": "^7.8.4", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.3", + "@babel/parser": "^7.8.4", "@babel/types": "^7.8.3", "debug": "^4.1.0", "globals": "^11.1.0", @@ -1733,9 +1733,9 @@ } }, "@babel/parser": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", - "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", + "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", "dev": true }, "@babel/template": { @@ -1810,9 +1810,9 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.3.tgz", - "integrity": "sha512-ZjXznLNTxhpf4Q5q3x1NsngzGA38t9naWH8Gt+0qYZEJAcvPI9waSStSh56u19Ofjr7QmD0wUsQ8hw8s/p1VnA==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz", + "integrity": "sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" @@ -1869,9 +1869,9 @@ } }, "@babel/parser": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", - "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", + "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", "dev": true }, "@babel/template": { @@ -1990,9 +1990,9 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.3.tgz", - "integrity": "sha512-/pqngtGb54JwMBZ6S/D3XYylQDFtGjWrnoCF4gXZOUpFV/ujbxnoNGNvDGu6doFWRPBveE72qTx/RRU44j5I/Q==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz", + "integrity": "sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA==", "dev": true, "requires": { "@babel/helper-call-delegate": "^7.8.3", @@ -2088,9 +2088,9 @@ } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.3.tgz", - "integrity": "sha512-3TrkKd4LPqm4jHs6nPtSDI/SV9Cm5PRJkHLUgTcqRQQTMAZ44ZaAdDZJtvWFSaRcvT0a1rTmJ5ZA5tDKjleF3g==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz", + "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" @@ -2107,13 +2107,13 @@ } }, "@babel/preset-env": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.3.tgz", - "integrity": "sha512-Rs4RPL2KjSLSE2mWAx5/iCH+GC1ikKdxPrhnRS6PfFVaiZeom22VFKN4X8ZthyN61kAaR05tfXTbCvatl9WIQg==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.4.tgz", + "integrity": "sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w==", "dev": true, "requires": { - "@babel/compat-data": "^7.8.0", - "@babel/helper-compilation-targets": "^7.8.3", + "@babel/compat-data": "^7.8.4", + "@babel/helper-compilation-targets": "^7.8.4", "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-proposal-async-generator-functions": "^7.8.3", @@ -2142,7 +2142,7 @@ "@babel/plugin-transform-dotall-regex": "^7.8.3", "@babel/plugin-transform-duplicate-keys": "^7.8.3", "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.8.3", + "@babel/plugin-transform-for-of": "^7.8.4", "@babel/plugin-transform-function-name": "^7.8.3", "@babel/plugin-transform-literals": "^7.8.3", "@babel/plugin-transform-member-expression-literals": "^7.8.3", @@ -2153,7 +2153,7 @@ "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", "@babel/plugin-transform-new-target": "^7.8.3", "@babel/plugin-transform-object-super": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.8.4", "@babel/plugin-transform-property-literals": "^7.8.3", "@babel/plugin-transform-regenerator": "^7.8.3", "@babel/plugin-transform-reserved-words": "^7.8.3", @@ -2161,13 +2161,13 @@ "@babel/plugin-transform-spread": "^7.8.3", "@babel/plugin-transform-sticky-regex": "^7.8.3", "@babel/plugin-transform-template-literals": "^7.8.3", - "@babel/plugin-transform-typeof-symbol": "^7.8.3", + "@babel/plugin-transform-typeof-symbol": "^7.8.4", "@babel/plugin-transform-unicode-regex": "^7.8.3", "@babel/types": "^7.8.3", - "browserslist": "^4.8.2", + "browserslist": "^4.8.5", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", - "levenary": "^1.1.0", + "levenary": "^1.1.1", "semver": "^5.5.0" }, "dependencies": { @@ -3491,14 +3491,14 @@ } }, "browserslist": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", - "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", + "version": "4.8.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.6.tgz", + "integrity": "sha512-ZHao85gf0eZ0ESxLfCp73GG9O/VTytYDIkIiZDlURppLTI9wErSM/5yAKEq6rcUdxBLjMELmrYUJGg5sxGKMHg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001017", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.44" + "caniuse-lite": "^1.0.30001023", + "electron-to-chromium": "^1.3.341", + "node-releases": "^1.1.47" } }, "buble": { @@ -3683,9 +3683,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001021", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001021.tgz", - "integrity": "sha512-wuMhT7/hwkgd8gldgp2jcrUjOU9RXJ4XxGumQeOsUr91l3WwmM68Cpa/ymCnWEDqakwFXhuDQbaKNHXBPgeE9g==", + "version": "1.0.30001023", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001023.tgz", + "integrity": "sha512-C5TDMiYG11EOhVOA62W1p3UsJ2z4DsHtMBQtjzp3ZsUglcQn62WOUgW0y795c7A5uZ+GCEIvzkMatLIlAsbNTA==", "dev": true }, "caseless": { @@ -4661,9 +4661,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.338", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.338.tgz", - "integrity": "sha512-wlmfixuHEc9CkfOKgcqdtzBmRW4NStM9ptl5oPILY2UDyHuSXb3Yit+yLVyLObTgGuMMU36hhnfs2GDJId7ctA==", + "version": "1.3.344", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.344.tgz", + "integrity": "sha512-tvbx2Wl8WBR+ym3u492D0L6/jH+8NoQXqe46+QhbWH3voVPauGuZYeb1QAXYoOAWuiP2dbSvlBx0kQ1F3hu/Mw==", "dev": true }, "elliptic": { @@ -8473,9 +8473,9 @@ "dev": true }, "levenary": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.0.tgz", - "integrity": "sha512-VHcwhO0UTpUW7rLPN2/OiWJdgA1e9BqEDALhrgCe/F+uUJnep6CoUsTzMeP8Rh0NGr9uKquXxqe7lwLZo509nQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", + "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", "dev": true, "requires": { "leven": "^3.1.0" @@ -9487,9 +9487,9 @@ } }, "node-releases": { - "version": "1.1.46", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.46.tgz", - "integrity": "sha512-YOjdx+Uoh9FbRO7yVYbnbt1puRWPQMemR3SutLeyv2XfxKs1ihpe0OLAUwBPEP2ImNH/PZC7SEiC6j32dwRZ7g==", + "version": "1.1.47", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.47.tgz", + "integrity": "sha512-k4xjVPx5FpwBUj0Gw7uvFOTF4Ep8Hok1I6qjwL3pLfwe7Y0REQSAqOwwv9TWBCUtMHxcXfY4PgRLRozcChvTcA==", "dev": true, "requires": { "semver": "^6.3.0" From cf0b8af3565c6ca9337fafab54418255f526f8bb Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2020 08:17:49 +0000 Subject: [PATCH 137/246] Bump rollup from 1.29.1 to 1.31.0 Bumps [rollup](https://github.com/rollup/rollup) from 1.29.1 to 1.31.0. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v1.29.1...v1.31.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index e1903e27da..b13eefc2d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10893,9 +10893,9 @@ } }, "rollup": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.29.1.tgz", - "integrity": "sha512-dGQ+b9d1FOX/gluiggTAVnTvzQZUEkCi/TwZcax7ujugVRHs0nkYJlV9U4hsifGEMojnO+jvEML2CJQ6qXgbHA==", + "version": "1.31.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.31.0.tgz", + "integrity": "sha512-9C6ovSyNeEwvuRuUUmsTpJcXac1AwSL1a3x+O5lpmQKZqi5mmrjauLeqIjvREC+yNRR8fPdzByojDng+af3nVw==", "dev": true, "requires": { "@types/estree": "*", From c2bfe76ee5a5406d686bae5563755c4adc6b53c3 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2020 08:18:51 +0000 Subject: [PATCH 138/246] Bump webpack-dev-server from 3.10.1 to 3.10.2 Bumps [webpack-dev-server](https://github.com/webpack/webpack-dev-server) from 3.10.1 to 3.10.2. - [Release notes](https://github.com/webpack/webpack-dev-server/releases) - [Changelog](https://github.com/webpack/webpack-dev-server/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack-dev-server/compare/v3.10.1...v3.10.2) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 48 ++++++++++++++++++----------------------------- 1 file changed, 18 insertions(+), 30 deletions(-) diff --git a/package-lock.json b/package-lock.json index e1903e27da..22e7a58c72 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3957,12 +3957,20 @@ "dev": true }, "compressible": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", - "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, "requires": { - "mime-db": ">= 1.40.0 < 2" + "mime-db": ">= 1.43.0 < 2" + }, + "dependencies": { + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", + "dev": true + } } }, "compression": { @@ -11886,9 +11894,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", + "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -13200,9 +13208,9 @@ } }, "webpack-dev-server": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.10.1.tgz", - "integrity": "sha512-AGG4+XrrXn4rbZUueyNrQgO4KGnol+0wm3MPdqGLmmA+NofZl3blZQKxZ9BND6RDNuvAK9OMYClhjOSnxpWRoA==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.10.2.tgz", + "integrity": "sha512-pxZKPYb+n77UN8u9YxXT4IaIrGcNtijh/mi8TXbErHmczw0DtPnMTTjHj+eNjkqLOaAZM/qD7V59j/qJsEiaZA==", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -13252,26 +13260,6 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", From 6a5a1f7a72c93ea465bf72c800e6323d54c5e7b6 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2020 08:19:24 +0000 Subject: [PATCH 139/246] Bump @babel/core from 7.8.3 to 7.8.4 Bumps [@babel/core](https://github.com/babel/babel) from 7.8.3 to 7.8.4. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) - [Commits](https://github.com/babel/babel/compare/v7.8.3...v7.8.4) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 66 +++++++++++++++++++++++------------------------ 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/package-lock.json b/package-lock.json index e1903e27da..0ad495a0b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,17 +25,17 @@ } }, "@babel/core": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.3.tgz", - "integrity": "sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.4.tgz", + "integrity": "sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.3", - "@babel/helpers": "^7.8.3", - "@babel/parser": "^7.8.3", + "@babel/generator": "^7.8.4", + "@babel/helpers": "^7.8.4", + "@babel/parser": "^7.8.4", "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.3", + "@babel/traverse": "^7.8.4", "@babel/types": "^7.8.3", "convert-source-map": "^1.7.0", "debug": "^4.1.0", @@ -57,9 +57,9 @@ } }, "@babel/generator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", - "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", + "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", "dev": true, "requires": { "@babel/types": "^7.8.3", @@ -109,9 +109,9 @@ } }, "@babel/parser": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", - "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", + "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", "dev": true }, "@babel/template": { @@ -126,16 +126,16 @@ } }, "@babel/traverse": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", - "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", + "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.3", + "@babel/generator": "^7.8.4", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.3", + "@babel/parser": "^7.8.4", "@babel/types": "^7.8.3", "debug": "^4.1.0", "globals": "^11.1.0", @@ -1306,13 +1306,13 @@ } }, "@babel/helpers": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.3.tgz", - "integrity": "sha512-LmU3q9Pah/XyZU89QvBgGt+BCsTPoQa+73RxAQh8fb8qkDyIfeQnmgs+hvzhTCKTzqOyk7JTkS3MS1S8Mq5yrQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", + "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", "dev": true, "requires": { "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.3", + "@babel/traverse": "^7.8.4", "@babel/types": "^7.8.3" }, "dependencies": { @@ -1326,9 +1326,9 @@ } }, "@babel/generator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.3.tgz", - "integrity": "sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", + "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", "dev": true, "requires": { "@babel/types": "^7.8.3", @@ -1378,9 +1378,9 @@ } }, "@babel/parser": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.3.tgz", - "integrity": "sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", + "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", "dev": true }, "@babel/template": { @@ -1395,16 +1395,16 @@ } }, "@babel/traverse": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.3.tgz", - "integrity": "sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", + "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.3", + "@babel/generator": "^7.8.4", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.3", + "@babel/parser": "^7.8.4", "@babel/types": "^7.8.3", "debug": "^4.1.0", "globals": "^11.1.0", From a4915d0ef67d4bcfc20d6fdd28a13c82feeb5a64 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Mon, 3 Feb 2020 09:40:05 +0100 Subject: [PATCH 140/246] Update expected image for layer-vectortile-rotate-hidpi rendering test --- .../expected.png | Bin 147388 -> 137360 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/rendering/cases/layer-vectortile-rotate-hidpi/expected.png b/rendering/cases/layer-vectortile-rotate-hidpi/expected.png index 737041c17979c20e774209c760e779d3629466e0..b508c7942114c99e62b1853f069728929f3d9f47 100644 GIT binary patch literal 137360 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 z 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

Z-XmQakUE1Fz65i9sh$4-fsv$r) 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
Me34YDyrObQEF;o!N) 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 q(VjD+LRrdGd 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 RuthlVqadp)Qzc~{@;{AaIJf`+ literal 147388 zcmXt9ML?9@8djuBx>JdvySr=10qIUD=?3Y}AqNm7C1j*Kq#05|I;EvSNKA3n^*!}mFr;d{B3-~0};foh^ zFI41Zbp7(ZI(-`%7fkmbDown9@8rpCbbtE!`(4XiJ;NByQauhX*(_%PUE0Vx%_FHeH|Bt{DMVB z`v*}Jv@A^p!9DsShn;NB`4ctQUhwUdr=|S>#P{z&WvN3|MSP#^lB^6tX?UUk1k%Ug zy0FU1PFHhs2;?py+xIYrg%0M!@ghK5bwSerWZe0_ZIsYSLWh2uC@O|@jH*h^#OWRs z-{(tRebqOgDkar3Rx+kXK>t1fBioqfJ*t$qT^6K40aw@M-(?@?g3(J`W9ueLI>vk$ zn@0&D6hnmze6RUIY+$SXmGm2ip1*gj6z5_aKB*s_yJ|&tNPFDU`vvmAvRuk{Tpy%l zd$sO_CMV>3CxQ+h@axb|3mC)lNJ7BUUHO$w8TJlEEw=s-lvE8DJS79$r|wNVv`9YqH~UR9|3xd0@eZkgcOosrBT+AmB@F!ALiGtfub^5H9 ztY!p2h7=8O#I?qEB~AhV6DwFqK2N+30~A^WVLQlQp>VIJ+$5uj;I^%D&}#7xupAB4 zocw`Hz$p+Ma$fLW@_a^+`3q)#F2}{QWJ|9J!ls6lK9yaMJ#zf^*}OX>?seCUMH%Vk zddHW$j|GPN>o5W#QAs6cte{|Pa;`H;M zRb2bMcoXM<$H$0-pk1HreIc~Qh(syTjtTkR&y?lpFtqMs)|~dyMyHuS1d8sXuL}!y zmy+o9b7?-&ZPmp5{(Ac=#bNlpDXZR-*W1IOyVCHlHWsyY`o`R1j!96AT4krrYl= zQpmrU!$h611PlNBmtwN4fF7qs%m77%_rAg+zR3hLe12gnwPn>`V)MH-I^5-8^)$*M zev~Z=B!nuIXSIeJNU-p&}oj!+i#l&G?ju%0v z3S%=~%vI%5Zmm7?w41lBbGEFy@BVfzOF%#EP5d-GHSQ5qADRmF!Sl2l-QE3!FT>gz zI0PJ3whg+T48wic$F*+EGjY*gB`yJf_rMWHA!$k}T{VcmV~tYk-b)6Xbpd1*vzN)5 zBp@ON-vMA#^?T8={0cN{~mWu*Mk=rS|0FWc#r1a%!_RtAAcMgRy9xVyZYRX zUz3QHCQe#EA{nb4Gw$yNZx^jG}3M~3~o@LI3 zIwP4E0-RsJ)zvF<{vC97!E#!_?)HWDlD5EXpZP3L0kWkzb>>lac(pu8pu}|f>gG<> z?0r;*S9oHswS_Tebh%EQH#SbOt`;{x6ii?T9qk)p%>L|?bdqgW>xiF4$D^3zh-c>Rm`Z$02pEa z?jCUsnR0w^>`W8f9{raE49{Y6+7+1y_!a00pi0@*o!45Q5aD5>r=|SrgVVajy4;C; zyco>ort6J8ebXx048+dZZ~t1xmw!JA8Q>nRSVC1`v#cTY5Xcnokfa+&hF4l1va&*> z>L<#ghcldt*)SO)gFkft?UYet>si)YoI7d4UlM$=@o3vk$N0gYnOg#R^=}FBUPGfJ zCpR8m>GhaF2;uCaE2Fi|=gc|&wn#?70AoNP$76QUy&YxXI!Qc;WZ~eV$A`M+5ZFSa zilfRwe%h+NTK;8Q^kMBK*1uVYzhD{U%4T3v$?dAn?%&yj*`NNoC?+zE%G3xgXE~@E z?eb&{xg4jeUQ11qi7c-)`QXo<#j)<+IQcV6GY5lT4_G5JSUS$8jF(n_EHm7v8r4!U z+bu`)aCPs`cbP1iE`BARN%2f5aS6RgV+nyuF{nXU@}a9-?EF4Z<}chjUDqXI zsd&)3MHHww&Xyo}OVFMgNk6DpOOM8|%FS`ew%Fph=~}3R9s)-^VU>OOs}U+pcpQMA z^6duids=S)zp9Dg28CkqB^sCORq|W!a+CDockL$5i69uoL$%-sBlraxmvg;V^W9IS zEQ6!{g@Tt!+F&X01z~Sev*yw~1_V*#8d}B@szq=ZQCqL+~4g z+Ej1pAm)Xi`w(bUi`d{0SD7(`BMF56XFKuz!uNT-XiL?fJUJ}6CLhqqw&jDJ>%Tw$ z%k}3J6knE!PYo|8eX9*%f{(M#_1~Pgn8{J(tjisMo@iKkYqm_|9#mgT8XEV4zR1eS zODn~(nhAyG9h)*s97HAqBR)%`UyV$W1rD!28RYLmrnekUI7DGFgSxjJ z;$tB|leON&dI-z(_m0@b8Fa+_iufhMC64dKJJ!E!4G5>-D5t6~>Jz@FLV6oC zY(WJW(k706ek#%B-w$DLqA{mjuv^!#Fd$)t=vutpSBuE|%}UOH*X}!>al2@ad;PO~#aOUW*r21!iZE zX72zQS)oJ`;J%X{s)LSI)6G&-ZJ+=sL4QdsHawJ-b%p!!qeOj=?9X`^8+p+AuBjj@ z{xB0J_OA?6F3U=*i;;hrO2c<9_Cyztd!cGLDdvG*FvEpS<7}kIEi7YaoVPdn&M(Y5 zw5*l|?hZ1U2%9In<0t4;{oS2LxJQ+F5u_h{{471Cg~0wRy%d`8>qY&#Hv94sdHRo` zD5i{)mkftF6kT*hgr)M8o0D{VMl1VE*OH9J+jklL8>S!lw7JO?$wPAS83{}wK%rNr zU7@F=q(_r(9Z)0}&EWD<$uX+(0UOt3+J?;b>$Plrx$3N1>pU(??pxQ!U@Ez7>7VqI z7R@$51%_s$oAH@jbvw_z=KHtzi*r^Xoe+XTVHTbN{b@D;(r{N#`eZ3DrVJxw0{Lr$ z$V7V{{!o*sGC>p~z&o8YHoeks5H@BkPRYqdRqVR#rQ->zZy1{4NasJBBzvxRT-eon zwTKnn6?0TH)J1bBj=A<9#~p<}6PKLbp=X4pf>W@}m`7Sa zG|Lappz9!-d_oJ+`xv$@*7n|U?T97M2@61Wlum!L?V;i$R$2 z#dM5b{TTpmTSFL6fC%Xrufq{Pvr-Dt*-aH>=!wH&#Tef;^I;{F3_-(N7!+pXXFauX z+2}N8UuzAT-PDtOay*)Lr!NV@`L{1JaX%Qq>yHN6Giti%g1y)HwspAmQqNnmje#K` zW-Z7WtP9=nALFg=N_}na$ZOsV zbHD2U)3e6c-)r=*BQCY`IZ7Q_WML*n2Pppk_R(}4QimCMOpV(+6X0>DAf`#=m6BLp zX$pH2*ZZ7YfRftzlBK99zmn4v(Q1Hk7@D};=Wo!sJ2sEhB&T40y?!P57eBY^e6a?% zGW5QlJBnc4i+B z{8)?l9HNr1S~~Ll#DV6xflT;%o*MTjHM}v%Z0WkzD{85@*HLIo;7SxpOE1$b$Gz2# z*PI{bjWc=X*BFuW(^YwJrh*iEZ&YxlKbCu0DYY|0pt53iFiS>BU)i9pP{x7C&BHPs)#$mkJu9%MjEEl(_#4&qUAK{*K zz8JH7oo4lr{icM+8_3bBD$2+EQBFpP9E6ycUZiK+eZwR!NoEA}uGWi~OXI$zVdX$I z`H9jjvAjw*zmpP_M?t|9b0kRlgieo$pid_PCjlqu&Lm>Obv|d5qNbiwV>tjKpn`GV z16qQJz=;m8fCeqhqKxvguwZSo3Ck9D-g({QGjMYXeD*`P`s|Y@iJ$|_Ct(F`X+4kp z#}@0(9^Jb8^D@+)Kg$Zqk6hu;+xkZND>T}5-XRA&{Aj-gUvs=WK*0cXi{4V}%k{wW z`?9Hx(nH2$ww1{Dqu}YCoy0L&M4uWjumVgLuK^VVIgSp&K-;w{uWE337qpi<9F{95 zHF{V1U^jf+Ee-Khuq$`qiRA^Ry02#YIFb6En*ZgPyxAbT>0k<MjPMmvsoPB?;|O$_$*Brf{;vEVt2FZLS=jOA$xe=u zl>pZHmx8v3!PjfV^(%qRbO!8Jd5B*c4$1_W+;|2%1HrctLtkTwm>1=ytDKM3rAg2=_!Y5ZZvmJ9sSG9qL6A{ogx{h^1(p_kXd!dHEua= z;sS#cO9xDVQDjvMqR2g<^?n3&wyV5X&5HQXdpHmNHkILg|2m}n+_BWP@9Q4y?$^F7 z7#>CGQd_U8W2lx-9=DFYj55oa{zE{7LPSIbk<;7UjEpG%e%(A(qaiJ%Y;YL;xL5K( zK1dEIQ%oqyaEl67HDb!ZAe?XWw87w3B%uHLgfZG3z@+0{3~4Pe5%=mU%;&32)ReW~ zKX3?80i-(VcP7DCp~^|j1heoYbGICRwQ0A2MigH@1S0vYteTZvcz9iW&hh#Ba_@jFSG7Ok!n${!`^_YB02g?PMp3+L{S|CGHq*7$ z_k|Aq;T?-Rt8%1#+6w{&0P3*L!WE!<1S3fr(y6iT%|t<$jtMLa(lVCzL=nYwW%AnJ z6ChcvfWiTliP;$?2gFVRiPMwYKCHJZN9W;E>)j$ z8~j_eU)Z{j$8Rc*#c2EJ`A?FdRPZyBuR5`?1jGi=+ICK80CsmXNjo+Lz|j=9Q4A|MVOYmFaGG+Z&Kp^W~Xa(yCfoaxhwi@NP$n#taTY zr0(6Q<7-n$4l7wCtdz9$>owB9gEAL8)AVZfLWT%s<>nat1Y1Hi$jwf3UEnKvhN`M# z#;6Z=ikqvGsl)FA3|PTLU|=-y(!)H}72{qgFoJncbJ^XT>q8}n<`;5lj=FM$s6n1q z?Xg9ykJC#W^X>HIa1X~J1r#s!-Kd(EI9#`$k(HZhniJ+AY)OqDnS5yFI^MBn}aAygkzYaRV#NrEf==E zANc#gZb9wJW13pTQ777oPN1NvI+b`kvp69%dZgAh9DJQ$U&2WR9~cO5-?^L?co-fc zGgM0J6Em44OvuC*qVv*|SDzg?a{4pDN@>fz`iNK<6x3wWwCcQYbvfcUWHp#!pMM_! z0)aJ+j5Q-BppV?CL>JgVxxRY&d(=#Y<*MiIqQ=7NCO2-Z0<`<2467~&GpY8weq$)} zw$}2Mo*wABB(Y7z`qCEe%r2~y!fb#>|7^#1LV;bvFBR+WUt&cGsB8e@ye-IAMEZC= z>I!#Betq;WesD^n^?UZacHl=VYoTgM_-P}`QJVnWb8-~-?-(BbV!G~AG5O@l*sR2( zpZk)_8Q1SgCkhcRGdR=cRR0|qlQl6%;(_+kT^5()0i^UOx8RP)k*oDM>&^2lWfF&=8y*v{(Q9`1O zh>fplSWj?xz_2xz)3Y>R>PtX@u2x?-hPH%9YMMJicm?)UNiene1(>KMvVVC+6<2yT z5MBZe_CZu@_nX=K^SxJkirT7Ds^pC1RmHsKf-rY=A`AdI01E}sTrr`5rQ zp>10&b)}peLp2rHx-HzWG9OgbC#I6KZF96fWQ8R6ZpC#P1CxHKhJNbnEigm#^I3En zz1{`VU(1?Vz?*{p9W4lfawxC>9Y`O*Id!R2oV)pkvhb1XzKl$>&~jF==wBhm7p8g` z1Ty_8SB{LF?aW+po^EwcwZd7O0M>JQnni;03FeAfgJe3ZfO z0{uxX958PuNMMxKTV?SRI)i%v!;2vG8DXF*WCb`I$L0ZR%Q6oD9kiK5MD*k#Tf1vi zAJz_#ANSH*DwjovnW$ZTWd9o)r-f{FfN5~H;gR~fvr*kTW0Nu5mpX6LQ)pS-(_T6k zBjjRBVLhmJD6>4Jruv{t7OH~Hah4hx*+K)q$o$D!Uj8{%jQR}5#;eDFpg=C$2k4n0 zn{(K*dqXLf40kP>Uo9M1tDrpEBgV#_tG&U;9tq6vI>xiuU2i?!R68CX|7A&r*P7I^ z!pQHNpF0~j5M`~+dDv)m@ z&qsQ29s`=VFNnJ8@L-S|4$SFqi;r_Kk$*q4-<_vpb4}hDZ3}Vg|A)xLln+o@;AK3C zI)bP??o8wgER;`=F!RNWi}Vbc{5qc4r3(TL^$vNMv^G()Mw>%b-x_2vf8ijiqDqz- z4A83zR`I6wVNH|<_+(jhN)ZcLd^o()I zkzzeE6jRzZc9EGv5RuY)84~M=1U>*{w9aB_6Gs8cX4&4TA|N~X;GE{MrNvPhz0BXB z-~}T?P$HsfJ*T`ZU(<|df9-Ti)WK{Y1tdJ4ST~#`SaB~MScNyNs0tm1U)Cn1lqe=0 zJgiph1wa|OK3%uc(^`OO-1G}{dvpxz7blXoC}yxHWxB=|f4^Om7zAKkGMJ<_u#*mJIMM3gWu|GW$G1^ar~6VQ6FERopwZDjxMu-|J#hF!9QyZ_5BoQ~LDO>% zju;QsxH_uvCOI0D3X9XN;m6HMBK45_Ern=pOldCg`+E!-RzK&m1bBrqLxOF>HUxJ} zAP?wloL!HSd;K=opXx1h;?$Yn<60BRN`H<4I)j^4`AE8x z1Z&o0l22$=U&@A<+62PXC+0Wq!m=b=S7?n4=gIo-$j(MSt9b#uR|qE()m1TwY@ZqN z{Lju^$sUPcJrXUwM>lPqPR`4Y_Za4;M;CJ^G%`?kJNN)wQs{L^a$$!hAWI3zF;64I ziy*$($?EMkI`xtx)lUFI@)-Oz(3nugS`k|QJvn=Gki4*aok`hya=Z<@*yI{dHheq+ ztg6!cGBHPYs`1bs%IQXEe4qN4!acx~A4jB;FlglbneP zBGNEoO43ni%ulAtrr5@bJlQVPR^&K^#2u4+kFr>)@)`|~deI2z1lf}Hj`a1JoGN0EyL|89ap|7AIff^zT&r$$J5=xRu5C(I`@1IZ ze{R9&Q>{Awdhq3lM^sf=!!nKt&&eg>?Sy;Nu6yMneW|RBK8(xQ`SrHAG!9Ob$=>lW zd8|qBd3qvXqQB2IH=k8gE-mGW=NZ!Y{!=5AOlnNuCx(ICpuNvz+KLPdFw$k0idVoD zVxq9|DW_iD_W^C<&qGgo1>Lh7M^={&xo8dWFP`8JP4U=3b`?4TAs*d;jQ zlyp6HE@7Y#agHVzrlI#vg7&1>%0=Qu4A{;g_Iv-rp2)syq5yUT5RcKNjwp-oBHgsi z^+icJ<~lRosGdUc@M)uE@G3D0^K&a2Fp>gB7f=~Ym`u$@KX5#!!iuGTPQU-l!y&cR zHbD=hLqG^_-KaqOgrJQzNYLTC>@V{V?0S2ZVyFUQdq!jXF`5$|HpS9n$`xX$0P599 z<=NWlRLwzu7x?l_L}YL}AWYN5g;(Mx?(upMHRYR+zgzdXyv)8mt;y%D!SQUcS%-nF zz8)Z;^v9Sj**4L>i2?vFk9lLN$M8~ZEPr6=OnyLPkgc76ecz;%{oYSyG7qD77~Y5{y)>__OKhAr zp3P2S21d+j69Z!VVKh0Kqu_P;)Kl|N{RCM%uOnYu&rI%RlSgn94yN8p6Tx5VgG(bO}$xZ znx=6&MO_#jBLY;mNA{;LC%lM9pZ5Zaz3@X=WLKw=|HdB!V9LV0+M8)*yb6%*O0ie( zI$myse2&lFYc+uo0UOHy_+5-fYIsJ_8Q`VF?_@?RK{3qMsdsTJ>j%}9whPxK)H68{Gau(0ydas9cN zwN3oK3Len4+c2LZ-Pcw_AHls{c0%99y=%u@>frb|?nDCI`L)@p$>VZB;cnFgApfsm zu`kR4)y(zH3lJb8Kt;REfI@%u=Wl3|Wui4Jz=AJNJD7S{EI3RDXNsJOZw%G}$AgTS z-4sHmKwg>gAIYlbC=_DXGh~MuY(EnhMEnT0B zIw1teAF<2r-s!%CjGe56K;0MQ!w}&wmFENKqpPfrC>j)AN#PUeCB<9gl@q9Ii|BA| zG85>b#Pvm)rkMLVgk6czw6xQkWo$7b8AI;A41YO{X3_liI>$quwS00O^k$NQvOgA@ zDYoU>{OUIrBWCny5MsxkHeX4hj3@qXr%CXNF`dtIx2yQ>1kDLdgk7*g=H^&FGS(qy z6f$}eqRfg6kcKkKdcJsa#kPrMP2Mav!QJq9X`LSe{3rx0hV@=R$Y_slZ*>xVL081Y z_dtn-l;SP6KsK6Kh%76EH?!{>qv+92rDX3oenT3Xuj(-?+pl(41ZiN`XOBz`x-`lIcBHjFC6JQB0=P=;3`Xk`2FQp4 zhIdy9w5yvH>#eA{^WCbLv8-zA>}x>qDwWl7_YgaIt42(OvhHsaZkdsyncF_vlr^<< zg0I39H;XN|Al;XcCkHkyv#9!dE006}gQ?mR5Z~wi?(2bx=!DcwGs*a>jSyUk=5PTcai7Nc)a6yZFykV|d z@a1N{fiif~W#1*p6&Jx+!FP3kJ}cFH`bUn+)VBWfS(@B8xLJ-T*VG5x1JwJS&t2_s3Rb=tgpwjfo#&_L>X#f z_q=8CXGjx}E%9()=%3L8KzvNK6JT&j>s|UInU1j;=3t7-$W92N&tO~UvxC)pb!8wP zuBD`QR4^?V8wFrDRyFqye``dKl710K7D!evZmGT~TAmg7#xYrARt=O(vEjMEU|f>p z#F4TQ=$Z~p6XUsQA_Sl}8TaQD7r9%_Z0-CZz>%_SbG%y7tO2l+r(=0+S@kj7{y<(K zChj~{b95WWKR_c`JV2wWB&}E$jSvPb|J3*(a6p}N!}2u-AtEztYFF_zOvI$Y&(#y~ zef~>vH9A{M_L5aT zQ$VEocejd*iOEJyTl!ffeu*ry6zLSk!K=;f_pl|p#x3*t{GQUq)%VJMJGxLafkV&P z$SjigCedDH$YY|Mc4r`)%zl&*qOe|TGB|$~Xmq6T^|i;Ro995w^ePv;0l|7bk3=S26^xt0m23Z>pVecmydFEJv zkieUQ0nP}JJz%(uHfyjl!0-SuWaiJC(xPcP1`U`-*hcy0X76_{qZb-D^#Zn+!RSndjD+? z9OJPS#34_mdkNt&x$)_r{yN;1y~pHiW9G23+>b#Qx0cayA?TI*{xG2rezbPXB6(Ge<6LAwnHAl(` zBp_rtHT_j4Z8S-c0Ry6m*5eCl{dCHre$)HEA}hhx<4WTsIHOs;i1$LiQN&(1`qTwR zw6$W10H#bSC@9-z?(96es80EI*(}%8X`JI;DT10@5Lo|Q7x@EAXW6oE<@JJ}Lw90) z-%84y2=B!N$xcwW#6DqoU9fkz%}Fns+*33f9c^1QV3Kq`og)u3UmZ5A`|Z)G@-;{E zd|T7slM?UJU{(gwLY@9?qws9Ja*_G3i>M(`fDII-bvz8@?9xQDSTX^6idR3fsUA6F z`1=Jw$J+vwc`Z+`_^fEBo$){ObarjOKUZS{K229P^C*ZA`xmz7aYo=&+^Rm1;c$j* z19ty-8)`HB!q~hk30^gaB@%ge#^vhXl`c21RsFS-=R4$sNcsPv7nzFFX;pfs2-FU+=Ak} zRM!5}fPqmjli}VbAgg~h;9mO9A~;p<4FsY!7o@24ZCOMRb6ALLSnvn;1lc~aQHUgF zW#a2KAZQflu#*gXJQsm(%mwU{=NtV!F&E z(E75AnVVR7<$r&FaUubNEpPnQi^m^>sNY~*9zdF*sA?j?SmfLJTtK0&azWRuJziP9 zA&753m+Gq_6?~scdV1Wpk@>?dP|TIa3a92EcP{|j1$(X(sv@rPID)A`4o)IBpHax!@t#B`%MJB zKa)T*V^7`APU(CebeS9{J-ox{0$CS10NLWnagw&5IDjS%#~`JYvolGkFZ0|8!l(DZ zsuvBBNvveyf6B?DE{q{z8_zzuP&4NRlx%19UB|Kg%IlXvzAhdqx|}zW7f6b*Z@7Df zC&_3Ob1ty|JC9Na(zv*~?5OUpUpVq8ZYMMERuXU~KfLz8^m(nMFT%gYy>HZp;UvCj zNK5GeC_wEm2s#-`91el374>?n?n{L&4XIxfW5j}}^zKZpfbTHt`?ocEw8zgc?c;q} zra1mbETV+^L?DQwRd>BwQP!8#oRW(9#XcU0Xha}#uX-Z=KYnD{xD**h?kI^x+f&Og z;P@}A|KpD}fKm6GB_xAOGSv#Vv%7@@%wEibKlhwyWkwfTy=Qf2GC17x>)P1)WG|T}uF_#9p zyhysZKCiz;QDljec%y-xC)qR>Ax+O(iSr?V$R~Whf0Jk%vJhuG8)o@$CAZLgb+0D8 z+?aBmCd+dwme*?X0)~`V@6JGCf>6OqNK@`|v}!N60Vwb5jclJT)DHSw*m#@Vd@MdD z{!#2Ky}xUJsJ+OeGQ3o$(FSE~X@snWM`Fkl$I^nNfh_0eIKSNNt1i@NCjLsw9MotV z?p_S*e8w?ord*{is~+6=c79@Or}1k2YPjP_b?7v@{MNiFOSk$|Vt-}hHstIRSj&-~104Zl2>DG=-*i!vO%3OWoKDfa6BtEg} z@cfr!3bf`IDu$BNo9YP|#s2SCLmsHKUAFlkjqa0OG_5ew`S!0~3Pz91lc~b^$|D{N z+Xk4mt#vS|?zvxiYA%i<>2PLL268>-@eJqD=F}*~22?edY$0{hxO8NcIvL|!%yL`H>-3Z z0ax;|U(p!pC~vz`;_)jTj!axe_<{WKWf>dJO%{iw$CYr2VZ;YcUw^M67QVmGuA>qI zXAzT%*L7Y|!2C)kT|oQlGmpNV11GdN#M~B10AviWuGr!-NNsl)EMPlIN2kegCBe_K zX}HcP*>V2!7BVP)r1CBK?W|83+cyyA7s0;=x%t081VNEG1*k|?a6N7FUj1ZG;P55= z=TWnZCy!A={)wA7`l&@6-~l)wL(vCTav~H*L-+b-NLVVI)gU?=9_uhRrzb+y<8Ml` zcfq5r{)udg$GE<2*=vM?*SgDqwsz+FyaZiNPlbS7Lg6B*YU`SIZ^&-iCn^`pz~c}3 zV&N!kIlgoviHVu{wIIu!hfg6Pi}1%SwPa8bwmO7t3f9>!v5A#Ui5(GZ|4wwSp6PZf z6J#JtdL;KZWI(?6S8$9HU^I^HM#~}Q44m8UwCk(GXb}|09L6@-pF;3vsQwPrt)^&d z5RJenG&x$xQ87%phGuk63pqUPsx^mk{Li+gO@9pRbIuRee+?yI9;h4tcb3oUc4Skq z|E`@snx{~_MLn3z&5K_tp8-t5ev`$QPd0XumN(pLKwH1)arnT~bNh<|t&03z2hE1J zn{I_*{74b89zD8(E?{~kS;m%w5_i?#E#qDn-JzW3u+}bm@aWW_#3ty-ICnEMUx9bj z_r?Uj%m?c54*i<)eN5GK!Euuf>n8$#stiZ$bKMuGYf2p49aYN0_i@$XvNNT`ef4gyGDO~r)wv2ZvZnjFy^TINU#sy^tUr_v)l}uckN$0?YTeP` zitgxyi-U{ALZ_>wf`TXdr zVmxLH3d}4{)?vp{$PW(F-Ss5`h<}3G1i;VF_rJLoeNk@`PE(wc9os!uPA+Mpq81v! z7-*zltcirPLB}a?Ox01;wO`oY&SiJJ@AESoz!H(O4#fLWhr}tQhuPe_kiERf;&(aX zkkx7F7SuVeJij@npS#MNwm;ZJla7**)IAkf2N-b1doh~HR|y*?dwFA~(|H|lEO-T? z3P@9V>TPgP^t6Fg9xDc6JdFO*?~!5oo1ibmvO=NB>HDJ9vr2kN z<1Tx62q@Eq70wR@93DQ^nn=gkNC6@F$>egm$zIWgh9~EnCNS=J7DJ>26UUBL?Qz}d z<)-iPscbgYXIHDL*{VaEDrLZ=0dkCgo?^F~u-)^|e+8sWe+@(WdL6Xv8e1mYtGl}^ zXIZwb)rI4KIBwI9g$fw9x`JvlwnVipuQF=F-3Oskcd5%CihYK&69>*xvcRoo+ zkuC%PamIPNYu&~AG+P{Ep~M+?*lM<(g3a%EDBd965Knv6uX3~;XgilLRbjPylzD)M z$R}KXz$eUKKOij6oc)pFcU#12FBm{YJC@Ec+R`=RX`4`4JaIT7$q3oMGsqfj?vJg3 zH1f0SRfV0EUfq3@z^o^)@g0o08v0GIy2GcV8x|d1*O_i8XS=EN3pJ5YSRDEv>!BS@ zyr|aXN*}<0Fy>iX8@>}QV29KFGCJ~px->z6_wNMJ6nVdT58Mkt1po(~PJz-)y=tCn9^p|oG6-Ln9g38pcMv5eJ%M}65< zueHF9zI^<{M+xEKVSp}O98ph}Q+{8YRk+Dw@2*=d$`WuZj+FV#V_Hi#M$X<$^-eFU zMkck2l&}+2E{T5ET~cyq31%$0I#!K244)`U!v-z@kwcM%idJnnMguQ zA|M33g4I?pY4e8b>fyeAFs@EKn?jCXZ|i4`WVLBqx)3$Xl$2-pWP+0^s*L>7%wW4y z#heEdxv9bek))T&achE0c774YA#?J3F?v1Yw<-h#M7j!F51NT}-yE&0F!Np&)`W!8 z4t3Tqy-l<&D%_wMm7u)a^N6VoALNcbjHv|AYej<6o6FE-z<7h=-1;hYABtc5Z=~U~ zBy`1A0twn!pSAbV$nd767gRD=EvE}N^74t!lOVyNC1#wmd=0_eI z&KP4__jfRkK4Cj{dtO+J-z@kgb8H=d+K}tbQwAA_p6&{cpL5*=DVGqBZd78?Gnt@a-T`eTw)cyjstw*^L0qP#ra z7}R>_5C@naeajF%Ay@1z>N`EQLP5h}tXwXC>bx_BPFOC-K5Pv0u~AP7QBm}VwiD_! zc^8AW3^?Rgl3M3|+O+;#RerZ&tk;$!PAkEn(|tZBtMto817Fm-A3S`CF91v{H=XVyrP`b1Mz+QwN6i)PvLe(-4G zA+r4GkuXHJ*fmT`hDe>(!%epHoApX7pykWuAw$M5?9$pl_Mr`xdrMwmc6vF;rk4+@c6&a0q~#a!@4#aLA}L-sd=BSL6uXM~*9yme+1STRkBlOH5oMlXz#dn8->gZUJgFoot5 zWUa|Y=n1iG{hRi!ohZ1zC1k%*-7#VyxQr|lrcXDT=$LrvsQN8l=jhbg@Bk70h6^&U zbwAcHqx*P1v2EhiVd5$*E^JHul^hf1uWvIjvFHP{>YlJDFCCweS^Z0UGqlL8{}Vy$hqGx-=rS7#B5vpYb3G( zv-hI%O6>7+<>qp4X{IFz4*&+=OkL`yZ$$*Nwuevi-@K&BVe>4K+?kqk=E)>5)DNWj z7!;6jSd7?h?+@76?;myw+R4J0biKXbWzH56%_?y?`r0UQx(?a#=$FyoY#^nW^FTH4 zoB`q-<(Ev1#)^RezMuZOS+g$JnC{2#MY+D- z`aP#g7!i@DNcxkcNAS1>MG*>dDC7ftU1)&`g zrHJg47B?FE%vw)RU9kvc$m@HcfP9juGkNeQcuVuEkHp?+-^B;qSJ--6ZB3k}TzQU4 z181~D?nanu*V|DTpwDcwkJ@F=EymOc8$6(l7^K4HtqJl9K0_J+IXyH(80#DC^< zPTyP9zQzAP3veXyQZ79Slt@6N@GpdAFzDH{0Dym;ozvS^Yg<>@6hVLXF!po^)7g+B zOx1y>_XBZ$NCZTGfQO2djv4Hqnv#{E-H%mo%4T%6gIC6?Of>dj50of|(Uv{2jt(%5=rFAjbKcmSXpCS1>!5^GG74 z3u8O8TXRXz5M~U|=Z%q#h zW}(uGi;fyh64BY<@fp`c%1rv6{f>k+*_!~AuQ{XAy6)|Nw~4+HEH8~~_+OmWj^AnK zHZsfEp|46xuwc6Y_GaZ(;U^j8DXc-If?qHjZH!3zYOF9H;9Y0dI{|=DP3OneR0nMy zfU2ppOEgCOCh&2G@;bt z?PEs>Ym69+CKaXT3Mg#pbVXG<0zFEZLLvtU6*|w((P_nvR*1WSXXwF#oxnq}ea?JotvA*Wwa>$~^<6*eK(k;Tj(#_TWdoRA>!}IF?$G}+{jWWAt zsbJfPdynYK&Nxy<@E%G<)eC?rCWVAjM)IQ0X#qI6!*kg#z;`|)a)s%CG+kv-mEYG@ zK_mrfq&uX$k#3Q0knTo0q`Tpgf^>s`bmyhJySp1fc+c;h`Ool$89s2&J}Jkk!PI-~v<#j~_vZ8@GSZy5CMFvBy?oKI z=&W(rfc!57)FW=idG!&n=!38o*e=*SGNA<-(=T&!@$7gPjhOayQ8D!RKI*(cK%6dh z?o87s@pncSPq0sqC#rg*37G=v%!__8>iu6sPgj;RL@g_KZ&~qr_z9tbit*20 zq{)Y1($b9=+nCGLi<7`X5Y<23rKU!r|C1+aWN~;3-(Y;S%$d4(*Zzp6pnGj znZMu;d}ROmN*9Y|dLXPtr(VKonI)B4BI8Fe-Pd${{D2Dh@*+qaL3p_zDtu1!S;X49 z?&Bvf@2ZiF34-vPac3CQ2)xmg{yyg=W4~J4j@i!{fn3gSU-Hd7NjfRnD3N5Rq&8u- zUtG4AeTSSLjs3K#FA4C+t`2uWN3p7&x#Lk8VZJtU#_AF)If^7bl4mk;_POjw9;h^WRJUrAt;i_?U$jM||Gwy&-}T%G-MYiqdwrdnd!18@jRaRiPOt zxRt=owN3a~5^2(#T{rK1AE92ahYgNBO$kNm8 zmDO^qAkjv) zi4Ow$n~k$dQh6mbU1UXJ76p6a_i+tpJ?{yBkqodRF;K4*nM@j5(M`Eyl+uKrmJ4^7 z>PvVr*`R_|g)*1?X5TqyKTwWNVN?N0H0zm@L_Bb)W7`kU7`>s>Iu`Udb_j(+Oq;2TrJ) zA`_I;3`YAgxeIL{gSYodg~{%=wa~We5lPz*VP<17ZVs(b^$Jb^yVrcigg-Mczx<7} z`jhcWc5dJOgN=F-M~DO~zhimtNrL-oV|#d9S`a-$KtUIwvbd#Y$S0JLq-fdr4wxFs z(=43AOboH&MCELjYlrTXs5XT;EX_k1^$MASl5zWXDDp=jU)( zB^axtBTWzfevp0>L;uH|`!#SF(Y)E>W`US^t~+`0OU8#{J#{`@)+7ALAfcj)^MOTZ z$~k5w{4OtXnD-8fpNfev`JnK_^|lz6if;-KYSYIH02&j7mCU)@no6 zJROp9%4;~#ZvQUbs;2a7KMj03QemTVmB(?vAD23$z)ZdJM2&&x&`@``s2wuVUdQAL zZ357|y4-2W__eO8OPqXDLG|o+2min_%Db7rUpa$D+Qz=DkxQ+AQco+E7T<{r;w&g& z)*tQP`_kn$+85)T2%8kN7P zf`(LI>r5JFZSw1nfSE`NAq%>9lGe`RJ8h}x%5M|$qa*Uev@a}`n}%tAPhMPz2uIsp z_o$spqDhcy>b?)D!v`5mRn81Q-)IIp#GMFtunpO`1cNOkBiz0}KYz5&3^RTMJD1Ax z(jpk{on~XnHnv%VXBAK7ela;x`I>*&7b~nk;v9D2Jk_u*E!Py%81c*Rj7vfOj!V8> zrXjs0d%lvjGX9PNY))s0-ew8|=rlH++cHL>{si$O1|0!cCOO<2#Yv3B%_bRIee2*t za{ECcivWXT1bWDfXEH4qN2>fR92!c0c(?N+d!$RGXjRqbmTMkSQ3Wn|QjH;rfA=?>816{o2(%iPp2Y`i6AI;bJo?0rUi9xM_`U1{0sSSS z%#(L^A=fpGwf~*`6cs+8swXcIwtpgU?F{ikLzFOwx(HVc?GXuC&L>&u_#J z++LovcX_miCT>MC^-nIMC>Jn&PCFY{US9fiwbYf&&3L*;wlpzs&-s`tsur#;x&lvp zIzFZA@>Ud0ta`cy=GS$Pe%8xC&BBEuP`sR=DwG=>@J?AcIaPlHYo&X2aN7(~U{DoT z4BbjO$cZX1ZGQbrhSy3^qqZ2;>wVNb0IKjutv`avkG+{9H7$|CZEz)~Lr4`VX2iyl zskUopW0Oo8k0`@%l}u$h({g^dlNn%wZjvbWImxW<-DLZ|`!<6#AyL7Viye(f3Vz;F zWcDwHB5t1^uLUx*!Ngra5NBkwC|C3F#~Z9e!5!$g9x!d)+XzycJw=A`)0AL2`uC$T zN1P*ym5t>Z1z$@hDh%SmHAe_=;{5>i^I#S^unwm$ZSQpRhLaye>9kEd_0HB>$ zbK;ZYOjak&c}NMlI*?Qs^=Q0*(d-VZ#TZ(C(>j$>t>%Gm_?oO(3)TP#Dp>Ugz!8>h zg?x~-;_0F>Aj{etEq>$cY^fV-+$1v>v(KF^=ZoGj>lhSmoXYQ2ga}He(SFD>m-e>I z6kr~#t~B&=I+uY=&(N1Wz!g}KxrBEv$z*4recD2*%_gB>a?5r6S4K;~6vc*1j`PcQ zZ1cuS(atvFZHG>(5N~a8v9wX6xz)Bj%D>q#e$>%q2l6U4!P;esDKT6&%|BHi&OAAC zr>@?jt~yY1mKhJdx5A@?La*eK=-;cd=~#0=J)|=1%80-|_Zg;_w}lG$OGQco27$V= zegZ3qgn{;*o|q(R<8QWgFYo?F!myIjbY8$7BoOoRG-~fY9emREdXPz|Aie-1hhqyQ zcPq%tCVL>YT=1>(p4nN}iuXe6$vYbX-2);;o-L;2#v+HB&dFPoe{3WG7^;amXb;&n_Jgh~PRjMq-luz0@ z4Jw#|_J62$(}X)lJD^`@rjvF*zE4cMZ)-(x*ZzZZkelJe9T?0rs-R!IvQzTFAgqc1^cU!pi4{_N& zv4!0UEBRM-e{-BtKS_rU$_aPLS4_VXL*TDnrY!vwX~w|X)VEctXE-2yjAr$ZI%TM-pcVG$POT|1+{baF z{v_G-xe@;CM3b&26pA|(E^J|j`+FG#sgx@W zOkR+?Hx?pcPl@BJ`T^e3zxZMSX$eR|B8rJCdB%-G)ZBhvekEiEI1cf76=F%%`Gsyy zs9Z7)tLUkf#l`&X%lSu=Ue^!@$Kaw>#uH@9AQxPz5OsBC_74kU(vkUA%R=g1NJe#V zugNt7A}hYm&x*|n!uO}sm6U)f3Ky0Ze=Kg^MPBi|3zk|syFwKACyei`Z6l6kp5c9??(0Bw2NHQOP>vHx^phg-z#OHdJ z_I->guxZk}3V7(HC{+tI>4~9H1JUd$k-BmAW?c0E&H6^5ZO=ZcW(h`b;aE1SZ(2H* zqpB)d`C>dj4E;1?R(d zBX3gVsLb4!6%vE9xEGX|mqns;`hGHrR~UJ$ObYYXYhhPrN?2V*(B+DPsqA}$1$(z~ z=dK1rL{4b*15kU2bj>eed|ks*a|VELmCF`9~%;9rrz*?<|awFu1WP^ z;gyk%{;>?sW>P$QD~lc;0gSet=P1j*&#K$cybzFy2Nr$VS*7*6 zfNYubxpSJP@ZT%8w-YJ-wD-^C96%!hGXBD`rwZF;V}*;iocKmT9I{!Ru?L&}2dj^G*`*rw^ztVP$>g6tPtQa!2Y+;J6 zII+8RI;TU8q}dj=t3X#Gu`*X-2SL zjTd{5^ETCsk~V}jGC{?qd<*Ua7cTLUZWfcC&H0l@@*NSuM(xRKRqgH=Bi5#Cr0bZU zxO;c{TGXYU+*-(fuXup9ghConT{KXZrEX>hvmo^>7WP@s*NOy2MfUjz_VyH_Ln!kE z6kf->EP}3zG>mt{i4E@bF*v=&IrN74$$qXL zI~B8RKi$RxNx`^t+s1QfSy1!WUdSIEQWOp)U(rO0>(-Pc_WcXTsg3Ib3Y32*L4-|u zJ=t;ec@aL<-w;ju(TXq3)hf)s;9iWcBH|p1f+yeT2%$WY{b}}}Dt4Mko4a{iSMHn^ zjZ7E#D1f8`+{5+Pah-)fJgUTSi8epWNIO%4*rklwbDikFN7w13x@xBlCIu%<=99Yw zceyl70jAGh%f zQ^>UeP>@Zh!q#-pngg$lac{YXBm219L2XvTo!xg(F8KJVE>A9%Zi^>i!dhx9=D%I| zBXR!L$qh%N{_-vN@PaRM$vz@;SolvWU>e<cjhagDS>SLw|eVfLd#<6hR*zzJ3C5%?hcHY>sb)FfZ3Tkt=v&3^|q9xlo z*)1l0riSH~7z==Z2Ti1kWCNYv`te3}kAeXth7`F@kBMHd#AOSQf^{sojh!u8p3>j# z-WOLgj=R9Tk2VIwB)lF?N3^d)UT{Gd_1MYzy;2A&QTayjhb-Q9QD{ViZ$%Hr9ABA> zw=)*lXt}6Lhd!iAR)RTqw#Y=D>Z&XD<#Gnwh$kQ_6RLd&Vc~FC&@DoB@DH_|m1Ely zXmhUZT+=lNpJN{HZ{!}s?hqa#M51#tCH`Mjt3%hy)Y~qNNJ>ZnB9bjhp;bnQB{Y|~ zKjpA02z%>o#HT1y8->lj+yvpB{2M{AGMmz<=-AJO_u~r1gxmmRRJcLkWit>D% zg!0gh|)Oc7SY>ruvwXN(2 z)>QVc!(+89NgOQzRE3qrEmW&eo_BSA67%y&d+%QX&xUf<_vjcL_^!~bzlU$$NwSvR zr~rq9)=;jsRmQ^cRgY4-cHb3$`|Q?k82=gXR|8+lZn4$vGbS$XdbaJID56&w?p9nT zdj)Cp?02fH%R<`Q_;X7@^PIdQ`%j?skZcG|#_!hc9Km7aphSj$3 z^%%?DktlQKuX`kdl-OI-D zTdQkXR?;ysL4P*}0jrxqkZ!5I?VpdO^tC!32NEZ6EXir_3+O)IQdiXD4W&{@%S~aK zZJDbTo=5;uZBJ`SobrR?Z#u_q83~LfhoxT5JmgAL%D$E}*^;R2FnzSr9R*7RIy zhF@rY`b;M8c}R*dA**J8E9waw(3&%_{2pmiZK~-DO|4^|Sq7a$D z#xCgKg0HH0-CQs{m$wx0-8P-x{!!&MS13>IDy1}u5zSMG8RWp76wLgW1<@rkni*3ZmOQ`)D8H7h z>|J1ynHc@x2o;}OuN!z%$ms!M<0djj6XpbRGzzeo%J1&W_tYB~aW^Gd09_qw zwBW2@cTH1Rv+YN$&%0o&- zyw|U;9jPhbOSYJ_4F}c9I^mwzd1Gbj9xwySqd&~y`FfbwNHYM#$nntU@6-Ea{P#XI ztrSf0QT1n%V0u`r=wO6a|H!eoF8eHzOagrAY--Hh&6Ex+0$e!>N_o6`6j|A%AI!R$ zYhkD>jZWh!I>)i-8Fn!8R{d2}Qqz8*2OIQA=r`TFD`QMLfFL5r5dY$u*_->zB&tfA zA#a}&lH3vIaJ;e9W!}s}!9?@lIkZOgnZ(&vh;K!6zsWoZW^(bcK+M>7K0H4KTn#5# zpQbZhvgzw@`z@e@R`$}&`6H>W9-ls^)UsrYrN~&mqMpDR8soNa9#xpk2mb!!m(ODn z2u5+TU$z-cWw9B!NTdQp*SvoOR>nql(lYQW$DTRb5t{4Rc@>6WD+OUe=E+i^@Y)v2A##i7(!uNXDfk=?M z%h$sv=-*5v{W$aPT$biW;pxvESAC6M1dQky6ZgGmx~z5;GlhxWZG8IfSM~C{568W{ z#0|xLqE{yWxrCj)BHP_<(wmK!D@On41-Qff|L^HCQ z9YMWs%Zb!tI(`psW+MN0jUl{ZUPZdi>=kaxa9Z`2!+ zVr~{57P4C0=pA!O+mdq*T%y7p(_@fy=nbcms~5B$(Y^5e)Ly*8-*yoS;%; zVQ2aGG~&oX7K!Gx7{8!h+*rwHV;3X(+FM3JaFkdv)I5l?1lzl<2R0p7I>QWe#GDc9 z<+g!P-qOVJt!D440)`v_F{;p=8Xt>tP-Y`{==D}3zXB1t_TZDq?22-=IUgyDk~?MC zHZh1!AIF6=c8-e1sbV|tPveD#;g=2?wQ1|m3+KkdS;?Dw6$s)R|vg!P%k4KD6d;cVBYMsi*WEp>>@ z=bGGNHzuWUmG7l~0yjdZKYI2b}nZ zlj%=al-B`Y+Qr=(x0kL6{+pP!pmjdrf=?kV}6f)Q1mOGuV2uBcqQio#zV--*!b2Sri z`_1Wcc@nm234nc&kosHgQMOfyhGJ4+PWi>PV=@Ha(L;G2*#EN^sj6c0E#0L{e7;rm zgDsQ@hLCrrLtala42!lMZmS(AMsNl|h#~aZ`uPrcvqfENWyfM%(hW65U$F-lRJ9u_ zSGU!gDY?F>2tg1gGoY)h_|P}*Y%DKX)$;X~0pfJ1pNr)$m}1Cxd8KOqqKJ|o#WFG3 z#zzO36jVm=6CR!})ascbKS!Uc|b1hJj&tn=Q$x1*paM|wjK!;QRZojE(WQ%9D zwjI2fqby#!9Zkqfpy=0$3_@8kVyR6GvtP*W(4WeB_s2GLpz{K|ZKZu4#E8!9cf0ik za9QUh@nWsc{ykZMNjMO0`h-4YMtM_h?N=EqO))XbQX*)ji2#&cZ#3bY5U*<9a7SB@xtr!M4&ZmfEFe5amLXCUA8}cg*A*A%Dg9(P7J!C#DP_?CH0a#vvUZ!!{ zKoj1jw6vA&p6;J-P=pADI?=Neg64UJb%6`88Za#qQ~p_&`n^+3ys8=`>`QJ!9f{sl zMKh5>W8ldw6~HWRHDUk8!aV*L1+e7*XTBuI`)M}k`9~+!&UNJ#W{@N{Y?)TI%6k>D zcVJ7R|Bw#UyXA0_)ozLnCmejR$^o1>#aBzeq&gySD4!JShu|9pkq;h8fsUU|d;y61 znF=TXYAG_yOk83x%-YrG-MC9=8!B@V^Ku8%ltb(Cp0KeVqM@}Ds9*|am78#N7tJN^ zv%c|CQC-NVTS^l_Zobaumi~=K>?2@9a;qfZGx}Bf2XpuZhDHA)E$%dukrdi_NxqQ< zqHWrgc?qKWM>-U)o>@#F85NKhYZ>uiaK&2I?gWa_DpVQEGTY7}U694G9tDu>0;xBT z1zE$K2ZSqLdP`aX`aYTg4fTMQr{dJsSuMTkpH~=vjRb+pKwM z#hG2u{t(*>ybnye79bJ=up~nY%dH_`eZb1wE_v|kC+80eKOs*O;DF3(kVW?t^eygO z(<{45a6Q|QVt`f()pRilI{YNBB@kCOt@(nM|2pR7-bvd7F>~b*1Bw7vPTZhvGU3m` znM{G(+V5UhTHo;0EbJ+Hf9_MMaz>Gl8ylZi3HA}|`#RN&#iIPjRkke?XTUVM!?eUV zi*}LV(Fho~PXP<=OJXh*3QAJ{03imXg2qXSW?47t1RpWba@J3Y|I;{d6 zyne)h1*JlQ1BM;0u_WNh#}~knPvY;-#CLR5qK9e+{OB8pPOD}xljhR?r+hsMC_G_jDFS%Mj7vj*qrm|@|+r+3;hJ%cpCKPeh)1_jIV zb?csq;ZlPOmx<%(SkeKS>$L>2vN|4|V`$XgaNhShs~|1)V# zb z!mDLjs~H3Y9(L#qEa)<6lalT+w`C@8$ex&~>=4T+!!VF#WglVz-TLkM3PPnElT9Pa z#1Tv;60xPL^_75npQ(HZo>B(5cUfKKuoST_KBcFbLv2KjfE78L5v3sOc~Nzj4)4pC zZ63X$%VwsExEU2P)oh#|{<`Viaj9TWQ`x7X++61sc-170osqVX@GkjUf;m1SNCC6< zAX=|IBSGG+RO5TF3qI>92taX>F|r|0wzU)KbxC46W*|d${LLau2{=dpz~<4OADzh( zNu>T*SMx=+J_wX*t{?V$^Pl56M!^oaMB_wr@#y6Z`0ebAS$-K?JY9Fcdr;SJ>@s7V zewbJ)d`75j=PxMu>iVWSn64|cB`9f7*N*$+u1tIn+w~lPxGmrH-^yaBXi)~KTca39 z`_>+y_YBxZJ_6Zerw{FIPf^kB*0esG5Bi^t@>Lsyjyq*Oj6vf?Tm!w4D1;BKv^u)}JJ zEL%WtXd`cD_Zd^3Pz(XVQ0U)L&619EE&M{p{y1CkpyZdxE8yhr;x^Ey>;}FT`!_!+ z!ixE-*4sFMe_;%$rWEq#9!G76S*ykF&{?G522GSU9~ z$y+G?`~%ne%*ktIcPCeLpnTdJQ^+zffeoGSA&;iA8KtOhPg)`Ilu>Oks&RPwR?U&d zD8X$Vn(asH@Pu4sGKPqd=z_tq@`ByG-fPRPw^ef4oSyW+Ip@5XLx*TUw&Jd=9!mBw zDlab&EuZX1K~8F+^_{JS6_VTM7L=fyUL?B5WC#;GY9t+*{#`%r48Iu|*3xS#6x)|a zaXhGd#x!b;Nb@;vHz9`x(DGp4%ZKJ_e!ySa$=vC8+Qz;)L=s0Ea0At=SXPz<)Lv&3 zVAT{e4CDTBNPgCnNcIH(%9AI{Ml{>{0ASSh4N>y{CcrMOWD;!r9r;|%TXi<}3~W6b zxeh<#xEWPz(R@gP+#Miwj3wEg#$4sD`b83i+}w@skhoNWfEE5K30c`<-eLi}cCB#i z>^w_fD+CtgOV*YR0A^IlyPr9<>iYqjP(yv!!wD&v5CI{3Pi+I5x@ZR_*kCxRFZPO0^b+#!YuBNMcqwZ_USJ1m-l7(v0J*IywX+PcfGS(g-dk_4I zV$h_lS{yO2%_I)E1UN{AgJmma8-je)(i_e6U51}ZGNuZR-0z=~YO#aqRL9;?IS$Ve z+H#5ww&C)TaBb?|$#rhd7X_L=T{NP^H}%z)jI<`Wm()oLg~G#Mz)Vd09>|EtYJTuq zJ4FYYgFQ{J_mund{xX~*#d5&Q`7vv6U>nLj38HlBn~a<8P#q=1Lk8Uy?CcY|5(@St zK4{Hl@A^pIG>^F&U#^%+tCW#y0s~ZHbitP-dU~*1Ro(Cd%wb|N3+& zBcZ5Z+RhSk@-dR*1zePg;|`YWMpq%Dj$q#tn++OoGDmq9IPy1XZ$}0N3Xfg!)GzGx zCShYi_a2fUKWH#`ZE^oGu(NQwFVjW2U}F5)D%$pSdSTCMZ5VJC?36r9-KoRAKfMroz#s#BfB6yiV>wocttB0Q`=lYW z#cyBcUN3nm0blR(F3ZxfkeH~8jz1KL93Dhsh)&E2%}^0Le?1%*3T7_6na6_zwrINlDGmUI{msDxtJ_Duh+)RBphLo~`or z3?xy}px;_pRw+V}+--{o8l$3rHEMxVOvuQun%}?bA0^w{LY7vIt9D^FQTon5%PYVx zZcq@r-Y=CV#9KcgWld9Z2Md3BZXLHE;@?;@qOY^KJy|f)-eecP;N|aG==3z15aC$a zBXFj$%sJ>-BRO;H=9t~-HfzXiQtituJ%_~tvM~v4NvaI7mhx9|mLI+;srf1}vWH?y z`=yOa8-Ae4LylU>hlTc4AJbFapCqfXum=(1B~as}gT%EqrEoKBvCGVwypqQmNtg3R zS?%E&0=l}uMT+l1*^!;l)6~4p`wU&Xt9O+U9#%5V_f3dLHm`527Z`!TRfiyV_T=4t z)39k%MS~d@<@=zUpt127_uybD_Wj;#D^b<)=1gR7IAyA{WnIIH)8F&^ENlDOzs9dj z<|=xAg_B@92=nyu$XjBIS|lhR5xz$*T+o!c7*b$3->*P_gi~&DFCh6aP+vW4NHJmG zw_SC_vD#SJ@Y7a1s&KsoQ57nw7%J-)l*P~5m4Jk@OpwYPZB=0SdG0Jl4oIAvA({aZ%u$T=)t&>?_;IPYWyu-e|8mz zF{RPecXz^g@#L6*N=Ufj+w2sn?`seg&}|VNo%b>d(=jQYP83Xfbwi}=j__8|IEEs` zf`oHz>c}51YdH1kP}}r_DFduxzoo1{?ekE?Cl#BRAX8MPP;TD%f>^YNDs)*#j3&4J z2n27w7IrJ?RpCJYzH&jO(0V;I11tZ#FKKkPpXp7*QwF7XMMz1}=9AUL@k#JgW2tw0 z5pdBr-c72X5f8_*?4YUtsQa{CRKoD4$g{A9WnqB2nw?(PsL9;%%s3i^vvd+?(kfSZ z-(q6uRPu8BbjS&I>$FM^eiegOBCrXoV(DqwV2GXLGnIj-g%V5snBcn?%kFX!kHh;M zlDS+drSBZ#Qd5$Wtcmd=jFVXNY_VNPWSN?lzbg|B8!7i$mym#~5pLQ#=0Y>!DxGkd zWIKD|scsR3(Xb_Q;z{Et#>0V!eDuIEguFYa;@@zPe4AT-mtm`9?Vi(}7^DXO=Lu}? zjSKP6_1jXPph>U4 zwxs((KF+EH@o6*NY(epNj~S5+yfO5q3Ylea8-q6_WXkJshP9L>;Iy0%iQlDl(7f*( z_rH~aO2_`NM+dUx^(P6lr9+;yDyc&{?YbeEnlYS8YsI5SPBFQ3AP1eDzwZCr|Z7=Oiae5Z?+ zT#I2=U1%{67oj43S6zaDC>PrP21VDZS;dA}8S5@Hn+`VaO0%5TMpqbs|?n`10h#sw?lj;+wimxd6%Zw1=Zs0^Y5UnV0>w3PM*G0e3BE6_@3|brgcnqycBZ+@)zy^_4w^1PYflpYWYNHfv?FZPL zF`}$>e6Axen~LCPBT32oE2MPH1oX9=YeP1oehvN_nw_C$LPX(f5vVs_$GsPt=oj5((Ffx;MC(kU=;O5q_wCD?RId7T9wKEH-j23LcP zTd)6JOr$;kEet>VC!W3bzr$qVZ(h!C6+_AX>qDM*D7L7wGSYrLf<85!N;OcwPKu}$ z2caZ|^ZA>Pc5A9V7l?i<3x=&^5u zZo1MhKSMIQ?6r=&4PXnmZsw#GftX0)X<0>T_m{-DB=MV>qEeuq=U0FDpym|F}(X0-rm&G`)|tKA3jsh9PQN@y-cxoEzD%_s0}&Z^W`N(Zl4W~T74-p z4+Z$j#~25~ZPZyho0wKnR6oRpWlJ2>Xf-6g62<5!L`UePf+rUtvz{xQLb{O{DDg6?lxmnTHcdImHm z>p`S@gM`78RJvSf6|HnxH!xFgiP|-Dk7QIaf=FHEb{o|&bbFfb-rGCW$OghYDOHKP ze%%JWF(?YR+~*rJ;1M@Jsh5gjm%a+Kv0hwP z(Ps-9KA4z1bva_lVzH^yQdVsjRBXCk)=v`M55)L9Z7jUeZ_~<+jeRGnOt#wW8=C6n zpFGF=CM=SSD2<`d3bnzGcMR!M4pGJ+WrNN^^)jZ*nqM|MC~tpOev}on=}NVnhCE-+ zAga^7KU)zBt)P4A?L~|kLHNA^jgB675Vf5S4CYI#fzOfpD{LHWUw(Mr9TM#RSb;8# z>rlJPtbR7}9p=9R0&aF#?02of*lao2r)xr^V_Hg{#@UUeTF%mP!97k`5(jJcZsH6* zGm6Yt+QAYs>M5msUZ;+4`MzY7b3fM!Ts0HDx*+{3^AWiaMMX7#`P8X()~tNRDEFwk zFtH02cJ_klG}Tan_C~jT&8rofT&ac^2_raF(D%~_udQ~Rb0{?#K;T69X~gzbZQmt8WR z{g0W<2oEi+>8mOkrg#)-K1(tqEssb2<$V|YGV|u88rK(QH4V#KO{<#&H_{P}#pdNh z#nVvQ!zYOlACeH2#p!+xH~`-&sO_3OsjdK@9^!)8p!WT1VyKkjxJuGv0U~|xDeB;490p*JA}{M{r16u1&)s8 zBi_pH6>|jdkqdC;(&IDA`@gYgp+!lCk{!qZ!gw}s5-T7*n|7H6vi0baT&GV)ZXrD+ zh(|3#i1)<_s#N25zTT~UW}|j*-W)%LElJFC#csO2p@i0sgrXPSi2%P)s-L3IJ8<98HEGV{T0yH)-;`qiro%WV{)iZsr9YT1zHi zOfVzq1%rdg+&o*#W{;SQ_7tgYPiT;7jLaOlk+jQZzmz`J0neY(9t8-S#b6MTWi71H}Nmyms_xt`8jF#V% zo9%7Y??aPcR%s0echGt3_Sn=h9xWE98yaX&Yug(df^ukB8k7s}lpUOBR)xdiufxmt^5Ps1+E5sB8mG&E&)0qwGx?rO(^JMPqOL;t^rHp6;sIe0? z!&#eBH}zfg5+NXC7j#NBds84O4288NqC%k>7PrNVIqy&0y5#t^PkUZxVJB5U#b!6}-8fCp z-VS48BsLR`Wb*&9#f@Xf)cW^IJkD3hBvjOv!YIBTIlk#*w~%pwfd!eDqLHRYo|J|> zuJmdiz8C<7gM`U{iWPwdI8Rilwlv@N2ci`zBilPTSe6gAnTAwWH!Cja@8ov5+f8a# z9S?daFNIpXBOg3sz&wN3^sUFEFV89ouxCL_ju{{3wz2+SIiI)sKZf>F>r--g{F$2 z%c?(g*Wl-&B&iP(R;b&6c#3&NxoTIEUTTHP-hYXGHzlH&oHVYw&vcl>_osdobmxx(kZ9LS}r(OUKu=iO2x}xwzRgOkX~Sa{<9TLKX`y9**q+HoZ=k zC0qII;kxxlOTOYk(*R;$pukPe8W{y-L zX>??bem5>z#u*WAvI>G}(yu;f*TtM5va^Yx+l5OLV!c(Ka+^|##(|`X^|QAw*DX{F z9Jc;2%EjZg?fAM#k~RJ?nG~M)uTC6N&>`_ZFTj5F>}kz}Lp>@wSEz>hb-&g}AGE5P z*iaS&BEmVdQv6G!`l#{4fjOTGnIK)3X=lplh0IaPqFyC+p-3rQ$5EVj-F+rKEH*FxUb zkuz#p%11U~+3HxVko{*A)kS?nzZqw}?Ezh`Z}dLDRevS28a1=(l+OS7VdYO_*gsX} z97n|G6PiP}47I$OGxJ+uai3BS`6*BO42|{{yg6I7w?0+Q7yU+i&_@ECx zLsn0VHL_2C?@o3*?9=|64{LDh=2hjGQ){?uS0PenqC4$bi~)#9QG%khKhw5qYGT*# z#UOfU)$`8VqKbLfJi4}59V$ffs&02`toR?BM8B8kAseE!fhi;rJw2PPpbtiP3008;TFu?|i|bvc$#=vAhTKM%Y*45)p1%c?t4^9g z)}ES{VaRt;f;BS|i}PhAj3rcu*3b>-9&47))A;STZU+5HB>@$*Rhm*es|N&oL%Mxz zaD1|Fyc!pdt8z&S3d6koGpQHj-kDv>?J-;;fFud%H<{d7kop#yJZG#7p5m~Rpt3)I z0f2TT>^Cfmw_HAbj5J}8lh5Cf>IlmY}{g>Ij^R=OmD#yDm>W-GqAH$4H<3o!(^(cwf`4ea*`0EtF9@#=XbzA^#EH(?C6pk;ZO0L zvG(WTdI1GlcPF}v9;6iUQL8ul7Id`vQFy||KPBU+r7(nEUMQOl@pC5>CbGL(G!BT3 z8nT+%+&TJY9o^~ab>E8m9NsFXmiflK+-%FFL-&s4cH)O;DA+dU%^`NHXdkOfiULE; z5fgFYXm^a~khrx^9cxZ|{4fz+qs-0vZvr)qTX?`dH@q<0f`b;m9NGAzQQo z10Rc0**TKBO5SRh_MFufquNl$>*$-)kX}6#);#B4woA8 z5b$yxF?U&VGrXlIk%yni60C5vx=YcxbB4kwp|*ytCzqR+5mjZhnqm05L@8KV(9)gv z(xN*9y>Q>5M*PX!zG5#M-R~Z&% zw?#h{l?LhV?(R^!hVD|jyHf$_?gr@w=|<`9?(Q5KLAb{s_dmlk^SHzP$wnn)e2>tO$PDe={?qq9D3)Li{`fBkqx(+Y6slctq>8`#FB zty4!=JB9)3!e2;CE@r$VVR?8`3J>3vb39JbmDdBSo@tLzxW`d!4R?F0@o5C4XDF2Q zNpU4ewnB*A1C9j@6B?=Tf?sGJ_N7!`*GB0~hGEgO-$Z~sxJRU$)a-}?327WIudG5zIGJ*UU_$^>}w&>4|{$f%w!$=H>;G&)jZaE0_q$bLR}DwJ0i%5x&K zHh-lXk23U^(a;R6Bz7<fy%0OJ0nWWls(eXoqTxMv7_%PB> zBWgqCt z<#V#5YYis+HkOxKfoHDDP`6fixJ++jmg2WmfS*`SyHSbgxze!MrG-=2+>7eJMcVdbzC z3>T8>W z@7O_ddyGP^;}{5$M7{ZgiHzyO0*#%7+r07>jShc9+TYM-X<5fKI6v>12FU8@5quU} zp;rq|O!~+P&l;nmvN0A)08TFeV3K%*vUbs#tEyK{;<+dh&S!5b%`3>EH(y^mKF#ql z0ibtRJzDvs;N@0k1N>P|ncB}X3t+LYKiVo<`8ZB5>46?(y|SI5*l=O6 zs!=?57#E95$hiVcPE!YB8F$N;|A;0UX+v3pF`1DAAM#}8h*q1``ERbn`(!cf%hfd(~M0Xa6!_j(tsmN9ou7sGlXGfNl6=;mW2SUgh`{t z`^Ga7TSNQ0?c1QWe-?4I8Hsek{#9a`nv8S+e_xIF%k!(kD=blIz26Cfye8-^L&D8Y z{+sU6Rizii*;<8jSK!2LzrRHRzJbL({8!~A29`D0t0yf0U2=4o-UP7?9ld#;@O7&! z9B8|NW*mMu3S^mwP0?-!4wIC|vXuN3j*k7(zM1bY&re}HWDNCxGPG^_=i~yntT6P` z3AwQb2I!!k1^v;)gqvH1qq0_vXlX5sX=s=!D?IHa##GrPVaEUQe?ITcXbY*tj^m@a4!+bQlw=i=)-`CX5fO@p)a5n0D+bvOP8x9QvB zMUl72T_KT`-(CNKS!N`I+GXRhv544>))6>G?Q^cYd}&}6BJsr-6wz)`YiB5_8<4zz z**%id1x+vET$ADiswX~be4#Ug{(XGMy8ZW)EL*%+{Gg zt#z{ogIYp^;Lhb@HHy9&iT$lZfd0aXvWsyqEkkcenVJ`W2&IYnf$-0-F{0fT&zD9u{;$zV{Oo4gC*S$&F3=^&ZB- zJI_8_1(;n@-;j7^X?W^|KCJ&%RXGKOd44Y4;!&czFP+@dcwK0P7mqnNa{;u1Qyrc&%5bV zC3oILpNp@yB_*4*UBs|ayIHyUm}-H6ZDmiIovU7y!cH*{nZBdXs~qP)uk03M_jRtw z!f@sB6O`Yj6DCJkOdP(yFZC}ub~dWl$LS0WWtg|*3JziehF9@rjBJH{)qaToaJ1KQ z#^~iPD>i0ZjFaI77AG`R(s*W+;r(0B$YL)RRaSh zqF2SW&au#{KDSDUF*L$hr%fbk3Nfji8Fu}?6#?>qHm7K7E8Bu=Do7x+UIp+uZw;58 z!QtRbWi`JM`_s1Q@NhY6N#Kx$#c$W%|7Mz(0kS!yp3MBY!tn7`Ri&Hz7pific`GzI zON)$E)OVeu5(+RPNkm0v;cJ^n690X3xAte*>Nw1x;lu=WBB3hARAC>m)`H6qlsTZw z^!+%7R#uB0w8LnG&jtX$crbOK*Np_@8aH7w+p=d_{Z@;9i|-kt>_q5?1pd(U>!+I{x*1L*xIUjS`@JOe2JGJDmtt5#8OCcg}QA+fNp zw?r4e+?&U^PYgEmaO~)`T;9E~4+}eWSXa$@Z|11kG9&&4+-Ee3~DB9X4Okrn!&_ffumesz4fUk&4w~h7f%1ap}myOtSh;CQjQM@ut+j& zi7W-J1IBLDgw3Phb){`FOA-Vqb9Id6B7NRiXjew-BzL@2H}i>I);C~J*<9mF;YFAs za`E|)3is3Y1FUZOP#jLppkg-92+rzx?vK36#)M)T$Tn-rXnHCO!YQVembD8f&}Y$r z>-G@s@w{1tgKJR?73%B>^Jaq+%otavhM0W9yx($a@3cfM0>T)z<1#2`l`*O#Ax_@0 z&oZ`o7sQBayOmJH$aJEI`3B7}k=FD0DNf)#1*i9sUS2pt@E)&_2{+>J!t;wuxVojqVO*!=pjn zt+&XIwt2&wn;b72zga%8g>b08T}HVd#a35T3nb=a5u3d=zxD}}7JYgV%+A6_{Z2Xz znZ%IWM~5+p&g_MGA3VjtNdYT`K=d>ioxONa1CBej8|0$54AWW7xwnikIY88cL(Q{} z9bZodF4OGRNU=$P6x?{W(-2#i zFjXmMYB%%vk4*P^r@Z|4sN@EjKTKL;`W=vj@CalqVoiQyxgWQ6exUB}=iy1%1o#Dr ztc6ZktunO8NJY|kOUJK8Fi2oUJA7-2?$SxaO8d(H*z0WG{c|#jC)s?Gbe(Ua9 zJ*c>3EXmrr8qX`_Rw6=M!k(#M-%M7Q7@AS9*Y!NFF{f#JM@#AKyF2(+eVGYY)bYO; z^>o{Q8ViRELOiVfuT1@-MexRbD%GtQ*XdbeW&p4i*HN>5??|Gbbc(TwFGy_6o813#>G2d;qN)T z;d&oDy~33iikbS#>)lj>O>`DD%Yx3;dleO4j*LIZv=0@@y^)^LRim^2R3iy&V4iR@ zHd7qLvS|befiOvOOk1EGBZo!n)E`wskJL|MTsc=xZVHzh&RL_CP15wM-y&!YtN8oa z%Nrld-2@zyqI^Auv67WU_8UKI8*pU<^z8oF3UkfvO9+5Bd+8HTvz^UYJ2fiR9)kP( z%x}C||KkoM-3_y%yyu$||D*!uuadM97*4wnU$DjnLoA;!mN9&c$ zT!!`q-*EHh1Jx}{@es&+Hm{d-Z|0G=*NXe`q*B{VBx8jIe}xv(86zfg_XcExGQZn_ z?1XXX2>6BO8ny}ut#2rd+5G3f|Gbb+^-#Z`ge!$BAdtS_s8HGKPZj?4xt=#EP4E_x z0)QH9CUpg)?hcBTIW@ zbCE2$!5S1EKt9L*P7+M2todPRiFQw53_;7bY{ZBp@8S=(5xy z>kpTXiZa%;y&0sYD3wveK!o(pkjd%o(MMtbD89t1)AJBbij!zlP&axLOL4zo`&&#N z`M69iy~w;7O%jfk&N-fQ^9&2)OXy7hqt?pzOSkTf*JWP^JKgk>uiWl?~K~qGSgcX zaudrH>uVgD!vwS-iv5ox#t{QJXiGq4##U|8vgdB?61bMmDbC@XxA%od#E*{hEp=lN zMTva&uR6+aijacyV4#&FD;fOBX>^1`r@L_C2&(tJRMvOOL2?g-*+pqC&o9aIIPwT1 zCLBge;oLY{?4znAJ=-C3Q%!9qwVLNj zZWQW#$uT==BxkM9zuZptAn|b@z>1;Z;HjtSRw|%ajg1&IUs~`r$9xOWd^k~#EfwDI zN_x_eAUfMRF}bD12=bVhj^q;Bh(e?;8sj{A?#ZNWXwI_4{YW!XY1DXp_!fXXWLV-A zE^6JRzrHMqexb61J_m?Coef)g-`{>%Yj5lUvv{FEo%e~hvlWq2K&!4w}b^-dkQL;#u+&qEr!!_mE8mwMDzCFCZO@rGfs*jQb1M|G5l$2h>|Jv zJ?tA>Y~>aM!*xWWN|)Had%2bjRZDB%0;R20JGktv<;q|L+x5# z!b~G4y`b=pBr=i%=qte;$tZEK7~VVPwtSkYp0sg{+kOi`?td|IQG<*yxY*i7?|GFy z9Q2YB{RJz)$R#lWS(Nruw#!P)Xw(Sgk8g-=DIL(5bvD{^HL1oH7e5wWA{HR}9v5IP z7UAJpsF-PVZaF14^3<+@w>K1;#KCcvIds+Io#`lvDhD5nn6TA&`_=c6=`4Nh*V(5P z;gqmfh?}>nmvfv+T+#=4$&CbS^+i(s=x?GwFpt%{Z-aQF7&)u-b)EjTE%B&5V6_V% z=@F!u5~MlMD-^k_Ek}fYgom9&7Z6v!RYwGt(5^ecf^Gt~Aion-48Oj%FvJ>^$^ftd zn)hafGj%&El))BN+13l->rS$aATx3H8?o3ZO5y0P)ER9QKOx$!b9Q-;8Z^)-pMYW( z#4oJ0%ROQ#FnmwtUcX|{zRQ-yUD97#Z7VQ4mWD^SHGS?u`mnIeo4|Gfnvy8Vc_fo@ z+sBpiWuPkPM*3me+VtD_r3tt2FmqWbXd_>k=8>DO@l|3NAQaQfd;$cbIo6!a)#rFG}N&CrZ%YI~- z{i1L2e7^Ei%Bon5ts>B{fmcJ zQ>7cDpnkQT>1~|65zU1K5~YVfk$mrim1hWJC4yOL_D5^Q6QmM+|M}7=^Rgst0UAJ3 za?0Tt%a)zWjusvQ+4Y;sfhg-V}GO4wk z;7cjV;ejf*2n%n8J+WxH*O6^jq5FcZO6M+i$C6 zjUFye^Hzk?Jh~lqRX%zJgo0=2Fp(c!B2By=E-WA(i#lk9nI0O^yU%1}UCBzq`RNUgsYWn-+GpveeKG0o_U`!b9B)iJ$G2K@v;QM1|uo(>-%xUXq1PL$(O)`eu~T_;urX@5q8-9|=t z@>l))TtEMYe0>>^e~z{r`5-oN_K=}_`qPc&Q!6o02uU@3LdQzUKeWa1IjQ4h`r?- z+5lo9o}M?gZ#l$`XB9@ce{#Q$Sg_s>CJjSlO~b*kLrM0ep16P_@&p?vRh7l21~kR)8R$bV<4t)tGEt{t4g5 znXNC!RK_3e4fl0K?MrhhlepI9tnpP|7znI6;O?r-|9=1)KqYpi)twa?X}yL7Y_Nc#AG znt(_ix+tsD^F{sRlyopVRWmoL;EXk#vUlEblH`xsyXy9Dph>fxvtFuH=$rZJ9N3S2 zRNlCHny?10wAU@tQ#&$P;ojuNHoWNgo;jv-$S?vywhv`caVX#1f`Q}D@k`!m9A{jp#* zx#!3Ey6|sqTMqM^*K^A?{rXl246~}DQ-$(<@H`v|g?j@6pWd>yVD)De&^GF=wbV-G z?O#C`>D^AdML1L#UfqiX(0o^(+FAeQf}Jf?J61ak!E1jP z_`S0c>u7~Pb$_fHQG<>Ph%G;TkUlod>(`viUA>#c%p{4??aJmA>XYcF6w6seSg3gf z@M5!eGzr@CvtgcOEB4Q|!|mYQD-F!V@(%_U{-;b-&WI3`lEWXxQ&UOHxyp=G#wjg} zHz}jk0D(yvN#*b&YM^$%4Lb#ScTk59@JF}Rh^3_$z@}vC-~mlw8KG&>{{F%yFCrfT z=)9}uVM8|s3p{?q`=U}BV@5w;v47@}$AP+QXp3#RQbQ9ThrZ+;Lz9!~1X$O9E2_!R zLIqBk3f-@)iBwc9ZoT)8d^&vd#)6Sirmx7=b(oYW8V-!hHQRoYiZo>uu*PvsxM9Vc zhdq6ucEqCYV_$4*Ec(9|;Azx5Kw{jieRZFBm32rYZ=5|GDJ^Pz*oyEBXP7Ou9%oE@ z2QtYFn$rP!{ST~zd0sLL`WJ-Ny8pdEn@uptOv9yp?>F2E@A4574Mn!QOg~?)y9CN{^jK8uQK^6ie zW0!D(4g8Y%Ksb~BGy-MK(gk`iRQzKR6??TP;-71-p^7;2-JP9)Az+u^on3Ggw8fVO zZW1ql(z!t$`*OKPOGKxcp=(oJmaqZT-v+Z*B7YvH>fz7VxPPM%5^Mz~VhvXaC6{q= z_HRSeUAU~X({G3h3+?SSYc5@rWY4b*BmfWby*t!JMX7fq-z6eVYE4EsfQ~vAR>y+M8WX?fXYKBn-bP|1NcIl9CeD*V!y#_5vS}4&fjsm9{E!2j16b zaK3*ZFpmU3fR$wh?hXZ`K!m)e3@@s|Q$M#i(*k^88_EVyh;Vl3=dG+=#G`OuNlNbY z+46{#`J7g@uDO=Kmv%?UnF>J%tLIjlbCxmj< zKy4YB?gDtH%$x-1o#O!n8x8D;y1dlJ*F$HWI?vYL4g_1|fr@Lb1`vfWe}?ehNXLF& z;{;nGRI}Mp*-c$_WmL697(UUMj+c<=$pv=EwZG zO!=&-&B-maC^;=35?Q5NmP7lxpI@2U z=sPZQXhJ$?K=e}RNX5*=$;-zuF%87;n{}NcdHpYcxw+x|>S!f!MAdM{(~P%fjsOpA zDxgR-p0?2OP0AD=e0x-MN6tNbpuFRE<#l=l3fi=y@kegevyw<;%7rq`+gDI( zELsYeqp1FP1W4P*6;A~Qj>Ctk%Ul}oQ;A4u1R`a&rn!B|zeQ2?`Xt|JRkl}5lT$?u zb!xn2_wakl10IVUf%Y#7Nk6w>Q3)etM6Rrki%X$VIUl2T?m%nGyzT3TOX@9@vkz0U~fVQ?Zst_`u z1c)ZW-Sj&o$aeQgq~5~^!!KjXai!Z%o)x2x!>dex(SxoT0fkOs*RJ2LCMC6HBi0jH z%4mSR?kfI4ZXcqriD|a(ytZ@9t$P&pB|)LGPV>C!sm!YgJT+$l*35tES~=2BeKQS4 z4ZoH-bAe}Jh8J%#maM6Ffcv*p43|T35;r+E}B47pRGXz-6 zBj^JkeT5L{1OXf*5Vt4OE1}|pmL@ZV0rRLL3*q8pvP)&0a4;cpH>MaxkYywgHZE8c z)lhRqq2SfQTJ`OmGQTmw;ZEav2n5=-8UKy;@g#o0v8T{^Ukm^N{7I`KCJ(B@Arcvg;sA*Wnlq!rnpLR-wr=z5*KI8MN3f)WNFqW$t^xW4pE^vusw*_LyGhU} zbI~kd48+E!01J9tA>@k@%c=$@Z@jy~ikn7v*OFH>5&6AfQ3HIuR(Lt3!=+oK+5N}^ zXs@W`QCSVmM*wMOSNwAl+T=#pPiSOedPQZ%)k1(PT_ z_ro+2l|B1oU zher~n!H+X>H4fJhKEMb&d1t&h6plounGXXUcyrV2ZgRHnMlw;F&noG~u9aHh6`b!` z55~)umD33wrN`YGw<)aeWB1p3%d2{PwX;mRo*&Zb;9Ye|(G2d&XM=TkGSv|PN-{=_ zEH8*>**UGBIx+C7sU#dvVSNX&HCKD3r{Zo>0U1YGR0CHe1cTe8xXlMdIxM_@h@2bW zcsiBSziM*UF}U%Rf$b9S?~zQI0^m+k*_*ZN8&BJvIA67a^(ntfDD62+V3S%fQAmh0 zX#epFpzo>%+D|Ye+R&1_@)$5}(#B#;VE~Yl)T%q6JBAJ*hl?nil}zq`Rld!FItF4NgM=89Dt^GDgP#Aj!c^$)tB@i+K#GszhC zLmI4QYsAVF(JZ7--jYcDC&pV`)OhGJes^G1GiSVynJseSBkYmobnOkzdU@Mxa&*>Wtk zmF0(iB@-IxAEef~J57u0>b7rr@mi`F^5u=v2k`KY{zY;~Z$Blw<=%4(qvlqZ$Xr$J ze*{BgX|J+~Yd-V_e-eYjy}oo%(q8iY-J$GX{?JF|p^IG+cpSX)tM+$xTOFlTJ;{#Q zdB#p-ww6KJwqm1R*MGW{J!g+`VLQ^+x;Q}`HYle#(SM()@qI{Bq9~lRBBZK~4squ3 zdVBwzZl7LIM#+88FmIeO&jL^l8l_kOo?Z0L&}aZNT3aKSFj9`yOGed` zV14hqC}Mlt*5T((jOG+Boa7bv(j?jD{Yzna+ndP6#^>e+>GEjmg3wDD|!fibs)3@8AIjvNQKWGeDkCxdi^L?Wc&?#nk>I#%26 zuY?_^SsEd2X%Wtb6{DZqYepIKXqo2!#6}BmXzQ^+^+~o%M0CyEXa^4~kRO`H4o8`! zRq`f*?|7Q`^#BaY$q0K|DDV_YkBl0%*~U#u^YLfdS-lcZO5<8@Q#RuxE;@gELQkm_ z(_*R3XkRhmgyH#F1&pfAF(5}5Y8~@j6J+;SaxSRI zA;bQz^6@uM_C!``fTqfllTo^f;GYs{eaFqW!RWTB>fw zXjJ#I>y8Eg^KZ11w~lyLrA;3nJM!%hOVJF*keZPW)5HSGL=-zz>zgzW!I=DTuO;`; z&B^7xWB9Imc6A+4cz#%wHlnbJiNqDCCrg8cB(4SM%Y@=mz>3P-I^#;?(!c{V+NcuR z6MU@8!&-VI-L&Mnx97de-8c zYd^HFq4U(6%19@OLis%)&%zmEP-0QtnDC#t=DxH_H^S>BCDTXZEN!zKLkHKg?)S)u z=s~0ivqHZfuGxe=oc;AY9E<{gJJB!yCh)X!SZeCW z;$4$wWp!E1kICdkyJ_gd?`H$1dC#_=b6`SBd>QKQT|MZxNfBi=;Xo;Re(L1mirj0$ zE*I93lfd@S8m_ihUG{sGz3P??&nNmSk*J$CKCmxD0AJy1M<)EH z0rGJ`xqGYKD-4ku>FK{CA8gD_!>KQ3Lh@W>hYf_$J_Qtc7Uwq} zA-6pfs<3axE6d=c^{Uv@*qXI5VVaWR$tm+99^G1>~*llbf2=5@FyAseP4Q(Na)V7 z*V!V8M$d^?1bhDSBj{G?T(_h4-)Y$_I%j@sAV=&I>B_g|bjRnOf>fq|>ZhppR2sry9X^O`aJ&}-E1*Ja_qfaX*wq;{&# z>KOdjvl)r>x*WF8a*qARw_did z*R`zK5-}5QhVco{vW9X?;`r|_L=qKNgrrg7+xKQ9!Z-5=v6&Lyvu)Zja>0rQg4_8Z zLiXB36C<9l_JJo+KRu%4D(iua^kPw?;Q?%mzW%3QB9Xq= zZ;QV_Vj6t4OBAhJc{$&u4ITQX9{U(&21$fPkHL^ z$JVlj72Vv8M4rdzLK?+vb;?W^+@S`+nIM_x#5^0tJ^?s9z zQ~PF12g|(f!wM#pF%;<7s^|(|5|vE{UZS(7iU|H%qg{$%FU;S8qK?*-jlYjU51oH0 zl?x?sq!X~yeUPK_7nG!=W;n>=v~2hYQU?^zS~Rmb=%XXdinW;(7^GeQa#zjW&w801 z@(O7jV^vw-HF@zV%-?8PFL_^9@ZT@kpo1(hHh6<|HA&{+EgjLWS}oSapW2J^+I45! z``9y}#5$uX2YM|Nep;CTlWgVF;aL*4{eFclsW4%tS+#ybb?5tvnMS~FE(9UNa_4Sh~yp1KupoBHWhTP(Pa+I8+`-EZ>G{}F zDv`@t-Bvm&jUh&OBiKuEz9h&|e8|m*{JC9q8zgSulL;DW(aJ+`AVa5BKU58yjaiFt zF$5+iDY|MmjISAzW=UYBw;I;@X&}s z`ei|1`_G~LMKv%61M$OO78oKynPcm>VfksFR4!tIj#wEa!-+UW4<5WRP;Fq6Mqg0C{k4phb)Ls|W$S;{X z@p`(U*CD{m+&*E9g3Ic9A8nUSZc_?YDVS8R?XP-;flmlDE}>b~Z#&gfWjscd zO#k%Jj)F0bC`6>HrCRS;+gMP=5=~TLC7dq4Ccr8c6!LV>kgQbou&9m1y!im^LWG-s z^$>S7eOgL5zi6(<5_QNdi5OJQ8;>T$E3olu@;l%_YmpgJeAo==rrER_9nI}x=Oh(b z<;vPTa5uFVnP*U7XeULabfIEn&48uuC`#GbZj5|`HUYgf4X%!m<}wwl+l#qLg3RCK zoq0;-oySHVD&-SI6y!Hv9@O&*&J!#8zEHV5j9X3YMt8h%u`U-kWRs)73~fA zk3#roRZsOGB6xvMqYsSgI?C|t;OxjEsD()ncH&6mITJd(?@Q1i|Ml1*90G>7vmZsRDeiBxw8DExX`DWvNcQv<2APN^>rB@ll#(9=C=2)<{|20E*yMxf< zEM=r4$~`_ZbWTTUi{^JM^!nqZ%eIP9va!*g}*=T>4-V*C{-~2C4=X{`IX9Wp& zf6NZ-0v{FQyA6_#dh$puE2HTl^Ej>dj1H7Zw$`Ptlw{p&KnW9bc3b&2p0T=>^MF>B z(E4-lQXCrwl<&f{p5YRmZU2#K>G5 zg9w4X;`y7NVsy&)aF_632TdF{uOfD~_*7DHrkge5OTpIxhj$O&VJx}T`_M2Idrn)< zq=)6^+A$!3*8B`a@nr7h6GC~`G%k}j@FJ#8pv|mtSQTJ+FFt(R&rOLgReHC}64O*D%rox8a>&fz8c%8L@0^p?JxziCeHsXl zm(g~(CKT|O-{!4S)OOWA?nQpZBRi?DuM{1=O_k~|)^f?xEWLV4gCUYP4Ltn19wm^P zg2m~LvG$HL*j6zqD(~7}TTx7EqAWrYd^xMf@bN`>3=2 z>ubv5d6-Kpl(0Z9RdSx}LVVP*dF>#c#o0kH2>uhQa-)x7sWl#Gk3q^$F2w>p(hBZi zL78B%qXtC-kUw}11HsXEgKs6YZC_tlDv2*sl+5_3!z9$y+}E>SOH$PY1Qyex$t=|f zc80nU93@5XK0J-99P`AoJCtqzC_{9QfS)o>A4*x_PT!xVo(J{5rY-6#)!x^ctZIKM zoeyPWKhfY%dkh0z$ru+@kurILJiJy!$UuxzmqGc3_6@z$y3_r1^4mkAAhyi3fsh}i zmd)Sc1?p#h9KRzVfP_u4epECZI<7eLVUC#=jCptEQ~MSwh-0W1WdR?L8?S<2MN}?g z>p1Cqv;N$wpkI2ks3LPgyv8NDG;`qfs=h;VYC^MEDwA9y`@%(Rx~_yZHq^njwL2Ed zK~5Vmy-eu4v-hEIimKnt(b|=etHobqi94fbM%D1;zmHdag+EtnJa&{5&(n!>PwxdB z3;LX_7;SMOS4oHE#=Y|lcnu-3pm#@j>bx!3e$YN^A){6snn+=$TGWt<<4`qh>B`ff zy!w4>f>%B1N<)bRf>p-q+2x95`Y>lWhzeQs3nmahlvCop$GgP)$#h`;q3f5b>;I5L zVV6yBpEI>>rD5s4bt~;@`?330tV*wTpf4ZJd08yTOha3sO;KDaka507P&-Ot{qB$# zO*59&1sqU8W)h>~6GkeBH_{DS)|$qKd^B6uR^t9iBDzDt!<_W~QelmT^^CM!FSix! z<@JPPcEbxdLF8AUn*l`*`L@=YpfHE|RQoNQNDf=(;@L!v4~Lq#21eFrJM`(DZ;F_K zva?KO5Pa_Mrt94^s%y;{YmE)B;6vg-h)ePxU!kT$(dsG}KuRRkTX!6k=i&Q3M$h96WLQ8?#$Dy6lSaZirh??LOyC zHwHQ%7}WKJ9w&PkR(H-0$X%fbYN_O*&Q}YD`pDzby=*OD0C`5AByw~t%Z@m)Y^vPu zmiJLJCsDKV_Bj@v_n9tk|5u}`t-k5Vo$RmnjsZTs6vDpd5uaPU(pGz63}CsV^Y1%W zMKQ>T{@QF?`0g#_XXF|TjFMXjxnIGaXEC$Ig~o<_BPgUw@9wut{~};>d91*2H69gl zbxY_`Nba&_Hf{@z{1@-}gx&TrQd9b5@ok=~mZ@>ad(4;6OdaegD6co8HafadK|)MS z6Xy-1TNX_CQZi|lclv`K-c8Q5*^Y_1vkX3f)ez^qh$ym15E|YuFT>11>xhIBhw3SD z4Yj^$*1b!(k0kUZ3+a;Cp@ceMi6R4l^~TFN9`)VK=sEZ`NYLgFS-MEpNqtUyDkf6#RiA2hu(O2t{^et57=h%O}) z-j7UcB*gs+mU8`EbiLmSgcp9iq4)O4=^Au_gKt;z_53uTsEhsX<9MDyI9fF-HghLr zGBhI`-x$%t5D=rqo%!RZOm2Ls4007B>&qwyzXmGS>tfQFVQ=y3Y$Nkq{;c2=y?E~GZ-%Fp%Z+g8_j4pmo7 zG+mlIfJ3YZ#Nmw$yaHJDL*~9Zu57xs%UjYphn@GSV?K7xXOW*bKucU*H<&YtxUO%F ze0j~GW9Xr9GF z8BNx-TW!;8a&eG%h{KNn2MTgo$Y3)!xlYMTERQx`gcDebZ}r+f9&qQ;Hv8;s*{P~h zA$H24P$J5g4_4$%UAddocGm|fTA7$uZofli2dUcd9?q|#Vc1xm;}H$6(B4^~yF)oH zPzFT}6LxR28c{OWJ~f$Z`Dp?|-d3|}RBLo~)-FB*t8v#(G>mSrFnGh&+$6t#bUvR}IlivZNW{U}j2WiccsrR5wpzUMuBSG^Ry-+?LFc%aOk3xMB87=GE$ zW9$#+q z#h~^0V&iFor0~Ec92S>b&5KDt#9OiDOJp0Yna{L++%FwPci)0uFospT>f&zh=J$*D z^QL9JB)dOpj|(rYuJ9MI*YYtuk*GckKhU>JM&&iVkhgt;;m}U=ER`Vl7dzTP_F>48 z&txEq_)%4$OmywC-d?!fhy(RfTZeNsnaj^zsO);%ke$%a@QTXr?QkS4Izgh()+`AV z3u;mqzsE>B9P0aSB(jNHEK+Kh1@+fZt?#o8<3P|UO2Ts{$eF`Jtn3LqCz7$R zCL5G@(EEXdjth5Le51?P(Eo-X!P@mLfwG)bU)FZ0)b3`u+L%U51cl2UJZsy30O;iN zVcs~S!Eq%+$KNOy{XXqxue!Mzjwy|a{Nwn6f+I3rGOoDv`ZM^l{@ZVNw$beLW#H=! z>nT6wy$@26i%fmP;ohZ4PGdIU%!Kv!^AKkfQO>Rn^N({F|5O;^X6aZ=)lqyl;-O6_1HnMB)&unPtck3=JZWSmNB5rw zJeP^e1wV|ITnnWBxA8U~X;bi?R7n~P_`-v^nGw-R?H0|$A9P^@ONb zaRIe+uO1{Q(Z>BNLGBF&`Qbt0dCU%%cKIpyL}3)R;mo1l`=Z7urFtM%8rKpH^QJMG$xsDD9s*vuOFcMRWU`#QW4S8_jJ+d8IcsnQb@ zjs2^nfeG-Z@`lH2LDJkNKaz%EG92l7sK<$Cz)jK)&IuDm=<(9Go9BXXlQC!E>BIsoBcL8Jnm>9fldQU=zZ?0|EW})1{{WZ?bliBivnh||C<1cYOt2$s zbg=@Ny_pBWB-O!e8xMO(&-$}aFaQ&=(z!TgJJLg&;Al=53m1+Sy39s;--TQA;R9+Y zYn{J(Y%&z=^fTpYo-?(T;`#pTt_!ckT&!WyB~=x(Z;I8hw2L@%Y3Equ2m_5z6fOXT z5T`JO1!p`&<~((mYFRLuzsLzhVb6~LQ#u+}Xqo==kX81@7I)OJR;y++zr%=ADX*E(afkLgD0hK!FS;0?+zJwWWwIl zEHAhGvP~Ty6_;HBQQFptU}f|18l9do{d*4dsgwZA0H zwwUc&UiosjgBGFl72fZKbl!}))lb*e(qNPgVZR{jv6-K`*@kS`S|6*EewXR1i);8V z&w>%p<;@;#{;<|06azqB8g}7aY*)@QHnb=k;iq+p0wnUF@B><*Oy0Rtqi#~Vk27R9 zvo+`)WE4Mr;otdtsK)|*{!YiDfS0VJ|L4kEupKTSdX29$Q9HUGtP-C!)W|<49`E7d zNdtUBI{L9qlzd3TmUpvc-Z^00zHktR|ITE|K(p(4j~ww+v+<()TZyj7(U~GvaN+N& zRqp<6rE`-C#;J+?62sQG1(ilIL$K(2h!;%#mJHZKH14BdTYkf^CBQGIP zOXVEu$ihC^jDPd0lRgK=Liyz zY*Du)P67bU9t(|F329hrvzkZ!+NiiIGfIX%uVs4+ihRuu=lMo2rb^e zBL!Ms76$1bp}i`yNQNx{rl6&~_A}N|!q8tku&-Rno4PW;?In7ek%_naTy=HY`!3mX zYNuQiIf^|9*U54W;}vN`ibGpvaC!-M@JMf-5S9KB zvG;IbHuQ2ngB8||-)*D*@UnkAxS+>6qDVTGXYUJXL2YfKifT>;T4Z__S$6-|a+| z#z(GYe>ScZ%4qPy4DOz-mRao9;jv8unlLudlB$3wl@Izp4bg5*zS(T;H<2S;Ket9M zf<{!{C0Re_Pc^DpgjMiHja=gE#?6m9GKv&MVv(Kizra-(Ph84KaJLHSWy#46pZU7eN?-YocgDxiMCqLln zP!(b_DO+xkk*K&8P)E2fU?KjPf{;ENy|}S%LKaXeRuCn(vVL+iQ zVa};~ukA}c&F0l3X5G4VGO6>zFw{TAiR!|r(|%-Yqt!t!PeQ0|z`M^JNJevq6xYM% zQ1x9GXWkLxoVh5?42(QON9hrDrm{1fUZDcJMc$4yO=li@TS_xWdx^&~z(;pJO#z~a>X)~z9P+AAN z0{Q*-OCOVZ1?c`+XSS@7K+8L9k2NqO+K#6eNOz3T-h#xg*Ckf14D_2^=9vFeg2h>s-Dx`#r=%uX@ub5Lag_qDyd|H zaUHVsVo)s6A@BXMGfX=zv0vB^aE5^R1;-OG!6k17&g^Oy^U1OGKyu&T`ezBzz$6ApK81po8I&oi7qF`}T(Q}*ll~S3UGDs{BWD?uiZy>~ zLN&fK0{HCGkE@H+0)hZjGrq;m+t>rE2EP9ck7Y#Eoq!$h15HJXSbQiaYhE za-&KvfhkH-Gf1a~^b0N({AH5=MaA{eYeE5e5@s~M=%9dWUdmRR4FAPnSN_18R%zh| zj3>v+X|ZuigV=x|Q;K1)a0r(Ib9Zd<%}pW-ZrGqf9m*2+1@L%)lE3$bbJxh&+%5|! zM2aL+ti;7eKdt~)ElEkq^`#~yjqnt23d$gy5vj9}ACDPW;_;Ey5>{j7a{R@jxxcRbbCn2C6;(lAXQvzXDi+7ilpJ3+wF zH?VbE&@f%Z#;F)+Q71DQ~fs3dlA7zx#16mF&t$S z67l`I=iC&?|L}ws^VW7`z27@)fN_L@baL)M&|D?AL%i`H^umm5Pb5S>0Zs%MAt_KC zH{%A-Rk6=t91iH8h3wK`qo>coAw=tTVwoRO#B}v)h3v(vNgYQDg>wWNK~nkWa^_(; z2F0SGd4*l=Tmw|I@kZc!7$^weCxL=uG;dvPaHORSuJhrOUy!GM(FznT%dZ{#k-mLL zJ2A9W~ z0S_={U#ov+;fo&l@$I6=1A`K!bw}_?V=Tk$p6~_rrtbXId;9nIOOmNT#GW87y|bz9EW&n6_*KQQ80Iw|t7;rr8}8Fpf0CT^w6ND5G>A z&$knpCYij?I^m-=y{}jlnEzn_elkAH$7PI)UOE3V+Z|VM;<6q zYMz{MiAlM-;?81+TLduWY4cMQgFnlyz8Lg8u7^c!gahi;-T-!GQoG@5uW8n@;p|!| z(|sjVTktD6TE&w9Z+L5cwtY-bgcez5ix`(@s-8`-u0OP8`}qDw$-t*e$zY8Nx4a49$)WXt{yA zM>Z2BgH;mMJ=Kxu>E(sDEjacGyxMVqF!$M<&id;oc74o>J);Aj2p`Ad0mI1;{4Jwj zV-UMV$z(nwhik`G0!U_G0SN+b!kUskU;=oj&z}tS#t$sR7U1QTQQw)I6YRL_Vg@$V zKb|*Nrc%^kFD<1YiQD6G`qbtMKeY8*POzRaBfsi}mAId0Hdywz;B^3ArnAIuv-{IB z4|__mQ^wRFf(d>~vo~#$@Pc8aG3fnXLI@fQ>H>bMMtv8Dr>>J8J4`Y!a|l*;u{rg( zuilrpD*fwJPHF8DLEqnA*LaYE!m2Xf5c01;v(o{O_{=5OesOg`1{&-^#>L_j{M^U8 z;JK4gCD1Qi_3wvx7Kr96SOZmbn!M;?fPph^*M6`7=1rUZj61%Zq;-Q}J`V`>g1`MaN#c;%Ksar93{R!0>g>3ne5$ zQ!%j9P>M@7nZDzGM<;L%LVT6d^Yl)y@bH{vLI?|RJC&!)2&(0Jea`nL$ZD0mh`!XU zS=#+q=e^H~H%2xR@80%HLSf?rtc_|Vpl;EE8*k%AInT6fwYJKB(k-NO2>m`J`fuNP zS|-_DxR(FNznu9(wF=W`L`uZq{KmmV@9^~lVP;-|YD@#gQB!_!$dKvK*6;UOOU1Nm z?0)ZEX0?tyU#@DVNH(qYd*WLRghp{-{t#@IFXc7yi_km{FFHa3+Nvq03>BQeI>sf>OIm@^Tw#qQHr%_DFO^_Nt zWFS1tYSC-W5rLFFiWc^`=7KMs(tYOjHXw%}IdT`hRC@J7u9P3@z#YB+f>paYqkM4G zGzlU3dHYWmEqd&GMzYrAee!$Gh>v(w5sP$nOH1afT0<8^2M+6GS`|Qgl6hD zNX?SR=JCu_Fy8O0kheeW#t3-kfpt&S$$iI19QXo1*v#KNxreh@B!#tNWtF2-PrA9} z_WI@*eCd1Ea(@4ZhecG-c=NUc$$BnHPxRAphqzZiI^zYUKBL-tL+7eYG<>f8#a zD$)gd{~RIV1nX-3G_V;ZncMGDxtc^tYggokOg&szg?>SnU#@TY71ZPuXRpja$a4cEf=CLHd3ng<8;(e zYW#o~+)PPWM;xcY*ZfvcZS7)dgo3J&T;*taivC~PjkSw^S@(vJIUxp5CdO)gL{l`^ZN3eDd?%HFTG0+>zZ@<`ofBxQ4m{vKJAw3%u)Igg$ z$0K8Y;!SV?|IOKfVsy1~48ZW-WK0wnaf(BgSsKcoYkr)ae*8iFm;aJ%$-x0r ze~z_@6)7{we?u7Ao-1ZfTna@TJaduCG3|ty6Tx>zzp`JWJjTb9et8cW`x^)vsYt;( z>c@^XxG6Ay;lCysYS|$W zkser223*Bs7_&#hj8VALSEzq4GvSPV%JAWLUaz0tf-gA`Kig0~GsN|^g{^6M*1&1# zxdlY;De4CsR61W>E``Y}b@e9fNV5_*E_;bzr@d|bDVz#f%s}Dx8Z!sZFk|TZPL!vn zSz#M508mMslP8Y(gWKFUwj$KK#3KYm4p*++WKsukEb5cnd=E8|pTQ7pn_jbrMniz` z^l3b0AfzRHr}@bW)X0iHKVrRspxwJbnIBTXgc{nUjKwTQD5bkQ%kD8`!E15$3qqA= z>;M2+caZnu`l@^sSOw)WR&@5Q4Jnbw<1Dai3XCX?WZFM?m#(B^Q~oL$$#BMuk!nOq zMyD{Wc2N4=e=NW^Vmmr&E-BVrA6Rq?%KyoxBhoPq`WMNk~2FV>oFHnF8Jgd zpUp&hx#ZBPx=zS=%3CJ7?@*}Z=i-tP*U8SS-e23Yjd&`lcO4K$Z9mL3hTr%BwRlg6 zsQ;6zJU)XMz7PlF6L7V06(q-@_;~R;0Ec(C0A#Ak==eO~Tndcq&ST1P&x-L8U;Lj4 z;2P@a$Z`Q;{V1OW9g?=PZ?iyQ)!0IdajKp_w|DAv#Fogb9i{O0(@I85kXOm-wJ&(L zfd`|?u-pZZA*J9p_mh{Er~*DasA*yUcN>067)DQL>J;Ct57CpiQoy1 ztR@oHAv^GkME{4B{R`mjv_qG+aRySpGu*IEoX6p66wraRJ(`+13i~I)M(;ZSljK}R z)aLc=DmOYk(ceJ#wtx;)U$GQ1~PR6)EGegy&vD~`n}n*WUY|Wb{NVk za92moE^D9#NS>&SVCsinMWxx;x7cTAveD`|#CM283UK>^K0=Z^ubQb0J$6DDJi=WIkY(^cu zPN`?*X>hHJ(L>vc@zpp4eg+5~TsFg#cs*omk@nfb8%MW*Biizbw=J|2TGJb6V6Q$& zNu@(5}ay@rFYsckdNKNDDo6VdmeEC;eDb%xSP(t+~!P zk)(;pT}_(I@-F$ok7ZP@tA9DvM$V9eNyuRv5*=o7F-(ky$IG<;6sm=2Nugye<&)fA zdU9B)B{avt&ZXF~fMvZXZM1QC@`Vgr_D74z5C8K5EK_#0s`Oz?PfNrvhJ?s9@xXDPNb}7#aqI0LsY(k@(V(|RtsU6 z?yGY9>*qM{>O~*-2%e<3*UhaVreAFkBMeyuz+X!9ODo$DGqz+_AZI;Z)!`(sO(qPN zo?I?rF^~vU87H@sIs+zCn!XQu$iDL7M>4Mkb0RJX3h%5Moo9vjCL?_g4-f~7L>VLnw8LHJEPET4CPlVgHjg3m;N(F~Tg_g`4RDQTG zk}~r@R7|~08v$PymBo%fAmG#XC#%I!T|#y>ll%=z;ogflDzYFXg4ynDCsjCG^^L>{ zO7O0I4%n)20z2PjBmqMvqIhP;OpzPWv=1eT_~lPi^OU$v^{xzdi*7Ws+@RZq*qXby z?KxbQ=CQg{V0FPt$x|6cK@t# zd+2~twSd~~3IN|;+jzaPHQ&iCIVTEu=aT8Wo8|Z}U3MJ}d_nQ#jasWl;-QRIH(eYp ztrJP_K$)lP6j>bYnA(W25nANAqo(`OT9&Ch3MqvUW2jY{WS93d=GM9ELPE=I!awt% zLA^+K|3{@W8VG?T%1FWcnUzY>+S(TAALD*k|tj zHe8jS%?}4noOW#YZ}w_|G`YoN)fj1m3QR{$B&V3q35rjD`zHbp6fD)}h6MiquI0R}yk69J_6$ht4M}=kmq3hq#r@$gIlwR%~ym$iaeEa0OJFq9; z%t)*RS}q;-Y#J45QB<-?u7?%7x56wxXn@4Lr?_}wIov^>zGzy>de*cS&R{*o7uKte zzue9Qy*=u;a~&V0b$=i^e;?M)A4Yi)el-E+7S-)C&VjB#IrgRq_O=eWy1 zxCa8<%tc8z`n}UAMFc-1=;@@2x6d{;qdUZPEumDN17-I1oKe*epZ;w``%fa@h5t4F zvn(QypR~o3PNN=Gy(GNMI0uUUBut8*&pDntL zKDHkRtZXC16dXy1IFoQBe^Me#pIODlxI(5ZsR=iZSNO)C@wbx8pN*<~gdY7IcQ5=e z0^h1(K5=Ml6NZI;f^ehb)xpvC=I?V|>O1ofJUhXL&B(+V$`grl zYke$bLlxsl=}^L!G@e+!?6=H~-nZu^XEsD+f&jShdgAe;_}0SW4E$L!=E}E8D}FbB zJH?Vg2$+Qz*IN-+S&&L@u=tvE@_o7fqC~1$1zhvU+nO2V#>y3m_+Xu((AdfjB2CqZ z@$0L8S&qVy<^Cv;;OIAbx~ujtSEp3M0;JRm3MOnm)AFInWKx&ksmuMe{i^)Cd^|`` z{M4n=O$^a)2CFMr$Elke;Z|qvx&IBJd3)5W_MT-h(e`I$O(9I=*)-2>vIfT!l{s3c zuwHOIULv@o`Lbzfh;MO)Maa_+FV=Yg*6LfXqzxSKFuJp?mTC0~gyHvBQjM>kJ zQ<-G6L-U2X6{)CvE@AIT zdC7MruNg2X^4Yjk`2Avjjihy}>-8yxF=IzPdr+XS<%+AE5`xaH7wkU0RyGekTE7)j zI=zE7yg8fGC3ywn2R@Vw**B7jds=gn+S@muGIW^@NA06n1gC3kbPut7HtqOBw78PLt|cdXQ^ccx z|G3LGQPM;iAhEh>Sv!NSxXV1*``itVS=u-cVm2emyjJ#6cvkU8+)CutEl=xN z#G9aW2;>{u7C{3k!PR;AbK1qm=66qY^v#>Xk?=ro*oI`83K2F=^p_AHyPz=eX8pz| zkVyIvPUV^nargEq9snQTQEr0%vguM6*0+_PPK+v07FmuNEWbuAo!~js9G(SSY)~ph zl_Di9D-U(v_KxFOa5zQrzvuaTQfA!dmD8ymGac632zi%TOO>29LYF`XszlmV9YFx-!I7$HinCAJ_&|;FmYZz<059{s>rp<4)iCB`MTK8XDd4k!dX+F-_)Ed+(6uS z9h&9LT364fklc6s-TBVI!q`OH+=o9p8GqKD$=WQ;H?|W59mMq|BVMoUVk}fZD$HwP z#NY9U7C}MA##EAw{+h3z!nl))n(4c)Q3Os$2)pDC;@ z%rsK~j5=p6WNunmZYT64GvnKu^45l6V81F1zMxytW`CF2b;%kALhdq6KR-M${cCX8 zw+`EFO_2@qg-8bt?({aWL@fDpT7d5=Z7oK@xNCFMGTQ!I!K^hDkTv2EE`9v=x5X?Y z)8``O&5+qNjzjq_ZP4W*L;;)0Vx3}Lp10Q6YhL7`YPtZ+h2YHw6mue{u^BFNlDzw| zc^=Kb+K9pHd)D+J!**AjaBQNXC;`*5qlEZ<<*oIpL%RS*F6PvE$vVfD_7fV6*k-oO zEU=dwGU;>wpLmdEHq7(7K!zT~v^R>#>j|*3AKkFdyjVtDF;@0w_2wJTubo>pAco1!776CwymjOXa<`10F6jmx zR#46DW|dVtH;ZyZEMt=OCqlcF3N_*i!RXCNqCri zIM_f#N}?a~$mT?!ON~$Du3H}XyN{*p=FJIc%2#T}WhdY$e!Rta_@XJ~LknCSCSScSyJ&|*cG?T{oIP`-P{avywlD6Kn)K;& zJ3b8H;&oZPqKn<<<*vXeB@A?BGv}o>=f&Fq{Vd7j)(sQ^f1qFDAmu%LF7zbjgPsei znhn_7Qhv9L_2jSi`N8G(JI{BotkgG3*l=UIUKo_eRXd)Zl7?saX4f8JsXCo5r3$MZ zu;We=I1-QkWVsF1i;Kr)T6A^E9shw$KWg7#BPfoh6a9B1m}xXs7<3*6`CCSJrZja$ zp+sW)(G)(2`+Q6QK;mFm$;d0om+FTAcq{A+%212uh_Y28={nT+e&^$_$CN0#Blxn5 zrxGZFoNcrJdb%cS={so4xbL@9*37wP^!NU2snEdB%d9|_kxhP`k}3JwUb%=A-pVn} zR-UHTr9RI0LPp1XFPOiiwEe;yeY*}IsX&Z zTFQcvEdt{Pz7M^b?lW3SNWyPKS+?B!GJV0fzqHv$ixty@zbFi1?_Nl>dPRW@tGFsY zKdiqrlP|=*JhR0D6u3(U)7evQ`Y|59M|GJ_7w)6H%TuneJe05-SN9q zl(zhdm+fF=@Izxyke6Id)dQX-pe>usAfUgAOR}%>w!0KPm2!S*tg{o}VL@(&&pp+s z#>Ken*QpHQ>wYdK=)F2_WzXicMa$vI%@MWP3Pb(v;SiSO7V|4YMRH!50<)L)9%LjM z*!u<_Vl+rqUc#_Yx)StetSZ+|r2L}6E@AQyK8IF${)fbX2ZPyN=K@+!mqUiX%T;1< zgt#g)5SEj(9dJTudyCy2?62=7V|8^&4=CkbU28{Fq?p88byE~Uk--c{x=`&ueB4*- z0(831&qA0?vj!!nx9rjfK?!J)gbim7KjI#WtD}^n5yF&=R@`v#E?Al==;HTlXwz~F zopltpdb^Lz*`5>S2xm?tjsS1i1d;>8$Cg9QeMQ>@+P&vswHQ&vvjB40R9Gc8|A78S zW%JBIy5C^nnJ%&PI~eSpJrV>MbG_d>ELubo{T6n8{0|Cxscd??H~g}lEU|eBP&gn# zT%>BAQf3SeMHVvu;Imh?=M^&E`#Iq*SUpp+5q$ER$4X8T<2V`D55o|_pa~npFm;EuI!rcNhU zK(n#trYzlfk+W!h+9?(=#TI{=CN+csY;vFkP*L~0lpO}jYExR}^{B<&lWj$ioDOR6 zn4LxUYVzaw2_*1m_5s+=muMLwH~a7>%X2K#8z!9wmdYi>TY4WKpA&0YRUA%u%EZ^a zKdfP)w5n%Ul~kEl$3OY}3G3)^W9NMsNR_yIpVnEY07G%^Mjn5l$WEi=6X(-e8}`gj zr#21}H(5nIeHAP7$9jxVJ|YS^;xp$r38tf8wF?esE-u-^f&KPeqlpn(-fWIWXc8w{ zY5|w7p=cs(ulD#kSpWE(TLIGW+Xk`$F3+8 zKJZdF39;Po%t{I}@mY%@L%q3}RX_ef?Ie4+$OTsCSO@@7>*UCr$rPpIR$zH9)pF;1 zaAjv#ba=9EnmZ?%li%i%B4-s%My%>KW}cV$y<*AJ|A=TTA$DK1Ry4I2q)khu`0w*BhGpC2k0Sf?C7jgO0KtqgV-*71I624{rLX9M8Gv@A2( zxO-Aw?pi-jS5lTU2l5$-tZ^F3OedMU?jCA z#>(tq5aw-Dwp{Bg-rmyhrd#p6AZKxAZ~b<`@#!M5OQYZ#ORd z5U^i-y%`&8$?=2BnUqbkfpQ0g^-}7+!~52Hs;haJCE65g z`eoQit#0`@bc`W1=+DVMw2zDquBJti8)zE4ph_4;3hr7w^s)r?LS{3+G7Sy+;@f`M zmoLhMNsApUN`q6JyokG_Lp4{M(xFOFaKB_{*IGZlUZ09op^`18k#$w?;akxgt>gjb zz%o5?LN8%3i$9KqTQ<2-cfTw-6BX53ebccRcf6D;r$x7C$7{!(7Ar#~;`$SR-S^nf zW5YSjkG{ryT{wQ^%H`whSkLbG$E8vbKg^;ME~$*Guk$cEy)e)w4we#+o!+i?b zU=F1HfLUH%vz*jtrmQQUMSV4{9ol?&I;faj+}!J6_My|pFOWm2I)T%=<%y>@EX<_8 zYN;{$-!}$>MQGIkLBT zgoOoTf-4pjBmlr)a{g2jH1H_HH-=x~?TmNQe0Z94)w=u>>c%SfUynyDJPd=1j7T1} zOO>$j{LRE0krT80z`eCh>Re>H*7<~(hQIJDmopT^#NX)jv`Eq@12JAc)U1@zdsCI? z!9Fk|q}cn{OoY1MHF! zHPWIFPT&SUouf7u?dXQP3Jl)xD3I)V948hqfuil4d-K|kpAnk z_fy^b`kT}i`Z;R_Cpw72Gc}#n)i+t-8z?Bi54uak`41BVRql8~HN48`m9$6D#3l=& zmoJLSf=08}Ahy+_@1%)wP*U(Wg%MZ3kLnAAv!xp^{k@$M;bBrdd-XjSsVoFkaHBFs z%r0MZ4b@D^Eur>5w9oU5e~d?2-q(goPraGkQOXh(*8f<<IX-#i( zJ&r3ln8Mg@^+i(eNpP8{A;(7u^>ClN+ z6kHA)fCKH>!&%#HfAABM2DO>g9}+yMWf-4y-(>-UDyD3W<}tDfa<;17E+FLB65D== znsylON$73rMG1;VQ=4N;nC$t<*TcGGCuKEyxc!H$w|t+^z0rhVtYon8=qsNjZ-gjs zt{)5zIW9-Ef5~QhDdGO%haMQA08#;Y`D#PgnuEeM_q;`+9l*V`9XUt+7hZ{h4!Tb0ZM5v0xeSZu z2?Q3b-9zqfVx?#?Qr(p|5WUPD{xh^;B`1EstYk$kW&91*9=Sl+nTu+}kn%YA2C?$&jcs|3?=l^}I->CgA|K&UB)<4n@3=)aJq#?u>7 zJnQpC!&d!90)4_qaI2|#I~N#HMr}gl7j!YHRw>}1NS-bNs|9a{Ijh~3XSVB1F&rtS z#Z(2%8UbKyFBHt%o^lgvn3%haYc+30R5Cfu+-6)6P}6%DAB5;PP~Vax@GV3ERq zp|t}I(@9ur{+mx$41b&*R_Nr-E`=Yyu0qH3?X+bk-q zWv(keYR(>4_`AXjrN9>2!!`a=F zTfJoCX1AOLxmt8u3}zhR$LhJKwV}^T8yCO`(pl%=jK*{}g3xiMcOIbAqf(3B$NwNFrv>v!& zUrK*WwTSZT1J*6OH%n#)ZB`(GmT<<$qqy_PG)WT%Klzw7sn0eax7ZX{g;sn!J&ly^ z)vV2iWvHVbTvrBosm|Pu51#WBfA3p{{%Hmx(Gw{hO_QA%U*3pj#nw{T_{bJ2N7R*7 zFT2txxJMcKFiEv@=~`Br6qTYQ-jup=ji%3on+!(>VZ`78NR@$rheh!uP&hQdzKdXP zrZ?K?%^ERX>bsHzUpqy9n|R9k%MUY-H2-EWOQo8YV~m3@xux)@De6VkBF5yf}8IjjDsr~~8Ts_kB zos;3#8@i+X!E48-sSucd{m^^*zIhS+kZzk~N+Hf)jaBb_+}e6i>yhs6lHJ9s3DW1; zJG{3A_1VHDgc?Ua3iqkb(1DJbgFdQu{{mXB*{s3otZBdFcK5(=k-plTMfT}UFX*7PD8QzX7{GS;_Xw3+Y-Fwn86W&4DO-(*D% zb8Q1|j#mX`OhCcyov*j%J$Y&kop>3!iz*T1o`Ofpw%#l|R4*u+5z|*_*zO%jD)9vz z${Qu%YEXvz*f;!w_{XpiM00={S(wu5wM7k=F-~Jnc~W$wO9?i}?_nGX4#vkC!{_t} zT?w#zHgZX`6aAB_=lr#8pB=w}1oEzLmoSmCLXo!<*J$|F1y91nhw=s9+)vf^;Z|D} zJLNr}9(EoBL8sX5TcY)sPoWRPoTH{<%mdi#8zU@ekBi3u1+YvPLoS|_(XW9PrfIuOB zZYF!PIF#$v)lR%#As^R^*CKwB>S+O*t`0-or981#*%9NmEpGPn+^4Pwk#Fg)R# z4=A4#0Pm3nKdV;~p>?N1!YV;GZT>UlsU5swhmn_A#hDn*m5_v;4oDSUj#MTOgU4eA zPdD4z{}*T~+%uTyK~TuPN_OzKZ%;;aTVgEDG_J^7oAs<9i@jI=tZESPYvnCal)Bwu zM~e|VQZi!y?fDcwV%e~A{=Tx?>1!36{1$oX)0d zUw3oiPy{v;W2{UU`O^v{Oisp(^`azIEhgveg`U5a7dLSRL;m9Ln>W}sI$mF}$t_+3 z*+Wv2KRZtT`v%EdX&H*KUdA4}%}Z@s8j1Gh!o$#>qV^cb#6ANZx(O;~Nlf0WlHCZI zd6a+G(c?E>KSH}#mDXETUpe!lad2ff84*X}fMf4oufIh4a*`cCdIspwixPMeH~vvh z|G!(wNS~m0LS&{sX*K64cMa1zN zKfckOQ|nJ@c8HswdBXd0Cl`BY+OfN*w1YXPyi&J z=x!W`oBjeC)JZoC>xiw8sjwtx5Js#_dcU^ofO*9Lx)fz~bu^KHQxm9O;vPes^^BWq zy~QLLL#1opv>0=9K>V^&)ZdBfDs~OGSKb(7Paz&5Ibf$B=%Y0qKJ(wIC_HJ=tF2mi zZrVIJcZhk)82_=-<~&oR&nKY1lcfS<)E59Qdb7i0iL|dYJ77J&@lKc)n%>1`2P7$^pdTtFRJRDK3R+SE%Np=AIxKiSqf0 z`)42*?WM^Xq#xZ6jJ)G$E6L#fU^oAR-<~1|S1WUWD01%wx4>8yl8ee3koLeLwSxe* z!+>gd*hXR`J-v%cfk|}sd6#N5R56_48cSZ(n?DTx;=Vp00KHgcFAWBdN)gLu3qKsa zR%|f#@yyGB6qca|C_D=eN6Ay2d~P%mX{{3Y+M}_6$=o!lwYUuR`f%`cM>(-!Kbc#b zj8fdoGC4PnbRb4*!ih8lq{$%wle4VnR6U-Oef^Lu#IKK8CV#0{Z6K_{>&*_ieCn$6 z;ubgTghJ=!nTdoo<->55xK3k$s-rylbt zh}pl7efA8HW|>U%O`zNG<+Xe)O4kQ}v$n{nE`twSOQHRgK?~Mt>1q3$>l58KP<=U@ zS)lwcEQ;ls6`Ry9yU*H-h&HN&7wYPwxXDbEbhlRw6C-km30(^G*J$fxyc8jikK4cj z(Ya>dQSDU1zZ4`z69c4*u0v&FeZb!1V*?!x)eP5KaCp21(nURU`3Ml>$0*5r)pgoi zK#Jl3Sy+i?wP>Fvz1k7w*LeaZ&xOmm8HQXpiInit4aF--B2=@QeI!;Lw#Co-HGa-KJ$G1z*8`{M1fXz44U0M|2b8NhOO8gY27ukyj5)A?;r}t?B#N zXl#I*VqZ@t?lQ#5!9Fd6v4`Z{e)C*iS~-=ww{{iD*`0O-p36??HP3tSiS!oln{q5T zn{Sip9RyZkn3!i%5_s|JKYcYLJ0yh#sIdW*X9k_R>gT=E$;jsAj5`5#MS9xpL;w-(;*y2 z-k)@5NUY`8;~>albdaI2Qf5>_MZ?D2&9-oB3b3+CIRn6Uto7XHPY>F@T3N~fZ&&x^kbvC zM2e*M^`uBQky6jVl1)N_)fUS=A{4iqDY?Gn1*5Y02H>04UW!W*Cxi8e0$ZFgs>XQu zto;XfgZM8cSA)T8bpzn|R&|QZ+@kyo*E!1TA9sBg`1nUdTP6~F9SOX{es?dT#@z$X zP~P@ol@`13rEq<)5&ZF|m|-FoH;Y#$x#XDg(5_zlzHH$j>NOUVlv%w=a_lZIIm$7> z5N1=X`2e)855LO}x;U)3zbT+%ys zLB7d&*=*=KADQ`-R3{W+sW@xauZA#gnzc-dEY4}}?ht(jp|NQpC2!cNF7j)(zcN#& zJIqo@l@S3+gpq!;r&aH6ncmr*cc?lQcr!S6Rw5}L({*kCNgqy2f;}&~mhEg}x#Xqau6zrD>@v;W-? zpe+MGcn2nL8{9Bi(KE6LWnF0-4vxrexYGgUs@j;-WIFFaFUI4^#VY}=EvlaOr0#wXTme4rUK-AuR8y=%oGOOJ@Y^~u zs=KU2lkF_BS#_K!cOpr~mEFc#4i%NP-*2Mo3MO2iU0o@#TLn$vqklm5fH7DM9{Z1& zVyxa#m1W36H*m2BE!V<#QX%g7prog?Vg7=F?#b1IGMbZPop)ftXB?j&`wcMX+n{A6 z&?=tB!dw-c0$xAFayOR7yC+nLFP~V2HE{RM*(s(y$bq;{Myz0V_vG(xELc{oAIINK zNOQ;!FF6;R+gF`2gD|J$&n2SkEXe54W?aDGB*hI3IZkx(Hwf`Y7=Ui0bz+Q5`5svg5)QO7J_sUKJ z!O28UdO4n)V!bFF>A#zxxTzdD=jp>F3h++I~a44?wv3 zCmxD&>2I!&l6Wjw2s&uiiW+@L%zDgHT?O(3zDy5KRV7Nsx#F~`n(^n5XH0)^! zYuR+jpuxZ?cX}77vj6@`)h;pxOfVkyB=LZzx_-%YnH^i_Vv#-sni~Wi$sZ}NXUc~3 zn5NAah{(av+aNAg8Go+Z8_K(zq;TgM)u8B;t3&C4KSjWH>romJRt8(QF3i!5Dphc< zHg+s1x7p$?A zOXF&jTSvqInzzdPqXIOs9PG&iZ}cWIqQ|rwhB64`RA7NCg*VWB7Zw0>=E?O>K}ARR z9XSHV915<~%lavl*qGb5e~2DAy>{$0Z}@!e;F7M_WK^qe`vEKP2YppQID=ARpwkW$ zpgdoe*}HQ)Fqs)<(&*jJ{bMsESlMl2=y&A5DEm4yjHECp;z?&L^Th82Kfh&WP=Po{ zVGzg(cx+XyH}Ie%KX1XqkEuuTdpM@MLR(&y0p+*sbVDrL(?(Ml=k+X+qYiG)6 z(z`hNds$NXAsY~yH8#QzrsGc>Xm($fm?Hbm-?FgVEv}{iJNL)569OT1IOdmqMCw^B zP)ncO{}R?dq0(QT=1Z>W7m_<}l}3x8wl63}d?6;>TA){zCJf2X$4frqa9P>|3!@^p zh78fhT4ECb})inyVr#>&UshzJ1SWO_3bdG z;h854CddzaZeYlKig={j;rSFFwh_eP=W7sBl-X^jQ|g*lt_j>0zS^dCr}wI0X`~}0 z>N+^mj$O=gjrrL5;*Fx`zY&puNHaO2bh^*ol_g6=;I4|24BL&5j<7QXTaXXj6PuWD zTs6V0hsVbrHTxy=^Z*zs-^XiJT^*atl>#18QV9vR%oSVZYVT+8rFZAqBdMav-Pu$1 ze(#{D+^=3$#>8IvBs%+YeM#5m-iOPp6QibPPd?IuC7g*|w?&gi(!1j%X zS;MB2zx#sBBryS5%@1=Z9=5M{2X(|*Axw#ZpP$-Qvh9YGG|D3CVJTWq zyo+EYd7>%a;Aw}o7Xeqo6VvC0tu9jg_FT}Zpfe|PrT4vvEs;E1dep@p&Jf5~SFJjm z&-+u82jZk0vJ(n6rcFas&|;H#$z~y{6?_(*Hnks%btd5X*j4pgb}FWl63O2o^05Liov{x!Y|>hEoxaHgr_ z2VlaaknxUDS^3@fsU@3Qtq+{Yg#hb-M|O4Z1R?_r;k5Z`hHrj42cZUW&Vu3m(vWzF zLo3SDP22(*IPXUEF8>`zp;pT7!h~qOjM=wuETs_pYmb5eB^DDgGB3`=rG-&eJE(tS z=v^M&`Ue&hSb8=~d;R8`0>56uj=ZH%H+^48NK|jHZC!s-HDR#J@0ouV1SP72nX<)ymxJ6g6Npg5Yw0)je3IPcngcpR^3q z{1v+8z-4}9Wm}HsVS`NN0+N*Z5;g*$ zat$h{=gTvQ(ad*r%4+q0rVN@+s-_$ooXGm}*4-6oNz?6ob3?81>sy|% z(wtX2D%ziV_AG3~Nx`b8*c3G@z=I+29F)|giDzXeK~Hsc9HB?}Gi5T%3g#N5;l;7x z7V+HsVKcmCB_Q9t0q9ovY=8p$qrtq@Q_ae&p`@o4P;)T8d)I;leloq$$XL#TxEP14 z;*Z|>gL-#6ue&hcRTSZHsjSleh>L$p<(ui9V?=ns9I~v9jYO6+DKHSj`%v}WSoXl; zK9_y*69W-~)$P!$cO;=lACoN&~s1%?Txa@-9C(SexZ<=v?O82nW4 z`+4Njp6|OadYAyFe(AyZg)p{d#M2G@ZEUzdUz=xv1L@iNBP5U`XWodz!OA#;`w&Ttv@2h3N9TspvrD08(gu1lc& z#hCg8B82_a6yMmPR)F>y78p!9xSVDUUo2o`067VwEU940jr0?VBmD!()g5XO{Y;sD zeSm^|Evl}1aa@d)l09lTjl41i>_bV4E5%*cG_Ld^kW(O9Pek#@jtxVSnmjLHhZ|TJ zCM;VxnWQkKw3K`BF6CU}7TMmrw1=0tvh1jO@y|VPU9`Pv$w-0p9=vp$66ReRIXOFF zP8t2{KW&%Cd>{TgQdU7KeK@USjD}oh@v+tDIUd0Irl)t2mFq$FC!$-t@m_y`6J>%b zA94Xl83Y?HWRGhUE1GaRG zyYeL;as)^<2-CNJ7AC(~L;ISRu6+hH)#AMWjNUb0m!vT3%%n!KnRt>Bt7}8j+^f0U z>#K&T43#D#c)0jX#vpJJL-2&`Fz(uoqkooNJ_#pn9We$^n#Kfrdp7lC8=~{Zqm|Eq zz%RDQ0WOOC4j}gWC0meKcF;;wUq7|s1`sybAF`xo1s-w0KdFZVxV2U#kgI@sv!neR zyz+|KiUtcVkwq2m%89&#cS_pISlKN~JA2X5Vb=}xKQva}dr>bnoNyG>c1iYbhpptv z6=^cT$hZJ^D|gxfPxgS1HDk{TXUMuXOE+a@TonLz#RJJr+m*`&bB##TN3dyOw}(=Z zWR)v(cWl(|YKk+4B`pSsR0ND6elFIqZ2nn)n!kBbS9>4!zgwv9aP7-wHegAMa_|&6 zcZ89OGMucp-84O<gi9Xhes0oozDzHP>VcT=&h-flrD=0O2{ahRAUFO`Ks%>kB^#W%vdTTA1 zVuwYk(8{`0cRf%0(CJhtl?7dKo@iUe>f_ZUlxzFB%K^chk2M{vTfNbp3VVwlbH;RD z4LV;yk{4s{6OwAKU=hZgYVZ_XBbDI!gJlBPQl0zrJF#T_rv2i!5ht>PF-4cLE(cB@ z#^Ojzf(N^pyrPKmKp%2^WB3s~Sl{p;Il4dLD7j`zapjq2tRy@N?^IY!%;>$<(6Zs& ze1IQTZIazK{4a0D0X6zH?%I5`+Yj8%HW&9$AoPKUjyt3zi`yc%p4JdfAw)^(bpi6G zU<|wReZ77^x%fIr9BygEA?MRP{beLaDwJb7b^fLGT8Hz8snnGPG*-W4$I-e#Xyt~B zJ=T~HXA8KWFj9ErL?2}_;QkT??=*^0F=6T~CFmnDCzkvZ^s+!0LJ1`hUYSsxfSYEd z&7aMP=RQBv)7b$z=<^0;VHt5W{SchDtg7SFtA7vE5BA1CBhIBH=y5&04wl}QQ@AT= zqMlDm`Lp?4N2y(e_*SU@#0bxKV-yk{T~N9Fiuq2L{7d{#Rs86f9lfSf#}!7B`me3O z+1*_VEaAY- zFu%uBw5r8~;$Q2auuc-QQ{VM34FP(WuyHyH=PHPlijLKM;v!Q)Ek@CK^O5e>qjQ_+}HobuuP^W(0m6*ptyaJJkg9Y7y2{=;5$}&^mO(k{7(ox>7Mi?1`Snr`OCO- zb`y1#Goi<;kV&}vKq8wrN+NJ123d0z>d{}Qiy7Ar0=>(xR|@dQ7-s95axpEG_vTL1jB}}yPeG6aq4V2F?Nq{GG7l3lUXco9M{VmGOt@eWpGGe}z5Y$c z6J)JzRBdxLtesZ2H}pHB0>^?sAw~wV49b!e;k0HPy=5iGBj1kfV<^T+&aPg1bg}Ch zu#p(HBUPkc=gpDvK^OHLLYo+0gviYutf;$!kEhpX;^%8Kt{(hdW>}$NxkrK!(FeXTfbbZ^YmO6UoxF zf<4Tk?PIGvgD3fTh7)jLURFWv(ATA%bA|Ms#*wRt_`!dpNikOZorzmA%3kb*`37Fv zrOv6t)BvZb@DO?8k|x7oqBjQT(gf!EUlNV!meT)84}mHxt_vMErk+|^)fikw4PnXK ze0m*pVI4WpkL2LYE+SxCL2ovhlK8-h{TdAvN#KlRkgxYYGQy@!naO3H)VjZNRyCj? z6oDn}Ct({0KGe<*4{<78EJsbYzF`UD$5vs{sD&^k6XNvIscT_O*ym&6u$*QKb(Zmh z55%il#<`XVc}+)(mQ845XPRBoxp*7D`>Lt-q!E-LQ3Kk|w+6mDn;#H=6r;XHB*z=j z0?Uhj(|WoP|I#FCsDEzt|6RwS2{gK-FRSd`MI+cCBj~-^OKKRWGj}b5shsL?rVWE; zw=uNmHgCzBnl8))Wdr0@?E|oSvggTfP9t_WuFIaXU4{xLuj_3XL{I~@i(J9=ZAeFK zR(epeP<0R7$EPNt{>-NTWdY`9X$M1Ebn zn+cT`cAUF-C)}~Dli&~{Y1%1E8eJxBc!|S&tZ#nk^3(|s9l(iw$yOi$D?*!KWD`=8 z9D!X)xw?#cvC=igjcL4nuglpJzJoxkp_qsMnJB%UNzvK>7aa~<7g%B&oAR87tF+q* zaCW~rY3g*sFV0%rS8lkq4(+$}@?M(_-73)4Ron%TSiViZ4*jJ&trYtST3oWIsqcLs4rt$x-b z$NW|;Yqu?DSIcAO!M9_{VVi+-vpxP^)(lM|1inp4Bwv@R@~1A0tVJlL(UFilMd|)A za-TSNY(9OB0g>P+zw7>wB&mB3B*tZ#uf=i~QQTcCg9_feK#yentrj5j`|d^48awR@ z!EFw=Z~YugJKhg5&Nd3@HCM?k%pN?D8jwYIu}GU2UMeF8?S6jCw59PqBvaFpHKA^v zC~%oGY45q{jh|yn??Fx3@Gma`y_TaX9?g-2*FtkLpB7EVfa>}IGoIZkG7NjK0NUC+t>{5@ut(%p&QNta=ufzI&--v1} zQ!74}f^(R0g{(jlDthzKe@Zq-z+|IFR@zquCxW*Sq`H1x0}h;8?*wI|v|7P|_5kkh zKm4aT!&kjub7+!-4d-I!b*gB!c=TGo7V2B3CSzV6A%~SVfq-nyo`bXKkCZh{(AlDm zH)&{IApC2A9yL%Rt1ZZZk~F@%j*GcYAZD;59GO6vU|V&$VpkXWJ-$C`E~ zkE4%B5dS&15-Wu2)FQCHZXX=@R!e#R9@0W0uG*D#+Y@6b9i5#Wnn1`h>OQN_VCGn~ z>u963y^}@KAzz587=K=Kglx+Zly{vaOsX$&k^)h6R{iL&TP(n!&Z9^s%r2rj&WH@T z+^5rJ$iDZXRHX4x^cVIoD*Dx~G({&-Ky6*yBiU)BC)Q+6zuzPl*Ku(^s3xCGGDd6I3l<%%9$W#2Zm?a2D{gjY!7XgoF4U z?7wT0!EW<0O*ruHkrl!>x3j)UWeUxCxn))xfUay4`e^{}^v6&ZIbSuL~Sk9$Dew13xTV&@Di$|JT^Z0fP zdO3cFH$#kHwX}Td5$Qq_uB6Fci~n`j+4Sz4Emm*>?VMe)zLcgl!${;@UE@bQSM@VE zBoicEb=!$cVR2TfTlpQ2kc6|*NmUbSxRM=d?a9($nap;_K58VR1|oArD;uEDEiFUh zbFCwmow+FQTB~NEr_%XF2f^y;ow6O9-J&0YRMM~zGfuzu+;-BOKqMEBq=&>*1M9Df zstMRzVz0}_zI-GujGwS*A{}FH3WU@f_?KGnH8*veth`&0aG@=S z^3ZQ@PCs{tjDp>7j=k&fAEJ&wv-#a9N>QFd-ET^>{j|{T_Mb0p#MTXKz>aJbW@*>> zTufL2U-ML)ut0=W-YYy!-(KjUn(~O4DH~geV#?>fs5C~(;tEqlf|Z!+ zKNLPa@tkzmvVF9^?Mh^!G(S6XspK5P+%9fheczvoUz>ZWOif+Sy|)QBA%DL6%o+76 zgfO6~_bPJ%Qz^#e*T;|OjV`gz_b#esvoqOa%xzV|3mkUu%cLY(T#~5wj=;sOSmjbS z3;)~A#}Nv`5OWXBZgqikfl~ej^qHF07t2Z!QDtKrXdzzI?|H4my z2`84VJ;5LOKEM{ixXP<6s>Z+Q+dmNYQ3$hoA&KF&4%YQ7#+4j{+(t-D^rjf(J#q@h z)_v9(Z(Q}fVB&@qC%*Qt!BCb$`r{HVYh>YMO{S};*G=IZC4@0XMjHRUM~p2G4o?BS z#wxi?3T-))elyNSnsE1qfUNxV;5@oWV`oY9WtLq6PJFIL@zif7G*25nbb_wdkrI1@ z+T|$o$M?fYg!1JGuo`NZWwt2i`Kip>aqo^NG6!x6KSDFph0xK(tEk#iP0<>KhE;?N zJDKcmAu2)A;(IM@Jy~QwXwJ8V36X=m3a^GawU=pji-O=}7-KRE;y#H{*3Deq54lBG z*BM`(W$T%i9znKodBxUc)aue0HF%4L|3S|`79wKvGylZtjx0YN;%|FC z#4nB?MzjLA)$SPw9~~R>~uI;U~PYH1C&OQqb9|y=f^pJSIA$}6V(bZpF_sNVCa4_8mGrGA3x?zW zw4lP;$nHb+o_!e=j00qiU-7_eQ^WdJQ1bUllImTs@YH*5*38^pIPIcqMJz7vY`-}; z5^pc<16)Uj<$ZSwgh=S><(SU$W_#@N(en|#)zdg(zOh^s^&Y{~K@^;m2|PO5iuK<& zqqfe9Sa%0rROccdl4O`SYOFNj-kc^9eNu(!;crmJl4(WZRLFI(3?SuE=}oUp1^+;?a+1Xe?->dWd>mQnd>|jfT>o~7mo5r~CE1a*LlYr@E4dd#Eq{N-un4RJY>@X&S zfUAC}Bag%U;lopJi4`B13G)5m&CAV%#`8hKdr=5Dbq;kl*DTC7M!)ht0dxi0Pw=$V zxLRg=CRBa5_i1uGj1rD&UPH?iD?R~f^`x@SuzKFv!?v==U3|}5HGEZNb&>YXjBdLg zufS+ZnRWHV)j)c&x-(YLKP-EeSML zPT8w>KlZxpd)v=?jTs45Rh1=l0!s;0tZnw>876cPYD-w&8438fVk{|0DX^#rC7LOP zj@n%-!NfMF+Tvo6&)pp%FOV?k^r&F%4t}UD z`{DNQ9etKpdU`)B2Kv_}rk_}jE%}odb}-6%Zf8s_AmEO z$sPwea`@{8JjW#FD7y1!QQX~YB}b>{58;P7;k@nbf?`g}6)L0H{p13%_yx(#itZF6 zFQF)$Nt_c@S5N=o-5l~E?e7cjovI=FULXPkzDwK zE`~@Vs`LA>nYvb2Ge^h_at75$`Ngr_tYo6TDcf>#vJ~$GFRoJR7F7Ruyx8KYu0G^* zH`0+8>4=T~cC+wAODPuK{x^WJ#rtjCD(ZEci)Yq}Z@W_=_I(PAIE4-85im=t*B%_wvO;1aWRLb0g^i~$(_PpkrX^T5xM!p>+ zV#;RWHq+|bd%0ulaBg%+#$*6gKayJaD5UKl|z&*mFOLH5?f@T(< zGH8tjyPE-%_tr6aw5SJLuT9sCl@OMQa0rsbhBt!9soRa!%b2t?Dnra8>&xmy4NhiORZf>YND2U(SH`!yX+D<26RjW!H#`{P(a?zJk0w_;? zT=q}PfNwAN4?MMH@iY~Smv_v}43MDTHT~0Ff9v299fVLvOcjeqNR&6Wck3CG;45(;02Y_LW}JAg z&d-aWM(9{xIE^iD>k04;Wf?7Gk*xCgzFw)xqn#bpje?S5-6g=|amH4yit zHug?TFrdid+;{HS&_$2BGV6ms4uD~leEW6pD^*37$)oktc(IP@y8#Rg75LYL%s;mz zv?U8MhZu9fJ``_;KKIe>YCG!*l%HoxwNdQ0y8hyA_65C304U1aJ4bbqgK69Vg0_5m z+2mEjq-LmvOOy?$%oNM)ZmwPInZ=@dPZe=M#h(7DUXghGTEybRn<=q~+cUbnf}A4b zBi^(8)oYkwHn{R~H*gx3KWVHli-Q5HQXv-iXxyJVW@oY-;QO=KrO^*z4E8^*P_2+a ztu0a;r6F>Lc%!Myf>{zm-FN_JwifYe@#kDwm^LS$Zn{O9uI0t}78aDCs~8f{$uOqW zQiJ*Ec~QBv)_;W&lgIjQP%gH;1B7s|+GW4j$SkQB3y+SU=ZE&}z5;93oWFWstRaXT zxTDcC<}^`tfAA?`zjNr+oZDIxZ0aU&5@WbhJH#W^K4$tI?4} z$1f84wI$(wxJ(7GcNqG72J{i!dW8+@Cs*Cx0W9+BHeMg`vE!qN2k)*<5WhjCl_nV{ zWoO4(J}G|CEl0TzchS%A@=ydTtFyB$nmsqiYe)Nr zTq7U>gS*wcbW~mbcmrU`T+)#1vOc@!#SIL%$jMuB0k?+U?C_DJBO7ddI5C;N2vK?M zT9;lYsuIE+Ks(la^wXJjSCa{+aK0T?7**KyZFrz z!)wJUqZ|B+`>#E7NHAZ~9R%0TI~FyeF*DSi=cPvDTr8P!-mhmPc4;W`-UPhUQuA>C zO0h~nm{W+85eW?w5mVlS|9~>(ERwBddD$Jc8*R@dzsVh2hrJ`8MBn?M4^7j?)q7L#$%wM(!LI_e&B9Lm3YoJTq9RG*YEEWW zIqp306RAoUw{jKheBJ8kjejPSx_bKH3WkTclVOsNacy_fi5OyShb4Za!=Cv~ZT?sj zqtq>=@)K59EN?;?;^>fqs^O>2@>Oo}j@kRcBpYmHEH&H+a=U`9D|+Vgi_P%uo`17P zN8ZM3;~yZLM&|#KN=-EQb-R{Y`JM?6@3Ke$>RMt2TfTP9s{^i zU35oz@iZ0Us(f_M$EvmIlv2yhlDWbB@#F4$HA|pl`Cw(} zc{?O6S9xWe5F~Zv@J)uOS$=&K)(A%Qy0Vp@Ps(zuo>2>lS zYHVIHt2~IKK_JNb_M29?I+@_&QW{=Fxxo+GZ~S#{%FcQt2x7*;Uj7*4#TNgF>%Y7 zLCu{i7tL7hSdMWsbbeWUGXLo59I+@Tx;F)b(o#!m5VBG~^PZbK&a9NtpIb() z!H8nWcvMvRhvAX+&okQ|2w3T~Ok+y%IGRnkq9T^wIDL~!%bi#F<;Uv#28ELZ$adue zJc|5(dekpu_UD@xWj^k;p9ioX@dnn#AZu>+q2V^;7b3bkXOq`&cUB}=Btvg= z^V4A*;ano6o6P%2{qLn^2q%XZ8Jiq=8;2JWo{mxLM*J(mmt|HRL3ueod|ljxI%fpa zVX5{&9IEE#St=tsuHeYXU^XgUTr?`jy!{|nje5-^r(2cmq~wrNE7?7{C$8K*v5$lU z1=01PMn>F+E#Gt~Ln3o8IM33ITMsTb9l_+n@~ImUq6~T`WA>qr@GirlB(hTpL+i_) zoaY&yPLc1v z0F9~Lzy^$$G{FCun8}MoIX*@anYp>K_Cv^yZurbZy^tRc2GzwWs>#myHl1a@a)*$`#Yp3CB+-1MKm!KwB9(}D^c z)KJCFY4tC*XZKq&{f!2*^tsXNocPe5<=G&}1+m~CYE`&i_4Kz%DqaEzi1=?lE(mTP zM-B+x;U_auS5U--R=)j(LZ+*G;^RuCFM7PZlMG`)c&XY`K zw5LVhY{|SWTq7|QRqr&s>DjeYQ}aPWyn4SelDi;=Ovyc=!2 z7yKre>qSA>0VIZ2sP@&|KlUWFiyEBy5d51pBWN`|WaYN>DV;J5PnvLE-G5GsloV-E z=p{1JKsHN`Rf-<{UchW zZe*k9tGeWVEglmsabX9t&O);kt*4G2MsYScZkav>6?Po}Dbt7r1$xa!Z6=*zJbj1h z=?R0Yd*!1y3rB73-Mc#!3KraJ1l9vYKJ@ifdtXkI(H}T(_^`o(8W#+u`A??b3Zc|D zZa4wJi^Gkgg5Kil{9F>7Idc9mtiz1XPU*<)uGc$YZkCsUUHh;|f=t$n5I&efebh!I|5PDVh+5VCk=vJZg7UJ;6&z;`*-mM#dA}xUj>kc~QCnAabIDr6 zH<5dC0u_awS2A)ut=kXRBCqwD|15(6wocv*L*ip*sEA+u+!Rl*mi~P!nEm`J3qjOi zxKc49Gs%F@ta9=u=yPHcPQ~K;UtBy`drRj_T^7zdf1z15dqV>glQYiJ1{H0FQ}!as z=`f8#-8+llc4oiP$k$h`?EMwzl>7C8mY3&jO%>2~zPkCJTYbmOX6BEOt?1G3q#+L^ zn{CbYJ)mV65Ral8*a5W@SPPV3bZ&F-*gNQjxt?>~IA zJUYpX+4^AtG&cTXpaSo^lhPr|$i?L4J2`6qS(hUF-JYMXktfPNHN=<#9{t^e*J0#I-=sEx7>0gJ}w&TgkZ8!TOh7G6FMG3Vhod|qk zW^ah&a9#dvdR$Dl)kUf$F^9P-sJ!meB+c8IN)cDP6NiT2#MiQ#3wgJby%WN&JTt{L43IvYGz3o=| zFb;^{?KAE3iqnuWa#Wks8fM$yOS&50_Jt89_>inDv<=2e)OM1{yUrcW#hwp9g(b~S zO)=imD#1b2J-TRM)oY-lx!WcAX>0{rWH_2$$Bbz()WKz5bQ^HRvEdD*W-jcHJClFq zjpuQmbI(3PPDzS37b=^1_?0d_J3g+0z+llxiY0MwD1-@v&{#Ziy@TgB=KNYUPLfYm z^{z&3wtgY;I3lfi;LGZ#4oMzp*)7b|pWH$##8MTDlsfj0a-`u#Ul)mr^J44RJ$3ut zXSXd$Y$x;c9h0~f2G-#qC5$=#l+>kpHsd$iyMr8JOF#6F=F>aVqL`w~?A_-#z=J6- za|5YgibM<%8xlD^8H~H4GT$Z2N7qlE+pNgO0HAy(F|HzkhTjfj-dpwcan&tsS(Y+S zj@Et=Phmc+#;L^}8q8t{)vu;LW|vVLI7FnTy0muY1KR63jD$G21=)`Hbpi78W{Ajp zx4fCF6OYZGT{f6kAT%}1fvlz33fYA{AZpNSRbh7t`I55)#P3>)OYJ1c zn&j*@uw8(p)8QlomQ#&VM@L?I*;zYURt^Alm+F!#B>3Y;ot*$L`b29f!H1J-0x(yX zg6L(Xs+#XlQ+HRjiL)xAfe-5WaULuMx?NW2caz+M4GBjvPn*&%Z;`}kKl|LlN=4F} z*@y3UoRepVybC4 zu1OK40EW5xmsKyHvTei(w?wtCqm)- z%~Pj<)R(`dCRL4KFKu|eL3dY^v^B~bfj?@Qu44=wMb|L+w!@Z738JfRzZA}DpPZd> zVF+|${O+zj22g*a%&S&$b0-@ySe>`(h)G9}c93rTt!a)0jPSl=;-hb3#lrR4gcm9$ zf{8@qY*+Mmf-oI7KCAQR6%%nbo;Fv{D1OR_1fzu|x)Wx4G(O7Hy-HY+V8}^8NfDI>n_-SwF&~GS!OV zP=c?_p+#rZAA&c4|I`^lZ;t3~ z)ewb)SbEnl8C=FZR+E!HN99E2$FuemN0cVKO2qI1NXsy~* zCu}*+pF40LKRWJvk|J|%_r=6GIr7CoL-lQ2w%9Uf4(=yE{+`Fzt5?DaHe59>+Nqqs zncs(t+(BZpK{0{NhN44B%7K>pC_jG;UHVwY*?+KDP%8HR;G#V#M<+Q zP!hJ?xX6wJ*^nUU5GcHYkHcgr@;Ln(`0ydD$8?L^j8T41t$5EJbGARMCfoU{CpP%m zV3AZe#HYF@RUU-8TdTT~G{5{HHt3GqU`VG!=pd0BXfB$v7n87WA&soJWR}dbf$Y^i zID1#tMi*$fHX+8}d6`qlKx(-5kdj_*2Ru5}RpK4uD`v0pM$*C6)?d^!yM*)I#{})F zo^*&&YG!1gE}E3RNT%kwE`T1ja>`!3%-PO*(0O}YGFgZwOvV=VBEPQ}tbmnk^z9U> z<|fKwtXy;$Ai)2R7c^5o#I_P&5EOET8d^;EI&=zmnbd3<6(e4^vJYlXtIXO{hOn3& zFx2s3Vv4hFVpS?_*FuY9IpTz#SE|Sd`)Q=iJ<&9D{B^SRY~v{M&N$gsQN6-w4ECfs ztaNgYu3v+33H^nJKX})Ee)n)XyaqlUy-iHYS6*|vKm2L#z(MQ6II{Z~;m;x^$%dVT z$xJO-qsd=5A{(~&)kD$}*an+kd zF@9We$jfH#3V4IfMQtaxWh7h4q*{IBDx-ETv_Eo}c=Lsk{h~AVz(48qn_}C3@NtDypESL8#a%NTx=CaAo zTFDK@13^cz!9#I)HC&{WS#b#w-JrI_JdX2|uExoFFk}igO|qq85^8Qa{n*L0|3La) zF6DPFoAMvgkyJ2$D{Qf5OTxJ&v|PL7;?j~AwlzFtgWPM#yr|<;+~-@-V9njJcuL=H z_%bAOM^C^ffmncbxXWp$F6gki!J?dYQoC)!8BA{pEbdoVR>m~FG^{=iMr%UE1~moT z!c{&;gs1~|yo^4rr;eop>zaqbjS451o0b_Py6vmsUBX>rYCVK*rKEqCxUkWrGy9pm zt=T2|BJM6{@cVkJ>J4N8Y#1=ZPNUTX(Sm+Z`V=$mT}AlL1l`?J3vskW5sKor#y08h zZqgaGxPrwwU0~(0e!Kmn4Te_mX4O0x$U@35qVChjwS*yophc=byNa=&etVQdwW9tj z!FmW8?220L{ZoO>X%@OjpZMI~vT00n5hVSS`=)r7Q-+T3LH?s#Vo+{bg^8@NHkxl@v{1d@@Vu2n>CAbysIJ7Qyp%{(Y+ysi3 zSp9a@W*6JY;s2A7S%g83ytWb9p_9OUY?)J?q4T{6O7@oaO_fA;X6(c%$_m6EXXu?B z1%1`*$#09n%vt zp~=)0VBADy-6qRBG2)z8@FCXE7muzO)bZ8lZNT1i5S4ofBhTmasTP`;)i7_2my3no zz!}J*ui>8!+Yt{xGJjeuvHD0nGI<jgZfKotxpLK ziyrZhUx?APSACC#m)_=Us9@vkV2|Y&E+1&G_JTnfgC(PmvUwvZT_@79JKB`kqu1%P z-<}fsy@z6E#q!N68il7-QMkW_7TB5rL?rSu0^-7A78&b2K8aV6& zyB;~=rB_=hvK7ndGy{$@DuD(cuf8|1`Z-%f5M00Zq92uKug#@psPP7_=cu6P*xwK0 zJa!h5#$xtltHFUmy+E;w(DO4%VhJXQ5+GzYQ66=wED|3v{#4DD2}3(Kbm{HI`o!P~@iVRqHll)dDF zJr?DP2JA52YU}si}&3J9~mbf;FgtJ;NJDw5{J>kQSSgzwqpJq5T!X7^u@WkZz|0zb#hlfZZ*jC zR+DykBfDcG&bBMByenNgraiC=@Y^hg;=9&sAuECJr~#jxtL3DJK`Rq^C;(h5bKQV)2q@zSBbi>mV)=y4^d26$aHc zcjx0!+pOLTQu{&ojf@CMS^4gMFXbJ^yqW`uOLA&48F2^1oG@P{(SI7X3&XWOixrt2 zcl{+7P9`U5h=;RQC6u$U&!Sc}&zZQ9@gDg!9ppR3Q!JU+&-l4UnA`qHV^aI)MgZN~ zp=EUsD4rmtTD|gqdk;E)Rz@6AFptyny$sPsO*x5uS#-M!Pgy(jT1av8-ndV|&7TIl5^1UWK&sChJ1B5nv*hAohu~ z(a>lwpH@%axElU(!(r6bQ^Om@r42cD<(vW~BdO*C_@=-y-~xM0mM%^MNh_;hXYtoA=!mlcWbpUFnP2HMOeVa zH2_C#@tAR`Gcgq7wfjDu6P6cztOq2E9hn;rPlUy)5IdvZU^v?`Sg_%1A;-IYPc)Q~ zWI*C%&HVO&oHX@*$lajZ9ABbt_PSo-#L1dss5;>5V7D3#FAul!-nc?AxVijQrc^GI zqj8`@L}B`?gLvd4{C^hq;Q|#qN#a$uvx#%*5EDEOuGG^#mz)T@!z3L)88FM@SYOum zCM|wDihAu9wTE{{rbs*z?#UkcgMdPI*JRt)oUS$(jgm~+&WqF+$x9kr(B2%NS~gyS z3!`dE--`k)kX|6>Wf?B&F?~R4_gvZ=1;~!UoVB495q+6;_1?L(t|jzK){1@^!=D-d zqRVsZw6VvfVQj|eFWYx3PFk6%{a1I|VM2*NB^X|Rl;36CC13&pNTMA2iHrO?`@yQ< z-mhbO{gT+qYQR;w+7?cL(#J~ZsJ@`szO30EhGCN!6zrTRsH~l|9o%&q9ohCU)EGZ| zdo=aA>TPEc%NhN)Wz%$R%f!w2$$L$uuEbt zKG`?TwW}K-aNHDuT}_!$i*uoN`f+DYH_2<2kz9#w2P@eo&V;iiHYhm5a|}b$WetM< zH?{6l<4kNa4r{SYSDylwGb}Lg9_jI{b@*;X@c88#UNeU)sQyZ2ZLyyuWR*e(nz4sX zzDVM`#BGUaY+xaEm|T1N?nf&Ur7|5?5F}7+aDFLg({oEJonPjrYx&_{nop02abR&^ zI@P6s6&=Y1;&kZ&-+)caP{+@t;zf2uIHGV8)LgN=IkA8~wrs6P9Qys>*ip`%qR{>nrqEGUxAypjShT`Hk%MilrFQT17-H_Vd5=4Q>l_dY;wRBjyWm|zX}Ab)or?8Y(^A|w_1qnTfOw6I_|&bF0K`HNJvKgg>o9zp7XYPAWZ=GZ zehO`(zB=<1y|Ot`oLuAPHXE&Duu`>!)wA#qGyy``V!ld2^j zTfoXfN6{qEwzhk!DOJCE>v@Sj95=2$vK!Cl;ObEqUNGG7^#sY}(rH}?3CYWJs@-81 zH8zGe&lM>&VMSVByM`N2EGhzfNE~qs9!;8h4j1UM4h`EU{Caj(t7cm~87I{G7qA>V zh*tjQWm5lBczu-olG{U+Odq#Mj!0ZdAk`c&3hv#d04d(o1iDCr@~YX_$K{B{TT3^e zzzlpt2?Q_M7$+=OW7%i`TMpbE|JdnKDU%eTDyjlMqw5KGnm2keYMMQ=EaIkYwjoQH zr7)lT`S!O@IDz&ue;BPm5X0$1(}X>z2JSb7oYUUMs!23>xUY5!f}J=5#W;}X?MN^APhF;pTb&;k9zN~TO6JJx8b|!}&6sIj zw}jab3D-|WcEZB?TRr!T4-@nA?{KT#|0B! zI1zuuOHmduQ2$WFwNdihyyR76xv-i@C1usRHw{6=Mn|`R>E9}GBANkuj(z>$YDxQh z?d0{M#>YWIMrFROf%tUTDjzQpf=VUQpVD5IpV`~-Upn?J6`p=&!JokJ33}h==h{fg$E#pz;imS0udA8G;O9tdtL##%cL&m`pcD>IrkmCi>4T^NYZWVF8c;~_F*rgL z2~aa54j4R-PvwuFK0^~Z8giN5z9c2|pkI=3)jNVuafpp7a&^{Gfp?`Lk=4#D=Qnpl zlLJqQsTY!T)zY=Z)BO<%P|ukieeO=0JUp3|(SF4e;3Xw9tS=I;&~HlZRJ)eA+F*XP zB9i&fX~C7p(`;oN`jsF{=z!yu_XWHii$(~vWMrBz`{Bg51ontB1^?IyC;1T1MRHs| z==il16#8O!88*5*avP8uZVo!fjqpr9q-)%C|5Lbrlq^BP7jvC}?+PqX7~&-i!Qy(A zd=l_>AU=aZr{b&2nNS#)pOLn=W2y8={9v|VEA?1oO}jKM-M_*I0`&d@X4+3u!#t9OA z5uh^BsC8#`xLwp9Qd5>>#z3?3_GpntO_>fq^c{NZ+vaY^oXVl)BmQSDaQuWF6fzUS zV-@MbDW<m^k8d+Vx%H1_V$h*E}};v?CNR_nG$LhykIi-))Z zy=v_-4y{gKW20v_xyiW7_+Yc&-D8ZKlwMjP*jSd9)oSqLcCPl+a0hn< z%=3#qKU|Ju`4%0Wg`}5BZO&e^wxoHU)1YD8#Qbo$Z+o^%04$ifmX60&i-LD6<}*c+>%`cLpxvxY!T;k>UCS6IY_ zXxb_s^3u=id&isi8n~gKp#b!iP5RN145FGgO&bQ3x(iRF?f<}$uWRh>&c=CRDWw{| zYQc7Yl=Fi>gt0sQJ{w;6)xoZ8W~0cvdhd~nX!gP%T)6;8&#CuyDoK!JOF=KIVoWN= z?yqofJa~l#wAPAR0^H1K6@}1?X;0mGeF+`vHtoFrI17ZuaAA68r&2-!z(cNQkl0iW5R%M4BHMOQ< z$gR6@Ulyzf7wg9Q1jRVmyE71>ojq<+&?D(E>d0T_n!-L(%tjO8K2#`VvFW zTZgEb?DP`kcd}dKxH7c}`;8Eo8L)G8>}?HjykjnEN^-!2yhQP?D?^v+tuKeT=qY0@ zpZqh0#4vOX`8@7z-RE{i0YQo1lS^z}w#Y|6MyiGYInu7{Qgyr*HVUF4AX?Ma_%&EApl z;*N<&p;2WBf4tMo+AERr9H@w1Defi(Tl586;h5=!+fmO>J= z)c#hQ^ws5=;~zgqhVDXs`4=T;?SC|)S^8ZO6dfq|Vyt~%xLSl`oH1Sf)(g+00RCLX z5wykMuYhl%P>NW_Q+0>GW3A*w+6(K?W5jL=Q_`Z3SZp$9#;|@!jTDvYzViDeR-lTH zq87@#StZ;!t4+~NO@&CT-vy)S#9aZ&Jdzvq6m zsq5ei!?IZ`kiHaoze2C#tc0eVN@y#q-Mo<2y9*O)O!X1lxV~mpX4@F{h%f!z=iJ|m zM*YC9BAbH%s33z?e82gn7}X&xo&I=IvfaQOU0Ky<?!C9uT`~p}zT+cRwQvrY_9DvOqTg zEG7s_dlk9;I{+62s^kDj+QGVLowx(0$)TR0Cqae5MEZ0w$uJgqNN)}gcUT>E%bqNj zSqtiGCaT7Qi^^U6<={_`7TNQ>KFm%2j=YBA?$9n`4XuyrHHKni>j%XjFQ+`~V0#k5 z>F<}@>tFWRe34t5iAWB~qZnxr6)A0>o=S#%cvcJRNJY&mJU>=XPS+OlyHh}uOg}v| z=mQoW)GMbv-JkI|driI%qpQhEJ1kLg5Ta%fVlp=so|z5rw(H8L;k-qp}-N7KFe@P}3A9vpVK6<)f zB^!x@WE30cbfbYfn7UbVIQjgGn4#5eUF^L9PWybQoCU`(Q<8^LbEfO7 zcEJpZFI$S&kH5*D@fWYzm@fu*i9sp;uTlL<< zYu;K&&C&%TW>j~VV9U5H26}B#h6%ORWpH>HY-Wg)vbCh17Si?s_oC`h_$zO#W?R*u zqgrSNkP%)yWm01pVkTO?u|YEo0s?k6)+T=L9Ltv71TJp!1*46o{7hL5bD1e5fDW42 z0Ka_jY??A{XPiezL`Vs?OyP(_8>F}0OX?_X4gL3I}XuAb7(^FspOjPOAIqU7R|%U*-nd)iu%Z)T)x^KoA( zE2i{fo=!UIgn&D=ahoe)Zc!JPwLIVd4>pJ}#2C^Nt#6CJRoQP6z9nPZISdu7qPVa9xZ+Rb*{J-5dclu?wWkqvV)vTBjoWutn_ zW+fSvR#Eb$kVuEap$6WsBV=y65^1lZ?jo6f+6pCc=-3K806+JNNLs<6C-)}t6xtXbwi%)R@P7zMO3%NlA4ZP%fogHaunpE>FeC$ zbpBRaQr`eN+J*iEvx|ph$oIz8Y-7nP7G?Yjf62tfG`>*f#v=!J2kqayf!=<(pG}q_>EgRHNVq0#rW~JZ~$SV8co2#9MznV#L4Y& z)H!`c6B%~a!WR&Fl=RDd+`+BI6*8u`ES}VRB$hMj4O36mo3IkL<6J)gq{wdix~TLB z(!zAUIip?m+(#n0D9C<9gqhvX>DD&3p>(Swdp84Qq|_KJE735j-MEa^h=IJ`_;sFP zh3U=25eJWSW|?UO+4-f1>ryl$BL|IY&G-7O*joY5=>zk+HZ6YJanwZ0np`{A|M%v2}h5h@*mu3gg#+8GN0m1(TV?+tlf?tR0A$P`P{6M+GKU>C}+C_TR^ z6~2wLXojZrqDi1?NobgZL>>n=Bkhi%Y;DZ$QkQU{FbyDJ9=Rr$qP{tqh^yk%uM2JG zLxjOL-?<=xU?qnN{&sWE{66!wFQ>4IdQvdlfE-~`LkHt$%muL@0RJDDTjuW^Hk~$W zVfX`Qqr3~#BT1mAMH}yLW*fke|GlLLkyon|>3rUxRArmF3$MeoZR~=YGeeXV(y9~1 znpxNqHXBvfG?*D2$Oh%6o4$tD*4n76po-OMZ69z8qcv zM*rCiDN$?cWA0X9`e{fn{+;@l*;&r;#SgbQx_#ne?#$p|23l9syz64keYiHoW9EpA z_Jj!Sxg}u%<9%NY)C3MqUa;=@2Ab+ekogoxXL$F%VgCS{-yampTbF>jH-BrXVg%iYr6Jo8oq7XZc> z#^27B+x|8K#gc<0!&8k7mxi1HU)Y1OeiSpRsQ9Sq(VgiQE7cFQ^s>+Qft^#k3qGLG zwSPT#4cMQX+|!k9IXz=7L05bDc6bi6C+wjGIbWczTTYKo0-ot_LGO4W&2i5UpOI~e z21R3aGf!h|HjuE@()ZL2$)bkm48W{ia(QL{ChDN|MZSO`zPhnt-xMA~(w5arB(_if z{`ht*1bmp);RBXO?aeDYsk8VZVz?wP#D1bntcm3A>wDf_;CROUO6RWD?CxyyxkU*Y zsu;4bl*N4YvG`B+w2{n@bSu6gV&t zIH)ha$lEfC7*{m+bJA-6775c3^o%u!wM|s~6| zda2Lvp!=IJQ)p}BQa=i{de+apAY3V|uS^|;g-rG2QPi8E=TIj1y(3;-$^YauTtjn}@Ig6M}hw0jSO6F*dcomgh z3!3J`Wa)*_fx#2zufs33XRahz9dG2yBwpIk8|Nb(EODCFH_*y6^E$LTe!^Q1#wS4^ zQO@=&94zSOW@F|ny$%WY;Wmr#VwGxhGokDg`s!lp4(I3IDUKU2e>3QQH*b)6NYVc$q4=+n?Pg3tiF=rkv95tUUub*!V;_OEHUuGwk#1fn zXYJtp^zbDLS~fVtR%t+7s;l3VeW-6gmpQ7qYF_zrF=}Ra@t0jAU&I|Hz>;PGfwL*S z!}-PyL>8YIr~}WXJEt!~U<%#pXTv*A8 zS=sP=39a#&-VcRL!p%j4em#3GIlK>Gw6fxDZLgpDsn+Kq{z4@^^iD2K>aXem(jd{x zdUZ!%kU}Y{=#0i>h@qS|n8~QMybt6RZ8D*S9yN!Kku4sn%$-ippAx(ku~_IJAbp1) zRYIkrsnq>djUA&?Kl}Wr6sorzj{hC85ST|c#4(Y!y$c~hteKAO{DA#s4~MbqIgjk& zF_Y7{)xfNUW<^irdpLm%gy+H{El7Oi%hFYKM?yo|fGh@{_k#kOMk0OIcaQ&SnJ(O--Q0vd%!%7&9LgDOUD?vCbGc4igWoAi8xMmB7A^# zej&oFO-XBSM@IWC?KX@2G8&kKhccr!nwv;DIG(zf!zO7K>fvOj1Q{fEr!3R`Qz3!= zWl9XCkt?FFaJ4L_@x%LK!RQ^+i?Ahg1kp(4;GT?iUrkUM?F=lceN2cWVNc>zqeM`a zDul+>k!$Myr)#8ZchzzK8kUwzvq!=UPJnKS>CKx>TqDAZ(qs#OH8k5ndR#^}zpJJq zvBZMp+qg3I9F)?3`UHue;Nfqbv#i^9 zU3MlGLaZ_Wh)8c*+wXaNV%GU#dI=RgJNn`32201A(f=8QP4_DYHuD)KRUcyqk;^Ke zm4w6z<^JODToX^DVI=F$781^~Y-HWa{BHE3Fv3e8t53dX%Uo3Jw0iC1omi(IQMc;x zq>Dd7lHddjpY+r_<%L4J+7d6u8(~np+opg7&g^4)OE8W1Ur6sgJYTPvKH#EzuPY_C zlCf)_Au%~YKI^Kc2?=-2^u}p8IKFom+Ax6jC|&&3+@+7o7)7?TtK5$an$PyLNiN%f zNa@M-C)l*UkYtz~q6Xsc`gfg_d3aSpPwWuAQCwsJOhB~{@{4YzsTLtoik0b!P}}e~ifAq$NqxZ@ zqjvI6?i>AZ>}z{0a8?kPv;6y=XmvTz0A{UlW$g`M#GgYKmE-zfLaFs1`gH|F(gnX-P>3tv(T15h?@;W)S z35c#Q@IDl5ntbETV!Sdw&Hi!%?`PB4KdB}D9BXQGBr#nug_pAULeaeL+HdpW?{twJ z{0GRxeVWPuPV4o4dX_yKWMMhKcw3s8=Y-_xNkr8d-3j)$7kw;_L|sA7t00C%l5_2V z5)o4rTkJo+5PDpFa>Z2ne%A=l^}NQD`!zxBF52u!*v~upE=+j>$9AfO@7Lr&O}`0yVF)u z!=v+aC?f$Q8G^dt5lcEduHo3C0s&^*lgEH$tUFE?HG=tB)_C#^p1qiPr(+Ql^-kRi zo=$sbNLWnokW2VP-s%^ddv5#u_;mq=e$3M$F|QAy^;Nwmo^q4e&to+W_`x^fIm;m8eCiR!O3@5@qqv;zgDG8H$7N^T1<>J zCaf)jz3uSu!)B~NZ_`*aJBQEgh1*CsE37;Vc7BZlm$W#S@_ zR9d!c%gs5o&nEM^VW<9Z=4he%;Zvi0q@B(+!>)=Fm%b+Kea~Lrp?VYBVrv47E-%{E zzI0Fz9&m<+gcS@j^BEF@5z_RtD+$@tZB0XE_XhBp++(0#iW%u`9;)Pqwkjh+H02NE z|8RqWT1Gon=Oxomo-#u!{VFFn>(&>tX<5{?BBflZs?McTG`YVrzTfINwiuKygEV*W zy{D(?`yJ1T$1(E)C}e9q5p{xjhQDs|1E*bK*=H=TfFfC`-nR-?{46fiuhrelz!(C!s=@H9hl9|cMNjt3)I=Q zd>jdb-}Rzy$pleqE2GZQCwh#<^<~5+j_}{nTt1tDSwp0a<{&(W_ zDNSfr{M;#~!c5o>=JG2SwvBYKz#rDAe^7f6<l;O;}!fJ$d8b|_cIROV=QMN@lrmG5QE#&18UVkH5EoYR*3EM7MvB9?ZV%kp;I zChBfnIArMI&uWqW>pK&L{f=dn74_P|Y~=88uJ-n+pEnW#_p8eXJ})NN_`GZy`h-d@ z>1#*xo^ZuH&-j}#qQj*I&~&T?S46Tb8t1kHDfG8Z8)PRiGDkBXemV5i8&a^Lg24z~ zQmf`Mf-99Z(~G8Tn6rw4GmS^S4EZbr6m#hR9VC$$;Y{N2G7$tL8X9MwDtppgsnGY| zx8FjxHptCmd*5+H7LIfDlNr3dWrpzuDRBgd zqE-$2P90~nd9s{)a-W+`yAm%oQz6a1%soz>c3HEHJtpdOP_T-v6i%qOsC(*w-d4es zlH^}%pTOhVZpJA)jYe;{AAA=Yt%Yy4as}r9pp@~dq)_M}HyM?A<}isq$FFC6JZbDG z(#_YVuqzogOr)ULB_mu?_>VgBIi-JqKDh-p5g|rrwk&$396pg-*-MES&K{LuYP7tb zSDG-h1ENPo9_3HTMlK6PXr9jYwWX?Z8Q2Y%K}$|8(%cd&30Zmx(+1J>t7L_NfvDW5 zUa@W9mCF~^4H)}WCq_HU%xnLbCD!4Uh7z2UTG<0*t_^>Y)1uM3H5$_hHj_hQ49<%Y z7H!lP%}A&9RaMc8r8tmdeK{E{`S3g0)ve=GWJR^@^GPWuz+T*1MleW;cVK$qRr^=n zL)2~ey*J=|lhU3>YBo5#$aC-p_gbJb9eXO@9e_oiHbO11vj{syJARqaTm16y6BkH& zHPm#3P%jdA#M))^I;O;()`gZx!>r@v-APM|5Y}`kyolJ_WEx!glC`U*Z$Hw@MMe#` zZ1U%%3(t!P_%iJx?j+{aE(#Oq_Q}xWi<_i`h$OKf7Hq{USQi%8c@uZG;hQO#m@VSH z&sS5(1bm=G5&r8J6Px3cy7QL>#ACGF)V(DK3wqfu1Kas*n%*Pk_=ahe*ktDbS(X^Z zgvgt0Ce8Cp85@7VMM+Z9GHJDpqAe-=Rqd~mx=g*bJOz%;$D9~#thB0HC(2hzY72+o z?LZ?GqLm+5TfvL-Fnx#Yls(9qNn%m+A(|(5UxT|Lu#QbEg1|&DePhrRX9B~<7|yZz zo#Ay~^m6Mbx>E*SuNMa2{_xk%m{d8|VaY~gNt5c@_cHvf{#DJOOB~FA#xf^sT_)9V zee`e=-pE%E`{TuZW z-)yFE;d1z|r}5pziTLl}d=9wsVf)blm3ztac&UKH7saoA;&Q9Ahh{v#UCv@Fk{)UB zIea|2hs~-iMJY8iso|AMN2B9m9jwK-A66=Bl{rXEiR3IhG{w)Ju?5ph?DYto@;G zKbZ&5O$kqnJ=@zt4aLJ5)o#x}s6q4R(_wPZ)*& z1d3yuR;C6XlXYddXy3v6%cHSz->p5ut?)5?Rs#u4PPv00%d@DZO!+IXd?(mGc1~GX zO`0}3PRDiwbxOLrI-OO-k?H_JuBVU({Mvy&ts?gCRG;|Lob$q?C?#BJVPK#Mwe#_) zk=G*_EOZEk2Ou?+>43|DZ6kDd4*xSzuhd`g?l?%=SSm#7)E81x0TuK6ELL4fnk%P` z7tM|JUaBlFMjQx)BILRvpIP&N0j-8yV6VML)Bc7m_@>zMZlTJav%F~7W&STCzIBuFb2Zow?!4j$j)^E;KE^ib4AWGh$ibg5yOP6Wd0tT4)C#n(n z#OkOKPOm(Zzn&sgb1lOa3-9VP#_1O7{o^Vdb<&0LvsmQ~m;U~g#-fkXN%t^(u~NFY zhL5V1(chcZyo-!bL?R{ZVuPcM#Wa#B@p-a7h!G`lFs^+t4wae;#aPHN?t2;bJ6vj< zO?a#l#?Af;w8yNfGZ`p)uU~`hd=Hu=BNlh$xwZO_#q1+ z;{$#G;#RP|X2i~6MlkZ!tqw$u3b>2s5SBccP{)%E{ z)pPYo6*s5=Ief{vKjti+ye}l7x3kp?yJ4YPpmt_wBEIqp#ffYmlnl^S%^(&=+}g7_ zAF0`*eDLTFYw`yYqvez((T{n-rDc) zljr(7(5cnKO4|ltxmE7)!+S{-YCzbA=QrzIqiS;;mw2OCaR z2F!A{2!QY%lx00yuL5IH7x3^t`>o@HvlR#G(|LaP*HDCTM|VgWAM#`P%i2? zNKC9zW*Lo8?hwGV=GqM1V1wbRS@;d}$?lVhFRtQDRCO*{!Fu@}_Q<9~oaRx-^xrq_ zcN2=r;bH+cue8Fz0(G{oYg*-)tZEG?0+)63w4n<55wvE1egGn+KNS;8@)WY@Sm1Vp zB{g9Nk9Uc@DZW^MJwYOI<3T39@lDBL9EA}d=H?NLbXsFxfbzUq0}Zyj@iU6-r<2zP z6;aj);E0Wclk5`9j zFQVZdZJ3pxvW^BWuF>O-mdrc0FGg;aH$t6{Op??`7u$4CnDs)iD%?pKMdAUt-gSFS z-Sv3t@Nis|Zaj~a@z9%F^l*Bmh)U-Uk`+srM5(9)UDn?wb&0)sxLj{g#cJje+X`~< z7Iinx%}i>cF~5=&Hyh9Tspx{I$(74zv|S#LNx~wHU#+T`e2B%72H>M5Q%VO)#U#Yv zesT&bp1X$a*E?NW? z>;?F6b&KH^pYZ?cr_r>=sp3kT;?S=13;t^`@C8ySe&GP7*($oN`=QTXK-A8GKrDpLbnWk5tcv|*P}PxH z8TKm;EBeYhK;T!cNhWtAQ8R08F6f1WK)CQ*4ExHdER`SIb?ycC=`?~ya?m4c>GPW4 z;O}TevEStYFOykWi6d7tqLS(jE_@rw52YXj9%mzp{xf*x>sLR4r^{yu(0_KII*wX0a0T&%IEVid*KcW@^3`?bAc9uo%M^EJU}tqCt77wo+9^2Y{3Oh*#7AQ_b&tpQk9g6Rftp;;5U7}z z^yhoa@j?=-?L37a6q-+yt%&NR3-J&9~mG;ucUtRXNaf zdiutUQQtsG(f1meFJa2MMdIbk!JTF+D<}5Z>bo6dR?S4n3(d&Fh{iX}$C3=ez_G!_ z8M?{r&Be$bQF=F?)MwE1q2&;076Rbco4$ffc8{PC#)}|BX?w9Bns|;3k)@S5A$+r! z7zVBs4y~fv#Jrq8y<9834=iV0{DsA~Qm=V?RnPmvl;?3|62__qz$yV?Tp~H5m|dyj zKN39!fMlI@$f{a6v_wk zYgSymN4&x&W4t5+HceBr$Uqb{NIF+OB^*|(<<2r1gl3J|udX4VH8<9lU_O-U+Hn3~ z3t$~J+M@8fFan74f(&V%V0{)h*ZTCepY+--4D7Lt=T3@LPkIr(TF}- z%v#rxVA68EbiIF6Zf*lE=DjKyW+J9)P)fo10hAc~r-v`p(X904C-2g^?Y>le&v=VP zJ`;{q#cIH;2QMSH*UoK?%7kwpk^SSdDkXtRf${7>FWcDbD1;EVbLjT(@B7DN)8ueA z$IEHY_{&7FDovt{*WC*r@O@D{LG*%PC6P)v)EnrC_QLL;CAO-iZKsgYFs)Y5HCFlna_=R`3>roQ3`t z$gN6XKcBj_yg`U$h}9r*_+69C6G2T|*RO1R9|8N1P~}Ltx$?(q5z*6jPr917)X3t|U&$vpA@#jQPe>enLvH8!J%pE%O zD_3t2SkPEJ?hRLt3*@k!@`tCbN&)4m7&k`IUfsL)#Eqm3Z|wKnO{LyC%EEyOnsH*K z(zCX&MDG7)R$kM48bn9{HN#0LJdxx!lPk|(Iv2l*r+^ArY*ytmK!_gx7@BdD=3C)s z`Pq0RJ1yyMH5NdgugkA?Q1SR8nxW-4RzFnIMq3^|r+~V5=Ul%xHcJ<=PLg7^~ zKY~#s{k`5#&8bMPeV)wJv^U)NozBiBXrUw79SfM-SHzorM~n`P95Tb(k6eB8ZuDY) zzAu+CNHW{k3S+{6tk2UERy=QV&Z11~n6f?kABUN9aD;Dv9r#Et&`qGZB9bR@Yk#Zb?WER9jT2T_ z-pCy)bxiH%Cth~?*YuMPJI@L%I&hZH^xJ1^zar!!yQ=>rZF0j|HRY|5o6w;lm98yA zZfiTIKn7D)5Bu52h=muw zw{}%1ZBySfwb8ysS7YZiZzdiB*3={shL!p_Om<##Tx9okF@H6n@$}QPs0%$pVyd=K50)N+g;H zI$h?Scmoc+?VefGzijj{799X1=onuabch2%EC~o~J&YcMT67Lw_N~LRPLf-@|8gN3ceMG;i}!`U z>;0-y;p$93=Ie|>iT8a6oR7~-P;fJCAt$l_6d+g?paLvUs3Rl1Z&PBq*7SF{dz2^?Jhm7hW*^D zWG2=5bsgU|!MREA$vRTd*x7V@(GG3BQ~cjbz1%Cq&eb{ z9(9u3t{~>W+QsH+0NhW)O*6$duiLAab{v32F{)Qi&#L9n*<2o8)o7{yu>bBfz1)y? zi+;DbggtB0>x2Ba=aTLG!)tLGtPR);21Doy)(7&RtF*%yZ}RfKyDrOx0WoZ^ORkXY zbc`ixkUYklG=0{8{Px1JdObH-!wBVm8${)Yy|Kv!+BbmI#eHwmwT{UBd6wLl3 z-8oB}!o!rAtJ3ahB^;#$J+iwrqV{_|bP%{7J)#T{OrRY^=|gs;gl;2HDJrL9CeRf8 zc^JVtN@0!#?(TUJctFR9ethPB24lMUc8Y;+lJmo-yVfzO@!lJFrVE%}b_|sXzablh z?6n;&w=QAN*5>(qkuFjZqH^l_qcgCaD`1Zps)i(mNuYTZ>HqOr-UY&z2^QY-V9a$4 zUAvag7ld4Fybdo&c<>^};$%gs5Z``)XE5xrd5sB=_1loKi6 z9ODmH&YZ5Dkl&MED#n_+DfL&b9M+57ML{g=eBs)EdL#@-Cg*vy5E>)Q5BEROy}yXH z@YJ{Ifp218c3wdHBtiAt3UA8ZhFX-1Z1w!OmbB5P)r8|l7*#8CUDL!?RShYH=r2`u z?WUc<_c@NPj*?1u#?QM=kN-((c{#QW`Sp}+|5e(7KiD*YDlX$)=#p@7olEH!&pym? zML+DpEoTg87NezJrJ_%bPvI}_!nOS!%wmKS9~@Ut+ASF?Ir+FQm9|+g->*qe<8EYN z`$g`&F_Jlu__eV0$7sUnRwE5FqToX4yCZKxWVgozp>TCnsJl5NDQtMM0pAES%HVUh zpGqY^?8+WW5*{bxCXz`0V4RoHa{)BZnh5F$19PE-R#lEy*=Jdn8-h_2N3)vXpW2ZG z^pv|N$+~)R8#J125+s4(d23uVtD!>d4CeS+gVUpv`}SaQy{+hn{n%dUF0CX76$4`5 zuan6U9xxbi_1RUy$!g!7cT+X)zbgHmewMvMK%T!_i6a2I2jYzkphsaVJXzf{y)kAb z^ynqIG|~I%*)K1u7>dzekjmQv!Q_W~s--T|G%PCg^X}p}k|@l~HLdTFv?xDR{1#RQ zzi-Q)v!$1{TL_O76yWB2xdeHt>^9dgnl(CJ{kVCV-58G>i5fbQ|6RSw|F=j!B{t)7 zHiJkoy~Op;g#Gk3bJS4a+rLUBm#g;tVOnBdP>Nm0lYJ4>Z9P}KFa7VEF?Y*^3ubt) z$7nWD|2 z?j?Jr0iC-7v1-TkSt|lLi=67s;!?&_Z)sH`{8!o5tNrmwc%P3_wRn9*-@yyXusD*b zBu`2U1=u&lhGbMw7(3OGmscq1ZtZsokA!2O0z@J9_LLqZh`I8FJGDWbM(lp&&)jwE zhg-L8N&1-AbguzfUB+l+Hx2uGwE%z0Ub(Bg}&b$Rbq@dF7o-o z+S3b{u>PO|)FzCtaz_A!%Wlz&Pb2u{;+ICu%GI~yo<9eqp**;_NO^fqziwXQ|KbIO8f z@7~v*x5*sl9;rzwNyMrKr61iog0~TXTy0PGjPNHCHF=9Bo`RfVHesA&WYGJK-}F3|248PR>^`o!n5N1O0HZe1FvhDI$zb7+Q1Y|G z@6Stu0djiUy4HdRW$cZWjfPoqCIS$i&3oA-evQ+O5G-hjj6||oTdmu4^$Mbzn2(&F zjqM8#c#$}8ObyS4xXPQz(dKIhUGhxQ&2m1qh@|#>i1^@Q<5RJpuSsG*aZnQ`IlsH zX=Rs{aFN-!Ee4la(wb}6Z=8Ydg-X+Cupi^t6D&Ln2R=Eho-J0)lKIeNE-jw`se$Xv z??M&s27-=1f|sKg#Cz%Tb)^zNP}|kcx&6YkVfycn?XGfad#TH_W?UVK2*CJS0vY3> zLtq0~5K7omSfx$>#f}@9?=!+LMqq_FnB-*z>7Csjln4e>jev%k_RvdeJ;&;Xw6f(F zM~0qEw0{{Z_gbC2a5)UCy=-f`xfIdB)8ag#6V{}>!_S_uBh@k@Nl=!vegMLH7mehc zmz~23__`eqynn`(Gh%b-b{`94jk*AG}j;4_#spGrxMo2!TP`(5Sa04TQI zM~*Irz3RHA2`u7jmKMEg)0$EvKU@`A;+VNV1}B`Y(M{QX?_>Z= zvI#rX6%@uUDx~-H*qr8%yPB|%fzgcv(9RQHdpwgv^K;r&GrDJpv}?0EW%Ki!lc-&P z;~3g0%>fj&?(Y$)yu9x(gxv1y`$8j?P=Q2W^?KcR;-*saZ4v|>9r6x>#D^;{gMt$<1lOBU5Fcm>hP_%>w81=%D-ARpg4 zx(PEY?*+HrFU(riOkQM+63uMEja|TD(XmAH&Rs|V#psNE{!_7sWO8cBAgqABWCw>B zl-TNr-#+_!zf#ox=Gnn=v)Zw(>qw$txX*{P8%D*%62DzeEwYCYT2` zw^7=~QQDW5I9F2&>O?m5_D6%dJ2L3%<6C{0Xn?_Ti(nsmttQ^<9C=AyOv|Kg6ab_d zy#$2l!TOq%&m-yfz5iU60M({B*vT%A&T_W2y9C3j#bpR$5DXI+wUoXvVgo#Kw*)0( z&c9{%a_CJo;_t-2VN7R7TA1B=qLU)IYnZF?knUs4_?EC9^Y`XhzxnQb*V{SaTXJt)&=%n_Jl*$lp2iq!T3u~}H*`S~s*(4Bg_bh74sBTHwGIq=3ZB241I z1+BWEcX^qv7RXNDDItpf)WX}mX0-dZ!k1^kX?IRAFb@LmT zb)0O=N$1|g>H#JUdQW?|OIKxbkL8I9^*)QE-Y+M^CuS9=e{bDm6THlY&~@=g*hX>( z9tg6$dm651U4jt@FdCCWzAufsOG{{5a1$xW=Qff!A5}+0b?M#}AXcRoN7RuRmRus; zq$C0KT`Cq%LA-D~;v|kba{hfPlrJ@D&X%hcFMsXAPU506hj;APj0qN$#J(AK{+E>I9SnxM`Qzz8y3i1(ID*7) zc0aVTWx~IQ9KC_I$3|9AiZ!wZoza4xuUm6?Mv;ZE0Ce^)f zH-11%oiCuj36u*w%T~;00A7Lnll_7@u_E`=GzH>Zhbq-Qhf z<_9F{vS~Eb)cstvMFPpUN(2i=)xRtl_V7X$I=>76s1a-#Hiny5`%I>BNpq3ZktIjd zR)?ri<$#?VD)e~EjPY#Yj$a$Sdf^K5J@N1gk9r7emJ{F&LhwaM^4sqWSQE|M{-u^> zs%`*{vAaB7vtJbNExkrJf;gMsh4hc>C{DV;4A-%!FJ}4CefT_l( ze87ocJk(+`W|om2oub{K6*udgaHh;L=>AQ6=?d!UY&3qn)pLx%k!d$$jE5JlHgx;p zq?s?IzZsp*E6_S8o=5|(BaJH{{Kf`|;4*EkaM#Kn;I)>Kkq|Tleg7u&rOHh3N&T4z z-m{wOp!LrcRGicfeP$e-Mt0z~db0;3y}r4U z7?Q6TL7+_bY&xJxInEXvR0S-GW|q!O@fkHxSXUr8`=(x1Zt zKigMVyu2Kz1Xb%CgR{5rHj)M?50qPMpq_idjd1J$C}%&H$Q?66fN&Zbg}xov zdbPYAXIL4SK^DYJK78By@d!jZ1u5e{vMK4be92YE=KJCpci$0o=np#vqO6@!L;!JklBcdNr#Z1YAfsWicghCkXVJ=|ulW z(^W=A!FB5wX#s(uJ0+yMLpr6UySovjM7n!ukap-U32Bg$lJ1f&L7IEKYkmJwW?1K( zz4uf5Va>)X-w5VuD+mWKpOe>SpOW@|F}-YbBT;*-AxEeFNd~!BZ)s(7Kd;h*QTH=% z1298Cd2TxMaaG1=6BBOk>q(YHavw9{zic5r^xnR7=gAt&jjvL``a}@MkR-+TGJ&RB z=CS}wQKQ9?VXX6s7Sm~hh9*}tPei{TEmZnKk5vy#=IB_(t!l~~X39lwEDhCv1w>~H zALB8Pk3sS*Lz;~+b@M%EKhUFT@}RW=c?(7g5!*)gnZE+?)XWlQ7}Y&@;Nl_xi_ z4z4gWx5Lv;4_!1y_?qu2?}MrhuDF8;xF7~&B~zYqByZ?{Ej6qp`~wyxBtk4=EHRR5 z6;w4W1~_-$SIqufhG22G$)486;*FumLPC!Myu4{;y!K>i5~QzlRle$E>RWlqSvejY1ZX66eWtVx~jU z=Fl0P-y5=7)b5{kX1uUwG9>o;RN0q-5H(t?{5EFw=+@g*CE*K#`L=!8R;b^#QU?9r z!8VRy8*?o=J!e)~Le~Ue=yVg%`)gtg>vQu&^zrm*hAtdgoysD7)exXh7knL_v^~*bUNromw^{oDF-ISC)zg6|+Z(s;!m!c|9a>Z`fqW0e5 zYp3^*ep(qZRbPfVn`5ly2Rza}ng0rw-GvHVqbi#!Qgw@w8{;jN#f=Orq;aK^m(G1` zH{TPdNTE`M)KQ;L&tY;T%(MiSjBhBikZ0P1ne^$g)70w~Euq}gI=K&)%qR~TRB-bS z*u@eXRzDa%{a`VVv5E;GnMISh9$blS+rgGLL8O{sZn!PCPUHXfYp2aE$+*oYCFBjz zaZ6%JztFWTE4VZ(+HYOnCW#_UTt*$)FH{}1iC#77}%QX=|uX@{V$rG&RjOaOVog! zb;9_G<{MZ?aCW(#cmD6Cyb6?5lWF{)6ZfSD;8&azuU%ir*>i5`l8wZFy#m|yG<1x_ z8}}wXC9g58f%&n*gOry5ry=J{yr1ue+N1jP?xA%VLSlNhl2#9z1bJ>{eR)bua_W@p zX5yglU)+`%FPIK_FQcn*QrluFe@BrduBt}nsH#HtVVYV0?C$5`!g>q`V_}#6kf;*5 z3J@@LyZ$?xE=VJlJWse?T%cIv_;yHq4%27FA};TnYe)*+jE=nWM(Opd^Thko&^+Oo z^ysZGa~}w74PO_c)eKU!2XNU+%30va>yT9|K~D0H3z@8@7|du{UQjGH1&(cRL&&j$)P+=4J(KV+;;dP3-Ci9gOWedc1ybQ zNzFLYzV{WyR05sp65TvULi@otJ8i%49z4z&Cjk@gLihY%TLey|y%-X2MA9ovQlQZcrxb!Lbq2q87z zuUW<}$&6+R@ACVYALyq+JLy)b-yLs(Oi7iC6SREINUtU6B)$TfH2R=q0f>hZr+ZxG z&~MH73tZ`&LrE^yMqihfi7zRuNar#Uc<~?(Q5gDAip?8Q0gZmtkf%*aO#I=<)g1$UUvO; z=Zl-F@fW>Z<}@8eV&_TZ)@$}(ZEqX`ulku;R#4F|?UlxrPlbwPqEGAS$TCyhIiD_h zzy>Y~s|nSpK+*bvO7qqLIB5x7a&E)}k$6SNw6LwqHk~|-%?jYmpQ!X893gaIi-aaX zrj=<~>+kL`$MBx16(Qw@@%P}1Xb8?>mJVfUcV+u%6r0^TjAxOOPFy@a(in)Po5|iT zN|apvD}0-gFLgEW5XY)U)b$a>@gaI^%pR4lR%2knqu}Yhz;~tIl0$?e=F$Yq4E+I4 zHlJ~Hv)y(ADbSSz6Q#14^m(o9u!Y%C~+y6vaH&7 z8PS2RwV1;*xi)QGnc~Kd54DRw+B~B{^>K0WDf}T_7&U(0uLt}4$*qC*E<=L4-G8CBP;Ei}P%()$F zY7^Eq(aUnGmX<|x5#`$qk|QV*?D3H1e88U4b(kUx-6dVQi0RA%A#%#Ll2!|S@kloV zTg5Z;2hvVIyHt1@-NiVS?in42Z=3wZOkm69p1~|Wjxv@jofonb3yRQbS9ZA@=PzRe zI{|~3oi)rcUY%o~BZk*L7FDeH)!n#25E4`*qennjTR39a&hKnqWtu#Ld$OG1t9E|z zLmn6)F-ZvrG-*YBY!bim5_n&zqrHx}nI)0&z6ukjXbp^_86ng25*L8gvN_GNG?3=% z+FjDCj9+ryhi&5i!l!64OU?RE+Q=zVs6j z_sHM*8J)OMj}bi?gMGh@_p+qN_Zl6%@{AS}i9gf+3MabOOr10Io8sdLB$pB_e&%2s zVQ!ZGQ2ggb;fT_TS*I=FJ+dy4npG@(JesN$ z*Kt)Ji#JOzbBQssL#3I~9NWBc3-=?vcAaRVHpNu~k+NMs%_dBe$ogps?0B)yeB;OK z0vVJU^Xon^^geB9cD;A6%n{d1gXzLSsCm9xhAZt#rQ6M+-HwL}VvG#VSTM5zC`m)% z;Bj0@FHQFl)w`79**ERop+IT<)EdoVtyb2A%6!k7^3lx4*w`|8D?Gqjxv zhk+9)>w*s4*0Eaz5;P=ZQLT+9nBeo)nEvfeFqZ}AOXv9{dKiqkfs{PQ{)}&e^*m9C z&PEUJZ?4YHo-^srHO7MIj2ox**}Oq=)1C(UY=HDdBgrMH{)x+)2boq4w@!f z?c$4@MovY!gR4-Yjx`MtWED`H1F&9h#q1#7VEg^KMt#o`?`|)m-lo$}o(*%)x7t92 zGwu3G%Z*(}n>Z6q%C zwa$({cTjSCJyO?vk1d`jdgZcV<wouR*$F@s^O)6PhTtNz?N_v`1V5s3m7FE@J z&}n~&LSXF)70BSbXRF*nRGO0#AH|@ty?zzdv^Z91+k`9Cb5^nC4txEnh!|3wBGb56 zH|1*VR_8DM7i(UR(-j{3zmHpTP+99NGrpfS8TRwbqKW42-P^U%EO9KJ^M>y(u8-mU zo^D?LqjEG?8ybiHS`m{Po}6V43-6WT4{Co~X3y@lgP@q1Rp-CSuD z`5Q>GPjUzy8m{l+cQ5!bPBZOtImk}YfYORpB|Uz4ETZe<+(*$~TO4T!H?uT$8%9P% zC{%e|^L8^*>m+?h{as{R>T$HZL84T5+hJJ6wZYTF&({{~xsI=mT1q`>Y=lI2Qs4~J z7)0Mxd-SOdTvKK?Wpkt=~Ejot9W9@2|4vMx-?7Xx`*wU@`rflB|9~UMe>f&3riBWSUfbB_0rv1yqpw#x z{dKhO_thmrEGzyjm%qm#n%9wY@hBb)&6IZ4^p(a53USd9=+wcOd!D0&R8`!w&VVrT zDhfA`MnxHoz9^gf`2eZ8%LV;+=beYLs+(GuPy2KwZ^*CfXIZgafd*YwVej!?mcMR! zcWJL|*|+nDjg0lPiwss`K?IE=nTIs)$TFn`b=L1Wt|lmimM3E)h5Yia-;+eiR>w$+ z*Xmo~mO(1`L418yFdMbb*PO%O>;#*0Gh@;wx|Pcnd_F~>vKPtg@^^|{2ph8-d=2~2 zBe94RH&I1Uv+P>k=4JS=PjI{_QCOY13mx`csND$%7`WcV@pE$sb$w+Dh(o!K?0+7l z!O!7wz{W6Y4t*3VWYX!3xMBr7GivIo(eET)O;h=_5Q*Afm;CKNcYmETPkTo1L4~p_ z7yV9tL!6h@*A3?|{?G?G8-JxzOyEOwwf1Ekoz%>zw6Ep)_8L*8H#JC#$3v#EL#sb=NgDcetVlr z4WgPy*R(WIbeMk@31+0FEF3|%jv9X8uC!zE$8VB(Qp$~<)_lffNX52Qa@+c< zmpR9eaTY`qE<0g@;rM#A+@b$UUt>CLL|JxZ5Z)oCte!SMd(v*!UU^8OP9*Psq-J&A4;szs6tB?blkr16heaqx^uX_v3(YvTksf zSW}O};LhVcSZMRx45GZhEC}5IlWGXv-5iYHu!)dq*Fo%v{-@FGY{a0AUgJga0=?loE#{5Vzcg`G9yeR`yQqZ`piR#j44FFJG(c-1#o7$V zmW8$zVIZ=_q*v+wJF{^?v}MfaY2gGRg!K8?R4Jc;&`LtWQrJ3bG(_90+{mqnC)8ik zR@B`iQrmH;wj*WTY?`k4N5j#l=ZD|S&9TOyVmhn0z(?=JvTm*{CygY#evO4gQ|O9fgl5{mRp{wYtfwA8bogJ)CddDBZ zx{p0=!FG3R*aW>n7u0#>JuN!T14CQMg=S)Z-@Kc!od~u7tMsP-)1fu~Bwpmo4lNp4 z+J0s%>xd?c_St`=Vn-wNZyUH?#aT^Sc>m3P8>TLpda~pA9OykJvrM_Ek_V2@>Kmh{ ztC-g6>?(jg7Mk9Z8sQ%IF44O^{OL3mz5b3nm#We3>K?RHHNq9`__R~Ok7=7!gHR2O zpucZF`(0GS-jvr#DWstmL@b1@s7#~MY+%o;%bjg34Te5)J>4F%t+>e0TiY;ulJ(q7 zT%ckAf!|-@lpxw~BaFmx6GC3-?3uIowfaIx>g~RNDZy$bNS<#%M*M1R&{!yf5He)B zQCiAs7&7PAUF}e5WZ#2RXa4$CITj|^e?)5Ja2Y>Qty=H*gHi2hNhp1HAQ8PdWWZ+N zI~q-=msM=NR&*}G&nx(BaR*v$L2@Ikg5e&d`%#JL5bE>j4@zgn8hGSc_7`0$T4&}1 zPXPW14IvKqM?&wPb7C$mlsD@i&OC^>pk|;0bgkNrzHC{n1x8&-kDnwhhHN5=?PKpC z>&0q^WJwhUSB%ug0k6YEb+l7BsE*}+@ z-+yBTpeTtf#!FOX!X{zUiv59ad2Ki@7BJ-z?2|#X#$5g>I8?1}R2uNc7 zRGQyY@hB3`3dX7QS$;oO7__Y2p&WtG1NR1~AxW7M%YzoC~(hj{GvfUndi&iAQM9N{+K@|mREIl zrW72!rMued{t1-tQEr3}$6zdVU`YpqJeYs0)DaYt`e^Dg2I`RR!!)W}x*TpzkA7+V zzBLsiN0s*=>=e-=kZ;w-B`Ch>Ush94Rr)$QbNsYz?gIyeKq!&f`4`FeNJL8eE#0$D z!ca3i*IFJX?BzEgwT3U zJSs2Y%SH&PzFqyID)nDls2tf$-n|n^r`Z!&t4q0${3%njnI&K-}x--mTvNFRjK!)M5g#qT_GyevULj*<^uj0{Y|}4i5Fa=X7Afr%a{{?;$}ism`T3uAk->q zZjS23MKfUa?dr~J1sWR)FIc`vY$joE1xVHd{>pyX0rY|^O3yd z4So%B$zci(F*vcI(2;9(h*qlFX;xVxpS09X*8<0XKQRjoI?a}z^{X@cP(u)|_?)uV zq2~_Ir--If-Ks$Lb*Y@i(!W92#XO}tQRS&-kx_DtEkzX?^22#Wp!);s%nd(dzbO@gTs*Pv<(z| z{~?G23*EdX_rHq37jMb0aa`NTFb^Naj4gAvZ;cP|hd=F~D6x$GrLRLGC=)rEPcUb%yo~0Hs|n;+R=`0OTFa<%?X;V`k^oUK zBV^4gm>-v}aWThkggMyOX?aHWKNccDz-`USNYs{ttA7n zpt5O8!p+MYHwxh~Rh&t)wZe&2#8Nd@w+!ELd98naM5p6fHNgi02GEF_-D0nG%}__& zBA1g*`ZE#{lg-h?h8>28e!B)(^j^36Ff*~=<*SBXKO_vdM-oT@i9-dIAEoC~p~*`s zW5TzCIG>q$I=heu-TXHC%D%oPdISCgT5!#OjKT8G}*jwHX(YRxfrvt1#dvmag z>r%xdnzNgwe_uU)Kl@>ip<5s}om(AAGkj;4Hx&}n zVv1V$b9k0jnI8P$pq_R+JC|qlLRc&eWh-nalC0lsY2(?~D)PfAxrsf;Lg3J8m#X>L zg+S*bRTO1$bjSi*uE9>&B)Sk%(!)e4f%i0YGdd}ym+%Q&icQ%GJ5VLzlTg(VKcSr6 z&G|vq4@ltopVwjaNCAYd9<7oBFf|3683#-)sL$3e^|x?!9iySvOz8pDc>|@hQWc|u z?5N6a&*(M(D_W8|nRXt${kKuHu9rH{^O$$)8uNMz7ciP==BDLN%8~@E*1&jUhqI>R zVr{7yBZ{{`6PyqwFAGF%DXeXzJ4L_(2NntJmY2@`{+JdW8yYeiXZATzxT#0K8Nbz0 zxEHK;@2%ZO8Rd^?xdDaTZ@1MFjDJmd$q(b@d}rt3RtxWyum&Pd!8}{U9U8wPHWv7C zMMm%4cfeFcR=gd1rQ;yPee`L}2Zt@GCOE-kR7sd0y0eiX*hG=U6Z*V4q@Jwoll<7r zxJ+qQ;)ElOtvt5}^7YtZ`Q@Bz9jc|->S~r5YGQ zA%6gkuNrE1)rK2E+uRb5h?$vt@vxKwujxykC(t%}+T}$P6d?%ZZTah$ zDiREP8d-~(ILqU2ACf(7f4B(Tjze|I8B%YTN#%nvw%bXP(?{?(E^g($tGGz^4gZOk z3Mdy_W$gZ*n74$|Ge@6tii^YvjZME|W6!X{GrFo(z213zOA}=xT$s#-OGN{n3x!G` z`L#{$bP4lXtLi%mlE8nROb|> z%y@f)b)|W_eV7|nV?G{QQX180EG2gMpzzHDjQ`|D$?cZEe(@^ZaUOKCU`Dl~gmp%+ zHi*8Ik3EK$FFAmoEgZhwD-&65uN(^6;kIKQCY#7;H`RbM#E0=jQBQjMd+6>?Mq`lY zIjilr;bNrTv(0#qG(p0s&qHzWR_lE~1)DECH4-cBBbfHt^X+)Ab#AnDpeQv6(c0KYiGg;5Ve?3Qt2wSxmlM zyRCg7a;imhwq`!z4X=^t-(vj9(XK7w=pV3#KL@qxO_r58nnZ@VinFc(8NxEMN; z?9P&uN%_q}Su4Q}`?^1b?(!}c5&QeR>%Wt^2VDeNYjaMc?knOiCGp^jKykPM2SdkB zNc)&>5eOISF}zZf*%XE!^TUDWuvgUrIQWW7#s*sEa=3U_>pG+eWww<<^A^NLPlfqM zI`g?t=Q+Ob#j(`?^pbX%-v=FH(H0mSZoUVpjcfX5>+GWxrNJOCsLt-Ivn&)j-$X9f{9$feU&~|(4U;ItW`F1{j_YcH@AOHSJdq}llJb9$4 zUBs@LX*<5Gbmv*Eb^lbt@;-Pc?&d@>ZbGu&^ISKeZ(l+CPnu<9tWU6lid_3YEs1RW z1V`rNJWqP3f|wHnB#L=D_FU(@xH#b_p#qvt1%XV(scjWgDT1U)v2SWS$uF9PkdqFp zd%*J*Xf-o{UqNqD;#BXG zm^%MnnG>ggnjHpm?pAqU1Q^|2^0ij_ahZfR=)CYgUv zi25!hpEiHK*hv{sHYbX!_Tq1XB=Ts1!#l6_4oFAjZC~m~(X~-qJ?Fs7?`H8D3)f04 zVYJ$7kjsCbo+WRNu}s7ot&6EzmrmoFFVN{Pp+;@Vzw6a^G(LL*fNXKmxMrn%Z)L5TmyKx(uL!-e^ZK zX}E2D9THhi0sZN>BZ_g9y#fM|8i2b#9O^8JUQ&0C;-Bq7-AK=aJ<-@#2p z5aFYYX|7Z>#J<}=-V9q4TLF^_$6CYf(`&{6fxaIbNZ9t!52@XK@lu#R430IG=_ZX^ zZuj0v`t)w3MmDC%RQIxV%Z;}eiX>F*Yg@WG{c*mt=Y5)%pDFt;d&}c&z(nS|;=kNt zMowAOk3nyezwc5v)qhSiUg1e3XY0U13ql({I5Q^kh5pCvT=p8yp7Ypt&O0875^`=H94W0?qWkIE+cf~OM9P#*;P0X*T$<@vN_Pj~AKSf1E= z`(<|Os0MWrn0CkTK1YIpMN=QUa4&nvo36#C;N&F1pIP$rmHFDAgVjx55Ji4b^d zP)+jj0S^CM2y@J3;u-?uX%!Ct!AltN!p9B@5aHOoCNn}AuT=v42nW~`1 z0&ZantGIRpVLOJ>vdV*O&zdW{291MT1X-gzq(_tm*)yQdnEsGY&Dp_?)DcTi?VqH6 zak8MdnYD-bXxX&kQfpg3<0{ZFZ_&CldHv#@_Q(H5c^%$=B%i}9x#`4R^!p`c1IHvqNR)|8d zC5eJFO1@@PG_#|X40P9${>?4lyrGg!6PkZ3M;L{>l>={P-(G10S_otg&3rGV!%gC9 zidj2o_)fTmN9bCM|L4@W5o57$eSXs$H+JDEB|qIm`ON&OXDuQRk&=YD^#?B`U&WPp zyH&w`!jU00bgFMP;nZrr`H{gxE8jP3>>!X{rlg*F#zUkJvHNjVXg#iadv0h6TwT+$ z(3@5gnHC>zNe)-f^67YqikshjNgQ%z5JR?z4^}UiqL83W;*F=v0^i-{wwOxaGtzRa z>kW|r{?er+jzFq_lKew4C^#-Md+^91MmxXV!d1w0`({E`jM(w}CFmA^6)+|L#Qm(= z0Kaijd#O;7g(D?_LaPX|p8E($WA|mwTs(%tXl1%fq%ET04~E)w)?aG_1HJp9DP!oY$?^3+mB?opwzPyr;w0{((|-|4 zp7bb_S{Vz_vCJJVpDWf2yx4}41XVl>T?CFh(}*`r%#DV2O%u)ITCi*3IOY#6mdw3| zSudBlp{5#CLHKBH5mL$pR?(;PHSq7W+FmHX$L{$;2{BF16RZ7U?kesOm=%O6+*ldA~Sn^dvwXP%$qBzfiQ7=mycfZ=1m_EnciPw z04Ai-dFSzB_$7gzNDoSY!`y$)YaHUM3AI}*3coaOdd{`%MB;}(4+B&7(mCi~+fChr zx`Z3Px0dx+Zs~?`^^BY#!O4scH2Y6BpZLI`IhMx5>+?C}#BkyKLaWe~G?iRkUnu6y z`{qC_d)`0jge=cNV&|)v0O}TTaEk3N;US`H=h7`hDo5noqnZ5@Bc>%z=eaBJN`rm*?Xb;oGiv$1 zSKU{$hU+6Egi(EKBF)SPLJL=y((2Djl$H1+y;wNe%>XUPhSs{6qKm$`^1z;FJ71} zSvKxr%M^SuV4qD(wFp1AD|s>6>>&F0;iWIqv?fcMHU8qm?lBHPhTo=|a{CHQ=|X9( zhz&alDG}^?+HH-urOD+Wm{k8I-RVMo22e4o>Pf~K zYK=hI&j5ftStHdx?a_PUTxo%N4H5?q)T3jnT((@ICS%^JYqV5lQ`<8Di+`SAomB6& zPe5z0N3Ruov06;|0-%brWVryd>Y~>tJL;5A5-(>@}!%Hm}@Z~C)#O0xO07+)5;_+Pv4 zhYUCMt;k#aXTOiJptS-*1S;pKm_BnRGTN%9ZaddK`j&!q0_ihorS$c`fTqwl#zNl! zplPBZ+O2b~pnnj33L}t`LiwyQf%dxvtkcR_2uvF}h(Kl05l8(a?c$%@dY*;||Lh`dxj{XQN1bV-|x!(d; zN9(2DM*VvdaC5)#+NvUWn;#Pzs**JE+KhgR*-2vq&P*`Q1YJtJ_hP|-n~|P-S)3Fu z`$oXOwRXl+%^o_j<<4^6PnI{GN>0(?4lksDnrnQl&d#If^{Eu~g(Dc^e928|!TP*_ zFj~XT#w1#VS0Zd??D=N5aCOXAOv8r+-i?PF;c4e9%_`eB*SEwfMh>nM*MTCYGKrLV zSQ)2ed_~81=(OB+O)8A}=lQ|rF+~_}M8Y$7&X?V?_QOC%w?NaBOcX7WI&mC9O>z1* zM%G2j=6h`vQsWbsDywrQhmOrcO48=3HVefFnw$+M8cVpsMByRgD4)Z!xP#9`g{O4h z5~i)rXLCZS9`~*pS3<%c2|q24)-T*?;B+suWJ2WAMBrHfgk!KQ9>FV{GK=O(*c7hEDl8mh9#u$be}2D8&1m!tR$ z=cr%Cgfie(um4sEr~I7QaCWs;-_f^5u8V{!EEZ9CNJA@63J0ub*ud*(Vh?LCBK1-xv=BuB zA`!Joa&b`@Nfhz-(6W9*yCBd$DD}3MB)v=eZT+3C!SIbpB3aF{=RyM4q*hQw9Cf08 zIxlY6H1WUPW;y!i)&dLh6#6y`evhNX{Y3+DZb?B!`0kh?zOE&a;CMDH`Pm|cLkr-QS!hTaJkgQaZzs^?NnQep8>w-8+DHGBRrP;w$@#5i*i^xe zH|)5s(Z;O`94ebIP*crDHvDFLu4u?}?J41PHMY1WSn`J;0hGU$t;?yOzhlsZX;9Nu zW7A+R)pk3e}Zk)2tVXR<8*qfWP7AZep}DDVqhiy$J&(0E;6R zPw)V>e(-Fv)@G6?tx0$6)lmz)(J*2p$dN+TF&lHHW; zZnWIRr%P4Weh)2;h4KZBUMBp#OHBkmAM^WRK(k*if~z}lVJx`J<@^?nodwl` z9)Zzl%8b;uco+kFH$u_p^O56DOi%L|0G5jT~(q*7d8G zcayhe{a}~@4QF)@4B+UzyHftNG1QQ@DcPcqW$)e+;Y@UJlT6pZuA+&p8-+9w-S0gf zA}0)A#@soFj2Uy5I*q5E`RPz0NlG+-(zTyeIr;V5jVS7NLY((lJ}Ho_9yt3#y?s#{yEr)MYgfWX(GU#MQSpGUx(OjO4@w zE4PpgzAm);YG(u$4bZ=0Sr5lH#Z8>TD}$;G;!!bTC(KAuxwJVM<2k0zSiGzB8V0e2 z0f+oyWgrW3r$_;~LEEUp-dtsbv;9q|I_;aCkFqaw6Z7|RUo~l>`YL^hC@l?H!-KY4rJoA7Nj;zCpq3geh7!UOIjjwJ{9)k``+;5X;; z@E==9W0>;vIb*RDoXevTEe|3a?X{InZFEg^$xxB!dCqj3+idM!C`}CYV%1=4X6VNy zZ)hNY6OewJQ&zeIvF7B?D~fj42IoHl5p}z5-tAH zD?AMRh?ZHF;o%QkA(@N zB+Dt+y)m6%`xR@AVF#suQ(HIst%}5?cxy6NzVbeNI@|Ej^|yNTPSZ#~H1;&S!lNUA zxEv=$N@_mnXL;A}%fg6k7#wc^rIZlB`$h9PNW=NCM#2DtM9*YsA&;A2^ky8ke?wRX z_A*4fQ&Ankv_`CH3oq}K5d$2wiTK{3Ueo0Nco?0utPAVWT(Rn8R5gcEM1*WGz5kQV zXh)|Xh1!Ix44{z73ij*@&yJ@B9f=CNC}uAT?ayhC>}Jg68qLDI+saX{IW~`rUF<}6 z;T>tg9MA70sGV&>5<`v=wYxQ>;q;`U0HQMB_CoIf5j*f|lp09FK@2iLkJz(+0l|k9 z%7Sn21zcpTK&{PV%~l-hM)u>uJ`Xso04FpHD6XNIXm-%lGG#7|{`$8qb_dZS7NJl# zSVCe)Y1XXua9{;d?Rh~@Awd;{{l|9%GZx6z5ZXaU#3hP^=gja5SfhviDvjA%4a7Tt zCA^LdZ5mV`d@EA7ER+2DRh;$h`5}_GUuS=0>Z|9853FY-&A>3vQqiKn*lhskB-VHElhLzfHR1(6m48GvL>1Ox-P87*Hbv(L%+29Ac`4F zwXV-*V10a;^pa)c;h?`YaPCL`v}GiQ0FDNZ>QpWhp-W?KI1H8RJ+2`y<8Wf%6^(6` zvBG)32A+~ui503^;$Ap<$)C=2I*Ei7QZW;1dy_J1j=k?TVJRi+hy`C-pQ!ISc8`wq z;xl)WXZ}2$iX`#gfPt8dkM`Z#lUNh7^AH-$YXVL8z&k_=03=K2_itek)hNauYH_W| z=rnAgIPQ-dQB~N|EFN6##&w=I5RYBTCeW8yfc*gbYBjw?R2V2VG9e!VrT7&I38e6J z+u`|Qtq{DohC!q%6|$>%DM`qSXO?cLdQym9>0x+C;(WLN{`Q+_$MDo9MH;3UXDKr^ z4qOare8e&5ymB|c;$RA}IEM>5Ih6h;j?II&j+rBKs#Ue#%*Qk00bcJv5jHF|quy79 zN(b%s+8GU1E`OoaONyv~XA$#v%k^!-TM$Y);W`NX>Af*1gYxOO7^xw?Ae`h5j`PBR zSdPwy#sur7e)ZyaZy+F%=p@j`=i63p!d22lg$j~)5U`{D3Ou>9MlEt5x?~~)m*;eB z<{W-A3T8tz#$6GRv$3>S4)E*&Sb9$;U%!LT-0r{7U671cm@WkcDu6{cD_GqO+wUNo zE>w<$v6Jo@t+feF+{N0Sio-iv?plb5=o*4N!<=B1ik`O5S|?ST)AzmjYPZ@A6Q8-< z{~)d-S}#~s~7TsUsq7wX&alMCZ%+)I$6*f^Jqm0= zbV*@&zMm12e+c~)RW*lD7v^2)Dg8-(yh^v7{X`(#KazpI8T z547|FLz*j_nB-YB`9rjxRHdmw1`>rPWt*!*kkFQTJQ)Z`g9tmWZ%kQNA2HPyke|l) z3mb0#uUMFKdi{7w!J`8UmCDEH_#gSUue>go3E@maCo5~?5jG&tl@tnvIq>kpbt zv~rD(YZ#3!^7q-(c?rjDgoWp5VZ(&AhIb0KkBtL@d(`<%UmchB{u(zYDlvaecs-w@ zQnT?fIWeZYupZ-G<(1A!i@)0`rqCP1G_d$o%;$pIH(dRQLg9Qo$C4J+iFoX%EBuLw z_Ripkv<0E`O+cWeJGY{j^fUWSG(iGCc!b`U+5x4~7n@Ln^N_r9UGV9^h@!jy(#CuY zKm8nx_v<=P6$;($#8x^(J}Ww!+9|xfyyx59%CAu-ZTnF%RSJ)GhpB8+AB8HO#jhty zI8n7C@#4*-Tikv}{f>zES`zW>U)IyirYT_DcoUi>6WV16>6cO)OWh1VShUJyh>|P& zOwXnWn6LhT@H6Se!$V1wRKEw+hvzt8vne>^PVe+XNJvabK#`dATI5YItKE8`KDvu( z4&B^I;Yh)+-5W7vxOQ{7V97ZAaef_?fP7|>JOB!lBNS5L0jvtX`C>16DXzm+ATeNE$a@S2Fdp|pM zMJ4}50ph%(XTks4=~eA!o?vjN@5 zueA>l*$i+2eDo7xZT;49tga>&Omzsr9D$*m188gWHY@i_Z>WE;JeW`F=Dh^!n6c*c zFHn_~cj5VB)a4i+|CnK=LDb%%ZrV@an2|~*wx~7&Idg5X2_y`Age*;A;jebhAw6>OP5 z7^r7TC?sc;>ArXmi}12rI={>Lo4Me7$OM zr&eTyq3XM5`|jUS*-9RZl_C$;$t7X!V3cBbNSl>8nfg-o+6Lk4JD{yT|Ft>*B*9D6 zoY`Cz35^B5l+7CjZExb`|8ya5n<~BO_YivYRo@*HnLA01V5l{xj;4(@lT2iOt?RSr z-Svqi?S0Z&JMsUZfa3FBkd>m{G^E*qsbJ(H+Nc6^mHmgazjJ1FwywFaK);aJtC}g- z+wG0l0as8C;JduNC6R5Nal2i<9LcWMeMsFJl$YRiUVC4Fi>w)Efe~Ru8kRmOU2&zZ z{aub*+MK<(e%Z?m`p888ry{9@wd!8N5x0^d>C%E4S|8M#!qW%o9L9N`%eA3w}4t zX!d-@qe$Cnu`im8da-()P%hbYZC z?q*UiUFh$X&37h0 zMSQJgk9yJ?g*(5Lq^m=+H;fN08Eb0U+(DFxG4-J;V;)~X)rx|9B{9o4=kbpfv5_g= z3-7_i!TfpF68)ocgkvBgCm3=pzb!D&rN<(@EQ%8sqxbr*)j89{Ft@7lw`8Gu zsKa$wb>c&u=A@rYkua@}h~kmAqPxA>=S{ZIjCsu+w&37T%Oo(B%c`L1G!$@E0haEgze$P zs%{>Mzh!C+z4_%G9*Xsx2h&e-Djc7K2;}~}@5Qj8-Jjrd5_Q5#Qdx$!LHyw&(C2>j zkC=Vo|28Q-w;nW1n$~3S#x|Nij37-zn8{<3^6^R*1R=$fPSu*c9ZyspcG zmrP_q{uN%r9vH+OpNuFAXHZ%+4-;!Wl$1HrBD^cMQSNpW^(~b4-?ju96f$biu|853 z*c=v(y)rar(7ei35sQex{&reaapEaNXhq&Wh; z?PB-a$BYFyJw~c8d(-!JN&I~C`#<25JRE-;6cFC7DfP&?@U1UqR7>%<0cl@jvpyGg z7#e9VeNpaYh)(-271NN4NuoyUwxV&T;t|5U>x=CrWK$o6^O&wgKg3%Rjp=S{m=!Ny z?*+1rO!3gw@dh?DzMD%^jVSjF(iP^>SDErOE9motHhIvYsjK;4%(GLh8q-CXu{wF( zjvkhO`a?|YS?}1JJ~z)bc1UdWP;VPJ zDH!Y65-`%WgHRWC9hbfv|JCZuJlG{vJH%988Dw~0T+ADL@-ujn3Z)Pi!!F`W*Gi5oSLym0{nKLY55s+zV1$WlPY4QDchjnR)M|wsg5) z7c?FZ*fRMT7xG)dj%$B<^k;|ZM36~>@B|=c@^LI41KU-R%WU7o4Kp#3wHbZSDO^~3 zKN^>h4ezU9t5i8&dP-=;ZyqHdna-f@o%qKgH?z{clFqV&0F{;1RwSarAg#V_8&77& z*DQAR7nA`}51pX-?(;;n87_w>pGooYWh9N(3GtYk+qU-tnuL*&le-zL{}v~Ml@laM%YE4Mc5$tR{|=jqbEoS9c@?(y(+P4V^pFKbw6N;lZ=o||ERwk(khC2?!X z48VDL)HutF7AtD}j+o}Z#(<&6EuT1yVjqtZ7Y&RLKThR8a}Y^o~aV2aKptSJpHD(zRGq)cX@wdQGdJM`7+SOF1CuI z?g8ojbF5h=xh!)@6LBE6=c5%Aa-F(#sUGoNqE* zemhh6VMt7l#xLGrw0`|l)WEh#JR37?P^hx_Cb_Y1-NU?VVx|b}qVFYB7-ERZU=%c{ zy!su=(LA5Gc1=9Ii0g1}8E?VtV5oL@D;k*9${_?;)+&TB`SbOcY zYUa)d5y*u^(HyA>mvU2iUKhGKHj8E=j+eOx(tkepa=W7c&XjlzYrWF(c`y0D1vgKn;#lPa>t-ySht03Vs? z=}1CaUL@GUc7yP#J^xliQDbLt)RrU|4H!9v$zTnn^LtZsr;a_<_LMeY7>HXm9e+_W zt51b~ISfbXSlv?P9aUJ`diL@Q`w21LCmsl^6A@f8ZvNgq!y9lJDy^xjR*CgJ}uANDYzKw=a1mL z8$D&InK-JON<}v{LQtAp=`SDDG$wb)Z+7vrCPlnsM?+}2RHMb#m)6Xp4&swFf9`dG z)5dL-X~FKU$RHxZ^H}Pc>i)_{i{TCw`7?wSN1PfSZjf$omm?g&>B(I@zjM!T1F^y`$XbyAFrdbf~>dd7{E zG}xb3&-fn=3Mku`d{IM7l@vHL)9hlrij3yfB}ZrbThwTlEWjDP5eqbNRmHIRl>A7M zf54QRX%AR83bss|z$ozwX5&;ACrWSqiB^`23Ti+#BsV?jO){7RGlN-Ek>aXDPA(ey z0dJX!EZ#Hf2FOj$CDl1`B`T3R1~8mH&o(RK$&S#Nn;|#_o8~t5RKwy36nZrhF(;jR zKI=DCFe@EsN%Yc|l>Szv&F z4SKNG>xe-;p)ciw#b`Gv;Jr+qH;vc^{^C?Iv?AMQs+mB| z|BeyrmdRG`>F<&n1hFZc z>32T!!^JHAua)HI7i!UUhh$Gxw@1)KJ`cZ;v@|`x{ce0#BVyxG8k&t>wWNVH+woCXi$Y1f$bgnDSpn!+=`4mqB>JB^%Q-^D!~pWFF_+T0!kjy%a=jS+Zq;EC zJ*^_NoXBi-eFJvWK*2u0X|k9d9`x2vPT-~UEmoC_t#EF-j_WC$FQk{3@gP?hP(Lh7 z6y>A$yjkvB`isY#NLmUD7RSp+32-gdVj^lfr#s;HvTX->tH==txk)37V$1=yxXm_v z&4gF0P0h;rQ|ojb9?V#&Uw;4DMaUrs#elM9RT4;-d+aP&S}COeb@~dT8fekm ziL-6qtH{6*=D`BpQh0Pr?2K{d zh8S_P`7HL#VO4mBhZ1^F{TB5qu3d!)pUWp!LyHzqsM&3J*lEC zPZ32f!(aeuqNdCwg8!JrMCiE;lJWJPw3qdwD%!(*UIOJ>SRKB(tiW4#R{1FxyaAp+ zY9>sy1;xcM*|Ai&yq#1YR(GlYW|X$!pBePS*bSF~gH@lRV`X1IT^5g2%aH2DMGuDf zMzUM9ZK2Supd*gnCWDbn=3C^Eyrjg@1REyJSuE+zejLsNMY}-F^6zDzaGS-&rkAbt zGn>!Cbz|{s!a{rNuYY|WVTRiWoDbPP_O?Mn5{yZE9&VE}Y`y&cD#QxQ)S(r}lI`A- z%*)JMRvccA=jCkaR>a#Mh=^qD_Pk{h5v$|YY~GQ69BOhu`3S$LjC=%jkiWa94-2Z< zj8$q$)4828=E+`SNX)n{}yN-+?-ohE}Qnuw5M56bWU&)nMt%;wC9z_3i!lG83*;|ArB) zQv18FSRk?C?oSFaqogHt+sU+PbN~}`gHR|mIVc}Bl8Clm7bO3~j6ULS<{UeWn{Suz zpcS^b0kloFD_?`{jSmu|>K4y4Sc(K1=1iy@Ys#!#Z?!#)Pg$W?{QLN5pu)_Wy@#%^ zudbD~um)nxS(OYXuU~t700Y|cqsm`@%4w*d4k70?xDo&TF3|KdiZLXhAo4!}I?Aa5 zpibm@c^1!Xk^+?%d2sZz3{o4$8m_0T6cInq^1E2T!c>X+x|?&O0~n(-}EJqjnfl_va>gMTU3s1aZB^OLA58x5`MUGwkT%( zn*$@C(!FL}AodsUy*9s?x&_#}Fh*@5&p5Lodg{xDUgW>WO?39`->vGB%IxDX%+nox zL^>w6_ng8YJsD(`tOg;?hnEXVLFMMv9e$#lKR44w+RHi{r20Gup_PPgy6&{H5eYH8=`8{5YF`r}XJ_iU;-ZaXKyGx66+=Z&W7l8Uev7HG|3C>R z%k!0)7V)q6JP?1kQTQrdL_48#G=M^ea%p1Wz^f>6^Z>AjYKV&`QIK8Y!~+747Go&n zAjXVU9qq3fAheEs>NPhpNK?FSHP*{XD|@QS8~dt~4{1jf?6OA-ngpu14)K~1Sq$}G z5CM3gVAF8Ufb6@1^f-c=4!iGleZvnB&seU^25I$zh0iF>&gg>3Kz6sA_8oBESYn18 zpjpx;RvasEvp^0AGe-ur7C-9w=lKq}P)Vqv(TQ7wA^98FlBSOrazs9+bX@Wo#Bfkr zTQQy_QFPh0ShJd)hu_ECVO-j}`-Jk)976xrcNpmAUVn6RIAVs7fy6!gRK1VSH+{6Na>IXo*ePtS%iaCx zT=DBbX;Au(0gtc(g1%+$)V>KGLxX*%hPhqi+5F=$yPH>I6^eId_Iuqmci~1I!zwHM z%2<)a$B^)!j!cc{p!0;k8UWc_u#Qco*+1p#MciGdcHF$y;z*w7eTw7gxuVJuQEymZ zjq11Oy(^(zKA}5oQu3jT+mE?8s28j;s3Zn?x#YDSiORorH}`z~HK;Nk@<+z!g~eP! zX%7RgruVVe{6m>wDDvQ-6+kk{Xe1g=Cv4tSsOSh`y7ZWDukBG;9EuuVRbPB^9uF-|0)?Q!y+9D-m6|D*(2G zfZGE%x=BYyCf&<)Q2g6|*H0rh13P1rENg~V&XnGcLWU86A%^W)PUx9`zb5BTqDUAv zFIuQD_5n6AZXn5d9{jA2fF9-oG>jxNqF+$(9^1P7qJVOH$ro4hg(%bCb?1qYu zM{lrq>gj%Y_L|XP+g(tg7N*~xvSPX+2jJB#UVA;~CaUJ~Y>0TYVhwPe6}EeQNRH{H zE~*m;E1eIj2c3@aXV~8WO@}|$!o`GJ5JQ+Pud^(1o|stozwcRlZgVUAXRD{mKGZQ_ zaptb&G;`Ck-7i7B<=4;}qp&IYmkX+Zqp>ezjyJ!m5nHaie0MW7ltKZ$b*}DDe8?t$8`*`iL6~GDg3L1(A1ojhWFvrf#T) z$COKcD6IYf3hM@+JbQPWEyf=Cj{)ZzyqHMEcOSI*Mlb>jpE%;Ad#j!gjx z+q{f~L!(;9=EnIoQ3q?IXtx}cGK{W%W22toLAes9V-L4`Za*iz1#Nqq)I<`^e!5#OjYMt4m3~)hzH=m8S;vOqj+2hRF?c8&jI`r%M_X z_ECR*p~iKS*C-G{-HLiq0CcHabenYVi(laltBgcnnECL$vrQc6;t*nk++WAXAfPIL z87Rg#s@qMK&9orGtw(RWAM^WLtg7Nrf(@7D)|*-s!7!P5Tzd&PI`BBa``pxJ(TqT4 zC`JRCqMKA&ud6|)RJb0=>j{wVJmIJ=kj9j!oQ5*G$pLNj_i46&yCeZ2$%IDq%Gn2& zMk!lBS>8C*pbu}Czvc04a${+cpF6dGywx@_@P7GKo@m=xJSq9d$Ba_j$2L#U1!lWP zC;>k49uss!#_#tG@rzT0!8(9BoUVYIS<8(dsLl%0H|kTq#mGEHTUsIxBL7rnb1fKw zz{E3PS#IIelf5W|zL~EjPomx7FBdeFI1TVz z$2tb{%Xy?FjtWNd{NF4;a^+7 zp2g>ue(Ac(n@IGi#2-V()?~IsYurpe_PjOg^)w|S87o_))2_DX~VkPvY@6@v8 zJqa5l>(_^wKWy0?t{DWv)(7iS&2Co2b9*Kn$FaG25nTWpFv47BPlw7EPZvq8FjV;r zloV^iO~W<=5bDYH=kMzv zcU`Mcn80%UjMX>7`=DC533o0hsb^T5?%WcT3K_FY$eT?t1CC;!(kO2Ud-Y7~BNMa!QQSyuqSF4P|J zwUxu7iI${a6rz)BWOdfwM*A_7<*agu^a~4=LONJoYZLp7DuMGMf5D2?fCnwLGM%x= z3(yh=ZxRL^JUO3`j~~CAn&3t31)S6{!hE{2f(;wB*n`HCNnM@v(-{|9o2PKV$`_(l zGY>`Ru^s;70#$%WGuXw;i!06TvRLc7LxcywJTTsO{ddeNcoh;skqVjj{9SB%`Kr`s z3aZRVB0F?>AkXoQS$pA%X<-;(*1g1nx_faQ52n7>CB_7k%)^=OpN_ieV3mN8gn+6t zJwdRkkzfOL%%;U5>Mmc?uh|`gq&I+O*?>VI;xp3XsHS)_8~Zz%D5!7T=Z68~iep+z z_W8iI*B`=1bH`QuH(t5(ccPnm5ZJrGc*?@2p}&+;OaV1?YT58!_5{Uz^_Z}N#MDIh z8|$=i`b(g`&CPOjvXJCEp`JzihtrX09g>zp-_CrDlvDJ3q2T;qrb)$N-Q=Y=i{2;e zU?TES?Q-{48eI?)*QivwYn|QjaqcK=7{d%N3TN1n52%t&l-NI~=I9aZ*^W)^zvX0S zZO}fwdkoh~t#J>{KuXA7+rzjZMTNZ_#QiIKN@^lt?_yH{&$oH6IFC~iG}aW$24L9N zm1#=R5}#IT3(yPG8IpfjR^s(LcC<>ZMSIho?$C&#HT_up+WZOl#*P?^ zwNHH>2edR*DHbgxcOPz3{^>rqSVp~mGo@$X%+g_n)t9Y%I&mX$ld1;vTo~$8wU<9h z+AYx}brO2m8bp5+`vX6F-PTrYi-%LX=fnSFH`+6h$F^n$$G(&A3_!E+N!Zf(eYKl6 zZ7K#%JKD$O7AcS{qAK~u>(0& zN_b`Db78VbCJV@9pEwie<%lM`F>MCKkuI(}#5{c71wU)$D*=I?-*fxL3tQebHy!I} zm#VbtHz|pvAuxiAe1CHc&1t+OuTzfpO8dLLuHhfqFI{cG}Y9_wmb=tWxm!+kB&6}504)& zcLfj+tGV78JaO-}Ulaa?>0sNOA{18LO!1EDA$=VGO2)p8e4a{jPOuVoKgZIZJdaK{ z=2byDyV3IIf>YSPMoqt`cqf$fCsa@yL_cX4#h@ATF!F2E9A9SBdr-Glo+w`FgN|LZ zpJo0KVA>5NRWCcH@g8vKQUF7|GJ*EtpT`UCy1mR)2Iw}+gXbFW&}2T^15W$jB~e4> zUV*A4y)yFp?C3S-ggTPLJhuHMLw}=r@OQx-DtNw6%M98f*ThXpcZ=)atR`I1RH&nvY3iNjN|F{~YQ1p6wBTsVvlr@eqadJ?qUx^n)F=!6 z@A@^d!{DVWI?&|_aAlh`(bAMrq=xOPEfpv7?cZMzjq(>sc!osm5@h-v+`S8<3##^v zv#55XHD1_e0Ly2^SXSuWT)2TU^QIWyZ28O22NoZzoxXi6+a<^t(-GnL(mAnk9@HHh zRqORaQ>1N<($N+vVUt|6IX*;kztL~50}+)#!Wr@7SQZ$IC_XN@z?u;ako|f83uiQw z*2^PUnK9%)q?x@p0>J*;M559!tIm7d2TC#{3DUrgp)w?tG4FhYtmIg-C4Vzu(S9CV z=Dym|IHJ_``z;1wSFpMPG$<3ieUk}j)H+Gihh!&Y<14vgS&wJu*))T|^oJ|8ff4%c zx-yw6#yB6bi?|np=m_fJgOPpV80hR25ESHL(AY*O(whGd7W7G=xN@lcJdG-#K6)l8 z8-{#&dF>!I#94!0BlnzCQpK4-_#anlTown>Uxsc}2!O5h@+9-!1-<@I3mZ}z%AZ5^ zL{fV-#Gqudml(pT1?;fO`}RB zqPT6z)PUL_wYUo{85cZ}n*69dlC%zgeHoD(GYuTtpnl7|jKOiCsg<@P#N4``kpak5lFb3+QifM>cRaO)-9B_Ib!xI-}HNk zqGw@gQr1Id9%wa+vXMmA(C?eQYFXdEO_bTr_`K9nq|XD=H>GU&^go2|EwlBe0CdN` zJ5oIS8L2`igejovZ^!^Pr`foys22@Yw8J#`adLno5ttGcy zn@!ucxDy)p=~pgB<5c?R09P^D{wZ%KDp^K%gN-X?E%69#t9z^WVWiOmmhX$uVhK_g zTiX|*R)?fNEszZ^0CdW6#FwybJEfHn4LL{XBOwRrN;PJs*B7x9H;_0-+QcxXqnTDwjG`RtftDFFc3iO^rC3A~-YRH~( z=8Ovk<1n{Av(=|cFp|NLzKNK` zO7noz;wKWVc}$(tKO&72o3knS4unZuc)kjZT+p!)T%C5m(y)q1@jrV`$nyl;gVBIM z-x3?SxX1_@H4%?Trj< zKVL@pt7bWQ`u=X|xX8bDYLPcP#JSZU)%J4>47Id4EO!@u>Y|=@YI6BY6yyu9?6 z?xCwsTXfob6^4e|5u5O`aAqH;n^N%^m4Ir(l_7fs(U`Ux{wh*Wu`MxxVww)q*pjgD z8UXy!Mt3z}#i_a1T{sJEr6z_m_yzl}zC!?o1 z(jM#RtsW|^6%D*F30`{u<@`2piE_%ORIR;)w{)ykWW{P>eAw~i1vFyHnr)qaIn{3d0G zmj`ND44NW*U{l|U;xD zukD4TmYGsce(#jt;r-ngxk-G%GrvtMmc^+berv1zj>CGQCTMPtUn}X=*F#ek%gEJ0 zuQ`ztltf)%GF@EAR{L43it_-pwuQX$Nw;P7TE5L>F00WUAVbx39Gy`Qgzf*qhSC+E z-P~QrepwC~Kc;(jpwW$PC!e@@H8m6}GJoaq7+arj)xwo}B~f#^%9*(V)ZBngq{dHc zZg=~R}H8qKSi z8G}nAqVr}{LkbH=@1bp5(stLuFF%<-G|sz+#!=CIw6j{;;091HAC(`JS#4jNWb!=6 z@dgoU=x@GA6%r)2_5J5lxq(AFn@u1?NC5KzVr@TPanT*(0g6*Mdd<1S7kd*+J}j&Q z;x8iqCL*f0>vB;K9#VNng<}0^sdBV2Hi@Q7#gH+m2wSw8Gp#wUUA;lsN(bg~G23<+ z^vGFR1}guiZF^2G4U+SyxRKQoS_PujH8DsXW(H3o3D1r+v;JT{vdcsUZDeA0H z=pNm^7>td<3jV!wgr9Hog=UMG)}enbY;1R|a!Z@ogpfX7+c|62=VggzOTB^o+veF= z6e{$$p?TZrX7)|_51&V3g9jvrDdOJ5+@ZP7HU(O-4HM0MtJJRM|k zOJY)aO5}+o&l|#h-EsaXf(asE5Jm=i54SGmyF|_hCPw_sk8swZ)t2Ku{Cg!E(aBP~ z-CO(XZ+B+a#MkZP9o{C+PJU6QFT*ha63cHm0izI|#z4`QEa7|Tdk+buD57zM5`o>v zJjOxw{PfL%6XKm^i?k}k)oxDnZ_TXNaS6HK+@l4Jl?two9?U?JZZA}h*s%LJz4dm3 zYD5538#UVH7+{#apm-rK^;x}EuNagweCzab%|W{6le98RKM zn=gY+dzmw_2emMWQ-YROozmRJZP3_r=rb5C*=OJW)iA4ARe5n_p9Xkj?t#ljkqzpo zZ_AO=cutKi%kUd29)j&T*ZuRgf7fUSdM9`?9R^n*I#1h=$gb#GE?E36GfC>1$FsMz*3cv#V6I_* z+3A)0dX@)Dce#E^VgR690H`o(B&KaH069_ZYI6n#2ce@F0Ax%d^Y8kF0{oH26*BRb zozPdmX0~s=3O6r~*+7i_E_7ccsB$Y5FFEY3gx@LX{e8iXcwr}5xFszjptJsocC;%> z5{{a|ShU@b8OoNdk^%6dwnK~YAAmsTRy3^o=LYnNJD)0cx11(Q$(TJBUCh!UrqwZB2k(Dj z&r-Pxb2IA#Hs&+1yKM3HE5OwAvuz)W1{}!zoRbK>OdFF;Lbz15w%z?XnwK0*S5JaA zL$QmK_n=voF&S>foXMP#rs-@&cN6Ug6c0brxdipyy*%=R2zm)K`-7tDwop6*>fk`0 zM1k~SlKpgfmWn%N;UO9?Suj#Ke)s-9TEC(wp@=zuxn6XrqAn?;IwI1e{RUtGA$=K{ z%;#xQw2oAGo#~&j{U?FY;otwi@sqnVV8uo-Y%D*YCxGFD{CK>T?_}1bF?0-Qz^lvkFRWiz*5`Fgv~^}BdyOkJE{x~32Fp_v zp&*W6v&{76q-qhUPjh^C!7V787JZK*>RxMnypV_Yd*A%Z_i}TNWX_C=mOX{Zi|(vH z_Q{FVUnNLmIE_Vw3;>ck`fyr8x%Ax3eGk~y?|KUVEgVBxBGsS%u&)n)Ez|LAz;e#p zjcMEzUU(b|(6P4jOZC;lY#$MQpqo@ux=VbcW}5pKm~Za0a%I=N#yVD}l1&3?LH&tz zX(Ul_5V4nOd~!yW9m|$rG)J(bp?&r2CBi`IA7GGglZo}N8{jLa0n{3xXZ#f?A;Ht( zR@$#L`Fmr33AJ=}DDgYk-YEv5r7RyWLvWpwZ!o^S#P-n5VByKxXVe9|il*M4>bsq76al(>$VK+ZqgGi|WD1%=V=5ZC46v_ddZ_oQ>StP^Y zB{ha783v{~qafhTAk-_@PZdGsV=&h^W>si5Bq@BUIbY8<=`y zXp#cs!qm$1N53T55>&q<;}pzecK9B>?WJ%P+hwPAuCUCSE)Ak0wKBPr9HMR2Tn^Lc zq75(gdk>x-T&6hGP;lVlkNEHQ)d^Wrk?9w>J8+@i3ofmTcQi|kV+!zW1H9TGae;=g z3TCkYt35JdG{;64m~s)4zF=mkU>LOGW_J zw#w*S6NE=`c!qGam}pcx#*9V5I?2Um_uYQ~@Iil|XHUcq>|2(V0%tDn?qW(N{G6l~ zzgxgUi?R;|4iK|fraoPIXby3rbiYg4dke7D9(&dFHvq-W)SB2=fk^cgEzyv6j0NjrfE%^PsrajJ-rjXPvfb}Sw2==DjI6#anUQe{GAwh@#Zjw;jj1g2 zkFkq$!>hy_JH`Fn{=hVWIq~ytgGO#v)#ZVWR_})ZIjsH=yUzMj&iQwDp{Glu>Z_Z^ zyrOr4+;6hZ{i5bI^^Vv|+RI|^JQNxC<m`WI{w6||rBNS4ll$>bbPFixQ#1YhYw<&qpVp3lzom%#^6vTL z2XM9flbN~A?XP2yMyN)N>3KNRTXsB;9 z<@EPuug3%3E5=54dc2?iAhyjxjywUiK6EM`TI!nnFu2qzl;9f+{{uiBx&);GUYY>5 zaRD^92qWz5+h|2rz&}MGm99i0vkTZFxep5Y@MXAwVS!j>oX@)XB`kju)zmqbDdVGn zg<3@)r{GdiCZD$b!?t}6K)v~1AHQqw{WX;HgDgEHqxT)G?JyKaGA%nC{qNkZ6<%L` zE62IS;4}Br5V%e%g5$H+djs$Su~p^>L3k}bI~(8qtmF9kG^WxIRmY~}hm!G;i^pKM zDR)|fM_@3fJFu%zF`(VQ9rBim^k-29)57Z?yEmv_RzEwzb%3$A{aNYOsff7?0P#X> zyz+S_V1WxxbDL8Zo-fp2pkP%%S(Pi?1-X(lb>j?NZs!vBp96_y|(w&z2Il6&u! z%j>;-U|k)LPyUffhaGDNf3U43CsB)PV8E}hRnC>(`o*D{TQw!(-d@>-Xr=D_J$;~L zXM^1zdd5v%_gy+#Ma{;+?F>4Zt19bj-1-`1@_<1S^n&j`Ssp8Fgbz?Wz;`C)o_7+| zmcLv#6O*6AHkn;ji_$gHx8^6dYL(;DqjzreXJ2_H(NfR?SnB^8(ZlfadQraSu1|qj z{Yywc4ylO00!-O|v`V8u%Y+u$I;1bXri%J0X?(r_0PvRnQormvGDSc9`FzKmlATxo zX$ZGP$Eqn?=k(&#PRAmRM=Hfq$+H< zRE(47>TXRB$gaA8>6D-H6OmI$WU|+eOtOe8!e}~~u*O>}<>-a4JoZ0INsye}aZTqj zLKh6&_U^FXEd7|g1i*%#4Vy58OrE2D#X0{e5rpe`OmX=XRxV|S$y}d?;Ii0mj*W!{4;IZeV}J4DrCV=t2PuEvW?mxEUGOapU||Gk1$S ztN~YX*dA%wWOM+JZU8a*G0@8;MN4y0%2|ogd@~HVS&-)Mo4B%J3`J-FfNsiwUTma-N47AF)p`2Pa{&USZFs~L+Cptve;nNVOH*dyxRlNvM<0sVhqRid&A(Kee zGG=7T5Hhpbdw82_VdIeX2H7BMTQPWH;Pch1;UX*AGXY1P+ z;=D0koDtLqVdj1WSl|=tK^!q1%q%kVZ(dNz2Im;*cqlz`n3f*@4JC~&&>j(eqc?mi z9L5dItGa*@8Cwytb4X4Yp=2cZdi9*8C5msYRd=hcMG-iCACr-WX1M>Bj++65cSB%q zSt_Gum3dj9*ZV8Be`RY?pbYzyF0yUuIJwbD)pC0Eu= z-P{cq1L)h$UMTiJIJby^#t#H0GDk|DzgJ?J{Fo#yYsx`T6bIv63zrT6(!dCe516`g z*B*lwuY0<@E-oz6k`wywMoQf=Fa~Qc(Qx-$^oQmgmwK{mi)tmwf2UcC8>PSShY1l^Qc=?1rj+XPLAE$x)Svik% zmMEgA|82x9-#96eLD~@nGTI6Qd_3LN;pTgl@K&I3=sN8NmKbX#6*z za;b&`iivdh+K2b zZo5Zuf38|o9Q!OBlbnnWqOi8@xFXtr8O=IY?s?uF;YC7I!kB6J2}@>bqa$`qqU%K( zY!dxfV0YKuq_FJ%8|)TTzMUB9HO#j;OUGnOoZGSQAYJM)yLQ0*j+!VW@Og@h;62}f zEZ3vTZT$2ZRWQXirg8olHwZOQVAid)^L@@afZ` zGCr-(=(?EnEJ)?bLf?4Z_vYeg!TyK{uWk3bM8gO;GI=L?(ASc1cEPf;8BDtR%SY&H z#t!P-&7Y+v`K-JrKXH~Y4}l+krwGMSX8(dRw>GN{ud7uI+>d^&34R!;Tjo!tb|iVc z?_-@?5`(j*i3_#$E5LWQWWxxD)6LpZ`HphRlPf1NCAt|4#Ez%G}JZxrdn3``LIKXUbbDm>6f+G-5gVX1lUXyT7e zJQ6v52=MG^y!pB63vDT}>|!BA<9H$Wo#K<)GKdomk{PGDO9Nwh=p9ftRn#H zmDt#W`B$+v^_AvZ|Gb^&$0t9xCn%lRuoZ}cIK%-9VkUTJhHQrbq7h}xoAylp*}VU< z>V1nNQvIQ3H8WRzYwY+2{%pQ4bOWS>(u*XE;Me7Bs-Dv75F#d7S=ai<^kQgue$>Iq z?g^1)B^6WG^GSk^9f&W80YvDG_UE&Na0H_c6DlZgfFP5!RPYgzLiTjA&-mx_hz0v* zCAPc?xF~|~xS0b6U6s;LOv&Cv-tkCBNO*$_P4~BJ<>y|y z(MEuIB%5{qkQBYhp@1eeiGT<|0VgLYSAka{v~e--J0-Q&SLK7WVt%9F5P&!_3Dv$( zDixE>43#IY34=Gw2o6QK^eoy!yRDl7byni zgVnyz;{P7zGo+#a^XXSAlwaJJ9j8q2O(@bA*^?`3o4BxwA!|`Du}f(EZe^qY++y&$ zk8yKE1^nxb40~_9>0(j6=)PEMAXI841w#&SsO#pT9hpj;Y~_r>+2JbIL6`kz*_?S! zSNH1lgqF{O3xZ|&9Sm2k`%k9-r-nvlrM}KLWcaLW}QVB$*|kes1GDR0iLs=*PQb zS~au!MysEX$Kki!M()+_p^1#IiJTL$iqFc{bUzKfrwG8Gqp?!!C^Z&zYXQ$g5a&Yv1!~ka|6Ds;=1c;Q*$KDT_*W(Ieu+y}@S| z3V4IVAU&qmeY9u%`GrqBcNrO;+S629lGXdioN&wg<6TX}K{%nXn%%?UDdM(L2XboY z%oL|2pEz{`0Wbt$+f&@Xs6V!RP*8(|2%g2lBNA{vgT&kNxscq&e4ubcMjh(@^jq>_ zADL6dz|pzz_|jIzU~3Y=^zYC1OR1Rc^L*(qMzrjovK$Tbt@i6%8HCTxUn?XfGlT-N z-SiSCO&SqUi;6kaECblXr10vCPbU>o6-nGYN*a9E164c=2caX$tT!nv7h%dhAC5mK zO2AR?hs&}^$wtvpz^v?aN<}2eG>lbtH+O;K_7{V8kuc4^(}2Qul&8N|ukqhFLs-qAFvNk(ufnHD|QzYKk-eV9%Iv3sGfk`RB- z0Nj*fSV;*Yud&QwQbw>Dity0ZWp?S4h5!O$}+I;=;+xxb(xrw(n zC75LY;gnn$-}a zXzq}X?jt#OU&G>|Oxc+X7ooUYF}tIp+;bXw1M!fjyICP=#jPv3AYhrAgJM*u`2{nQ z0Hx{xl*IJl=Y-KKXZI#cD%quIFTecA%A#`5*Fl~q%~-hJA;HDYg}7Yc#Ha)Rq~NBg z#N_A8K9Xdm4AU%z%+~6~4FI5cyuMYco4C6B{ejc<(NuHhrPp{nmALOXA^Y-Pe%aLT zrqwF}&QxD`WG%U;brjy*qc+y`3dcs}B~2pK9We-8ZjjB1;J}mRQd;m3A32&u3S^b;FvdJa%t=4G zI26LQ3=u_EHp#3xfX*U8A5cP2^S(6z-}TRu4YdU!YNfL~5!aPpRS($=#5b?Zg60po zG{t_W^Zbp_q=<=%Bi{-OuE}H7Q6t%ZldWTaxo4M=6Cg*A*B(~MaMhjOB75n3g>BTL zzB^(=B7SMOU{q`6MVa{%jX$ZGgfq2HPF@}-vbB|>o!arsXMxBzRjS`A17MPP*|cm(>*h5-es0S0ng5KxGX~^@f*oPV|3-eN?|^(-MG9D zKADk<$t;V%Ca=8@e4>5C%?e4DE!_FQwG<%42@1J?t+84y+89gY{c!`vDMHJv))**r zy#M^+JI!J|XU06WEF-uWAmG!n@qSEFAzLj}%4XC7-oc4092~XEqpSPh8u?A_ON!b7 zi9$Q*vBj|X3g(y{^too2q;i;OBHqVzHdWVeVLV?=+uLUcW^TmP%@rXqQ`a@KTxMam zOO0>}<@-*%gvr(}vo7N{g7X^54`LkPjZb~VaY%ZZQI(9X^{YEO*B_bfpZStCM<idvzmVATP|X*aOJogzlMSuhkY((+2-3-IUo~TKyvQhI zBFXuhQaOI8Cn5M#fH)RlSE?M%p@CY7^bFe}b7~M#BNjgHhI|icEC~0X1N{DnL-5t^?$oKf|AK3Q3&vWD4bIzR_3NI?9 zxnbQHm&x|OonfxAh~hz5<4bF}oT7=Q8B;!9M|3d*9TuRuxZb@D1f#1rq#`fiYbITm zEhcj}jrvA;ezzOsFhf&LCq6Y^5YeR%*OxX)KY!d$EMeIDk92D58r=8|auwL&-)X*I znY4@O$)z=~Y-8^`TtwD!!3l6`**R(R^ZOes+lpDJY=6p--BQw}6*>dAs~(X=ky?nDPA1am@wP8PKA} zfEC8Ev%}B#wG>{Wzn|7YurjX!y7E7Y<-!S^rDIBA48@phu(;C0~jqdNuIZ544O|W~8-^-y{ zRXAMag*KBSF*84^V~KV@T z7@4H{-EZK%srdqNJbP~ruyCF`6?wVz+Ojl!q)AtbIyFNN$?@dcL)`Bd4@IxT>aGc~ z)IT(6FfEP-@BhNdHFfcNsY+=+`KUU32nVLKH93{!oM2$kmi*%aFr$x)a}~SE z7e7dSoyB3$;ydV>s8bz_a``|3OOlXK(a6@{UkZJG*4l4`%c_f!TJmOaVfRQaEF@Gu zh+@RYwB5G5(8Lx>4&}DkA5!aHvhDbwY2Su$&x;{f9744244=!ge_?aBmFQl@!JC=x zT&dvzbbM+paaxw{W0?p)d~ZWax$idBI6gwrlyEW!M7-Xr@#ghdADny zc^<^sw3MaUE}a*id~e`VJ8y2IskX$&o@=@qPH)tvK!F;O_~ zHQtBFypsF-%Q zIJEFgbKWiUML8Hj=`T2>{$_jQB7lk_)AqcXZGlj0tb)KKDbe92NMJ6{5qnA>3xUOmeXH0SOR59S9k8GXrKUwg9x7SO; z#9tRY+rH08x{rqR+R=m~jHdUFtFExem~h}B>#0LM5%*lM{jW|1Ks6fzq4|3_$DH)g zEqx&{-&ef+b4O`iEQDz)lpO;{_LRgld8rgvZMHcrXp5M>E3N=-x2H0o8A31!pEBmV z3R5*?kpl~F`94W#7Q9tt6?Zv`2N7*6ngIyh%3VOSiQ{N zF5q<^`2z!<R8%lo)S6i6C`3+Wy5DzQEbLK zgR^F=tf5F6GLkjO^Fn0cQ)?Y;fbbxwD^z|gu6X*?AJsT@q z)j3x#uNR&SVemw<>At2>C-L_Gu+U~0T%&g(FIhW|;7!Mdu2n_#iPL0h4K z6_}-IQh)3TdLGRQG}@%{o2Qx)(~&VHmtHRIT0GxkTt!0LLHh-YhA$R~hZg$&$|;7( z$N{$nqV`_f*+TN)^B9`4atcFV+^rj)%bsk&0D{(7IkCCWb3+TCII5!lB&N9v(e`X` zs#fS36%pFu-T8?zXhP(0(I?Kg!mC{c%y5#T&R%W`um2b&E&l1F78Ln9`EjfS%)&XM zA2)xu&txL6#)3ARZQm!3ja0uQPJ=9S;mr`QaaBhDw_4xMLQ-%m2=1G6*J@1jcUXVc|)d8qVn9vqO5(N zze5}hcvadGv#^EP;%^Ff!n&V-HJ!NLf8$#F<=yJm@$|JzP#K3o`9(&B7|2l>5VM*x zHZ$zpV%rTR&g~hm1&Zvg`|rO&b!}NH9M3|Na%;1KFA>S=U){kLGHKGnMQM0cL24WX zdvR!(1Z2}vuDJEOZfSn=OVeJrQZC@q(!{Pb;YfesvhYOtqFK(Bcjr)>Hk~0-1FAi;n=Ppdp0il4l$5l|#vVU(4Xg%hE$nE{sn z_4YB`+fDAz(uHqEUnFuMYV#C*RiClHmx|ge4lNAGQ4T?yK{Oq|o4pXz-e~Q4t+fqb z5P;GdoPKKbjgFdq-|A|bq-9zBB11T=HYl=8!^3^295VxJJIJG^W(Ii$lvCZxVUX0@twOYZyS0{EPTq*kqnT}mE8|(^)v&${N zl#W_zQH@pSRO5=TFOWvTc~*tqiF_*x`NMPZF4i_IkrXV7>Ol%#lx&0!##sR*>Uu^p z&uZ@J?>?9l&nP7Sp;;ZPOj2lndXG6u2*q6+tpaS&1aRS|D0_`M_ZE@m^_XmT@z=$T z1KKpq$B)dtlUj1B+p;pgq1b@=%FU78ED0=TpnOPXkYY4I&UJ(Lw$X#_m9WCp)}!e4 zflM!S+g*Zax!`+Hd1bY?i8K$&3HK*kOy?Ug2qef`_T8KsK7(%H-LP8p;ca0)mo%`6 zYSU%dNMV|NTSo4hNAor(xtfK5jzS)VtFsx;oSP&h5E5hb>bv`4d$1!#0^Ls2;(}75 zyNEyS53G6m_VJh(_0tL)Hg68(p(Jn36~~hI5w9Yn?=5cE&2e%1l%Cjr*7>u7xf%S^ z&NdyefmHc8tWxNe-e^+7nP3rw1$iam!#T+f3dJO*wk41Uju-bhn zp@t0Pv0{@8`LxslQHxa~|J$rTax717{Zfr?#{ELND}IBQCz|};p=K{sk%*D<#e7sP~`Lyr0L%@K6`f4jwVhoX^%LfzT0brNY6NBJx;D! z?arEijKvQTkxdxUfx+`lvKWISbSm%4!p`rrm2nbPdc>rX6EY^AUsXL0kM93|C7i9B zv)kuO5nyo=`h({MZ5ZN(;&hbepz^ZL;5t zgutkbM8-XgOPZy#r>YX>DxHP2tFCr-Jpepv>}`>B@tectv#pyMXSc>L$d`A1?r_$Y z=4Q+$cFT|0W|NI`$5>+zcp``4A8S><1x9vh@hqJ=uth@G2I>W^`G2pC~x2I8QKJZE*^< z%#!#kB3<(!;dJI%K%aWGi17N@k^_q4|F-XV1YR&7hrV&S2?s@c&KK2}8g*A88pPI- zO7l3Eg+t}8t`gnd_*x@y!U;d;^8O35Oz?&LNPa+QAc4~8k2Q?oi|Qq5KDDwAb`cYR zaOv?$6&1g!j(%Y>-qXHc{hMTjKHPnQQQ?6+!lG~}j37L7Vlys|uoFv-fv_;AN8}Ko z+Um8k#s4Cl(BG&F6X4Tcxy7}q%u)6)1*Psb!#YwwQSWvM=7fB2VY5InrI6Pu1jBQMI%{Z4S zcJyD~AQ)Nh%+q$q|2%ybJBV+V>byG&4=Kr8ozK;eS$UugmulQrI-&ESDHgp<_*s3o zbwh?-+4lB0>H=0diT^k$_$so)dVwCQuBG=<($_U8u3vjtGle+M`|rT6zE{F4_Q~e| z%)LMSDa4jQkH0P7`CPh^uED#;e|bQcvHb70(8x@M_Ex<2$Kpv0LjjBX8%~lCC^zje zj#JwP1RXCaQUAS$gN7NKIkaTN-5eLb9$0*jjTcUWRfA%W77-IQl+~D6&f!P_sgy+)}0-m<79gIs7n01`Cw~|N%rqqq6<4;lp zbZc}=9y~NeDp6O2#Bi)j4cfEt7nNL)V&DF?@3ncF?BsP$BOk#&$I&4)q9w-#QKQTf z&ZaL$F6668{lQ>zRX|fsj7z|vB=)DRuW7qyh2Z5$w_Neey$p%wk=0I}*s7MmVm9B; ziK`Ej0PG?YL6RqT%q*2$Id#}jIkK7oC)5UIs!H_wV!Z1;b-$UNuof^x=(o)*r_=cA zt`fU>HKG^R1X&2pWlyI9XDFpka*v3y*rd-D#k;cLfOR0Q%hG*90*#TkdWNrQ9|Zk& zs&A!*5z>*7YTg}Fw2oU6o9_hZ687hB=Y05_TtC~69m{C)A^98BJ+B%yh$Y^6hbenJ zr6Yx=6r>JmNv=5$EN`mDoS?gyB^wrg^gObdW9<@h^gK`uRFmKOc7G`JyX~Ln|6uRF z3n;&SRhXLMY+R)vsfNGZNyc}pTzbM;`!3X{o^J#Fh7G9>)Y_f~R7Ns9@e4jI;ocUd zVdaWe-=Z|AHE76;J7jE08taRv6#^5BO|99vcvjTWaddFXAxfR5_Jh`jK{;(b#4T?R zXJbJ~X;E(G<&P8^#O>+{cwMSI^wbzRe zoV5f<$#;1Z-kD82S6EzIxpL`!-O)7-Cm!=Z(FnVYvC_UAeBG<39X~<uK?um3LXiDBB|=N}qp zWt&wkkKnI`?uPX^jE)68%}qdfod`fq-_P^rkTafsNS_nONNAnieYI|>m&@xc9jmC8 z&aPu7O#0)C$9<*L?{Sl2H#M8ux(+xz2mz<#h!28)*Uq@esAz$zZw;6Q9`Mxi3WlgW z!IOUvm;F9U`kTtd>p(LCwA2-I_x(RxRx=(eoG^{ zv8IC%i9Q1|HkK$dHs{)HJc7sY1iPvkEKtiA>xp>?lN>7dnAOt6=Nk?>y{i&DBAhy6 zQip4Xh^TCb9nH=>ATgeqz#!O7uh^BhdZsMiAk}Hxy?M4z`$w7KEu=4l=!$)Gqyc_X?JKL; z`@O_X1C6;QFXws#2zZ+pMor(ZVrW5GY3yTSo1PSHMcT2C`1z@|bzpkH2sL|fl+hum z0$a=A)-`ZyvX1;Jwqq2Y!}hf$yjJDa7><($YY#L1m+O(}Z~vwZ_tDS=8_ zC;xux1xY7clsNalx!1cI`92&`%|5lNkb{e6$)=~HV+i01AH(N{sbZXkT7#u+2TMD@ixUb!ur9AxrUvDkII^1VzEUn{$7aJeA|YnNnnee+-5%oJZA@_e zUesQjD#|AYrmML-l@mByVb1|D00go}RUhC=se^fL7R=akLQ0&}udqBVCSUs9KW`~h z4rwE2t{252<*LdnXs#rG(p8N|=Oi6-BP)rJ0y&i@F+kf-A)QuDw6gB zy5}GauJ%|TS2kb|&lfx@{Bg|428tIqZT*|^KvHY@+G_7O)qtVd7tX-mZXZbyaC zhAQj;fxkiyOoYajq20W?nyY|YUXPSGx-a;~V|px0dK#Q4O&G%$Fw%pLEGeOf zFgH1%qz>6&`SJ+P)slS%jd1(qLvceF+?Ot1!F_mfEjf{zLZuV^+V+-w)U~iAmr<@J8W9eX~BK2n`B-#?QpK+2BsM_xtV1Cb%E&alpBbRiLy zSjkWl`#lFK-5tlPnNpIc!7CUWyP;#h=Dp#ABdNlse~f5S1FlKdO=d)VMo)D5A@ldy z-Uz_iV}X2s`nRl%Vmp8nyrq|0dl(#y_1Z+GpFxAAb?Z7Ed;%R(4|hgv*7lR1at^I!C;1(B0E9v_`CIOF9cnF>-+mEEbuxrYq9wK;#Aq>47H2dIW zIKO-xtE}>?NJMOmDJtwd<#OmC^R0jtFOq+ONU|*8)yoDp-$&jwV803uT`QlFC^XuZ}q~^VtmMU9Q$K3k$4CS!8T_|0edNKYKRhk_dhtm<5ku62>}TY9>Dw zm>AZKMEwANv!~!6*#2Wo8CEW6pc37K+LgnC@$_E?R1$^XH%tY|WX1)BPJ=(y+*{Av&KL?ipJjY&<2f-(94+5>) zf%5wzVrI}P9j)kv-JQ>B7mGZ)8%d!0(<^iVBXcaZ!cEN__&J4C8YHO*VpSZ5r`)Yx zK^XJxJ)}7e^%hf6qlf0bsI5DB>JJwK$qE!C4Cd^0KLV>2pDV}M!z|pmmXtSzueyAh zuR!x#SflVt14EYcC(OYq;qN4qT18V~U9A-kHvz@8eAnSgb_t%5sAetY zP^QFJV^^_<>Fnte{&^j(xr*ueS-Lg^9Bp9uE-DEBY+^gz&+k;CrbW^-uQl@$`3OOM zvarpdO~o)*BqrvVemD{3k*#A7u$;^7W;qc-wWT)$mc}DZc)^!idsmFGX>9>Y58TP7 z@6LYUnZNXK4|d|-bGB)2+w8n0s3Qs44(iF6z+W`9cg*o0>j7mM5%A*mvhELf}5( zYdHYmoMIqTVBT3_5Nl{-lKc|oToK5%*#JS>|_2C6+*5~Da8Ik zVP|D?n(eYP?QYmPc|F&k4`@t`aVRQ^Y`=i2N-cxE<^{QyaX zN2dH{Z}ggbBq~-ebRv%ExOu!d6CLk=ddm0drNOFOx7=`b6S5f9pA3zL(&gl~m|{OE zWRQRiQL;{F1-5fRFn)5suiQ8kUabGL=vfojdWL3r;3AdPbieAW$F}z?F)-dWSQL> z3{Nr>N5|&R&9B84z;);XfNLL3+;rl{o^%Z|!d)3pZA+SWLsAlwB1RU9%SEn%vb(=4G=K+Cst#-)dP z5eF|^jbb2U{14&m?V({~s;IPi*|S0U`^V)L3P$tTW*fa^Ag@JgoUc1@J2rPHw)ub! zw3-PTtKQ|ces$OFT3Ho3ryV2;Ha<`3ri|Cr=b2QNl{Y)@j#?Enj3mU69pewunUg(9*f-`*o zgXWdjvv_N9X`KJjgjPKUKIK_>rmTQexWPkBw@fhT;5_7&jam4Q*q4+_e#Fnh(r`dS z6>=|QONROM-{mvtlGDbKKARaqcKogG0v!ODh_vR=%+SiUm*1(3CXtGM*Ml~+OVTZIGZh6~S3`umn;(%F+_2@CfsAlC( zS2V{Wfzv$+6n6c6R(H5{^Ze4gp30l|AL{7ZURbdBjs<@ox~%%9iU(U>lgU0Xu*1K? z0m7Fvm4H>dmDTu|8sS^8^XxCWbv}>0OQdSh>Niza6tS38e;dLh3PldqNw~O5@U#S| z{8Z;yI(yl#F7I?n=-HOqa%W*k}WBY i7R^APWO*<$e&cVfOy_9xM~xl>d=zC>WXfNg1pN=(TcAY% From e727a3fe2387fb6ff4cc3a80d1b5420e100b014b Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Tue, 4 Feb 2020 08:11:29 +0100 Subject: [PATCH 141/246] Update elm-pep to fix builds for IE < 11 --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index c4f38e9d6b..9b5f99ffc4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4690,9 +4690,9 @@ } }, "elm-pep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/elm-pep/-/elm-pep-1.0.3.tgz", - "integrity": "sha512-Tz23Fo0t12FH0wWdRgGbvgSYfB2sruycV5WVLa3LmA2y3/fFHo4FYB151Y3nWt3G+IBIFXrC0sb+psfGuzRTxQ==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/elm-pep/-/elm-pep-1.0.4.tgz", + "integrity": "sha512-Agx1VJzKKjRWL06yipX6m+Ew7WLiB73VWdkynsFc1CoA4gyY/o8wi9cMcy4B3A5DKwEEqJlr5FU2IsKOEwKG+g==" }, "emoji-regex": { "version": "7.0.3", diff --git a/package.json b/package.json index 5c8456927e..5ca591be21 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "url": "https://github.com/openlayers/openlayers/issues" }, "dependencies": { - "elm-pep": "^1.0.2", + "elm-pep": "^1.0.4", "pbf": "3.2.1", "pixelworks": "1.1.0", "rbush": "^3.0.1" From 3082972cced1825b85f75bbe10ed06d7528390dc Mon Sep 17 00:00:00 2001 From: Jeremy Smith Date: Wed, 5 Feb 2020 16:46:45 +1000 Subject: [PATCH 142/246] Updates the option to be called showFullExtent --- src/ol/View.js | 23 ++++++++++++++--------- src/ol/resolutionconstraint.js | 24 ++++++++++++------------ test/spec/ol/view.test.js | 4 ++-- 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/src/ol/View.js b/src/ol/View.js index d2ab683f81..bbc373067a 100644 --- a/src/ol/View.js +++ b/src/ol/View.js @@ -129,9 +129,14 @@ import {createMinMaxResolution} from './resolutionconstraint.js'; * @property {boolean} [smoothResolutionConstraint=true] If true, the resolution * min/max values will be applied smoothly, i. e. allow the view to exceed slightly * the given resolution or zoom bounds. - * @property {boolean} [constrainOneAxis=false] If true, the extent constraint can - * be exceeded along one but not both axes, allowing the whole extent to be visible - * on the map. + * @property {boolean} [showFullExtent=false] Allow the view to be zoomed out to + * show the full configured extent. By default, when a view is configured with an + * extent, users will not be able to zoom out so the viewport exceeds the extent in + * either dimension. This means the full extent may not be visible if the viewport + * is taller or wider than the aspect ratio of the configured extent. If + * showFullExtent is true, the user will be able to zoom out so that the viewport + * exceeds the height or width of the configured extent, but not both, allowing the + * full extent to be shown. * @property {import("./proj.js").ProjectionLike} [projection='EPSG:3857'] The * projection. The default is Spherical Mercator. * @property {number} [resolution] The initial resolution for the view. The @@ -1614,8 +1619,8 @@ export function createResolutionConstraint(options) { const smooth = options.smoothResolutionConstraint !== undefined ? options.smoothResolutionConstraint : true; - const oneAxis = - options.constrainOneAxis !== undefined ? options.constrainOneAxis : false; + const showFullExtent = + options.showFullExtent !== undefined ? options.showFullExtent : false; const projection = createProjection(options.projection, 'EPSG:3857'); const projExtent = projection.getExtent(); @@ -1634,10 +1639,10 @@ export function createResolutionConstraint(options) { if (options.constrainResolution) { resolutionConstraint = createSnapToResolutions(resolutions, smooth, - !constrainOnlyCenter && extent, oneAxis); + !constrainOnlyCenter && extent, showFullExtent); } else { resolutionConstraint = createMinMaxResolution(maxResolution, minResolution, smooth, - !constrainOnlyCenter && extent, oneAxis); + !constrainOnlyCenter && extent, showFullExtent); } } else { // calculate the default min and max resolution @@ -1683,10 +1688,10 @@ export function createResolutionConstraint(options) { if (options.constrainResolution) { resolutionConstraint = createSnapToPower( zoomFactor, maxResolution, minResolution, smooth, - !constrainOnlyCenter && extent, oneAxis); + !constrainOnlyCenter && extent, showFullExtent); } else { resolutionConstraint = createMinMaxResolution(maxResolution, minResolution, smooth, - !constrainOnlyCenter && extent, oneAxis); + !constrainOnlyCenter && extent, showFullExtent); } } return {constraint: resolutionConstraint, maxResolution: maxResolution, diff --git a/src/ol/resolutionconstraint.js b/src/ol/resolutionconstraint.js index 73dec32ace..e0fa04e6b7 100644 --- a/src/ol/resolutionconstraint.js +++ b/src/ol/resolutionconstraint.js @@ -16,14 +16,14 @@ import {clamp} from './math.js'; * @param {number} resolution Resolution * @param {import("./extent.js").Extent=} maxExtent Maximum allowed extent. * @param {import("./size.js").Size} viewportSize Viewport size. - * @param {boolean} oneAxis Whether we can exceed extent constraint along one axis but not both. + * @param {boolean} showFullExtent Whether to show the full extent. * @return {number} Capped resolution. */ -function getViewportClampedResolution(resolution, maxExtent, viewportSize, oneAxis) { +function getViewportClampedResolution(resolution, maxExtent, viewportSize, showFullExtent) { const xResolution = getWidth(maxExtent) / viewportSize[0]; const yResolution = getHeight(maxExtent) / viewportSize[1]; - if (oneAxis) { + if (showFullExtent) { return Math.min(resolution, Math.max(xResolution, yResolution)); } return Math.min(resolution, Math.min(xResolution, yResolution)); @@ -57,10 +57,10 @@ function getSmoothClampedResolution(resolution, maxResolution, minResolution) { * @param {Array} resolutions Resolutions. * @param {boolean=} opt_smooth If true, the view will be able to slightly exceed resolution limits. Default: true. * @param {import("./extent.js").Extent=} opt_maxExtent Maximum allowed extent. - * @param {boolean=} opt_oneAxis If true, can exceed extent constraint along one axis but not both. Default: false. + * @param {boolean=} opt_showFullExtent If true, allows us to show the full extent. Default: false. * @return {Type} Zoom function. */ -export function createSnapToResolutions(resolutions, opt_smooth, opt_maxExtent, opt_oneAxis) { +export function createSnapToResolutions(resolutions, opt_smooth, opt_maxExtent, opt_showFullExtent) { return ( /** * @param {number|undefined} resolution Resolution. @@ -74,7 +74,7 @@ export function createSnapToResolutions(resolutions, opt_smooth, opt_maxExtent, const maxResolution = resolutions[0]; const minResolution = resolutions[resolutions.length - 1]; const cappedMaxRes = opt_maxExtent ? - getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_oneAxis) : + getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_showFullExtent) : maxResolution; // during interacting or animating, allow intermediary values @@ -106,10 +106,10 @@ export function createSnapToResolutions(resolutions, opt_smooth, opt_maxExtent, * @param {number=} opt_minResolution Minimum resolution. * @param {boolean=} opt_smooth If true, the view will be able to slightly exceed resolution limits. Default: true. * @param {import("./extent.js").Extent=} opt_maxExtent Maximum allowed extent. - * @param {boolean=} opt_oneAxis If true, can exceed extent constraint along one axis but not both. Default: false. + * @param {boolean=} opt_showFullExtent If true, allows us to show the full extent. Default: false. * @return {Type} Zoom function. */ -export function createSnapToPower(power, maxResolution, opt_minResolution, opt_smooth, opt_maxExtent, opt_oneAxis) { +export function createSnapToPower(power, maxResolution, opt_minResolution, opt_smooth, opt_maxExtent, opt_showFullExtent) { return ( /** * @param {number|undefined} resolution Resolution. @@ -121,7 +121,7 @@ export function createSnapToPower(power, maxResolution, opt_minResolution, opt_s function(resolution, direction, size, opt_isMoving) { if (resolution !== undefined) { const cappedMaxRes = opt_maxExtent ? - getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_oneAxis) : + getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_showFullExtent) : maxResolution; const minResolution = opt_minResolution !== undefined ? opt_minResolution : 0; @@ -155,10 +155,10 @@ export function createSnapToPower(power, maxResolution, opt_minResolution, opt_s * @param {number} minResolution Min resolution. * @param {boolean=} opt_smooth If true, the view will be able to slightly exceed resolution limits. Default: true. * @param {import("./extent.js").Extent=} opt_maxExtent Maximum allowed extent. - * @param {boolean=} opt_oneAxis If true, can exceed extent constraint along one axis but not both. Default: false. + * @param {boolean=} opt_showFullExtent If true, allows us to show the full extent. Default: false. * @return {Type} Zoom function. */ -export function createMinMaxResolution(maxResolution, minResolution, opt_smooth, opt_maxExtent, opt_oneAxis) { +export function createMinMaxResolution(maxResolution, minResolution, opt_smooth, opt_maxExtent, opt_showFullExtent) { return ( /** * @param {number|undefined} resolution Resolution. @@ -170,7 +170,7 @@ export function createMinMaxResolution(maxResolution, minResolution, opt_smooth, function(resolution, direction, size, opt_isMoving) { if (resolution !== undefined) { const cappedMaxRes = opt_maxExtent ? - getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_oneAxis) : + getViewportClampedResolution(maxResolution, opt_maxExtent, size, opt_showFullExtent) : maxResolution; const smooth = opt_smooth !== undefined ? opt_smooth : true; diff --git a/test/spec/ol/view.test.js b/test/spec/ol/view.test.js index 3d0bd026b0..4ec4a4bce6 100644 --- a/test/spec/ol/view.test.js +++ b/test/spec/ol/view.test.js @@ -393,10 +393,10 @@ describe('ol.View', function() { expect(constraint(1, 0, size)).to.be(1); }); - it('accepts extent and constrainOneAxis and uses the larger value', function() { + it('accepts extent and showFullExtent and uses the larger value', function() { const constraint = getConstraint({ extent: [0, 0, 4000, 6000], - constrainOneAxis: true + showFullExtent: true }); expect(constraint(1000, 0, size)).to.be(30); From 54bae0168f7e0a2e2032184f7ad94aaea785b746 Mon Sep 17 00:00:00 2001 From: David Brooks Date: Tue, 14 May 2019 12:22:58 +1200 Subject: [PATCH 143/246] Handle mouse wheel zoom events as if they've come from a trackpad. --- src/ol/interaction/MouseWheelZoom.js | 66 ++++------------------------ 1 file changed, 8 insertions(+), 58 deletions(-) diff --git a/src/ol/interaction/MouseWheelZoom.js b/src/ol/interaction/MouseWheelZoom.js index 1ed762bc17..443dc004e9 100644 --- a/src/ol/interaction/MouseWheelZoom.js +++ b/src/ol/interaction/MouseWheelZoom.js @@ -8,15 +8,6 @@ import Interaction, {zoomByDelta} from './Interaction.js'; import {clamp} from '../math.js'; -/** - * @enum {string} - */ -export const Mode = { - TRACKPAD: 'trackpad', - WHEEL: 'wheel' -}; - - /** * @typedef {Object} Options * @property {import("../events/condition.js").Condition} [condition] A function that @@ -107,12 +98,6 @@ class MouseWheelZoom extends Interaction { */ this.timeoutId_; - /** - * @private - * @type {Mode|undefined} - */ - this.mode_ = undefined; - /** * Trackpad events separated by this delay will be considered separate * interactions. @@ -206,51 +191,16 @@ class MouseWheelZoom extends Interaction { this.startTime_ = now; } - if (!this.mode_ || now - this.startTime_ > this.trackpadEventGap_) { - this.mode_ = Math.abs(delta) < 4 ? - Mode.TRACKPAD : - Mode.WHEEL; - } - - if (this.mode_ === Mode.TRACKPAD) { - const view = map.getView(); - if (this.trackpadTimeoutId_) { - clearTimeout(this.trackpadTimeoutId_); - } else { - view.beginInteraction(); - } - this.trackpadTimeoutId_ = setTimeout(this.endInteraction_.bind(this), this.trackpadEventGap_); - view.adjustZoom(-delta / this.trackpadDeltaPerZoom_, this.lastAnchor_); - this.startTime_ = now; - return false; - } - - this.totalDelta_ += delta; - - const timeLeft = Math.max(this.timeout_ - (now - this.startTime_), 0); - - clearTimeout(this.timeoutId_); - this.timeoutId_ = setTimeout(this.handleWheelZoom_.bind(this, map), timeLeft); - - return false; - } - - /** - * @private - * @param {import("../PluggableMap.js").default} map Map. - */ - handleWheelZoom_(map) { const view = map.getView(); - if (view.getAnimating()) { - view.cancelAnimations(); + if (this.trackpadTimeoutId_) { + clearTimeout(this.trackpadTimeoutId_); + } else { + view.beginInteraction(); } - const delta = clamp(this.totalDelta_, -this.maxDelta_, this.maxDelta_); - zoomByDelta(view, -delta, this.lastAnchor_, this.duration_); - this.mode_ = undefined; - this.totalDelta_ = 0; - this.lastAnchor_ = null; - this.startTime_ = undefined; - this.timeoutId_ = undefined; + this.trackpadTimeoutId_ = setTimeout(this.endInteraction_.bind(this), this.trackpadEventGap_); + view.adjustZoom(-delta / this.trackpadDeltaPerZoom_, this.lastAnchor_); + this.startTime_ = now; + return false; } /** From 77658e5750025dfd3045c891de4a1c9ff4573a00 Mon Sep 17 00:00:00 2001 From: David Brooks Date: Tue, 28 May 2019 09:53:36 +1200 Subject: [PATCH 144/246] Ensure changes to zoom wheel handling pass tests. --- src/ol/interaction/MouseWheelZoom.js | 3 +-- test/spec/ol/interaction/mousewheelzoom.test.js | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/ol/interaction/MouseWheelZoom.js b/src/ol/interaction/MouseWheelZoom.js index 443dc004e9..7546e6e399 100644 --- a/src/ol/interaction/MouseWheelZoom.js +++ b/src/ol/interaction/MouseWheelZoom.js @@ -4,8 +4,7 @@ import {always, focus} from '../events/condition.js'; import EventType from '../events/EventType.js'; import {DEVICE_PIXEL_RATIO, FIREFOX} from '../has.js'; -import Interaction, {zoomByDelta} from './Interaction.js'; -import {clamp} from '../math.js'; +import Interaction from './Interaction.js'; /** diff --git a/test/spec/ol/interaction/mousewheelzoom.test.js b/test/spec/ol/interaction/mousewheelzoom.test.js index ee1858bf5d..ee9b7fd87a 100644 --- a/test/spec/ol/interaction/mousewheelzoom.test.js +++ b/test/spec/ol/interaction/mousewheelzoom.test.js @@ -2,8 +2,8 @@ import Map from '../../../../src/ol/Map.js'; import MapBrowserEvent from '../../../../src/ol/MapBrowserEvent.js'; import View from '../../../../src/ol/View.js'; import Event from '../../../../src/ol/events/Event.js'; -import {DEVICE_PIXEL_RATIO, FIREFOX} from '../../../../src/ol/has.js'; -import MouseWheelZoom, {Mode} from '../../../../src/ol/interaction/MouseWheelZoom.js'; +import {DEVICE_PIXEL_RATIO, FIREFOX, SAFARI} from '../../../../src/ol/has.js'; +import MouseWheelZoom from '../../../../src/ol/interaction/MouseWheelZoom.js'; describe('ol.interaction.MouseWheelZoom', function() { @@ -66,7 +66,7 @@ describe('ol.interaction.MouseWheelZoom', function() { if (FIREFOX) { it('works on Firefox in DOM_DELTA_PIXEL mode (trackpad)', function(done) { map.once('postrender', function() { - expect(interaction.mode_).to.be(Mode.TRACKPAD); + expect(interaction.lastDelta_).to.be(1); done(); }); const event = new MapBrowserEvent('wheel', map, { @@ -84,7 +84,7 @@ describe('ol.interaction.MouseWheelZoom', function() { if (!FIREFOX) { it('works in DOM_DELTA_PIXEL mode (trackpad)', function(done) { map.once('postrender', function() { - expect(interaction.mode_).to.be(Mode.TRACKPAD); + expect(interaction.lastDelta_).to.be(1); done(); }); const event = new MapBrowserEvent('wheel', map, { From 03fcf1ca706f0aa2a4ee975b133679eb68f46c64 Mon Sep 17 00:00:00 2001 From: David Brooks Date: Wed, 29 May 2019 14:08:03 +1200 Subject: [PATCH 145/246] Get all mouse wheel tests passing (#9564). --- .../ol/interaction/mousewheelzoom.test.js | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/test/spec/ol/interaction/mousewheelzoom.test.js b/test/spec/ol/interaction/mousewheelzoom.test.js index ee9b7fd87a..f016a2adf8 100644 --- a/test/spec/ol/interaction/mousewheelzoom.test.js +++ b/test/spec/ol/interaction/mousewheelzoom.test.js @@ -63,6 +63,11 @@ describe('ol.interaction.MouseWheelZoom', function() { describe('handleEvent()', function() { + let view; + beforeEach(function() { + view = map.getView(); + }); + if (FIREFOX) { it('works on Firefox in DOM_DELTA_PIXEL mode (trackpad)', function(done) { map.once('postrender', function() { @@ -149,8 +154,65 @@ describe('ol.interaction.MouseWheelZoom', function() { map.handleMapBrowserEvent(event); }); + it('works in DOM_DELTA_LINE mode (wheel)', function(done) { + map.once('postrender', function() { + expect(view.getResolution()).to.be(2); + expect(view.getCenter()).to.eql([0, 0]); + done(); + }); + + const event = new MapBrowserEvent('wheel', map, { + type: 'wheel', + deltaMode: WheelEvent.DOM_DELTA_LINE, + deltaY: 7.5, + target: map.getViewport(), + preventDefault: Event.prototype.preventDefault + }); + event.coordinate = [0, 0]; + + map.handleMapBrowserEvent(event); }); + if (SAFARI) { + it('works on Safari (wheel)', function(done) { + map.once('postrender', function() { + expect(view.getResolution()).to.be(2); + expect(view.getCenter()).to.eql([0, 0]); + done(); + }); + + const event = new MapBrowserEvent('mousewheel', map, { + type: 'mousewheel', + wheelDeltaY: -900, + target: map.getViewport(), + preventDefault: Event.prototype.preventDefault + }); + event.coordinate = [0, 0]; + + map.handleMapBrowserEvent(event); + }); + } + + if (!SAFARI) { + it('works on other browsers (wheel)', function(done) { + map.once('postrender', function() { + expect(view.getResolution()).to.be(2); + expect(view.getCenter()).to.eql([0, 0]); + done(); + }); + + const event = new MapBrowserEvent('mousewheel', map, { + type: 'mousewheel', + wheelDeltaY: -300, + target: map.getViewport(), + preventDefault: Event.prototype.preventDefault + }); + event.coordinate = [0, 0]; + + map.handleMapBrowserEvent(event); + }); + } + }); }); From c8e340a623d3b7170184bb7fe879e05f8c1dd1ac Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Wed, 5 Feb 2020 12:58:21 +0100 Subject: [PATCH 146/246] Rename variables now that trackpads are not special any more --- src/ol/interaction/MouseWheelZoom.js | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/ol/interaction/MouseWheelZoom.js b/src/ol/interaction/MouseWheelZoom.js index 7546e6e399..37a4e4022f 100644 --- a/src/ol/interaction/MouseWheelZoom.js +++ b/src/ol/interaction/MouseWheelZoom.js @@ -92,29 +92,23 @@ class MouseWheelZoom extends Interaction { this.startTime_ = undefined; /** - * @private - * @type {?} - */ - this.timeoutId_; - - /** - * Trackpad events separated by this delay will be considered separate + * Events separated by this delay will be considered separate * interactions. * @type {number} */ - this.trackpadEventGap_ = 400; + this.eventGap_ = 400; /** * @type {?} */ - this.trackpadTimeoutId_; + this.timeoutId_; /** * The number of delta values per zoom level * @private * @type {number} */ - this.trackpadDeltaPerZoom_ = 300; + this.deltaPerZoom_ = 300; } @@ -136,7 +130,7 @@ class MouseWheelZoom extends Interaction { * @private */ endInteraction_() { - this.trackpadTimeoutId_ = undefined; + this.timeoutId_ = undefined; const view = this.getMap().getView(); view.endInteraction(undefined, this.lastDelta_ ? (this.lastDelta_ > 0 ? 1 : -1) : 0, this.lastAnchor_); } @@ -191,13 +185,13 @@ class MouseWheelZoom extends Interaction { } const view = map.getView(); - if (this.trackpadTimeoutId_) { - clearTimeout(this.trackpadTimeoutId_); + if (this.timeoutId_) { + clearTimeout(this.timeoutId_); } else { view.beginInteraction(); } - this.trackpadTimeoutId_ = setTimeout(this.endInteraction_.bind(this), this.trackpadEventGap_); - view.adjustZoom(-delta / this.trackpadDeltaPerZoom_, this.lastAnchor_); + this.timeoutId_ = setTimeout(this.endInteraction_.bind(this), this.eventGap_); + view.adjustZoom(-delta / this.deltaPerZoom_, this.lastAnchor_); this.startTime_ = now; return false; } From cc21f92bdb52dc30efa41ce0cc68f08435384fcd Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Wed, 5 Feb 2020 12:58:35 +0100 Subject: [PATCH 147/246] Restore test coverage, fix tests --- .../ol/interaction/mousewheelzoom.test.js | 134 ++++++------------ 1 file changed, 41 insertions(+), 93 deletions(-) diff --git a/test/spec/ol/interaction/mousewheelzoom.test.js b/test/spec/ol/interaction/mousewheelzoom.test.js index f016a2adf8..8eea3ea3c3 100644 --- a/test/spec/ol/interaction/mousewheelzoom.test.js +++ b/test/spec/ol/interaction/mousewheelzoom.test.js @@ -2,7 +2,7 @@ import Map from '../../../../src/ol/Map.js'; import MapBrowserEvent from '../../../../src/ol/MapBrowserEvent.js'; import View from '../../../../src/ol/View.js'; import Event from '../../../../src/ol/events/Event.js'; -import {DEVICE_PIXEL_RATIO, FIREFOX, SAFARI} from '../../../../src/ol/has.js'; +import {DEVICE_PIXEL_RATIO, FIREFOX} from '../../../../src/ol/has.js'; import MouseWheelZoom from '../../../../src/ol/interaction/MouseWheelZoom.js'; @@ -32,13 +32,13 @@ describe('ol.interaction.MouseWheelZoom', function() { describe('timeout duration', function() { let clock; beforeEach(function() { - sinon.spy(interaction, 'handleWheelZoom_'); + sinon.spy(interaction, 'endInteraction_'); clock = sinon.useFakeTimers(); }); afterEach(function() { clock.restore(); - interaction.handleWheelZoom_.restore(); + interaction.endInteraction_.restore(); }); it('works with the default value', function(done) { @@ -49,12 +49,12 @@ describe('ol.interaction.MouseWheelZoom', function() { }); map.handleMapBrowserEvent(event); - clock.tick(50); - // default timeout is 80 ms, not called yet - expect(interaction.handleWheelZoom_.called).to.be(false); + clock.tick(100); + // default timeout is 400 ms, not called yet + expect(interaction.endInteraction_.called).to.be(false); - clock.tick(30); - expect(interaction.handleWheelZoom_.called).to.be(true); + clock.tick(300); + expect(interaction.endInteraction_.called).to.be(true); done(); }); @@ -104,55 +104,6 @@ describe('ol.interaction.MouseWheelZoom', function() { }); } - describe('spying on view.animateInternal()', function() { - let view; - beforeEach(function() { - view = map.getView(); - sinon.spy(view, 'animateInternal'); - }); - - afterEach(function() { - view.animateInternal.restore(); - }); - - it('works in DOM_DELTA_LINE mode (wheel)', function(done) { - map.once('postrender', function() { - const call = view.animateInternal.getCall(0); - expect(call.args[0].resolution).to.be(2); - expect(call.args[0].anchor).to.eql([0, 0]); - done(); - }); - - const event = new MapBrowserEvent('wheel', map, { - type: 'wheel', - deltaMode: WheelEvent.DOM_DELTA_LINE, - deltaY: 3.714599609375, - target: map.getViewport(), - preventDefault: Event.prototype.preventDefault - }); - event.coordinate = [0, 0]; - - map.handleMapBrowserEvent(event); - }); - - it('works on all browsers (wheel)', function(done) { - map.once('postrender', function() { - const call = view.animateInternal.getCall(0); - expect(call.args[0].resolution).to.be(2); - expect(call.args[0].anchor).to.eql([0, 0]); - done(); - }); - - const event = new MapBrowserEvent('wheel', map, { - type: 'wheel', - deltaY: 120, - target: map.getViewport(), - preventDefault: Event.prototype.preventDefault - }); - event.coordinate = [0, 0]; - - map.handleMapBrowserEvent(event); - }); it('works in DOM_DELTA_LINE mode (wheel)', function(done) { map.once('postrender', function() { @@ -173,45 +124,42 @@ describe('ol.interaction.MouseWheelZoom', function() { map.handleMapBrowserEvent(event); }); - if (SAFARI) { - it('works on Safari (wheel)', function(done) { - map.once('postrender', function() { - expect(view.getResolution()).to.be(2); - expect(view.getCenter()).to.eql([0, 0]); - done(); - }); - - const event = new MapBrowserEvent('mousewheel', map, { - type: 'mousewheel', - wheelDeltaY: -900, - target: map.getViewport(), - preventDefault: Event.prototype.preventDefault - }); - event.coordinate = [0, 0]; - - map.handleMapBrowserEvent(event); + it('works on all browsers (wheel)', function(done) { + map.once('postrender', function() { + expect(view.getResolution()).to.be(2); + expect(view.getCenter()).to.eql([0, 0]); + done(); }); - } - if (!SAFARI) { - it('works on other browsers (wheel)', function(done) { - map.once('postrender', function() { - expect(view.getResolution()).to.be(2); - expect(view.getCenter()).to.eql([0, 0]); - done(); - }); - - const event = new MapBrowserEvent('mousewheel', map, { - type: 'mousewheel', - wheelDeltaY: -300, - target: map.getViewport(), - preventDefault: Event.prototype.preventDefault - }); - event.coordinate = [0, 0]; - - map.handleMapBrowserEvent(event); + const event = new MapBrowserEvent('wheel', map, { + type: 'wheel', + deltaY: 300, // trackpadDeltaPerZoom_ + target: map.getViewport(), + preventDefault: Event.prototype.preventDefault }); - } + event.coordinate = [0, 0]; + + map.handleMapBrowserEvent(event); + }); + + it('works in DOM_DELTA_LINE mode (wheel)', function(done) { + map.once('postrender', function() { + expect(view.getResolution()).to.be(2); + expect(view.getCenter()).to.eql([0, 0]); + done(); + }); + + const event = new MapBrowserEvent('wheel', map, { + type: 'wheel', + deltaMode: WheelEvent.DOM_DELTA_LINE, + deltaY: 7.5, // trackpadDeltaPerZoom_ / 40 + target: map.getViewport(), + preventDefault: Event.prototype.preventDefault + }); + event.coordinate = [0, 0]; + + map.handleMapBrowserEvent(event); + }); }); From 65c1575dc98f545016856c54ed64105fc616977d Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Wed, 5 Feb 2020 20:11:33 +0100 Subject: [PATCH 148/246] Make examples work in Internet Explorer --- examples/mapbox-style.html | 1 + examples/templates/example.html | 2 +- examples/vector-tiles-4326.html | 2 ++ examples/vector-tiles-4326.js | 2 +- package-lock.json | 14 +++++++------- package.json | 2 +- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/examples/mapbox-style.html b/examples/mapbox-style.html index 69cb67c696..8285734955 100644 --- a/examples/mapbox-style.html +++ b/examples/mapbox-style.html @@ -18,6 +18,7 @@ cloak: Mapbox Style objects with ol-mapbox-style +