coverband 5.1.0 → 5.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a5cd2e1c2877aa5eefb57baf7b1c51c5e708ef8d5869f01b51a37c3b6e37c931
4
- data.tar.gz: 4f0a6bc520d84917f989b3c13ec1c5bba2d6ab04db26fb87331cfed536b142f9
3
+ metadata.gz: 18baa7cef0b3c95acb536629f605a8153cc662a8f5dc08240bfb4cea8e265bfa
4
+ data.tar.gz: aef6c09d712021cb74c07f21687bee9a271fbae31ab4dc340483cc5f8730728d
5
5
  SHA512:
6
- metadata.gz: cb077ceeb315e92dd7f51e355057d855b00701e05d8b4ef7836ff8cae624c2db71ba0ce67ac6e3be5dd5fb87182c4a68d8e8d1ab3c6e4554f2d792db9f214c65
7
- data.tar.gz: 0ab9e096d137f1babd34b3cc32899095b6b3f0f87bb0a9aee7d987bf8b116b1815a3fc630ad0f1f73d4550563c2cf08a4bb9e8e20e8c9553dd9246d0dee6414a
6
+ metadata.gz: d905e7431fff8ad7083195e34aef71a88b0252595adf5d44cd321d744b02bd99c19e1272f5b71f92e725e143171c81a2954560f8dce57c95addcf1ebb3781886
7
+ data.tar.gz: f389a97e74d530dc8716b4bf1f905d96a6eb3bb65b5b5a30a2a58a17cfb63dee77522b2ee2fb20049a1044a36578b9e53da6d744f5ca6bc466e5a70c8eba4a81
@@ -0,0 +1,16 @@
1
+ name: Create diagram
2
+ on:
3
+ workflow_dispatch: {}
4
+ push:
5
+ branches:
6
+ - main
7
+ jobs:
8
+ get_data:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - name: Checkout code
12
+ uses: actions/checkout@master
13
+ - name: Update diagram
14
+ uses: githubocto/repo-visualizer@main
15
+ with:
16
+ excluded_paths: "ignore,.github"
@@ -3,9 +3,9 @@ name: CI
3
3
  on:
4
4
  # Triggers the workflow on push or pull request events but only for the master branch
5
5
  push:
6
- branches: [master]
6
+ branches: [main]
7
7
  pull_request:
8
- branches: [master]
8
+ branches: [main]
9
9
  jobs:
10
10
  test:
11
11
  strategy:
@@ -17,12 +17,12 @@ jobs:
17
17
  # remove until I sort out CI issues for truffle
18
18
  # truffleruby,
19
19
  # truffleruby-head,
20
- ruby: [2.3, 2.4, 2.5, 2.6, 2.7, jruby, jruby-head]
21
- redis-version: [5]
20
+ ruby: [2.3, 2.4, 2.5, 2.6, 2.7, "3.0", jruby, jruby-head]
21
+ redis-version: [4, 5, 6]
22
22
  runs-on: ${{ matrix.os }}-latest
23
23
  steps:
24
24
  - uses: actions/checkout@v2
25
- - uses: supercharge/redis-github-action@1.1.0
25
+ - uses: supercharge/redis-github-action@1.2.0
26
26
  - uses: ruby/setup-ruby@v1
27
27
  with:
28
28
  ruby-version: ${{ matrix.ruby }}
data/README.md CHANGED
@@ -284,7 +284,7 @@ Between the release of 4.0 and 4.1 our data format changed. This resets all your
284
284
 
285
285
  ### Adding Rake Tasks outside of Rails
286
286
 
287
- Rails apps should automaticallly include the tasks via the Railtie.
287
+ Rails apps should automatically include the tasks via the Railtie.
288
288
 
289
289
  For non Rails apps, either add the below to your `Rakefile` or to a file included in your `Rakefile` such as `lib/tasks/coverband.rake` if you want to break it up that way.
290
290
 
@@ -427,6 +427,12 @@ What is the coverage data in Redis?
427
427
 
428
428
  `Coverband.configuration.store.coverage`
429
429
 
430
+ ### Diagram
431
+
432
+ A diagram of the code.
433
+
434
+ ![Visualization of this repo](./diagram.svg)
435
+
430
436
  ## Logo
431
437
 
