consul 1.3.2 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +12 -9
- data/.gitignore +1 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +20 -1
- data/Gemfile +1 -1
- data/Gemfile.6-1 +1 -1
- data/Gemfile.6-1.lock +13 -13
- data/Gemfile.7-1 +1 -1
- data/Gemfile.7-1.lock +43 -39
- data/{Gemfile.5-2 → Gemfile.7-2} +3 -4
- data/Gemfile.7-2.lock +171 -0
- data/{Gemfile.7-0 → Gemfile.8-0} +1 -1
- data/Gemfile.8-0.lock +174 -0
- data/Gemfile.lock +1 -1
- data/README.md +20 -6
- data/consul.gemspec +3 -3
- data/lib/consul/util.rb +14 -41
- data/lib/consul/version.rb +1 -1
- data/media/logo.dark.shapes.svg +125 -0
- data/media/logo.dark.text.svg +107 -0
- data/media/logo.light.shapes.svg +89 -0
- data/media/logo.light.text.svg +108 -0
- data/media/makandra-with-bottom-margin.dark.svg +180 -0
- data/media/makandra-with-bottom-margin.light.svg +180 -0
- metadata +19 -16
- data/Gemfile.5-2.lock +0 -128
- data/Gemfile.7-0.lock +0 -133
data/Gemfile.8-0.lock
ADDED
@@ -0,0 +1,174 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
consul (2.0.0)
|
5
|
+
activerecord (>= 6.0)
|
6
|
+
activesupport (>= 6.0)
|
7
|
+
edge_rider (>= 0.3.0)
|
8
|
+
memoized (>= 1.0.2)
|
9
|
+
railties (>= 6.0)
|
10
|
+
|
11
|
+
GEM
|
12
|
+
remote: https://rubygems.org/
|
13
|
+
specs:
|
14
|
+
actionpack (8.0.1)
|
15
|
+
actionview (= 8.0.1)
|
16
|
+
activesupport (= 8.0.1)
|
17
|
+
nokogiri (>= 1.8.5)
|
18
|
+
rack (>= 2.2.4)
|
19
|
+
rack-session (>= 1.0.1)
|
20
|
+
rack-test (>= 0.6.3)
|
21
|
+
rails-dom-testing (~> 2.2)
|
22
|
+
rails-html-sanitizer (~> 1.6)
|
23
|
+
useragent (~> 0.16)
|
24
|
+
actionview (8.0.1)
|
25
|
+
activesupport (= 8.0.1)
|
26
|
+
builder (~> 3.1)
|
27
|
+
erubi (~> 1.11)
|
28
|
+
rails-dom-testing (~> 2.2)
|
29
|
+
rails-html-sanitizer (~> 1.6)
|
30
|
+
activemodel (8.0.1)
|
31
|
+
activesupport (= 8.0.1)
|
32
|
+
activerecord (8.0.1)
|
33
|
+
activemodel (= 8.0.1)
|
34
|
+
activesupport (= 8.0.1)
|
35
|
+
timeout (>= 0.4.0)
|
36
|
+
activesupport (8.0.1)
|
37
|
+
base64
|
38
|
+
benchmark (>= 0.3)
|
39
|
+
bigdecimal
|
40
|
+
concurrent-ruby (~> 1.0, >= 1.3.1)
|
41
|
+
connection_pool (>= 2.2.5)
|
42
|
+
drb
|
43
|
+
i18n (>= 1.6, < 2)
|
44
|
+
logger (>= 1.4.2)
|
45
|
+
minitest (>= 5.1)
|
46
|
+
securerandom (>= 0.3)
|
47
|
+
tzinfo (~> 2.0, >= 2.0.5)
|
48
|
+
uri (>= 0.13.1)
|
49
|
+
assignable_values (1.0.0)
|
50
|
+
activerecord (>= 2.3)
|
51
|
+
base64 (0.2.0)
|
52
|
+
benchmark (0.4.0)
|
53
|
+
bigdecimal (3.1.8)
|
54
|
+
builder (3.3.0)
|
55
|
+
concurrent-ruby (1.3.3)
|
56
|
+
connection_pool (2.4.1)
|
57
|
+
crass (1.0.6)
|
58
|
+
database_cleaner (2.0.2)
|
59
|
+
database_cleaner-active_record (>= 2, < 3)
|
60
|
+
database_cleaner-active_record (2.2.0)
|
61
|
+
activerecord (>= 5.a)
|
62
|
+
database_cleaner-core (~> 2.0.0)
|
63
|
+
database_cleaner-core (2.0.1)
|
64
|
+
date (3.4.1)
|
65
|
+
diff-lcs (1.5.1)
|
66
|
+
drb (2.2.1)
|
67
|
+
edge_rider (2.3.0)
|
68
|
+
activerecord (>= 3.2)
|
69
|
+
erubi (1.13.0)
|
70
|
+
gemika (0.8.3)
|
71
|
+
i18n (1.14.5)
|
72
|
+
concurrent-ruby (~> 1.0)
|
73
|
+
io-console (0.8.0)
|
74
|
+
irb (1.14.3)
|
75
|
+
rdoc (>= 4.0.0)
|
76
|
+
reline (>= 0.4.2)
|
77
|
+
logger (1.6.1)
|
78
|
+
loofah (2.22.0)
|
79
|
+
crass (~> 1.0.2)
|
80
|
+
nokogiri (>= 1.12.0)
|
81
|
+
memoized (1.1.1)
|
82
|
+
mini_portile2 (2.8.8)
|
83
|
+
minitest (5.24.1)
|
84
|
+
nokogiri (1.16.6)
|
85
|
+
mini_portile2 (~> 2.8.2)
|
86
|
+
racc (~> 1.4)
|
87
|
+
psych (5.2.2)
|
88
|
+
date
|
89
|
+
stringio
|
90
|
+
racc (1.8.0)
|
91
|
+
rack (3.1.7)
|
92
|
+
rack-session (2.0.0)
|
93
|
+
rack (>= 3.0.0)
|
94
|
+
rack-test (2.1.0)
|
95
|
+
rack (>= 1.3)
|
96
|
+
rackup (2.2.1)
|
97
|
+
rack (>= 3)
|
98
|
+
rails-dom-testing (2.2.0)
|
99
|
+
activesupport (>= 5.0.0)
|
100
|
+
minitest
|
101
|
+
nokogiri (>= 1.6)
|
102
|
+
rails-html-sanitizer (1.6.0)
|
103
|
+
loofah (~> 2.21)
|
104
|
+
nokogiri (~> 1.14)
|
105
|
+
railties (8.0.1)
|
106
|
+
actionpack (= 8.0.1)
|
107
|
+
activesupport (= 8.0.1)
|
108
|
+
irb (~> 1.13)
|
109
|
+
rackup (>= 1.0.0)
|
110
|
+
rake (>= 12.2)
|
111
|
+
thor (~> 1.0, >= 1.2.2)
|
112
|
+
zeitwerk (~> 2.6)
|
113
|
+
rake (13.2.1)
|
114
|
+
rdoc (6.10.0)
|
115
|
+
psych (>= 4.0.0)
|
116
|
+
reline (0.6.0)
|
117
|
+
io-console (~> 0.5)
|
118
|
+
rspec (3.13.0)
|
119
|
+
rspec-core (~> 3.13.0)
|
120
|
+
rspec-expectations (~> 3.13.0)
|
121
|
+
rspec-mocks (~> 3.13.0)
|
122
|
+
rspec-core (3.13.0)
|
123
|
+
rspec-support (~> 3.13.0)
|
124
|
+
rspec-expectations (3.13.1)
|
125
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
126
|
+
rspec-support (~> 3.13.0)
|
127
|
+
rspec-mocks (3.13.1)
|
128
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
129
|
+
rspec-support (~> 3.13.0)
|
130
|
+
rspec-rails (6.1.3)
|
131
|
+
actionpack (>= 6.1)
|
132
|
+
activesupport (>= 6.1)
|
133
|
+
railties (>= 6.1)
|
134
|
+
rspec-core (~> 3.13)
|
135
|
+
rspec-expectations (~> 3.13)
|
136
|
+
rspec-mocks (~> 3.13)
|
137
|
+
rspec-support (~> 3.13)
|
138
|
+
rspec-support (3.13.1)
|
139
|
+
rspec_candy (0.5.1)
|
140
|
+
rspec
|
141
|
+
sneaky-save
|
142
|
+
securerandom (0.3.2)
|
143
|
+
shoulda-matchers (6.2.0)
|
144
|
+
activesupport (>= 5.2.0)
|
145
|
+
sneaky-save (0.1.3)
|
146
|
+
activerecord (>= 3.2.0)
|
147
|
+
sqlite3 (2.4.1)
|
148
|
+
mini_portile2 (~> 2.8.0)
|
149
|
+
stringio (3.1.2)
|
150
|
+
thor (1.3.2)
|
151
|
+
timeout (0.4.1)
|
152
|
+
tzinfo (2.0.6)
|
153
|
+
concurrent-ruby (~> 1.0)
|
154
|
+
uri (1.0.2)
|
155
|
+
useragent (0.16.10)
|
156
|
+
zeitwerk (2.7.1)
|
157
|
+
|
158
|
+
PLATFORMS
|
159
|
+
ruby
|
160
|
+
|
161
|
+
DEPENDENCIES
|
162
|
+
assignable_values
|
163
|
+
consul!
|
164
|
+
database_cleaner
|
165
|
+
gemika (>= 0.8.1)
|
166
|
+
railties (~> 8.0)
|
167
|
+
rspec
|
168
|
+
rspec-rails
|
169
|
+
rspec_candy
|
170
|
+
shoulda-matchers
|
171
|
+
sqlite3
|
172
|
+
|
173
|
+
BUNDLED WITH
|
174
|
+
2.5.15
|
data/Gemfile.lock
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Gemfile.
|
1
|
+
Gemfile.8-0.lock
|
data/README.md
CHANGED
@@ -1,13 +1,27 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
<p>
|
2
|
+
<a href="https://makandra.de/">
|
3
|
+
<picture>
|
4
|
+
<source media="(prefers-color-scheme: light)" srcset="media/makandra-with-bottom-margin.light.svg">
|
5
|
+
<source media="(prefers-color-scheme: dark)" srcset="media/makandra-with-bottom-margin.dark.svg">
|
6
|
+
<img align="right" width="25%" alt="makandra" src="media/makandra-with-bottom-margin.light.svg">
|
7
|
+
</picture>
|
8
|
+
</a>
|
9
|
+
|
10
|
+
<picture>
|
11
|
+
<source media="(prefers-color-scheme: light)" srcset="media/logo.light.shapes.svg">
|
12
|
+
<source media="(prefers-color-scheme: dark)" srcset="media/logo.dark.shapes.svg">
|
13
|
+
<img width="155" alt="consul" role="heading" aria-level="1" src="media/logo.light.shapes.svg">
|
14
|
+
</picture>
|
15
|
+
</p>
|
16
|
+
|
17
|
+
[![Tests](https://github.com/makandra/consul/workflows/Tests/badge.svg)](https://github.com/makandra/consul/actions)
|
4
18
|
|
5
19
|
Consul is an authorization solution for Ruby on Rails where you describe _sets of accessible things_ to control what a user can see or edit.
|
6
20
|
|
7
21
|
We have used Consul in combination with [assignable_values](https://github.com/makandra/assignable_values) to solve a variety of authorization requirements ranging from boring to bizarre.
|
8
22
|
Also see our crash course video: [Solving bizare authorization requirements with Rails](http://bizarre-authorization.talks.makandra.com/).
|
9
23
|
|
10
|
-
Consul is tested with Rails
|
24
|
+
Consul is tested with Rails 6.1, 7.1, 7.2 and 8.0 on Ruby 2.5, 2.7, 3.2, 3.3 (only if supported, for each Ruby/Rails combination). If you need support for Rails 3.2, please use [v0.13.2](https://github.com/makandra/consul/tree/v0.13.2).
|
11
25
|
|
12
26
|
## Describing access to your application
|
13
27
|
|
@@ -820,11 +834,11 @@ Now run `bundle install` to lock the gem into your project.
|
|
820
834
|
|
821
835
|
## Development
|
822
836
|
|
823
|
-
We currently develop using Ruby
|
837
|
+
We currently develop using Ruby 3.4.1 (see `.ruby-version`) since that version works for current versions of ActiveRecord that we support. GitHub Actions will test additional Ruby versions (2.7.3, 3.2.0).
|
824
838
|
|
825
839
|
There are tests in `spec`. We only accept PRs with tests. To run tests:
|
826
840
|
|
827
|
-
- Install Ruby
|
841
|
+
- Install Ruby 3.4.1
|
828
842
|
- run `bundle install`
|
829
843
|
- Put your database credentials into `spec/support/database.yml`. There's a `database.sample.yml` you can use as a template.
|
830
844
|
- There are gem bundles in the project root for each rails version that we support.
|
data/consul.gemspec
CHANGED
@@ -26,8 +26,8 @@ Gem::Specification.new do |s|
|
|
26
26
|
s.require_paths = ["lib"]
|
27
27
|
|
28
28
|
s.add_dependency('memoized', '>=1.0.2')
|
29
|
-
s.add_dependency('activerecord', '>=
|
30
|
-
s.add_dependency('activesupport', '>=
|
31
|
-
s.add_dependency('railties', '>=
|
29
|
+
s.add_dependency('activerecord', '>= 6.0')
|
30
|
+
s.add_dependency('activesupport', '>= 6.0')
|
31
|
+
s.add_dependency('railties', '>= 6.0')
|
32
32
|
s.add_dependency('edge_rider', '>= 0.3.0')
|
33
33
|
end
|
data/lib/consul/util.rb
CHANGED
@@ -3,11 +3,7 @@ module Consul
|
|
3
3
|
extend self
|
4
4
|
|
5
5
|
def scope_selects_all_records?(scope)
|
6
|
-
|
7
|
-
scope = scope.scoped({})
|
8
|
-
else
|
9
|
-
scope = scope.scoped
|
10
|
-
end
|
6
|
+
scope = scope.scoped
|
11
7
|
scope_sql = scope.to_sql
|
12
8
|
quoted_table_name = Regexp.quote(scope.connection.quote_table_name(scope.table_name))
|
13
9
|
all_sql_pattern = /\ASELECT (#{quoted_table_name}\.)?\* FROM #{quoted_table_name}\z/
|
@@ -23,26 +19,17 @@ module Consul
|
|
23
19
|
end
|
24
20
|
|
25
21
|
def define_scope(klass, name, lambda)
|
26
|
-
|
27
|
-
|
28
|
-
klass.
|
29
|
-
|
30
|
-
klass.send :scope, name, lambda { |*args|
|
31
|
-
options = lambda.call(*args)
|
32
|
-
klass.scoped(options.slice *EdgeRider::Scoped::VALID_FIND_OPTIONS)
|
33
|
-
}
|
34
|
-
end
|
22
|
+
klass.send :scope, name, lambda { |*args|
|
23
|
+
options = lambda.call(*args)
|
24
|
+
klass.scoped(options.slice *EdgeRider::Scoped::VALID_FIND_OPTIONS)
|
25
|
+
}
|
35
26
|
end
|
36
27
|
|
37
28
|
# This method does not support dynamic default scopes via lambdas
|
38
29
|
# (as does #define_scope), because it is currently not required.
|
39
30
|
def define_default_scope(klass, conditions)
|
40
|
-
|
41
|
-
klass.
|
42
|
-
else
|
43
|
-
klass.send :default_scope do
|
44
|
-
klass.scoped(conditions)
|
45
|
-
end
|
31
|
+
klass.send :default_scope do
|
32
|
+
klass.scoped(conditions)
|
46
33
|
end
|
47
34
|
end
|
48
35
|
|
@@ -58,33 +45,19 @@ module Consul
|
|
58
45
|
end
|
59
46
|
|
60
47
|
def skip_before_action(controller_class, name, options)
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
# Every `power` in a controller will skip the power check filter. After the 1st time, Rails 5+ will raise
|
67
|
-
# an error because there is no `unchecked_power` action to skip any more.
|
68
|
-
# To avoid this, we add the following extra option. Note that it must not be added in Rails 4 to avoid errors.
|
69
|
-
# See http://api.rubyonrails.org/classes/ActiveSupport/Callbacks/ClassMethods.html#method-i-skip_callback
|
70
|
-
controller_class.skip_before_action name, { :raise => false }.merge!(options)
|
71
|
-
end
|
48
|
+
# Every `power` in a controller will skip the power check filter. After the 1st time, Rails will raise
|
49
|
+
# an error because there is no `unchecked_power` action to skip any more.
|
50
|
+
# To avoid this, we add the following extra option.
|
51
|
+
# See http://api.rubyonrails.org/classes/ActiveSupport/Callbacks/ClassMethods.html#method-i-skip_callback
|
52
|
+
controller_class.skip_before_action name, { :raise => false }.merge!(options)
|
72
53
|
end
|
73
54
|
|
74
55
|
def before_action(controller_class, *args, &block)
|
75
|
-
|
76
|
-
controller_class.before_filter *args, &block
|
77
|
-
else
|
78
|
-
controller_class.before_action *args, &block
|
79
|
-
end
|
56
|
+
controller_class.before_action *args, &block
|
80
57
|
end
|
81
58
|
|
82
59
|
def around_action(controller_class, *args, &block)
|
83
|
-
|
84
|
-
controller_class.around_filter *args, &block
|
85
|
-
else
|
86
|
-
controller_class.around_action *args, &block
|
87
|
-
end
|
60
|
+
controller_class.around_action *args, &block
|
88
61
|
end
|
89
62
|
|
90
63
|
end
|
data/lib/consul/version.rb
CHANGED
@@ -0,0 +1,125 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
3
|
+
|
4
|
+
<svg
|
5
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
6
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
7
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
8
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
9
|
+
xmlns="http://www.w3.org/2000/svg"
|
10
|
+
xmlns:xlink="http://www.w3.org/1999/xlink"
|
11
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
12
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
13
|
+
width="39.306458mm"
|
14
|
+
height="14.056225mm"
|
15
|
+
viewBox="0 0 39.306457 14.056225"
|
16
|
+
version="1.1"
|
17
|
+
id="svg838"
|
18
|
+
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
|
19
|
+
sodipodi:docname="logo.dark.shapes.svg"
|
20
|
+
inkscape:export-filename="/home/henning/Projects/capybara-lockstep/media/capybara-lockstep.dark.png"
|
21
|
+
inkscape:export-xdpi="196"
|
22
|
+
inkscape:export-ydpi="196">
|
23
|
+
<defs
|
24
|
+
id="defs832">
|
25
|
+
<linearGradient
|
26
|
+
inkscape:collect="always"
|
27
|
+
id="linearGradient1406">
|
28
|
+
<stop
|
29
|
+
style="stop-color:#ff0844;stop-opacity:1"
|
30
|
+
offset="0"
|
31
|
+
id="stop1402" />
|
32
|
+
<stop
|
33
|
+
style="stop-color:#ffb199;stop-opacity:1"
|
34
|
+
offset="1"
|
35
|
+
id="stop1404" />
|
36
|
+
</linearGradient>
|
37
|
+
<linearGradient
|
38
|
+
inkscape:collect="always"
|
39
|
+
xlink:href="#linearGradient1406"
|
40
|
+
id="linearGradient1408"
|
41
|
+
x1="22.054907"
|
42
|
+
y1="91.071762"
|
43
|
+
x2="88.956696"
|
44
|
+
y2="91.071762"
|
45
|
+
gradientUnits="userSpaceOnUse"
|
46
|
+
gradientTransform="matrix(0.58751979,0,0,0.08820435,-12.957695,57.908781)" />
|
47
|
+
</defs>
|
48
|
+
<sodipodi:namedview
|
49
|
+
id="base"
|
50
|
+
pagecolor="#ffffff"
|
51
|
+
bordercolor="#666666"
|
52
|
+
borderopacity="1.0"
|
53
|
+
inkscape:pageopacity="0.0"
|
54
|
+
inkscape:pageshadow="2"
|
55
|
+
inkscape:zoom="4"
|
56
|
+
inkscape:cx="17.132757"
|
57
|
+
inkscape:cy="-43.059445"
|
58
|
+
inkscape:document-units="mm"
|
59
|
+
inkscape:current-layer="layer1"
|
60
|
+
showgrid="false"
|
61
|
+
fit-margin-top="0"
|
62
|
+
fit-margin-left="0"
|
63
|
+
fit-margin-right="0"
|
64
|
+
fit-margin-bottom="0"
|
65
|
+
inkscape:window-width="2560"
|
66
|
+
inkscape:window-height="1391"
|
67
|
+
inkscape:window-x="1920"
|
68
|
+
inkscape:window-y="0"
|
69
|
+
inkscape:window-maximized="1"
|
70
|
+
inkscape:pagecheckerboard="true" />
|
71
|
+
<metadata
|
72
|
+
id="metadata835">
|
73
|
+
<rdf:RDF>
|
74
|
+
<cc:Work
|
75
|
+
rdf:about="">
|
76
|
+
<dc:format>image/svg+xml</dc:format>
|
77
|
+
<dc:type
|
78
|
+
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
79
|
+
<dc:title></dc:title>
|
80
|
+
</cc:Work>
|
81
|
+
</rdf:RDF>
|
82
|
+
</metadata>
|
83
|
+
<g
|
84
|
+
inkscape:label="Layer 1"
|
85
|
+
inkscape:groupmode="layer"
|
86
|
+
id="layer1"
|
87
|
+
transform="translate(0,-52.518951)">
|
88
|
+
<g
|
89
|
+
aria-label="CONSUL"
|
90
|
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
91
|
+
id="text1385">
|
92
|
+
<path
|
93
|
+
d="m 3.8629165,58.191618 q 0.4868334,0 0.8837084,-0.142875 0.4021666,-0.142875 0.5979583,-0.280459 l 0.6773333,1.344084 q -0.2487083,0.211666 -0.8519583,0.428625 -0.5979583,0.216958 -1.4234583,0.216958 -0.7725833,0 -1.4499166,-0.269875 Q 1.6192499,59.218201 1.1006666,58.731368 0.58737498,58.239243 0.29104166,57.583076 0,56.921618 0,56.149034 0,55.376451 0.29104166,54.714993 0.58208331,54.048243 1.095375,53.556118 q 0.5185833,-0.492125 1.1959166,-0.762 0.682625,-0.275167 1.4552083,-0.275167 0.8255,0 1.4234583,0.216958 0.60325,0.216959 0.8519583,0.428625 L 5.3445832,54.508618 Q 5.1487915,54.365743 4.7466249,54.228159 4.3497499,54.085284 3.8629165,54.085284 q -0.5397499,0 -0.9419166,0.169334 -0.4021666,0.164041 -0.6720416,0.455083 -0.269875,0.291042 -0.4021667,0.656167 -0.1322917,0.365125 -0.1322917,0.767291 0,0.407459 0.1322917,0.777875 0.1322917,0.365125 0.4021667,0.656167 0.269875,0.291042 0.6720416,0.460375 0.4021667,0.164042 0.9419166,0.164042 z"
|
94
|
+
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#ffffff;fill-opacity:1;stroke-width:0.26458332"
|
95
|
+
id="path822" />
|
96
|
+
<path
|
97
|
+
d="m 8.4084457,56.133159 q 0,0.597959 0.2434166,1.084792 0.2487084,0.481542 0.682625,0.767292 0.4392083,0.28575 1.0159997,0.28575 0.576792,0 1.010709,-0.28575 0.439208,-0.28575 0.682625,-0.767292 0.248708,-0.486833 0.248708,-1.084792 0,-0.597958 -0.248708,-1.0795 -0.243417,-0.481541 -0.682625,-0.767291 -0.433917,-0.291042 -1.010709,-0.291042 -0.5767914,0 -1.0159997,0.291042 -0.4339166,0.28575 -0.682625,0.767291 -0.2434166,0.481542 -0.2434166,1.0795 z m -1.6457083,0 q 0,-0.762 0.269875,-1.418166 0.269875,-0.661459 0.7567083,-1.153584 0.4868333,-0.492125 1.143,-0.767291 0.6561666,-0.275167 1.4181663,-0.275167 0.772584,0 1.423459,0.275167 0.656166,0.275166 1.137708,0.767291 0.486833,0.492125 0.751417,1.153584 0.269875,0.656166 0.269875,1.418166 0,0.767292 -0.259292,1.42875 -0.259292,0.656167 -0.740833,1.153584 -0.481542,0.492125 -1.137709,0.767291 -0.656166,0.275167 -1.444625,0.275167 -0.804333,0 -1.4657913,-0.275167 Q 8.228529,59.207618 7.752279,58.715493 7.2760291,58.218076 7.0167374,57.561909 q -0.254,-0.661458 -0.254,-1.42875 z"
|
98
|
+
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#ffffff;fill-opacity:1;stroke-width:0.26458332"
|
99
|
+
id="path824" />
|
100
|
+
<path
|
101
|
+
d="m 16.303598,54.095868 0.116417,0.02117 v 5.513917 h -1.582208 v -6.985 h 2.159 l 2.831041,5.503333 -0.116416,0.02117 v -5.5245 h 1.582208 v 6.985 h -2.169583 z"
|
102
|
+
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#ffffff;fill-opacity:1;stroke-width:0.26458332"
|
103
|
+
id="path826" />
|
104
|
+
<path
|
105
|
+
d="m 25.034843,52.518951 q 0.650875,0 1.137709,0.142875 0.486833,0.142875 0.783166,0.301625 0.296334,0.15875 0.359834,0.211667 l -0.762,1.275291 q -0.08467,-0.0635 -0.291042,-0.185208 -0.201083,-0.121708 -0.481542,-0.216958 -0.275166,-0.09525 -0.576791,-0.09525 -0.407459,0 -0.661459,0.148166 -0.248708,0.142875 -0.248708,0.428625 0,0.195792 0.132292,0.354542 0.137583,0.153458 0.41275,0.296333 0.280458,0.137584 0.709083,0.301625 0.391583,0.142875 0.735542,0.338667 0.343958,0.195792 0.60325,0.465667 0.264583,0.264583 0.418041,0.613833 0.153459,0.34925 0.153459,0.79375 0,0.529167 -0.216959,0.92075 -0.216958,0.386292 -0.592666,0.640292 -0.370417,0.254 -0.846667,0.375708 -0.470958,0.127 -0.978958,0.127 -0.719667,0 -1.291167,-0.164042 -0.566208,-0.164041 -0.915458,-0.354541 -0.34925,-0.1905 -0.418042,-0.254 l 0.788458,-1.328209 q 0.0635,0.04762 0.243417,0.153459 0.185208,0.105833 0.449792,0.22225 0.264583,0.111125 0.560916,0.1905 0.301625,0.07937 0.592667,0.07937 0.486833,0 0.73025,-0.185209 0.243417,-0.1905 0.243417,-0.497416 0,-0.227542 -0.153459,-0.407459 -0.153458,-0.179916 -0.460375,-0.338666 -0.306916,-0.164042 -0.767291,-0.343959 -0.460375,-0.185208 -0.862542,-0.449791 -0.396875,-0.264584 -0.645583,-0.661459 -0.248709,-0.396875 -0.248709,-0.98425 0,-0.587375 0.328084,-1.016 0.333375,-0.433916 0.873125,-0.66675 0.545041,-0.232833 1.164166,-0.232833 z"
|
106
|
+
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#ffffff;fill-opacity:1;stroke-width:0.26458332"
|
107
|
+
id="path828" />
|
108
|
+
<path
|
109
|
+
d="m 32.448465,52.645951 h 1.582208 v 4.291542 q 0,0.862541 -0.338667,1.497541 -0.338666,0.629709 -0.968375,0.978959 -0.629708,0.343958 -1.502833,0.343958 -0.878417,0 -1.513417,-0.343958 -0.635,-0.34925 -0.973666,-0.978959 -0.333375,-0.635 -0.333375,-1.497541 v -4.291542 h 1.576916 v 4.206875 q 0,0.47625 0.148167,0.804333 0.153458,0.328084 0.433917,0.497417 0.280458,0.164042 0.661458,0.164042 0.375708,0 0.650875,-0.164042 0.275167,-0.169333 0.423333,-0.497417 0.153459,-0.328083 0.153459,-0.804333 z"
|
110
|
+
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#ffffff;fill-opacity:1;stroke-width:0.26458332"
|
111
|
+
id="path830" />
|
112
|
+
<path
|
113
|
+
d="m 35.189541,52.645951 h 1.582208 v 5.598583 h 2.534708 v 1.386417 h -4.116916 z"
|
114
|
+
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#ffffff;fill-opacity:1;stroke-width:0.26458332"
|
115
|
+
id="path832" />
|
116
|
+
</g>
|
117
|
+
<rect
|
118
|
+
style="fill:url(#linearGradient1408);fill-opacity:1;stroke:none;stroke-width:0.02276438;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
119
|
+
id="rect1387"
|
120
|
+
width="39.306122"
|
121
|
+
height="1.2668874"
|
122
|
+
x="-3.5527137e-15"
|
123
|
+
y="65.308289" />
|
124
|
+
</g>
|
125
|
+
</svg>
|
@@ -0,0 +1,107 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
3
|
+
|
4
|
+
<svg
|
5
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
6
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
7
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
8
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
9
|
+
xmlns="http://www.w3.org/2000/svg"
|
10
|
+
xmlns:xlink="http://www.w3.org/1999/xlink"
|
11
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
12
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
13
|
+
width="39.306458mm"
|
14
|
+
height="14.056225mm"
|
15
|
+
viewBox="0 0 39.306457 14.056225"
|
16
|
+
version="1.1"
|
17
|
+
id="svg838"
|
18
|
+
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
|
19
|
+
sodipodi:docname="logo.dark.text.svg"
|
20
|
+
inkscape:export-filename="/home/henning/Projects/capybara-lockstep/media/capybara-lockstep.dark.png"
|
21
|
+
inkscape:export-xdpi="196"
|
22
|
+
inkscape:export-ydpi="196">
|
23
|
+
<defs
|
24
|
+
id="defs832">
|
25
|
+
<linearGradient
|
26
|
+
inkscape:collect="always"
|
27
|
+
id="linearGradient1406">
|
28
|
+
<stop
|
29
|
+
style="stop-color:#ff0844;stop-opacity:1"
|
30
|
+
offset="0"
|
31
|
+
id="stop1402" />
|
32
|
+
<stop
|
33
|
+
style="stop-color:#ffb199;stop-opacity:1"
|
34
|
+
offset="1"
|
35
|
+
id="stop1404" />
|
36
|
+
</linearGradient>
|
37
|
+
<linearGradient
|
38
|
+
inkscape:collect="always"
|
39
|
+
xlink:href="#linearGradient1406"
|
40
|
+
id="linearGradient1408"
|
41
|
+
x1="22.054907"
|
42
|
+
y1="91.071762"
|
43
|
+
x2="88.956696"
|
44
|
+
y2="91.071762"
|
45
|
+
gradientUnits="userSpaceOnUse"
|
46
|
+
gradientTransform="matrix(0.58751979,0,0,0.08820435,-12.957695,57.908781)" />
|
47
|
+
</defs>
|
48
|
+
<sodipodi:namedview
|
49
|
+
id="base"
|
50
|
+
pagecolor="#ffffff"
|
51
|
+
bordercolor="#666666"
|
52
|
+
borderopacity="1.0"
|
53
|
+
inkscape:pageopacity="0.0"
|
54
|
+
inkscape:pageshadow="2"
|
55
|
+
inkscape:zoom="4"
|
56
|
+
inkscape:cx="17.132757"
|
57
|
+
inkscape:cy="-43.059445"
|
58
|
+
inkscape:document-units="mm"
|
59
|
+
inkscape:current-layer="layer1"
|
60
|
+
showgrid="false"
|
61
|
+
fit-margin-top="0"
|
62
|
+
fit-margin-left="0"
|
63
|
+
fit-margin-right="0"
|
64
|
+
fit-margin-bottom="0"
|
65
|
+
inkscape:window-width="2560"
|
66
|
+
inkscape:window-height="1391"
|
67
|
+
inkscape:window-x="1920"
|
68
|
+
inkscape:window-y="0"
|
69
|
+
inkscape:window-maximized="1"
|
70
|
+
inkscape:pagecheckerboard="true" />
|
71
|
+
<metadata
|
72
|
+
id="metadata835">
|
73
|
+
<rdf:RDF>
|
74
|
+
<cc:Work
|
75
|
+
rdf:about="">
|
76
|
+
<dc:format>image/svg+xml</dc:format>
|
77
|
+
<dc:type
|
78
|
+
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
79
|
+
<dc:title></dc:title>
|
80
|
+
</cc:Work>
|
81
|
+
</rdf:RDF>
|
82
|
+
</metadata>
|
83
|
+
<g
|
84
|
+
inkscape:label="Layer 1"
|
85
|
+
inkscape:groupmode="layer"
|
86
|
+
id="layer1"
|
87
|
+
transform="translate(0,-52.518951)">
|
88
|
+
<text
|
89
|
+
xml:space="preserve"
|
90
|
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
91
|
+
x="-0.27516666"
|
92
|
+
y="59.630951"
|
93
|
+
id="text1385"><tspan
|
94
|
+
sodipodi:role="line"
|
95
|
+
id="tspan1383"
|
96
|
+
x="-0.27516666"
|
97
|
+
y="59.630951"
|
98
|
+
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#ffffff;fill-opacity:1;stroke-width:0.26458332">CONSUL</tspan></text>
|
99
|
+
<rect
|
100
|
+
style="fill:url(#linearGradient1408);fill-opacity:1;stroke:none;stroke-width:0.02276438;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
101
|
+
id="rect1387"
|
102
|
+
width="39.306122"
|
103
|
+
height="1.2668874"
|
104
|
+
x="-3.5527137e-15"
|
105
|
+
y="65.308289" />
|
106
|
+
</g>
|
107
|
+
</svg>
|
@@ -0,0 +1,89 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<svg
|
3
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
4
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
5
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
6
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
7
|
+
xmlns="http://www.w3.org/2000/svg"
|
8
|
+
xmlns:xlink="http://www.w3.org/1999/xlink"
|
9
|
+
id="svg838"
|
10
|
+
version="1.1"
|
11
|
+
viewBox="0 0 39.306457 14.056225"
|
12
|
+
height="14.056225mm"
|
13
|
+
width="39.306458mm">
|
14
|
+
<defs
|
15
|
+
id="defs832">
|
16
|
+
<linearGradient
|
17
|
+
id="linearGradient1406">
|
18
|
+
<stop
|
19
|
+
id="stop1402"
|
20
|
+
offset="0"
|
21
|
+
style="stop-color:#ff0844;stop-opacity:1" />
|
22
|
+
<stop
|
23
|
+
id="stop1404"
|
24
|
+
offset="1"
|
25
|
+
style="stop-color:#ffb199;stop-opacity:1" />
|
26
|
+
</linearGradient>
|
27
|
+
<linearGradient
|
28
|
+
gradientTransform="matrix(0.58755687,0,0,0.08820435,-12.958513,57.908781)"
|
29
|
+
gradientUnits="userSpaceOnUse"
|
30
|
+
y2="91.071762"
|
31
|
+
x2="88.956696"
|
32
|
+
y1="91.071762"
|
33
|
+
x1="22.054907"
|
34
|
+
id="linearGradient1408"
|
35
|
+
xlink:href="#linearGradient1406" />
|
36
|
+
</defs>
|
37
|
+
<metadata
|
38
|
+
id="metadata835">
|
39
|
+
<rdf:RDF>
|
40
|
+
<cc:Work
|
41
|
+
rdf:about="">
|
42
|
+
<dc:format>image/svg+xml</dc:format>
|
43
|
+
<dc:type
|
44
|
+
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
45
|
+
<dc:title></dc:title>
|
46
|
+
</cc:Work>
|
47
|
+
</rdf:RDF>
|
48
|
+
</metadata>
|
49
|
+
<g
|
50
|
+
transform="translate(0,-52.518951)"
|
51
|
+
id="layer1">
|
52
|
+
<g
|
53
|
+
id="text1385"
|
54
|
+
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';letter-spacing:0px;word-spacing:0px;fill:#141210;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
55
|
+
aria-label="CONSUL">
|
56
|
+
<path
|
57
|
+
id="path822"
|
58
|
+
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
|
59
|
+
d="m 3.8629165,58.191618 q 0.4868334,0 0.8837084,-0.142875 0.4021666,-0.142875 0.5979583,-0.280459 l 0.6773333,1.344084 q -0.2487083,0.211666 -0.8519583,0.428625 -0.5979583,0.216958 -1.4234583,0.216958 -0.7725833,0 -1.4499166,-0.269875 Q 1.6192499,59.218201 1.1006666,58.731368 0.58737498,58.239243 0.29104166,57.583076 0,56.921618 0,56.149034 0,55.376451 0.29104166,54.714993 0.58208331,54.048243 1.095375,53.556118 q 0.5185833,-0.492125 1.1959166,-0.762 0.682625,-0.275167 1.4552083,-0.275167 0.8255,0 1.4234583,0.216958 0.60325,0.216959 0.8519583,0.428625 L 5.3445832,54.508618 Q 5.1487915,54.365743 4.7466249,54.228159 4.3497499,54.085284 3.8629165,54.085284 q -0.5397499,0 -0.9419166,0.169334 -0.4021666,0.164041 -0.6720416,0.455083 -0.269875,0.291042 -0.4021667,0.656167 -0.1322917,0.365125 -0.1322917,0.767291 0,0.407459 0.1322917,0.777875 0.1322917,0.365125 0.4021667,0.656167 0.269875,0.291042 0.6720416,0.460375 0.4021667,0.164042 0.9419166,0.164042 z" />
|
60
|
+
<path
|
61
|
+
id="path824"
|
62
|
+
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
|
63
|
+
d="m 8.4084457,56.133159 q 0,0.597959 0.2434166,1.084792 0.2487084,0.481542 0.682625,0.767292 0.4392083,0.28575 1.0159997,0.28575 0.576792,0 1.010709,-0.28575 0.439208,-0.28575 0.682625,-0.767292 0.248708,-0.486833 0.248708,-1.084792 0,-0.597958 -0.248708,-1.0795 -0.243417,-0.481541 -0.682625,-0.767291 -0.433917,-0.291042 -1.010709,-0.291042 -0.5767914,0 -1.0159997,0.291042 -0.4339166,0.28575 -0.682625,0.767291 -0.2434166,0.481542 -0.2434166,1.0795 z m -1.6457083,0 q 0,-0.762 0.269875,-1.418166 0.269875,-0.661459 0.7567083,-1.153584 0.4868333,-0.492125 1.143,-0.767291 0.6561666,-0.275167 1.4181663,-0.275167 0.772584,0 1.423459,0.275167 0.656166,0.275166 1.137708,0.767291 0.486833,0.492125 0.751417,1.153584 0.269875,0.656166 0.269875,1.418166 0,0.767292 -0.259292,1.42875 -0.259292,0.656167 -0.740833,1.153584 -0.481542,0.492125 -1.137709,0.767291 -0.656166,0.275167 -1.444625,0.275167 -0.804333,0 -1.4657913,-0.275167 Q 8.228529,59.207618 7.752279,58.715493 7.2760291,58.218076 7.0167374,57.561909 q -0.254,-0.661458 -0.254,-1.42875 z" />
|
64
|
+
<path
|
65
|
+
id="path826"
|
66
|
+
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
|
67
|
+
d="m 16.303598,54.095868 0.116417,0.02117 v 5.513917 h -1.582208 v -6.985 h 2.159 l 2.831041,5.503333 -0.116416,0.02117 v -5.5245 h 1.582208 v 6.985 h -2.169583 z" />
|
68
|
+
<path
|
69
|
+
id="path828"
|
70
|
+
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
|
71
|
+
d="m 25.034843,52.518951 q 0.650875,0 1.137709,0.142875 0.486833,0.142875 0.783166,0.301625 0.296334,0.15875 0.359834,0.211667 l -0.762,1.275291 q -0.08467,-0.0635 -0.291042,-0.185208 -0.201083,-0.121708 -0.481542,-0.216958 -0.275166,-0.09525 -0.576791,-0.09525 -0.407459,0 -0.661459,0.148166 -0.248708,0.142875 -0.248708,0.428625 0,0.195792 0.132292,0.354542 0.137583,0.153458 0.41275,0.296333 0.280458,0.137584 0.709083,0.301625 0.391583,0.142875 0.735542,0.338667 0.343958,0.195792 0.60325,0.465667 0.264583,0.264583 0.418041,0.613833 0.153459,0.34925 0.153459,0.79375 0,0.529167 -0.216959,0.92075 -0.216958,0.386292 -0.592666,0.640292 -0.370417,0.254 -0.846667,0.375708 -0.470958,0.127 -0.978958,0.127 -0.719667,0 -1.291167,-0.164042 -0.566208,-0.164041 -0.915458,-0.354541 -0.34925,-0.1905 -0.418042,-0.254 l 0.788458,-1.328209 q 0.0635,0.04762 0.243417,0.153459 0.185208,0.105833 0.449792,0.22225 0.264583,0.111125 0.560916,0.1905 0.301625,0.07937 0.592667,0.07937 0.486833,0 0.73025,-0.185209 0.243417,-0.1905 0.243417,-0.497416 0,-0.227542 -0.153459,-0.407459 -0.153458,-0.179916 -0.460375,-0.338666 -0.306916,-0.164042 -0.767291,-0.343959 -0.460375,-0.185208 -0.862542,-0.449791 -0.396875,-0.264584 -0.645583,-0.661459 -0.248709,-0.396875 -0.248709,-0.98425 0,-0.587375 0.328084,-1.016 0.333375,-0.433916 0.873125,-0.66675 0.545041,-0.232833 1.164166,-0.232833 z" />
|
72
|
+
<path
|
73
|
+
id="path830"
|
74
|
+
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
|
75
|
+
d="m 32.448465,52.645951 h 1.582208 v 4.291542 q 0,0.862541 -0.338667,1.497541 -0.338666,0.629709 -0.968375,0.978959 -0.629708,0.343958 -1.502833,0.343958 -0.878417,0 -1.513417,-0.343958 -0.635,-0.34925 -0.973666,-0.978959 -0.333375,-0.635 -0.333375,-1.497541 v -4.291542 h 1.576916 v 4.206875 q 0,0.47625 0.148167,0.804333 0.153458,0.328084 0.433917,0.497417 0.280458,0.164042 0.661458,0.164042 0.375708,0 0.650875,-0.164042 0.275167,-0.169333 0.423333,-0.497417 0.153459,-0.328083 0.153459,-0.804333 z" />
|
76
|
+
<path
|
77
|
+
id="path832"
|
78
|
+
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
|
79
|
+
d="m 35.189541,52.645951 h 1.582208 v 5.598583 h 2.534708 v 1.386417 h -4.116916 z" />
|
80
|
+
</g>
|
81
|
+
<rect
|
82
|
+
y="65.308289"
|
83
|
+
x="-3.5527137e-15"
|
84
|
+
height="1.2668874"
|
85
|
+
width="39.308605"
|
86
|
+
id="rect1387"
|
87
|
+
style="fill:url(#linearGradient1408);fill-opacity:1;stroke:none;stroke-width:0.02276511;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
88
|
+
</g>
|
89
|
+
</svg>
|