432
438
  The Coverband logo was created by [Dave Woodall](http://davewoodall.com). Thanks Dave!
data/changes.md CHANGED
@@ -1,64 +1,23 @@
1
- # Future Roadmap
1
+ ### Coverband 5.2.0
2
2
 
3
- ### Research Alternative Redis formats
3
+ - (Fumiaki MATSUSHIMA) Fix CI setting for Ruby 3.0
4
+ - (Fumiaki MATSUSHIMA) Avoid calling coverage with the same type twice on get_coverage_report
5
+ - (kei-s) Fix filling zero for not loaded files
6
+ - (wonda-tea-coffee) cleanup readme / fix typos
7
+ - support deferred eager loading data
8
+ - (Donatas Stundys) Fix disabling views tracking
9
+ - (Simon) Improve View tracker to track render collection too
4
10
 
5
- - Look at alternative storage formats for Redis
6
- - [redis bitmaps](http://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps/)
7
- - [redis bitfield](https://stackoverflow.com/questions/47100606/optimal-way-to-store-array-of-integers-in-redis-database)
8
- - Add support for [zadd](http://redis.io/topics/data-types-intro) so one could determine single call versus multiple calls on a line, letting us determine the most executed code in production.
11
+ ### Coverband 5.1.1
9
12
 
10
- ### Coverband Future...
13
+ - Fix early report error
14
+ - Improved view tracker perf Hosam Aly
11
15
 
12
- Will be the fully modern release that drops maintenance legacy support in favor of increased performance, ease of use, and maintainability.
13
-
14
- - Release will be aimed as significantly simplifying ease of use
15
- - near zero config setup for Rails apps
16
- - add built-in support for easy loading via Railties
17
- - built in support for activejob, sidekiq, and other common frameworks
18
- - reduced configuration options
19
- - support oneshot
20
- - drop middleware figure out a way to kick off background without middelware
21
- - options on reporting
22
- - background reporting
23
- - or middleware reporting
24
- - Support for file versions
25
- - md5 or release tags
26
- - add coverage timerange support
27
- - Drop Simplecov dependency
28
- - improved web reporting
29
- - lists current config options
30
- - eventually allow updating remote config
31
- - full theming
32
- - list redis data dump for debugging
33
- - additional adapters: Memcache, S3, and ActiveRecord
34
- - add articles / podcasts like prontos readme https://github.com/prontolabs/pronto
35
- - Add detailed Gem usage report, if we collect and send gem usage we can give percentage of gem code used, which should help application developers know when to remove gem dependencies (0%) or perhaps inline single methods for little usage (using <= 5%) for example.
36
- - add meta data information first seen last recorded to the coverage report views (probably need to drop simplecov for that).
37
- - more details in this issue: https://github.com/danmayer/coverband/issues/118
38
- - Make good video on setup, install, usage
39
- - See if we can add support for views / templates
40
- - using this technique https://github.com/ioquatix/covered
41
- - Better default grouping (could use groups features for gems for rails controllers, models, lib, etc)
42
- - Improved logging for easier debugging and development
43
- - drop the verbose mode and better support standard logger levels
44
- - Possibly setup a build assets system
45
- - my JS rules expanded the compressed JS at the top of application.js, basically we want to stitch together JS
46
- - I guess we could also load multiple JS files as most of the JS is just default compressed JS and a tiny amount of actual app JS.
47
- - lazy load for Coverband results
48
- - view layer file coverage
49
- - move all code to work with relative paths leaving only stdlib Coverage working on full paths
50
- - add gem_safe_lists to track only some gems
51
- - add gem_details_safe list to report on details on some gems
52
- - - display gems that are in loaded with 0 coverage, thanks @kbaum
53
-
54
- # Alpha / Beta / Release Candidates
55
-
56
- ### Coverband 5.0.4
16
+ ### Coverband 5.1.0
57
17
 
18
+ - add support for dead method detection rake task
58
19
  - add support for tracking email view templates/partials
59
20
 
60
- # Released
61
-
62
21
  ### Coverband 5.0.3
63
22
 
64
23
  - fix for non standard root paths for view_tracker thx @markshawtoronto
@@ -149,7 +108,7 @@ Will be the fully modern release that drops maintenance legacy support in favor
149
108
  - larger changes
150
109
  - reduce memory usage
151
110
  - fix issue where reports didn't include files with 0 activity
152
- - updated runtime relavent lines and runtime percentages
111
+ - updated runtime relevant lines and runtime percentages
153
112
  - add Oneshot coverage support for Ruby 2.6.0 thanks @zwalker
154
113
  - I would consider this our test oneshot release, please report any issues
155
114
  - improved control over memory vs functionality
@@ -181,7 +140,7 @@ Will be the fully modern release that drops maintenance legacy support in favor
181
140
 
182
141
  ### Coverband 4.2.0
183
142
 
184
- **NOTE:** This release introduces load time and runtime Coverage. To get the full benifit of this feature you need to reset you coverage data (`rake coverband:clear` or clear via the web UI). Until you clear the combined result is still correct, but your runtime data will be mixed with previous data. This is due to an additive change in how we store coverage. We didn't reset by default as the coverage history for some folks may be more important than runtime breakdown.
143
+ **NOTE:** This release introduces load time and runtime Coverage. To get the full benefit of this feature you need to reset you coverage data (`rake coverband:clear` or clear via the web UI). Until you clear the combined result is still correct, but your runtime data will be mixed with previous data. This is due to an additive change in how we store coverage. We didn't reset by default as the coverage history for some folks may be more important than runtime breakdown.
185
144
 
186
145
  - loadtime vs runtime coverage
187
146
  - This fixes the coverage last seen date to exclude just load time data
data/coverband.gemspec CHANGED
@@ -20,6 +20,16 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
21
21
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
22
22
  spec.require_paths = %w[lib]
23
+
24
+ spec.required_ruby_version = '>= 2.3'
25
+
26
+ spec.metadata = {
27
+ "homepage_uri" => "https://github.com/danmayer/coverband",
28
+ "bug_tracker_uri" => "https://github.com/danmayer/coverband/issues",
29
+ "documentation_uri" => "https://github.com/danmayer/coverband",
30
+ "changelog_uri" => "https://github.com/danmayer/coverband/blob/main/changes.md",
31
+ "source_code_uri" => "https://github.com/danmayer/coverband",
32
+ }
23
33
 
24
34
  spec.add_development_dependency "benchmark-ips"
25
35
  spec.add_development_dependency "capybara"
data/diagram.svg ADDED
@@ -0,0 +1 @@
1
+ <svg width="1000" height="1000" style="background:white;font-family:sans-serif;overflow:visible" xmlns="http://www.w3.org/2000/svg"><defs><filter id="glow" x="-50%" y="-50%" width="200%" height="200%"><feGaussianBlur stdDeviation="4" result="coloredBlur"></feGaussianBlur><feMerge><feMergeNode in="coloredBlur"></feMergeNode><feMergeNode in="SourceGraphic"></feMergeNode></feMerge></filter></defs><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(320.00612713573474, 687.2198622231438)"><circle r="41.02836011911288" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(661.4430539975467, 565.197145882038)"><circle r="305.5566428725191" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#89e051;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(288.90225953017995, 583.3423814043452)"><circle r="51.43100276127017" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(198.26743334655254, 337.6535126993426)"><circle r="194.4433571274809" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(208.85596035685901, 675.5911309430888)"><circle r="54.711392311283824" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(467.6228500582734, 199.50509802915866)"><circle r="92.27321821656155" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(310.0453070999505, 685.7487861972328)"><circle style="transition:all 0.5s ease-out" r="13.3014695682241" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(345.9707919366957, 685.9103241587442)"><circle style="transition:all 0.5s ease-out" r="12.030692758975125" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(328.90125923275815, 706.7811828362729)"><circle style="transition:all 0.5s ease-out" r="11.745793973078548" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(328.9906330367507, 668.2014287736805)"><circle style="transition:all 0.5s ease-out" r="9.31760069097745" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(309.0185299873286, 660.3274729335391)"><circle style="transition:all 0.5s ease-out" r="8.977923069056144" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(305.71931566689045, 710.3858020752416)"><circle style="transition:all 0.5s ease-out" r="8.512461619911566" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(345.66018068614164, 666.4351119642289)"><circle style="transition:all 0.5s ease-out" r="4.2452658347361085" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(344.7727563464446, 702.5702159887435)"><circle style="transition:all 0.5s ease-out" r="1.4748230405423375" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(703.8139667594777, 527.1557713436439)"><circle style="transition:all 0.5s ease-out" r="16.536067250557842" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(778.8621990400648, 570.0854043526703)"><circle r="61.70172260960654" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(717.5497323686653, 693.1410767346821)"><circle r="61.861756513460996" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(725.4786248202125, 443.35036035988065)"><circle r="61.70172260960654" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(815.9255796199956, 665.2156778676142)"><circle r="26.457891906861885" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(830.9874716327291, 473.39307041316187)"><circle r="34.077322847649405" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(896.6002602399892, 619.8132053020157)"><circle r="52.168797786598724" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(853.6314842076885, 527.416647893843)"><circle style="transition:all 0.5s ease-out" r="15.964332930227892" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(526.6781412802873, 561.9831724861971)"><circle r="155.78475878682949" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(917.814299830758, 514.616450720902)"><circle r="41.243377971831976" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(856.6144727025029, 560.7986085603109)"><circle style="transition:all 0.5s ease-out" r="8.027776443517638" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(871.19797212995, 548.2872313784729)"><circle style="transition:all 0.5s ease-out" r="8.008399692008764" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(851.9451419704938, 574.3018675351775)"><circle style="transition:all 0.5s ease-out" r="3.073460851218337" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(718.5717760925036, 611.3724671382622)"><circle style="transition:all 0.5s ease-out" r="2.7982799722851825" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(792.267108681374, 498.57330372624574)"><circle style="transition:all 0.5s ease-out" r="2.3911113739020915" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(728.3581505248203, 518.04114658991)"><circle style="transition:all 0.5s ease-out" r="2.173265009607865" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#000080;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(271.0965905323919, 583.3423814043452)"><circle r="29.927086668478605" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#000080;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(320.67846974616026, 583.3423814043452)"><circle style="transition:all 0.5s ease-out" r="15.956545450286352" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#89e051;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(304.5879348819674, 601.004696104632)"><circle style="transition:all 0.5s ease-out" r="4.2379400901324145" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(24.105301487962493, 337.6535126993426)"><circle style="transition:all 0.5s ease-out" r="16.582978173887366" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(216.69953506794164, 337.6535126993426)"><circle r="172.31300831108828" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(39.16205879506066, 354.5160683323728)"><circle style="transition:all 0.5s ease-out" r="2.325227860290965" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(181.61749253292245, 668.8661822807059)"><circle style="transition:all 0.5s ease-out" r="23.655037168334218" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(235.25964076788608, 666.0924002361274)"><circle style="transition:all 0.5s ease-out" r="23.65109608528102" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ff9900;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(210.66402066765176, 709.4689523573958)"><circle r="17.785357089538007" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#083fa1;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(217.5175141387871, 634.3371548057271)"><circle style="transition:all 0.5s ease-out" r="9.557945701792356" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#083fa1;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(196.00848014520108, 637.0406468104858)"><circle style="transition:all 0.5s ease-out" r="8.050966987092513" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(207.80242421434497, 655.7034054899067)"><circle style="transition:all 0.5s ease-out" r="2.590703843132601" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(208.5500333850177, 680.6847390060008)"><circle style="transition:all 0.5s ease-out" r="2.578681950686416" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(235.94393651106756, 695.4894819767508)"><circle style="transition:all 0.5s ease-out" r="2.5666037486861444" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(211.85180233036237, 648.399495385379)"><circle style="transition:all 0.5s ease-out" r="2.5544684383925436" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(232.60833161946036, 636.7995615728715)"><circle style="transition:all 0.5s ease-out" r="2.53002320200653" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(203.07511719939444, 648.8406831768352)"><circle style="transition:all 0.5s ease-out" r="2.517711580516173" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#f1e05a;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(414.79764353602405, 225.1897322137628)"><circle style="transition:all 0.5s ease-out" r="30.53479061320098" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#563d7c;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(512.7910567195597, 234.721131053716)"><circle style="transition:all 0.5s ease-out" r="30.531737592085197" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(459.1689427139957, 257.5229674822785)"><circle style="transition:all 0.5s ease-out" r="21.235110665819438" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#f1e05a;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(463.6216214022966, 209.85675505437175)"><circle style="transition:all 0.5s ease-out" r="17.643364541120967" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(429.9770792294947, 163.4727445310884)"><circle r="24.555321990630027" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(500.186549985712, 164.97508910953462)"><circle r="31.810432068321326" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(450.81131758082375, 229.50956510863185)"><circle style="transition:all 0.5s ease-out" r="2.61458180267405" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(477.07868989293166, 228.88295830010998)"><circle style="transition:all 0.5s ease-out" r="2.578681950686416" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(469.50345812512296, 232.54388794748377)"><circle style="transition:all 0.5s ease-out" r="2.5666037486861444" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(432.1882475855745, 257.02682062626695)"><circle style="transition:all 0.5s ease-out" r="2.5544684383925436" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(476.72794923722097, 237.1965299805945)"><circle style="transition:all 0.5s ease-out" r="2.542275202002629" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#083fa1;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(320.1615724594404, 804.9875239262727)"><circle style="transition:all 0.5s ease-out" r="30.541913142306747" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#083fa1;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(392.23035259112095, 805.8219336390632)"><circle style="transition:all 0.5s ease-out" r="29.283952850675167" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#083fa1;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(367.34422716445823, 852.8636618355339)"><circle style="transition:all 0.5s ease-out" r="14.435195443346569" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#083fa1;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(357.5205254400031, 775.1921244857833)"><circle style="transition:all 0.5s ease-out" r="13.861991692422615" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(331.9580166207945, 760.1979925812761)"><circle style="transition:all 0.5s ease-out" r="12.57621012334402" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(343.2575132663275, 841.0833119950216)"><circle style="transition:all 0.5s ease-out" r="9.162913064921083" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#cb171e;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(381.75146532305723, 765.7569764071274)"><circle style="transition:all 0.5s ease-out" r="8.94324575496107" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(356.6611787355765, 825.4561565122851)"><circle style="transition:all 0.5s ease-out" r="8.226589586727627" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#199f4b;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(323.50599601836205, 846.7736839717282)"><circle style="transition:all 0.5s ease-out" r="8.19252488725059" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(398.089846699721, 769.2095819314433)"><circle style="transition:all 0.5s ease-out" r="4.555951844425858" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#000000;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(392.45292093509886, 842.494046836109)"><circle style="transition:all 0.5s ease-out" r="4.1937168964290805" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(356.7350615777879, 803.2215968544747)"><circle style="transition:all 0.5s ease-out" r="3.278905824283532" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(314.74280205744697, 768.344908753919)"><circle style="transition:all 0.5s ease-out" r="3.269415483613904" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(369.174101730346, 832.4259130160951)"><circle style="transition:all 0.5s ease-out" r="2.896494951407223" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ff9900;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(382.79807766688396, 839.6427821647144)"><circle style="transition:all 0.5s ease-out" r="2.6733437869089967" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#083fa1;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(359.2869568717172, 794.6203582125373)"><circle style="transition:all 0.5s ease-out" r="2.4929059353720087" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(352.70915565180445, 792.7536887180717)"><circle style="transition:all 0.5s ease-out" r="1.1423930149246917" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(753.5596362032685, 535.6407941483997)"><circle style="transition:all 0.5s ease-out" r="15.962386416420713" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(798.663927272489, 548.119233020521)"><circle r="19.787384039127623" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(766.2883984415777, 588.960636852518)"><circle r="36.021888760704144" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(769.0371260106745, 545.4545693588732)"><circle style="transition:all 0.5s ease-out" r="3.755941507256401" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(778.6753794152045, 548.3701311197658)"><circle style="transition:all 0.5s ease-out" r="3.113638515318736" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(696.0239805223459, 656.0331535622179)"><circle style="transition:all 0.5s ease-out" r="15.962386416420713" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(737.5020999043077, 671.842246484952)"><circle r="20.304869232203533" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(703.4897781061119, 711.156141359216)"><circle r="36.00951663875224" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(711.4775362285075, 668.6377102267643)"><circle style="transition:all 0.5s ease-out" r="3.755941507256401" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(719.0744447884384, 673.3699656055273)"><circle style="transition:all 0.5s ease-out" r="1.9943247482976068" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(700.1760619834166, 408.90575015560984)"><circle style="transition:all 0.5s ease-out" r="15.962386416420713" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(745.2803530526369, 421.3841890277315)"><circle r="19.787384039127623" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(712.9048242217254, 462.22559285972835)"><circle r="36.021888760704144" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(715.6535517908225, 418.71952536608353)"><circle style="transition:all 0.5s ease-out" r="3.755941507256401" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(725.2918051953524, 421.6350871269762)"><circle style="transition:all 0.5s ease-out" r="3.113638515318736" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(803.6657752472274, 665.2156778676142)"><circle style="transition:all 0.5s ease-out" r="10.499840439090226" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(828.2745436065875, 665.2156778676142)"><circle style="transition:all 0.5s ease-out" r="10.410680825266452" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(814.8825126291325, 471.9014647333349)"><circle style="transition:all 0.5s ease-out" r="14.205189639172147" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(842.9458791781938, 471.9014647333349)"><circle style="transition:all 0.5s ease-out" r="10.15992981488562" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(832.6634837676154, 493.5733678997594)"><circle style="transition:all 0.5s ease-out" r="10.129299869346374" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(832.468248782209, 451.8396887774334)"><circle style="transition:all 0.5s ease-out" r="8.7748872489836" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(884.8899766088309, 619.8145418044992)"><circle r="37.45851407917242" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(936.6061057709907, 619.8692027466992)"><circle style="transition:all 0.5s ease-out" r="9.162913064921083" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(931.2311553367789, 633.1154808281365)"><circle style="transition:all 0.5s ease-out" r="3.0633340993018727" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(930.7492409079526, 607.9361807812554)"><circle style="transition:all 0.5s ease-out" r="2.2297228532018036" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(927.9986814777568, 601.2905429812844)"><circle style="transition:all 0.5s ease-out" r="1.7627506917617404" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(927.141138054463, 639.8270113763984)"><circle style="transition:all 0.5s ease-out" r="1.5962386416420713" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(924.6831244424147, 596.1969734465579)"><circle style="transition:all 0.5s ease-out" r="1.1148614266009018" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(509.4249285356714, 562.1946222515393)"><circle style="transition:all 0.5s ease-out" r="16.91506025174909" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(594.3124503916217, 565.9835650658088)"><circle r="57.33198252525728" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(458.0907571193278, 593.1292066147005)"><circle r="35.2528148144039" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(414.88568361282734, 523.3619964530677)"><circle r="34.50902657809284" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(524.6137748126339, 653.8856447809595)"><circle r="42.50018379580438" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(504.2599918459867, 488.51027072087896)"><circle r="49.11507108800636" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(583.0010716685049, 639.9767473618364)"><circle style="transition:all 0.5s ease-out" r="9.751055021892693" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(527.6526899395642, 545.4475095935835)"><circle style="transition:all 0.5s ease-out" r="4.670457772978104" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(907.9869266011098, 514.4932006928727)"><circle style="transition:all 0.5s ease-out" r="26.6938896210276" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#89e051;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(946.8516863127406, 512.6733510830546)"><circle style="transition:all 0.5s ease-out" r="9.002117708299165" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#89e051;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(941.3453524686073, 531.7603643529645)"><circle style="transition:all 0.5s ease-out" r="7.663405315177631" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(934.2807649769985, 492.7714582676552)"><circle style="transition:all 0.5s ease-out" r="4.201119756376969" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(937.4385793612382, 501.8101004126541)"><circle style="transition:all 0.5s ease-out" r="2.173265009607865" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#000000;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(930.2155756741291, 536.0311532986414)"><circle style="transition:all 0.5s ease-out" r="1.0576504150570438" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#000080;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(259.518743870329, 583.3423814043452)"><circle style="transition:all 0.5s ease-out" r="14.650992911412272" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#000080;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(287.5967069913059, 583.3423814043452)"><circle style="transition:all 0.5s ease-out" r="9.72872311456112" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#000080;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(277.2354541695488, 598.6899217127466)"><circle style="transition:all 0.5s ease-out" r="5.090657974259925" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#000080;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(276.7483048228305, 571.939668039613)"><circle style="transition:all 0.5s ease-out" r="2.3118258589796876" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(145.25770319262398, 347.7543374102047)"><circle style="transition:all 0.5s ease-out" r="23.17598217176223" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(238.1868617862445, 347.7543374102047)"><circle r="66.05492932685483" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(150.40313620896413, 415.6689140940739)"><circle r="41.23498602070316" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(157.2891680611386, 295.94756762971804)"><circle r="26.311271971547786" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(227.1728703659968, 461.4004553176369)"><circle r="44.42540354143981" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(207.220355770931, 225.65294906289358)"><circle r="56.21377770158369" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(127.76804995506313, 318.5472567152543)"><circle style="transition:all 0.5s ease-out" r="7.169001089524915" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(248.7747881613102, 274.5246908333765)"><circle style="transition:all 0.5s ease-out" r="4.2379400901324145" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ff9900;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(207.52084777414672, 708.6946540958185)"><circle style="transition:all 0.5s ease-out" r="2.5666037486861444" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ff9900;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(215.57240372456096, 710.795424670564)"><circle style="transition:all 0.5s ease-out" r="2.5544684383925436" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ff9900;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(209.74432958865998, 716.7004755537006)"><circle style="transition:all 0.5s ease-out" r="2.542275202002629" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ff9900;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(213.36419138389087, 702.8048897808065)"><circle style="transition:all 0.5s ease-out" r="2.53002320200653" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(200.14763069230133, 704.9177037219812)"><circle style="transition:all 0.5s ease-out" r="2.517711580516173" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ff9900;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(201.6956767097978, 714.5676526516697)"><circle style="transition:all 0.5s ease-out" r="2.5053394585642716" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(221.32064796844276, 704.8812717823122)"><circle style="transition:all 0.5s ease-out" r="2.4929059353720087" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(425.6422128963368, 162.4417101299878)"><circle style="transition:all 0.5s ease-out" r="2.6382436587484763" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(434.1038665559183, 162.67105152163336)"><circle style="transition:all 0.5s ease-out" r="2.6264393773510966" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(429.6891174962221, 169.8654956808588)"><circle style="transition:all 0.5s ease-out" r="2.61458180267405" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(430.0831706159547, 155.26282973030374)"><circle style="transition:all 0.5s ease-out" r="2.602670206316612" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(421.69443018484907, 154.98801443358713)"><circle style="transition:all 0.5s ease-out" r="2.590703843132601" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(421.2980568096617, 169.65093652988222)"><circle style="transition:all 0.5s ease-out" r="2.578681950686416" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(438.44925132528925, 155.48975873632295)"><circle style="transition:all 0.5s ease-out" r="2.5666037486861444" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(438.31442014870885, 169.9172836270514)"><circle style="transition:all 0.5s ease-out" r="2.5544684383925436" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(417.27084542574573, 162.04988626351707)"><circle style="transition:all 0.5s ease-out" r="2.542275202002629" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(413.00481685317766, 169.13733440056603)"><circle style="transition:all 0.5s ease-out" r="2.53002320200653" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(442.447691307665, 162.7450449773406)"><circle style="transition:all 0.5s ease-out" r="2.517711580516173" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(446.5766610045332, 169.85631614581192)"><circle style="transition:all 0.5s ease-out" r="2.5053394585642716" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(434.4957507922767, 148.2381235078534)"><circle style="transition:all 0.5s ease-out" r="2.4929059353720087" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(495.7269340957232, 164.93740302242793)"><circle style="transition:all 0.5s ease-out" r="23.652409852596865" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(525.6076142453301, 164.93740302242793)"><circle style="transition:all 0.5s ease-out" r="2.53002320200653" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(524.3065986096153, 173.57356523016165)"><circle style="transition:all 0.5s ease-out" r="2.5053394585642716" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(524.2978094628161, 156.31514541157168)"><circle style="transition:all 0.5s ease-out" r="2.4929059353720087" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(794.3115613128424, 548.3884369429255)"><circle style="transition:all 0.5s ease-out" r="4.480300593536103" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(806.0909975844469, 549.4891618456526)"><circle style="transition:all 0.5s ease-out" r="4.149022367647345" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#cb171e;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(799.6722206022184, 557.8141231135588)"><circle style="transition:all 0.5s ease-out" r="3.1631430262014564" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(801.3136512701135, 540.200157982648)"><circle style="transition:all 0.5s ease-out" r="3.09361490881202" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(788.3084762609665, 539.7064741966074)"><circle style="transition:all 0.5s ease-out" r="2.874959374230404" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(788.3068341671311, 556.6463946748049)"><circle style="transition:all 0.5s ease-out" r="2.53002320200653" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(809.9366658474971, 540.5975789120278)"><circle style="transition:all 0.5s ease-out" r="2.338553057405247" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(749.1121721239192, 588.960636852518)"><circle r="9.230219996036654" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(780.3263396611188, 588.960636852518)"><circle r="12.368505094153937" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(729.4399067074294, 672.5408595467391)"><circle style="transition:all 0.5s ease-out" r="7.059811018784862" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(748.6729619640861, 671.6170669833235)"><circle style="transition:all 0.5s ease-out" r="6.13173784630496" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(740.2393797952972, 682.4386492028383)"><circle style="transition:all 0.5s ease-out" r="4.38921382574377" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(739.2477133163067, 661.9911233336297)"><circle style="transition:all 0.5s ease-out" r="4.141526386154246" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(730.0658421306391, 660.3025268945785)"><circle style="transition:all 0.5s ease-out" r="1.9943247482976068" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(686.3259239104053, 711.156141359216)"><circle r="9.230219996036654" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(717.527719325653, 711.156141359216)"><circle r="12.356132972202031" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(740.9279870929905, 421.6533929501359)"><circle style="transition:all 0.5s ease-out" r="4.480300593536103" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(752.707423364595, 422.75411785286315)"><circle style="transition:all 0.5s ease-out" r="4.149022367647345" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#cb171e;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(746.2886463823663, 431.07907912076934)"><circle style="transition:all 0.5s ease-out" r="3.1631430262014564" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(747.9300770502617, 413.4651139898584)"><circle style="transition:all 0.5s ease-out" r="3.09361490881202" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(734.9249020411145, 412.9714302038177)"><circle style="transition:all 0.5s ease-out" r="2.874959374230404" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(734.9232599472791, 429.91135068201515)"><circle style="transition:all 0.5s ease-out" r="2.53002320200653" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(756.5530916276454, 413.8625349192385)"><circle style="transition:all 0.5s ease-out" r="2.338553057405247" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(695.728597904067, 462.22559285972835)"><circle r="9.230219996036654" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(726.9427654412666, 462.22559285972835)"><circle r="12.368505094153937" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(867.0862550749483, 619.8145418044992)"><circle style="transition:all 0.5s ease-out" r="15.956545450286352" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(902.695645606619, 619.8145418044992)"><circle style="transition:all 0.5s ease-out" r="15.954597986380854" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(580.3985974226808, 567.2505525402736)"><circle style="transition:all 0.5s ease-out" r="16.95542600234146" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(615.5545821073414, 566.3818509002887)"><circle style="transition:all 0.5s ease-out" r="15.011351401347815" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(600.5794310987299, 595.8796134081463)"><circle style="transition:all 0.5s ease-out" r="14.869927924942008" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(599.1052831344841, 539.3232677931711)"><circle style="transition:all 0.5s ease-out" r="13.454765530328515" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(569.3666812433207, 535.6573946180347)"><circle style="transition:all 0.5s ease-out" r="13.308475873460122" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(568.5312068735412, 596.4887631787894)"><circle style="transition:all 0.5s ease-out" r="11.399424014161312" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(626.7590081078295, 539.4140266471186)"><circle style="transition:all 0.5s ease-out" r="10.99142553315067" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(628.5411640038975, 591.6545739409809)"><circle style="transition:all 0.5s ease-out" r="10.202657254057277" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(552.5682365265508, 555.9939497900806)"><circle style="transition:all 0.5s ease-out" r="9.865106326893766" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(553.167369573287, 578.2776248325862)"><circle style="transition:all 0.5s ease-out" r="9.223751960876431" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(639.3524486248741, 557.3512787898457)"><circle style="transition:all 0.5s ease-out" r="7.242310074972875" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(639.1297469896806, 574.5259712391779)"><circle style="transition:all 0.5s ease-out" r="6.730846025504422" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(443.1279472755575, 589.7088549887073)"><circle style="transition:all 0.5s ease-out" r="16.20580608641313" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(476.1783866475844, 589.7088549887073)"><circle style="transition:all 0.5s ease-out" r="13.146386190610224" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(462.3452575333225, 613.537122174689)"><circle style="transition:all 0.5s ease-out" r="10.707894333070795" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(462.00715344906496, 570.4633844599532)"><circle style="transition:all 0.5s ease-out" r="7.055408267487435" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(405.56699693385883, 526.6734910382357)"><circle style="transition:all 0.5s ease-out" r="10.371806971074559" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(436.4675237211518, 522.2722882384146)"><circle style="transition:all 0.5s ease-out" r="9.899693259955423" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(423.6077246539724, 540.2193604303916)"><circle style="transition:all 0.5s ease-out" r="8.988300174892293" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(419.1810429974094, 509.1329499380168)"><circle style="transition:all 0.5s ease-out" r="8.624878122691213" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(399.7285580031692, 506.0403913677026)"><circle style="transition:all 0.5s ease-out" r="7.871426975209228" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(408.7064085222647, 542.8940167350435)"><circle style="transition:all 0.5s ease-out" r="2.949646081084676" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(506.4234530381738, 644.0395112565716)"><circle style="transition:all 0.5s ease-out" r="18.117784515166804" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(544.6851078263729, 644.0395112565716)"><circle style="transition:all 0.5s ease-out" r="16.445623178028775" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(527.1882488770412, 676.1313150264024)"><circle style="transition:all 0.5s ease-out" r="16.40779100650647" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(485.9731269470973, 488.2772033399708)"><circle style="transition:all 0.5s ease-out" r="19.06380440921506" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(534.2784964584926, 486.0206336860966)"><circle style="transition:all 0.5s ease-out" r="15.99350220894569" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(513.5526324378008, 512.4812144881755)"><circle style="transition:all 0.5s ease-out" r="14.426582557470395" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(511.1976439682407, 467.82133526899077)"><circle style="transition:all 0.5s ease-out" r="10.208746575550782" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(490.8332716302188, 456.4822124281169)"><circle style="transition:all 0.5s ease-out" r="9.899693259955423" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(488.9917656387057, 517.916095174863)"><circle style="transition:all 0.5s ease-out" r="7.528410829904971" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(218.93456647739885, 348.95346774867755)"><circle style="transition:all 0.5s ease-out" r="23.242922355571967" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(263.9351146143281, 348.95346774867755)"><circle style="transition:all 0.5s ease-out" r="18.059378686353792" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(245.7947550405941, 379.18737663918205)"><circle style="transition:all 0.5s ease-out" r="13.500875211505326" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(245.67652815520722, 319.99725473301305)"><circle style="transition:all 0.5s ease-out" r="12.474497315139766" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(219.20676560046553, 309.831120179233)"><circle style="transition:all 0.5s ease-out" r="12.182125038859114" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(217.85334832909004, 387.96960994469737)"><circle style="transition:all 0.5s ease-out" r="12.089951267952138" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(273.5461571960081, 316.70726279260816)"><circle style="transition:all 0.5s ease-out" r="11.890403485981688" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(274.11469022449035, 380.2367931703691)"><circle style="transition:all 0.5s ease-out" r="11.140249667407883" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(194.96164799158737, 320.2051914893777)"><circle style="transition:all 0.5s ease-out" r="10.490958576139553" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(194.70972958086608, 376.7512459477323)"><circle style="transition:all 0.5s ease-out" r="9.931031398674973" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(239.82245273904232, 294.9614051717947)"><circle style="transition:all 0.5s ease-out" r="9.538419745338018" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(236.49583067150002, 402.3367443995779)"><circle style="transition:all 0.5s ease-out" r="7.7480863976366114" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(286.93538480073454, 333.5474011873255)"><circle style="transition:all 0.5s ease-out" r="5.925569762880476" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(285.954078033244, 364.25128665726356)"><circle style="transition:all 0.5s ease-out" r="5.0539018402358575" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(132.78157982741305, 415.6689140940739)"><circle style="transition:all 0.5s ease-out" r="19.915182544148596" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(172.16744230061445, 415.6689140940739)"><circle style="transition:all 0.5s ease-out" r="15.772432834049349" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(155.7260393865441, 439.3651503492231)"><circle style="transition:all 0.5s ease-out" r="9.370806552102202" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(155.31546154243375, 397.2863936896258)"><circle style="transition:all 0.5s ease-out" r="5.467369551490778" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(149.09952327779507, 295.90826067905266)"><circle style="transition:all 0.5s ease-out" r="10.208746575550782" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(169.93751279456063, 295.90826067905266)"><circle style="transition:all 0.5s ease-out" r="6.930995846211307" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(162.4624908498601, 311.26251712993746)"><circle style="transition:all 0.5s ease-out" r="6.447909755686791" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(162.1240330366227, 283.1914108145922)"><circle style="transition:all 0.5s ease-out" r="4.2961962953012955" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(151.30362831345954, 278.2281554238704)"><circle style="transition:all 0.5s ease-out" r="3.909970179736407" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(205.3859573359486, 457.97014696905956)"><circle style="transition:all 0.5s ease-out" r="18.671848814367277" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(243.05039178277667, 457.97014696905956)"><circle style="transition:all 0.5s ease-out" r="15.294338537457344" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(227.375479140398, 487.5993668659222)"><circle style="transition:all 0.5s ease-out" r="14.527461474350467" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(227.09619780504374, 432.08644417178925)"><circle style="transition:all 0.5s ease-out" r="11.413045029910654" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(195.49497178488215, 225.2556552864816)"><circle style="transition:all 0.5s ease-out" r="19.712881259810555" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(237.16227513721782, 225.2556552864816)"><circle style="transition:all 0.5s ease-out" r="18.256174997521647" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(217.72493322809953, 259.3103500747116)"><circle style="transition:all 0.5s ease-out" r="17.256960153086474" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(217.6420656994693, 194.01105633179094)"><circle style="transition:all 0.5s ease-out" r="14.886635714397636" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(187.07262029166043, 190.69162712344047)"><circle style="transition:all 0.5s ease-out" r="12.16425706166288" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(190.03876620617802, 255.20722078859376)"><circle style="transition:all 0.5s ease-out" r="7.033353170486989" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(242.8620976628851, 197.0534564450387)"><circle style="transition:all 0.5s ease-out" r="6.817995190636699" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(745.6693187838464, 587.1343190816829)"><circle style="transition:all 0.5s ease-out" r="1.634707741806952" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#2b2b2b;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(752.5985122622989, 587.1343190816829)"><circle style="transition:all 0.5s ease-out" r="1.5962386416420713" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ece2a9;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(749.1717199151207, 592.9964269045531)"><circle style="transition:all 0.5s ease-out" r="1.495743561223205" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(775.9595045331009, 588.960636852518)"><circle style="transition:all 0.5s ease-out" r="4.303422871132548" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(786.4788860797531, 588.960636852518)"><circle style="transition:all 0.5s ease-out" r="2.517711580516173" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(682.8830705703325, 709.3298235883809)"><circle style="transition:all 0.5s ease-out" r="1.634707741806952" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#2b2b2b;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(689.812264048785, 709.3298235883809)"><circle style="transition:all 0.5s ease-out" r="1.5962386416420713" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ece2a9;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(686.3854717016068, 715.1919314112512)"><circle style="transition:all 0.5s ease-out" r="1.495743561223205" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(713.173256319587, 711.156141359216)"><circle style="transition:all 0.5s ease-out" r="4.303422871132548" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(723.6802657442873, 711.156141359216)"><circle style="transition:all 0.5s ease-out" r="2.5053394585642716" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(692.2857445639942, 460.39927508889326)"><circle style="transition:all 0.5s ease-out" r="1.634707741806952" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#2b2b2b;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(699.2149380424466, 460.39927508889326)"><circle style="transition:all 0.5s ease-out" r="1.5962386416420713" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ece2a9;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(695.7881456952684, 466.2613829117635)"><circle style="transition:all 0.5s ease-out" r="1.495743561223205" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(722.5759303132487, 462.22559285972835)"><circle style="transition:all 0.5s ease-out" r="4.303422871132548" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(733.0953118599009, 462.22559285972835)"><circle style="transition:all 0.5s ease-out" r="2.517711580516173" stroke-width="0" stroke="#374151"></circle></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(320.00612713573474, 687.2198622231438)"><path fill="none" d="M 0 46.02836011911288 A 46.02836011911288 46.02836011911288 0 0 1 0 -46.02836011911288 A 46.02836011911288 46.02836011911288 0 0 1 0 46.02836011911288" id="CircleText--1" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--1" startOffset="50%">views</textPath></text><path fill="none" d="M 0 46.02836011911288 A 46.02836011911288 46.02836011911288 0 0 1 0 -46.02836011911288 A 46.02836011911288 46.02836011911288 0 0 1 0 46.02836011911288" id="CircleText--2" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--2" startOffset="50%">views</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(661.4430539975467, 565.197145882038)"><path fill="none" d="M 0 310.5566428725191 A 310.5566428725191 310.5566428725191 0 0 1 0 -310.5566428725191 A 310.5566428725191 310.5566428725191 0 0 1 0 310.5566428725191" id="CircleText--3" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--3" startOffset="50%">test</textPath></text><path fill="none" d="M 0 310.5566428725191 A 310.5566428725191 310.5566428725191 0 0 1 0 -310.5566428725191 A 310.5566428725191 310.5566428725191 0 0 1 0 310.5566428725191" id="CircleText--4" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--4" startOffset="50%">test</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(288.90225953017995, 583.3423814043452)"><path fill="none" d="M 0 56.43100276127017 A 56.43100276127017 56.43100276127017 0 0 1 0 -56.43100276127017 A 56.43100276127017 56.43100276127017 0 0 1 0 56.43100276127017" id="CircleText--5" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--5" startOffset="50%">lua</textPath></text><path fill="none" d="M 0 56.43100276127017 A 56.43100276127017 56.43100276127017 0 0 1 0 -56.43100276127017 A 56.43100276127017 56.43100276127017 0 0 1 0 56.43100276127017" id="CircleText--6" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--6" startOffset="50%">lua</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(198.26743334655254, 337.6535126993426)"><path fill="none" d="M 0 199.4433571274809 A 199.4433571274809 199.4433571274809 0 0 1 0 -199.4433571274809 A 199.4433571274809 199.4433571274809 0 0 1 0 199.4433571274809" id="CircleText--7" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--7" startOffset="50%">lib</textPath></text><path fill="none" d="M 0 199.4433571274809 A 199.4433571274809 199.4433571274809 0 0 1 0 -199.4433571274809 A 199.4433571274809 199.4433571274809 0 0 1 0 199.4433571274809" id="CircleText--8" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--8" startOffset="50%">lib</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(208.85596035685901, 675.5911309430888)"><path fill="none" d="M 0 59.71139231128382 A 59.71139231128382 59.71139231128382 0 0 1 0 -59.71139231128382 A 59.71139231128382 59.71139231128382 0 0 1 0 59.71139231128382" id="CircleText--9" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--9" startOffset="50%">docs</textPath></text><path fill="none" d="M 0 59.71139231128382 A 59.71139231128382 59.71139231128382 0 0 1 0 -59.71139231128382 A 59.71139231128382 59.71139231128382 0 0 1 0 59.71139231128382" id="CircleText--10" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--10" startOffset="50%">docs</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(467.6228500582734, 199.50509802915866)"><path fill="none" d="M 0 97.27321821656155 A 97.27321821656155 97.27321821656155 0 0 1 0 -97.27321821656155 A 97.27321821656155 97.27321821656155 0 0 1 0 97.27321821656155" id="CircleText--11" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--11" startOffset="50%">public</textPath></text><path fill="none" d="M 0 97.27321821656155 A 97.27321821656155 97.27321821656155 0 0 1 0 -97.27321821656155 A 97.27321821656155 97.27321821656155 0 0 1 0 97.27321821656155" id="CircleText--12" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--12" startOffset="50%">public</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(778.8621990400648, 570.0854043526703)"><path fill="none" d="M 0 62.70172260960655 A 62.70172260960655 62.70172260960655 0 0 1 0 -62.70172260960655 A 62.70172260960655 62.70172260960655 0 0 1 0 62.70172260960655" id="CircleText--13" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--13" startOffset="50%">rails6_dummy</textPath></text><path fill="none" d="M 0 62.70172260960655 A 62.70172260960655 62.70172260960655 0 0 1 0 -62.70172260960655 A 62.70172260960655 62.70172260960655 0 0 1 0 62.70172260960655" id="CircleText--14" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--14" startOffset="50%">rails6_dummy</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(717.5497323686653, 693.1410767346821)"><path fill="none" d="M 0 62.86175651346099 A 62.86175651346099 62.86175651346099 0 0 1 0 -62.86175651346099 A 62.86175651346099 62.86175651346099 0 0 1 0 62.86175651346099" id="CircleText--15" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--15" startOffset="50%">rails5_dummy</textPath></text><path fill="none" d="M 0 62.86175651346099 A 62.86175651346099 62.86175651346099 0 0 1 0 -62.86175651346099 A 62.86175651346099 62.86175651346099 0 0 1 0 62.86175651346099" id="CircleText--16" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--16" startOffset="50%">rails5_dummy</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(725.4786248202125, 443.35036035988065)"><path fill="none" d="M 0 62.70172260960655 A 62.70172260960655 62.70172260960655 0 0 1 0 -62.70172260960655 A 62.70172260960655 62.70172260960655 0 0 1 0 62.70172260960655" id="CircleText--17" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--17" startOffset="50%">rails4_dummy</textPath></text><path fill="none" d="M 0 62.70172260960655 A 62.70172260960655 62.70172260960655 0 0 1 0 -62.70172260960655 A 62.70172260960655 62.70172260960655 0 0 1 0 62.70172260960655" id="CircleText--18" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--18" startOffset="50%">rails4_dummy</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(815.9255796199956, 665.2156778676142)"><path fill="none" d="M 0 27.45789190686189 A 27.45789190686189 27.45789190686189 0 0 1 0 -27.45789190686189 A 27.45789190686189 27.45789190686189 0 0 1 0 27.45789190686189" id="CircleText--19" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--19" startOffset="50%">integration</textPath></text><path fill="none" d="M 0 27.45789190686189 A 27.45789190686189 27.45789190686189 0 0 1 0 -27.45789190686189 A 27.45789190686189 27.45789190686189 0 0 1 0 27.45789190686189" id="CircleText--20" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--20" startOffset="50%">integration</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(830.9874716327291, 473.39307041316187)"><path fill="none" d="M 0 35.077322847649405 A 35.077322847649405 35.077322847649405 0 0 1 0 -35.077322847649405 A 35.077322847649405 35.077322847649405 0 0 1 0 35.077322847649405" id="CircleText--21" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--21" startOffset="50%">forked</textPath></text><path fill="none" d="M 0 35.077322847649405 A 35.077322847649405 35.077322847649405 0 0 1 0 -35.077322847649405 A 35.077322847649405 35.077322847649405 0 0 1 0 35.077322847649405" id="CircleText--22" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--22" startOffset="50%">forked</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(896.6002602399892, 619.8132053020157)"><path fill="none" d="M 0 53.16879778659873 A 53.16879778659873 53.16879778659873 0 0 1 0 -53.16879778659873 A 53.16879778659873 53.16879778659873 0 0 1 0 53.16879778659873" id="CircleText--23" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--23" startOffset="50%">fixtures</textPath></text><path fill="none" d="M 0 53.16879778659873 A 53.16879778659873 53.16879778659873 0 0 1 0 -53.16879778659873 A 53.16879778659873 53.16879778659873 0 0 1 0 53.16879778659873" id="CircleText--24" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--24" startOffset="50%">fixtures</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(526.6781412802873, 561.9831724861971)"><path fill="none" d="M 0 156.78475878682949 A 156.78475878682949 156.78475878682949 0 0 1 0 -156.78475878682949 A 156.78475878682949 156.78475878682949 0 0 1 0 156.78475878682949" id="CircleText--25" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--25" startOffset="50%">coverband</textPath></text><path fill="none" d="M 0 156.78475878682949 A 156.78475878682949 156.78475878682949 0 0 1 0 -156.78475878682949 A 156.78475878682949 156.78475878682949 0 0 1 0 156.78475878682949" id="CircleText--26" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--26" startOffset="50%">coverband</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(917.814299830758, 514.616450720902)"><path fill="none" d="M 0 42.243377971831976 A 42.243377971831976 42.243377971831976 0 0 1 0 -42.243377971831976 A 42.243377971831976 42.243377971831976 0 0 1 0 42.243377971831976" id="CircleText--27" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--27" startOffset="50%">benchmarks</textPath></text><path fill="none" d="M 0 42.243377971831976 A 42.243377971831976 42.243377971831976 0 0 1 0 -42.243377971831976 A 42.243377971831976 42.243377971831976 0 0 1 0 42.243377971831976" id="CircleText--28" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--28" startOffset="50%">benchmarks</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(271.0965905323919, 583.3423814043452)"><path fill="none" d="M 0 30.92708666847861 A 30.92708666847861 30.92708666847861 0 0 1 0 -30.92708666847861 A 30.92708666847861 30.92708666847861 0 0 1 0 30.92708666847861" id="CircleText--29" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--29" startOffset="50%">test</textPath></text><path fill="none" d="M 0 30.92708666847861 A 30.92708666847861 30.92708666847861 0 0 1 0 -30.92708666847861 A 30.92708666847861 30.92708666847861 0 0 1 0 30.92708666847861" id="CircleText--30" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--30" startOffset="50%">test</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(216.69953506794164, 337.6535126993426)"><path fill="none" d="M 0 173.31300831108828 A 173.31300831108828 173.31300831108828 0 0 1 0 -173.31300831108828 A 173.31300831108828 173.31300831108828 0 0 1 0 173.31300831108828" id="CircleText--31" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--31" startOffset="50%">coverband</textPath></text><path fill="none" d="M 0 173.31300831108828 A 173.31300831108828 173.31300831108828 0 0 1 0 -173.31300831108828 A 173.31300831108828 173.31300831108828 0 0 1 0 173.31300831108828" id="CircleText--32" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--32" startOffset="50%">coverband</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(429.9770792294947, 163.4727445310884)"><path fill="none" d="M 0 25.555321990630027 A 25.555321990630027 25.555321990630027 0 0 1 0 -25.555321990630027 A 25.555321990630027 25.555321990630027 0 0 1 0 25.555321990630027" id="CircleText--33" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--33" startOffset="50%">images</textPath></text><path fill="none" d="M 0 25.555321990630027 A 25.555321990630027 25.555321990630027 0 0 1 0 -25.555321990630027 A 25.555321990630027 25.555321990630027 0 0 1 0 25.555321990630027" id="CircleText--34" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--34" startOffset="50%">images</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(500.186549985712, 164.97508910953462)"><path fill="none" d="M 0 32.810432068321326 A 32.810432068321326 32.810432068321326 0 0 1 0 -32.810432068321326 A 32.810432068321326 32.810432068321326 0 0 1 0 32.810432068321326" id="CircleText--35" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--35" startOffset="50%">colorbox</textPath></text><path fill="none" d="M 0 32.810432068321326 A 32.810432068321326 32.810432068321326 0 0 1 0 -32.810432068321326 A 32.810432068321326 32.810432068321326 0 0 1 0 32.810432068321326" id="CircleText--36" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--36" startOffset="50%">colorbox</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(798.663927272489, 548.119233020521)"><path fill="none" d="M 0 20 A 20 20 0 0 1 0 -20 A 20 20 0 0 1 0 20" id="CircleText--37" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--37" startOffset="50%">config</textPath></text><path fill="none" d="M 0 20 A 20 20 0 0 1 0 -20 A 20 20 0 0 1 0 20" id="CircleText--38" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--38" startOffset="50%">config</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(766.2883984415777, 588.960636852518)"><path fill="none" d="M 0 33.021888760704144 A 33.021888760704144 33.021888760704144 0 0 1 0 -33.021888760704144 A 33.021888760704144 33.021888760704144 0 0 1 0 33.021888760704144" id="CircleText--39" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--39" startOffset="50%">app</textPath></text><path fill="none" d="M 0 33.021888760704144 A 33.021888760704144 33.021888760704144 0 0 1 0 -33.021888760704144 A 33.021888760704144 33.021888760704144 0 0 1 0 33.021888760704144" id="CircleText--40" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--40" startOffset="50%">app</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(737.5020999043077, 671.842246484952)"><path fill="none" d="M 0 20 A 20 20 0 0 1 0 -20 A 20 20 0 0 1 0 20" id="CircleText--41" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--41" startOffset="50%">config</textPath></text><path fill="none" d="M 0 20 A 20 20 0 0 1 0 -20 A 20 20 0 0 1 0 20" id="CircleText--42" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--42" startOffset="50%">config</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(703.4897781061119, 711.156141359216)"><path fill="none" d="M 0 33.00951663875224 A 33.00951663875224 33.00951663875224 0 0 1 0 -33.00951663875224 A 33.00951663875224 33.00951663875224 0 0 1 0 33.00951663875224" id="CircleText--43" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--43" startOffset="50%">app</textPath></text><path fill="none" d="M 0 33.00951663875224 A 33.00951663875224 33.00951663875224 0 0 1 0 -33.00951663875224 A 33.00951663875224 33.00951663875224 0 0 1 0 33.00951663875224" id="CircleText--44" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--44" startOffset="50%">app</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(745.2803530526369, 421.3841890277315)"><path fill="none" d="M 0 20 A 20 20 0 0 1 0 -20 A 20 20 0 0 1 0 20" id="CircleText--45" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--45" startOffset="50%">config</textPath></text><path fill="none" d="M 0 20 A 20 20 0 0 1 0 -20 A 20 20 0 0 1 0 20" id="CircleText--46" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--46" startOffset="50%">config</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(712.9048242217254, 462.22559285972835)"><path fill="none" d="M 0 33.021888760704144 A 33.021888760704144 33.021888760704144 0 0 1 0 -33.021888760704144 A 33.021888760704144 33.021888760704144 0 0 1 0 33.021888760704144" id="CircleText--47" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--47" startOffset="50%">app</textPath></text><path fill="none" d="M 0 33.021888760704144 A 33.021888760704144 33.021888760704144 0 0 1 0 -33.021888760704144 A 33.021888760704144 33.021888760704144 0 0 1 0 33.021888760704144" id="CircleText--48" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--48" startOffset="50%">app</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(884.8899766088309, 619.8145418044992)"><path fill="none" d="M 0 34.45851407917242 A 34.45851407917242 34.45851407917242 0 0 1 0 -34.45851407917242 A 34.45851407917242 34.45851407917242 0 0 1 0 34.45851407917242" id="CircleText--49" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--49" startOffset="50%">app</textPath></text><path fill="none" d="M 0 34.45851407917242 A 34.45851407917242 34.45851407917242 0 0 1 0 -34.45851407917242 A 34.45851407917242 34.45851407917242 0 0 1 0 34.45851407917242" id="CircleText--50" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--50" startOffset="50%">app</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(594.3124503916217, 565.9835650658088)"><path fill="none" d="M 0 54.331982525257274 A 54.331982525257274 54.331982525257274 0 0 1 0 -54.331982525257274 A 54.331982525257274 54.331982525257274 0 0 1 0 54.331982525257274" id="CircleText--51" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--51" startOffset="50%">utils</textPath></text><path fill="none" d="M 0 54.331982525257274 A 54.331982525257274 54.331982525257274 0 0 1 0 -54.331982525257274 A 54.331982525257274 54.331982525257274 0 0 1 0 54.331982525257274" id="CircleText--52" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--52" startOffset="50%">utils</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(458.0907571193278, 593.1292066147005)"><path fill="none" d="M 0 32.2528148144039 A 32.2528148144039 32.2528148144039 0 0 1 0 -32.2528148144039 A 32.2528148144039 32.2528148144039 0 0 1 0 32.2528148144039" id="CircleText--53" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--53" startOffset="50%">reporters</textPath></text><path fill="none" d="M 0 32.2528148144039 A 32.2528148144039 32.2528148144039 0 0 1 0 -32.2528148144039 A 32.2528148144039 32.2528148144039 0 0 1 0 32.2528148144039" id="CircleText--54" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--54" startOffset="50%">reporters</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(414.88568361282734, 523.3619964530677)"><path fill="none" d="M 0 31.509026578092843 A 31.509026578092843 31.509026578092843 0 0 1 0 -31.509026578092843 A 31.509026578092843 31.509026578092843 0 0 1 0 31.509026578092843" id="CircleText--55" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--55" startOffset="50%">integrations</textPath></text><path fill="none" d="M 0 31.509026578092843 A 31.509026578092843 31.509026578092843 0 0 1 0 -31.509026578092843 A 31.509026578092843 31.509026578092843 0 0 1 0 31.509026578092843" id="CircleText--56" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--56" startOffset="50%">integrations</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(524.6137748126339, 653.8856447809595)"><path fill="none" d="M 0 39.50018379580438 A 39.50018379580438 39.50018379580438 0 0 1 0 -39.50018379580438 A 39.50018379580438 39.50018379580438 0 0 1 0 39.50018379580438" id="CircleText--57" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--57" startOffset="50%">collectors</textPath></text><path fill="none" d="M 0 39.50018379580438 A 39.50018379580438 39.50018379580438 0 0 1 0 -39.50018379580438 A 39.50018379580438 39.50018379580438 0 0 1 0 39.50018379580438" id="CircleText--58" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--58" startOffset="50%">collectors</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(504.2599918459867, 488.51027072087896)"><path fill="none" d="M 0 46.11507108800636 A 46.11507108800636 46.11507108800636 0 0 1 0 -46.11507108800636 A 46.11507108800636 46.11507108800636 0 0 1 0 46.11507108800636" id="CircleText--59" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--59" startOffset="50%">adapters</textPath></text><path fill="none" d="M 0 46.11507108800636 A 46.11507108800636 46.11507108800636 0 0 1 0 -46.11507108800636 A 46.11507108800636 46.11507108800636 0 0 1 0 46.11507108800636" id="CircleText--60" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--60" startOffset="50%">adapters</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(238.1868617862445, 347.7543374102047)"><path fill="none" d="M 0 63.05492932685483 A 63.05492932685483 63.05492932685483 0 0 1 0 -63.05492932685483 A 63.05492932685483 63.05492932685483 0 0 1 0 63.05492932685483" id="CircleText--61" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--61" startOffset="50%">utils</textPath></text><path fill="none" d="M 0 63.05492932685483 A 63.05492932685483 63.05492932685483 0 0 1 0 -63.05492932685483 A 63.05492932685483 63.05492932685483 0 0 1 0 63.05492932685483" id="CircleText--62" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--62" startOffset="50%">utils</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(150.40313620896413, 415.6689140940739)"><path fill="none" d="M 0 38.23498602070316 A 38.23498602070316 38.23498602070316 0 0 1 0 -38.23498602070316 A 38.23498602070316 38.23498602070316 0 0 1 0 38.23498602070316" id="CircleText--63" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--63" startOffset="50%">reporters</textPath></text><path fill="none" d="M 0 38.23498602070316 A 38.23498602070316 38.23498602070316 0 0 1 0 -38.23498602070316 A 38.23498602070316 38.23498602070316 0 0 1 0 38.23498602070316" id="CircleText--64" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--64" startOffset="50%">reporters</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(157.2891680611386, 295.94756762971804)"><path fill="none" d="M 0 23.311271971547782 A 23.311271971547782 23.311271971547782 0 0 1 0 -23.311271971547782 A 23.311271971547782 23.311271971547782 0 0 1 0 23.311271971547782" id="CircleText--65" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--65" startOffset="50%">integrations</textPath></text><path fill="none" d="M 0 23.311271971547782 A 23.311271971547782 23.311271971547782 0 0 1 0 -23.311271971547782 A 23.311271971547782 23.311271971547782 0 0 1 0 23.311271971547782" id="CircleText--66" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--66" startOffset="50%">integrations</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(227.1728703659968, 461.4004553176369)"><path fill="none" d="M 0 41.42540354143981 A 41.42540354143981 41.42540354143981 0 0 1 0 -41.42540354143981 A 41.42540354143981 41.42540354143981 0 0 1 0 41.42540354143981" id="CircleText--67" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--67" startOffset="50%">collectors</textPath></text><path fill="none" d="M 0 41.42540354143981 A 41.42540354143981 41.42540354143981 0 0 1 0 -41.42540354143981 A 41.42540354143981 41.42540354143981 0 0 1 0 41.42540354143981" id="CircleText--68" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--68" startOffset="50%">collectors</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(207.220355770931, 225.65294906289358)"><path fill="none" d="M 0 53.213777701583695 A 53.213777701583695 53.213777701583695 0 0 1 0 -53.213777701583695 A 53.213777701583695 53.213777701583695 0 0 1 0 53.213777701583695" id="CircleText--69" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--69" startOffset="50%">adapters</textPath></text><path fill="none" d="M 0 53.213777701583695 A 53.213777701583695 53.213777701583695 0 0 1 0 -53.213777701583695 A 53.213777701583695 53.213777701583695 0 0 1 0 53.213777701583695" id="CircleText--70" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--70" startOffset="50%">adapters</textPath></text></g><g style="fill:#CED6E0;transition:transform 0s ease-out" transform="translate(181.61749253292245, 668.8661822807059)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">coverban...</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">coverban...</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">coverban...</text></g><g style="fill:#CED6E0;transition:transform 0s ease-out" transform="translate(235.25964076788608, 666.0924002361274)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">coverban...</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">coverban...</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">coverban...</text></g><g style="fill:#f1e05a;transition:transform 0s ease-out" transform="translate(414.79764353602405, 225.1897322137628)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">dependenci...</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">dependenci...</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">dependenci...</text></g><g style="fill:#563d7c;transition:transform 0s ease-out" transform="translate(512.7910567195597, 234.721131053716)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">applicatio...</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">applicatio...</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">applicatio...</text></g><g style="fill:#083fa1;transition:transform 0s ease-out" transform="translate(320.1615724594404, 804.9875239262727)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">README.md</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">README.md</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">README.md</text></g><g style="fill:#083fa1;transition:transform 0s ease-out" transform="translate(392.23035259112095, 805.8219336390632)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">changes.md</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">changes.md</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">changes.md</text></g><g style="fill:#701516;transition:transform 0s ease-out" transform="translate(907.9869266011098, 514.4932006928727)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">benchmark...</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">benchmark...</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">benchmark...</text></g><g style="fill:#701516;transition:transform 0s ease-out" transform="translate(145.25770319262398, 347.7543374102047)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">configur...</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">configur...</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">configur...</text></g><g style="fill:#CED6E0;transition:transform 0s ease-out" transform="translate(495.7269340957232, 164.93740302242793)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">loading.gif</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">loading.gif</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">loading.gif</text></g><g style="fill:#701516;transition:transform 0s ease-out" transform="translate(218.93456647739885, 348.95346774867755)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">source_f...</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">source_f...</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">source_f...</text></g><g transform="translate(940, 740)"><g transform="translate(0, 0)"><circle r="5" fill="#563d7c"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.css</text></g><g transform="translate(0, 15)"><circle r="5" fill="#701516"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.erb</text></g><g transform="translate(0, 30)"><circle r="5" fill="#701516"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.gemspec</text></g><g transform="translate(0, 45)"><circle r="5" fill="#000000"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.gitignore</text></g><g transform="translate(0, 60)"><circle r="5" fill="#ece2a9"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.haml</text></g><g transform="translate(0, 75)"><circle r="5" fill="#f1e05a"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.js</text></g><g transform="translate(0, 90)"><circle r="5" fill="#000080"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.lua</text></g><g transform="translate(0, 105)"><circle r="5" fill="#083fa1"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.md</text></g><g transform="translate(0, 120)"><circle r="5" fill="#701516"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.rake</text></g><g transform="translate(0, 135)"><circle r="5" fill="#701516"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.rb</text></g><g transform="translate(0, 150)"><circle r="5" fill="#701516"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.ru</text></g><g transform="translate(0, 165)"><circle r="5" fill="#89e051"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.sh</text></g><g transform="translate(0, 180)"><circle r="5" fill="#2b2b2b"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.slim</text></g><g transform="translate(0, 195)"><circle r="5" fill="#ff9900"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.svg</text></g><g transform="translate(0, 210)"><circle r="5" fill="#199f4b"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.txt</text></g><g transform="translate(0, 225)"><circle r="5" fill="#cb171e"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.yml</text></g><g fill="#9CA3AF" style="font-weight:300;font-style:italic;font-size:12px">each dot sized by file size</g></g></svg>
@@ -52,8 +52,9 @@ module Coverband
52
52
  end
53
53
 
54
54
  def get_coverage_report
55
- data = Coverband.configuration.store.split_coverage(Coverband::TYPES)
56
- data.merge(Coverband::MERGED_TYPE => Coverband.configuration.store.merged_coverage(Coverband::TYPES))
55
+ coverage_cache = {}
56
+ data = Coverband.configuration.store.split_coverage(Coverband::TYPES, coverage_cache)
57
+ data.merge(Coverband::MERGED_TYPE => Coverband.configuration.store.merged_coverage(Coverband::TYPES, coverage_cache))
57
58
  end
58
59
 
59
60
  def covered_files
@@ -66,12 +67,12 @@ module Coverband
66
67
 
67
68
  protected
68
69
 
69
- def split_coverage(types)
70
+ def split_coverage(types, coverage_cache)
70
71
  types.reduce({}) do |data, type|
71
72
  if type == Coverband::RUNTIME_TYPE && Coverband.configuration.simulate_oneshot_lines_coverage
72
- data.update(type => simulated_runtime_coverage)
73
+ data.update(type => coverage_cache[type] ||= simulated_runtime_coverage)
73
74
  else
74
- data.update(type => coverage(type))
75
+ data.update(type => coverage_cache[type] ||= coverage(type))
75
76
  end
76
77
  end
77
78
  end
@@ -85,9 +86,9 @@ module Coverband
85
86
  merge_reports(runtime_data, eager_data, skip_expansion: true)
86
87
  end
87
88
 
88
- def merged_coverage(types)
89
+ def merged_coverage(types, coverage_cache)
89
90
  types.reduce({}) do |data, type|
90
- merge_reports(data, coverage(type), skip_expansion: true)
91
+ merge_reports(data, coverage_cache[type] ||= coverage(type), skip_expansion: true)
91
92
  end
92
93
  end
93
94
 
@@ -14,7 +14,7 @@ module Coverband
14
14
  #
15
15
  # View Reports:
16
16
  # Using this assumes you are syncing the coverage files
17
- # to some shared storage that is accessable outside of the production server
17
+ # to some shared storage that is accessible outside of the production server
18
18
  # download files to a system where you want to view the reports..
19
19
  # When viewing coverage from the filestore adapter it merges all coverage
20
20
  # files matching the path pattern, in this case `log/coverage.log.*`
@@ -9,7 +9,7 @@ module Coverband
9
9
  FILE_LENGTH_KEY = "file_length"
10
10
  META_DATA_KEYS = [DATA_KEY, FIRST_UPDATED_KEY, LAST_UPDATED_KEY, FILE_HASH].freeze
11
11
  ###
12
- # This key isn't related to the coverband version, but to the interal format
12
+ # This key isn't related to the coverband version, but to the internal format
13
13
  # used to store data to redis. It is changed only when breaking changes to our
14
14
  # redis format are required.
15
15
  ###