Merge branch 'features/mild-master' of https://github.com/YoheiZuho/mastodon into features/material-theme

This commit is contained in:
Rintan 2020-04-28 12:38:27 +09:00
commit 659eba4b73
623 changed files with 1393 additions and 877 deletions

View File

@ -4,7 +4,25 @@ update_configs:
- package_manager: "ruby:bundler"
directory: "/"
update_schedule: "weekly"
# Supported update schedule: live daily weekly monthly
version_requirement_updates: "auto"
# Supported version requirements: auto widen_ranges increase_versions increase_versions_if_necessary
allowed_updates:
- match:
dependency_type: "all"
# Supported dependency types: all indirect direct production development
update_type: "all"
# Supported update types: all security
- package_manager: "javascript"
directory: "/"
update_schedule: "weekly"
# Supported update schedule: live daily weekly monthly
version_requirement_updates: "auto"
# Supported version requirements: auto widen_ranges increase_versions increase_versions_if_necessary
allowed_updates:
- match:
dependency_type: "all"
# Supported dependency types: all indirect direct production development
update_type: "all"
# Supported update types: all security

2
.gitignore vendored
View File

@ -58,7 +58,7 @@ yarn-error.log
yarn-debug.log
# Ignore vagrant log files
ubuntu-xenial-16.04-cloudimg-console.log
*-cloudimg-console.log
# Ignore Docker option files
docker-compose.override.yml

View File

@ -133,7 +133,7 @@ end
group :development do
gem 'active_record_query_trace', '~> 1.7'
gem 'annotate', '~> 3.0'
gem 'annotate', '~> 3.1'
gem 'better_errors', '~> 2.6'
gem 'binding_of_caller', '~> 0.7'
gem 'bullet', '~> 6.1'
@ -141,11 +141,11 @@ group :development do
gem 'letter_opener_web', '~> 1.4'
gem 'memory_profiler'
gem 'rubocop', '~> 0.79', require: false
gem 'rubocop-rails', '~> 2.4', require: false
gem 'rubocop-rails', '~> 2.5', require: false
gem 'brakeman', '~> 4.8', require: false
gem 'bundler-audit', '~> 0.6', require: false
gem 'capistrano', '~> 3.12'
gem 'capistrano', '~> 3.13'
gem 'capistrano-rails', '~> 1.4'
gem 'capistrano-rbenv', '~> 2.1'
gem 'capistrano-yarn', '~> 2.0'

View File

@ -82,7 +82,7 @@ GEM
public_suffix (>= 2.0.2, < 5.0)
airbrussh (1.4.0)
sshkit (>= 1.6.1, != 1.7.0)
annotate (3.0.3)
annotate (3.1.1)
activerecord (>= 3.2, < 7.0)
rake (>= 10.4, < 14.0)
arel (9.0.0)
@ -91,23 +91,23 @@ GEM
encryptor (~> 3.0.0)
av (0.9.0)
cocaine (~> 0.5.3)
aws-eventstream (1.0.3)
aws-partitions (1.286.0)
aws-sdk-core (3.92.0)
aws-eventstream (~> 1.0, >= 1.0.2)
aws-eventstream (1.1.0)
aws-partitions (1.296.0)
aws-sdk-core (3.94.0)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.239.0)
aws-sigv4 (~> 1.1)
jmespath (~> 1.0)
aws-sdk-kms (1.30.0)
aws-sdk-core (~> 3, >= 3.71.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.61.1)
aws-sdk-s3 (1.61.2)
aws-sdk-core (~> 3, >= 3.83.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.1)
aws-sigv4 (1.1.1)
aws-sigv4 (1.1.2)
aws-eventstream (~> 1.0, >= 1.0.2)
bcrypt (3.1.12)
bcrypt (3.1.13)
better_errors (2.6.0)
coderay (>= 1.0.0)
erubi (>= 1.0.0)
@ -128,14 +128,13 @@ GEM
bundler (>= 1.2.0, < 3)
thor (~> 0.18)
byebug (11.1.1)
capistrano (3.12.1)
capistrano (3.13.0)
airbrussh (>= 1.0.0)
i18n
rake (>= 10.0.0)
sshkit (>= 1.9.0)
capistrano-bundler (1.3.0)
capistrano-bundler (1.6.0)
capistrano (~> 3.1)
sshkit (~> 1.2)
capistrano-rails (1.4.0)
capistrano (~> 3.1)
capistrano-bundler (~> 1.1)
@ -202,25 +201,25 @@ GEM
dotenv (= 2.7.5)
railties (>= 3.2, < 6.1)
e2mmap (0.1.0)
elasticsearch (7.5.0)
elasticsearch-api (= 7.5.0)
elasticsearch-transport (= 7.5.0)
elasticsearch-api (7.5.0)
elasticsearch (7.6.0)
elasticsearch-api (= 7.6.0)
elasticsearch-transport (= 7.6.0)
elasticsearch-api (7.6.0)
multi_json
elasticsearch-dsl (0.1.8)
elasticsearch-transport (7.5.0)
faraday (>= 0.14, < 1)
elasticsearch-dsl (0.1.9)
elasticsearch-transport (7.6.0)
faraday (~> 1)
multi_json
encryptor (3.0.0)
equatable (0.6.1)
erubi (1.9.0)
et-orbi (1.2.3)
tzinfo
excon (0.71.0)
fabrication (2.21.0)
excon (0.73.0)
fabrication (2.21.1)
faker (2.11.0)
i18n (>= 1.6, < 2)
faraday (0.17.3)
faraday (1.0.1)
multipart-post (>= 1.2, < 3)
fast_blank (1.0.0)
fastimage (2.1.7)
@ -342,7 +341,7 @@ GEM
activesupport (>= 4)
railties (>= 4)
request_store (~> 1.0)
loofah (2.4.0)
loofah (2.5.0)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
mail (2.7.1)
@ -376,7 +375,7 @@ GEM
nio4r (2.5.2)
nokogiri (1.10.9)
mini_portile2 (~> 2.4.0)
nokogumbo (2.0.1)
nokogumbo (2.0.2)
nokogiri (~> 1.8, >= 1.8.4)
nsa (0.2.7)
activesupport (>= 4.2, < 6)
@ -408,7 +407,7 @@ GEM
parallel (1.19.1)
parallel_tests (2.32.0)
parallel
parser (2.7.0.5)
parser (2.7.1.1)
ast (~> 2.4.0)
parslet (1.8.2)
pastel (0.7.3)
@ -434,7 +433,7 @@ GEM
pry (~> 0.10)
pry-rails (0.3.9)
pry (>= 0.10.4)
public_suffix (4.0.3)
public_suffix (4.0.4)
puma (4.3.3)
nio4r (~> 2.0)
pundit (2.1.0)
@ -493,25 +492,25 @@ GEM
rdf (~> 3.1)
redcarpet (3.4.0)
redis (4.1.3)
redis-actionpack (5.0.2)
actionpack (>= 4.0, < 6)
redis-rack (>= 1, < 3)
redis-actionpack (5.2.0)
actionpack (>= 5, < 7)
redis-rack (>= 2.1.0, < 3)
redis-store (>= 1.1.0, < 2)
redis-activesupport (5.0.4)
activesupport (>= 3, < 6)
redis-store (>= 1.3, < 2)
redis-namespace (1.7.0)
redis (>= 3.0.4)
redis-rack (2.0.4)
rack (>= 1.5, < 3)
redis-rack (2.1.2)
rack (>= 2.0.8, < 3)
redis-store (>= 1.2, < 2)
redis-rails (5.0.2)
redis-actionpack (>= 5.0, < 6)
redis-activesupport (>= 5.0, < 6)
redis-store (>= 1.2, < 2)
redis-store (1.5.0)
redis (>= 2.2, < 5)
regexp_parser (1.6.0)
redis-store (1.8.2)
redis (>= 4, < 5)
regexp_parser (1.7.0)
request_store (1.5.0)
rack (>= 1.4)
responders (3.0.0)
@ -522,7 +521,7 @@ GEM
rqrcode (1.1.2)
chunky_png (~> 1.0)
rqrcode_core (~> 0.1)
rqrcode_core (0.1.1)
rqrcode_core (0.1.2)
rspec-core (3.9.1)
rspec-support (~> 3.9.1)
rspec-expectations (3.9.1)
@ -550,7 +549,8 @@ GEM
rainbow (>= 2.2.2, < 4.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 1.7)
rubocop-rails (2.4.2)
rubocop-rails (2.5.2)
activesupport
rack (>= 1.1)
rubocop (>= 0.72.0)
ruby-progressbar (1.10.1)
@ -667,7 +667,7 @@ DEPENDENCIES
active_model_serializers (~> 0.10)
active_record_query_trace (~> 1.7)
addressable (~> 2.7)
annotate (~> 3.0)
annotate (~> 3.1)
aws-sdk-s3 (~> 1.61)
better_errors (~> 2.6)
binding_of_caller (~> 0.7)
@ -677,7 +677,7 @@ DEPENDENCIES
browser
bullet (~> 6.1)
bundler-audit (~> 0.6)
capistrano (~> 3.12)
capistrano (~> 3.13)
capistrano-rails (~> 1.4)
capistrano-rbenv (~> 2.1)
capistrano-yarn (~> 2.0)
@ -766,7 +766,7 @@ DEPENDENCIES
rspec-rails (~> 4.0)
rspec-sidekiq (~> 3.0)
rubocop (~> 0.79)
rubocop-rails (~> 2.4)
rubocop-rails (~> 2.5)
ruby-progressbar (~> 1.10)
sanitize (~> 5.1)
sidekiq (~> 6.0)

View File

@ -80,7 +80,7 @@ A **Vagrant** configuration is included for development purposes.
Mastodon is **free, open-source software** licensed under **AGPLv3**.
You can open issues for bugs you've found or features you think are missing. You can also submit pull requests to this repository, or submit translations using Weblate. To get started, take a look at [CONTRIBUTING.md](CONTRIBUTING.md). If your contributions are accepted into Mastodon, you can request to be paid through [our OpenCollective](https://opencollective.com/mastodon).
You can open issues for bugs you've found or features you think are missing. You can also submit pull requests to this repository, or submit translations using Crowdin. To get started, take a look at [CONTRIBUTING.md](CONTRIBUTING.md). If your contributions are accepted into Mastodon, you can request to be paid through [our OpenCollective](https://opencollective.com/mastodon).
**IRC channel**: #mastodon on irc.freenode.net

View File

@ -49,7 +49,7 @@ class ActivityPub::InboxesController < ActivityPub::BaseController
ResolveAccountWorker.perform_async(signed_request_account.acct)
end
DeliveryFailureTracker.track_inverse_success!(signed_request_account)
DeliveryFailureTracker.reset!(signed_request_account.inbox_url)
end
def process_payload

View File

@ -19,7 +19,7 @@ module Admin
@followers_count = Follow.where(target_account: Account.where(domain: params[:id])).count
@reports_count = Report.where(target_account: Account.where(domain: params[:id])).count
@blocks_count = Block.where(target_account: Account.where(domain: params[:id])).count
@available = DeliveryFailureTracker.available?(Account.select(:shared_inbox_url).where(domain: params[:id]).first&.shared_inbox_url)
@available = DeliveryFailureTracker.available?(params[:id])
@media_storage = MediaAttachment.where(account: Account.where(domain: params[:id])).sum(:file_file_size)
@private_comment = @domain_block&.private_comment
@public_comment = @domain_block&.public_comment

View File

@ -0,0 +1,37 @@
# frozen_string_literal: true
module Settings
class PicturesController < BaseController
before_action :authenticate_user!
before_action :set_account
before_action :set_picture
def destroy
if valid_picture
account_params = {
@picture => nil,
(@picture + '_remote_url') => nil,
}
msg = UpdateAccountService.new.call(@account, account_params) ? I18n.t('generic.changes_saved_msg') : nil
redirect_to settings_profile_path, notice: msg, status: 303
else
bad_request
end
end
private
def set_account
@account = current_account
end
def set_picture
@picture = params[:id]
end
def valid_picture
@picture == 'avatar' || @picture == 'header'
end
end
end

View File

@ -10,6 +10,7 @@ class TagsController < ApplicationController
before_action :require_signature!, if: -> { request.format == :json && authorized_fetch_mode? }
before_action :authenticate_user!, if: :whitelist_mode?
before_action :set_tag
before_action :set_local
before_action :set_body_classes
before_action :set_instance_presenter
@ -24,7 +25,7 @@ class TagsController < ApplicationController
format.rss do
expires_in 0, public: true
@statuses = HashtagQueryService.new.call(@tag, filter_params).limit(PAGE_SIZE)
@statuses = HashtagQueryService.new.call(@tag, filter_params, nil, @local).limit(PAGE_SIZE)
@statuses = cache_collection(@statuses, Status)
render xml: RSS::TagSerializer.render(@tag, @statuses)
@ -33,7 +34,7 @@ class TagsController < ApplicationController
format.json do
expires_in 3.minutes, public: public_fetch_mode?
@statuses = HashtagQueryService.new.call(@tag, filter_params, current_account, params[:local]).paginate_by_max_id(PAGE_SIZE, params[:max_id])
@statuses = HashtagQueryService.new.call(@tag, filter_params, current_account, @local).paginate_by_max_id(PAGE_SIZE, params[:max_id])
@statuses = cache_collection(@statuses, Status)
render json: collection_presenter, serializer: ActivityPub::CollectionSerializer, adapter: ActivityPub::Adapter, content_type: 'application/activity+json'
@ -47,6 +48,10 @@ class TagsController < ApplicationController
@tag = Tag.usable.find_normalized!(params[:id])
end
def set_local
@local = truthy_param?(:local)
end
def set_body_classes
@body_classes = 'with-modals'
end

View File

@ -47,7 +47,7 @@ module Admin::ActionLogsHelper
I18n.t('admin.action_logs.deleted_status')
end
when 'Announcement'
truncate(attributes['text'])
truncate(attributes['text'].is_a?(Array) ? attributes['text'].last : attributes['text'])
end
end
end

View File

@ -105,4 +105,13 @@ module SettingsHelper
safe_join([image_tag(account.avatar.url, width: 15, height: 15, alt: display_name(account), class: 'avatar'), content_tag(:span, account.acct, class: 'username')], ' ')
end
end
def picture_hint(hint, picture)
if picture.original_filename.nil?
hint
else
link = link_to t('generic.delete'), settings_profile_picture_path(picture.name.to_s), data: { method: :delete }
safe_join([hint, link], '<br/>'.html_safe)
end
end
end

View File

@ -113,12 +113,13 @@ export const expandAccountTimeline = (accountId, { maxId, withReplies }
export const expandAccountFeaturedTimeline = accountId => expandTimeline(`account:${accountId}:pinned`, `/api/v1/accounts/${accountId}/statuses`, { pinned: true });
export const expandAccountMediaTimeline = (accountId, { maxId } = {}) => expandTimeline(`account:${accountId}:media`, `/api/v1/accounts/${accountId}/statuses`, { max_id: maxId, only_media: true, limit: 40 });
export const expandListTimeline = (id, { maxId } = {}, done = noOp) => expandTimeline(`list:${id}`, `/api/v1/timelines/list/${id}`, { max_id: maxId }, done);
export const expandHashtagTimeline = (hashtag, { maxId, tags } = {}, done = noOp) => {
export const expandHashtagTimeline = (hashtag, { maxId, tags, local } = {}, done = noOp) => {
return expandTimeline(`hashtag:${hashtag}`, `/api/v1/timelines/tag/${hashtag}`, {
max_id: maxId,
any: parseTags(tags, 'any'),
all: parseTags(tags, 'all'),
none: parseTags(tags, 'none'),
local: local,
}, done);
};

View File

@ -68,20 +68,14 @@ class DropdownMenu extends React.PureComponent {
handleKeyDown = e => {
const items = Array.from(this.node.getElementsByTagName('a'));
const index = items.indexOf(document.activeElement);
let element;
let element = null;
switch(e.key) {
case 'ArrowDown':
element = items[index+1];
if (element) {
element.focus();
}
element = items[index+1] || items[0];
break;
case 'ArrowUp':
element = items[index-1];
if (element) {
element.focus();
}
element = items[index-1] || items[items.length-1];
break;
case 'Tab':
if (e.shiftKey) {
@ -89,28 +83,23 @@ class DropdownMenu extends React.PureComponent {
} else {
element = items[index+1] || items[0];
}
if (element) {
element.focus();
e.preventDefault();
e.stopPropagation();
}
break;
case 'Home':
element = items[0];
if (element) {
element.focus();
}
break;
case 'End':
element = items[items.length-1];
if (element) {
element.focus();
}
break;
case 'Escape':
this.props.onClose();
break;
}
if (element) {
element.focus();
e.preventDefault();
e.stopPropagation();
}
}
handleItemKeyPress = e => {

View File

@ -4,7 +4,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import classNames from 'classnames';
import { vote, fetchPoll } from 'mastodon/actions/polls';
import Motion from 'mastodon/features/ui/util/optional_motion';
import spring from 'react-motion/lib/spring';
import escapeTextContentForBrowser from 'escape-html';
@ -28,8 +27,9 @@ class Poll extends ImmutablePureComponent {
static propTypes = {
poll: ImmutablePropTypes.map,
intl: PropTypes.object.isRequired,
dispatch: PropTypes.func,
disabled: PropTypes.bool,
refresh: PropTypes.func,
onVote: PropTypes.func,
};
state = {
@ -100,7 +100,7 @@ class Poll extends ImmutablePureComponent {
return;
}
this.props.dispatch(vote(this.props.poll.get('id'), Object.keys(this.state.selected)));
this.props.onVote(Object.keys(this.state.selected));
};
handleRefresh = () => {
@ -108,7 +108,7 @@ class Poll extends ImmutablePureComponent {
return;
}
this.props.dispatch(fetchPoll(this.props.poll.get('id')));
this.props.refresh();
};
renderOption (option, optionIndex, showResults) {

View File

@ -1,8 +1,25 @@
import { connect } from 'react-redux';
import { debounce } from 'lodash';
import Poll from 'mastodon/components/poll';
import { fetchPoll, vote } from 'mastodon/actions/polls';
const mapDispatchToProps = (dispatch, { pollId }) => ({
refresh: debounce(
() => {
dispatch(fetchPoll(pollId));
},
1000,
{ leading: true },
),
onVote (choices) {
dispatch(vote(pollId, choices));
},
});
const mapStateToProps = (state, { pollId }) => ({
poll: state.getIn(['polls', pollId]),
});
export default connect(mapStateToProps)(Poll);
export default connect(mapStateToProps, mapDispatchToProps)(Poll);

View File

@ -38,7 +38,7 @@ export default class TimelineContainer extends React.PureComponent {
let timeline;
if (hashtag) {
timeline = <HashtagTimeline hashtag={hashtag} />;
timeline = <HashtagTimeline hashtag={hashtag} local={local} />;
} else {
timeline = <PublicTimeline local={local} />;
}

View File

@ -19,6 +19,7 @@ const messages = defineMessages({
const mapStateToProps = state => ({
accountIds: state.getIn(['user_lists', 'blocks', 'items']),
hasMore: !!state.getIn(['user_lists', 'blocks', 'next']),
isLoading: state.getIn(['user_lists', 'blocks', 'isLoading'], true),
});
export default @connect(mapStateToProps)
@ -31,6 +32,7 @@ class Blocks extends ImmutablePureComponent {
shouldUpdateScroll: PropTypes.func,
accountIds: ImmutablePropTypes.list,
hasMore: PropTypes.bool,
isLoading: PropTypes.bool,
intl: PropTypes.object.isRequired,
multiColumn: PropTypes.bool,
};
@ -44,7 +46,7 @@ class Blocks extends ImmutablePureComponent {
}, 300, { leading: true });
render () {
const { intl, accountIds, shouldUpdateScroll, hasMore, multiColumn } = this.props;
const { intl, accountIds, shouldUpdateScroll, hasMore, multiColumn, isLoading } = this.props;
if (!accountIds) {
return (
@ -63,6 +65,7 @@ class Blocks extends ImmutablePureComponent {
scrollKey='blocks'
onLoadMore={this.handleLoadMore}
hasMore={hasMore}
isLoading={isLoading}
shouldUpdateScroll={shouldUpdateScroll}
emptyMessage={emptyMessage}
bindToDocument={!multiColumn}

View File

@ -50,7 +50,7 @@ class PrivacyDropdownMenu extends React.PureComponent {
const index = items.findIndex(item => {
return (item.value === value);
});
let element;
let element = null;
switch(e.key) {
case 'Escape':
@ -60,18 +60,10 @@ class PrivacyDropdownMenu extends React.PureComponent {
this.handleClick(e);
break;
case 'ArrowDown':
element = this.node.childNodes[index + 1];
if (element) {
element.focus();
this.props.onChange(element.getAttribute('data-index'));
}
element = this.node.childNodes[index + 1] || this.node.firstChild;
break;
case 'ArrowUp':
element = this.node.childNodes[index - 1];
if (element) {
element.focus();
this.props.onChange(element.getAttribute('data-index'));
}
element = this.node.childNodes[index - 1] || this.node.lastChild;
break;
case 'Tab':
if (e.shiftKey) {
@ -79,28 +71,21 @@ class PrivacyDropdownMenu extends React.PureComponent {
} else {
element = this.node.childNodes[index + 1] || this.node.firstChild;
}
break;
case 'Home':
element = this.node.firstChild;
break;
case 'End':
element = this.node.lastChild;
break;
}
if (element) {
element.focus();
this.props.onChange(element.getAttribute('data-index'));
e.preventDefault();
e.stopPropagation();
}
break;
case 'Home':
element = this.node.firstChild;
if (element) {
element.focus();
this.props.onChange(element.getAttribute('data-index'));
}
break;
case 'End':
element = this.node.lastChild;
if (element) {
element.focus();
this.props.onChange(element.getAttribute('data-index'));
}
break;
}
}
handleClick = e => {

File diff suppressed because one or more lines are too long

View File

@ -19,6 +19,7 @@ const messages = defineMessages({
const mapStateToProps = state => ({
accountIds: state.getIn(['user_lists', 'follow_requests', 'items']),
isLoading: state.getIn(['user_lists', 'follow_requests', 'isLoading'], true),
hasMore: !!state.getIn(['user_lists', 'follow_requests', 'next']),
locked: !!state.getIn(['accounts', me, 'locked']),
domain: state.getIn(['meta', 'domain']),
@ -33,6 +34,7 @@ class FollowRequests extends ImmutablePureComponent {
dispatch: PropTypes.func.isRequired,
shouldUpdateScroll: PropTypes.func,
hasMore: PropTypes.bool,
isLoading: PropTypes.bool,
accountIds: ImmutablePropTypes.list,
locked: PropTypes.bool,
domain: PropTypes.string,
@ -49,7 +51,7 @@ class FollowRequests extends ImmutablePureComponent {
}, 300, { leading: true });
render () {
const { intl, shouldUpdateScroll, accountIds, hasMore, multiColumn, locked, domain } = this.props;
const { intl, shouldUpdateScroll, accountIds, hasMore, multiColumn, locked, domain, isLoading } = this.props;
if (!accountIds) {
return (
@ -77,6 +79,7 @@ class FollowRequests extends ImmutablePureComponent {
scrollKey='follow_requests'
onLoadMore={this.handleLoadMore}
hasMore={hasMore}
isLoading={isLoading}
shouldUpdateScroll={shouldUpdateScroll}
emptyMessage={emptyMessage}
bindToDocument={!multiColumn}

View File

@ -22,6 +22,7 @@ const mapStateToProps = (state, props) => ({
isAccount: !!state.getIn(['accounts', props.params.accountId]),
accountIds: state.getIn(['user_lists', 'followers', props.params.accountId, 'items']),
hasMore: !!state.getIn(['user_lists', 'followers', props.params.accountId, 'next']),
isLoading: state.getIn(['user_lists', 'followers', props.params.accountId, 'isLoading'], true),
blockedBy: state.getIn(['relationships', props.params.accountId, 'blocked_by'], false),
});
@ -34,6 +35,7 @@ class Followers extends ImmutablePureComponent {
shouldUpdateScroll: PropTypes.func,
accountIds: ImmutablePropTypes.list,
hasMore: PropTypes.bool,
isLoading: PropTypes.bool,
blockedBy: PropTypes.bool,
isAccount: PropTypes.bool,
multiColumn: PropTypes.bool,
@ -58,7 +60,7 @@ class Followers extends ImmutablePureComponent {
}, 300, { leading: true });
render () {
const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount, multiColumn } = this.props;
const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount, multiColumn, isLoading } = this.props;
if (!isAccount) {
return (
@ -85,6 +87,7 @@ class Followers extends ImmutablePureComponent {
<ScrollableList
scrollKey='followers'
hasMore={hasMore}
isLoading={isLoading}
onLoadMore={this.handleLoadMore}
shouldUpdateScroll={shouldUpdateScroll}
prepend={<HeaderContainer accountId={this.props.params.accountId} hideTabs />}

View File

@ -22,6 +22,7 @@ const mapStateToProps = (state, props) => ({
isAccount: !!state.getIn(['accounts', props.params.accountId]),
accountIds: state.getIn(['user_lists', 'following', props.params.accountId, 'items']),
hasMore: !!state.getIn(['user_lists', 'following', props.params.accountId, 'next']),
isLoading: state.getIn(['user_lists', 'following', props.params.accountId, 'isLoading'], true),
blockedBy: state.getIn(['relationships', props.params.accountId, 'blocked_by'], false),
});
@ -34,6 +35,7 @@ class Following extends ImmutablePureComponent {
shouldUpdateScroll: PropTypes.func,
accountIds: ImmutablePropTypes.list,
hasMore: PropTypes.bool,
isLoading: PropTypes.bool,
blockedBy: PropTypes.bool,
isAccount: PropTypes.bool,
multiColumn: PropTypes.bool,
@ -58,7 +60,7 @@ class Following extends ImmutablePureComponent {
}, 300, { leading: true });
render () {
const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount, multiColumn } = this.props;
const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount, multiColumn, isLoading } = this.props;
if (!isAccount) {
return (
@ -85,6 +87,7 @@ class Following extends ImmutablePureComponent {
<ScrollableList
scrollKey='following'
hasMore={hasMore}
isLoading={isLoading}
onLoadMore={this.handleLoadMore}
shouldUpdateScroll={shouldUpdateScroll}
prepend={<HeaderContainer accountId={this.props.params.accountId} hideTabs />}

View File

@ -4,6 +4,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import Toggle from 'react-toggle';
import AsyncSelect from 'react-select/async';
import SettingToggle from '../../notifications/components/setting_toggle';
const messages = defineMessages({
placeholder: { id: 'hashtag.column_settings.select.placeholder', defaultMessage: 'Enter hashtags…' },
@ -87,6 +88,8 @@ class ColumnSettings extends React.PureComponent {
};
render () {
const { settings, onChange } = this.props;
return (
<div>
<div className='column-settings__row'>
@ -106,6 +109,10 @@ class ColumnSettings extends React.PureComponent {
{this.modeSelect('none')}
</div>
)}
<div className='column-settings__row'>
<SettingToggle settings={settings} settingPath={['local']} onChange={onChange} label={<FormattedMessage id='community.column_settings.local_only' defaultMessage='Local only' />} />
</div>
</div>
);
}

View File

@ -98,21 +98,21 @@ class HashtagTimeline extends React.PureComponent {
componentDidMount () {
const { dispatch } = this.props;
const { id, tags } = this.props.params;
const { id, tags, local } = this.props.params;
this._subscribe(dispatch, id, tags);
dispatch(expandHashtagTimeline(id, { tags }));
dispatch(expandHashtagTimeline(id, { tags, local }));
}
componentWillReceiveProps (nextProps) {
const { dispatch, params } = this.props;
const { id, tags } = nextProps.params;
const { id, tags, local } = nextProps.params;
if (id !== params.id || !isEqual(tags, params.tags)) {
if (id !== params.id || !isEqual(tags, params.tags) || !isEqual(local, params.local)) {
this._unsubscribe();
this._subscribe(dispatch, id, tags);
this.props.dispatch(clearTimeline(`hashtag:${id}`));
this.props.dispatch(expandHashtagTimeline(id, { tags }));
dispatch(clearTimeline(`hashtag:${id}`));
dispatch(expandHashtagTimeline(id, { tags, local }));
}
}
@ -125,8 +125,8 @@ class HashtagTimeline extends React.PureComponent {
}
handleLoadMore = maxId => {
const { id, tags } = this.props.params;
this.props.dispatch(expandHashtagTimeline(id, { maxId, tags }));
const { id, tags, local } = this.props.params;
this.props.dispatch(expandHashtagTimeline(id, { maxId, tags, local }));
}
render () {

View File

@ -19,6 +19,7 @@ const messages = defineMessages({
const mapStateToProps = state => ({
accountIds: state.getIn(['user_lists', 'mutes', 'items']),
hasMore: !!state.getIn(['user_lists', 'mutes', 'next']),
isLoading: state.getIn(['user_lists', 'mutes', 'isLoading'], true),
});
export default @connect(mapStateToProps)
@ -30,6 +31,7 @@ class Mutes extends ImmutablePureComponent {
dispatch: PropTypes.func.isRequired,
shouldUpdateScroll: PropTypes.func,
hasMore: PropTypes.bool,
isLoading: PropTypes.bool,
accountIds: ImmutablePropTypes.list,
intl: PropTypes.object.isRequired,
multiColumn: PropTypes.bool,
@ -44,7 +46,7 @@ class Mutes extends ImmutablePureComponent {
}, 300, { leading: true });
render () {
const { intl, shouldUpdateScroll, hasMore, accountIds, multiColumn } = this.props;
const { intl, shouldUpdateScroll, hasMore, accountIds, multiColumn, isLoading } = this.props;
if (!accountIds) {
return (
@ -63,6 +65,7 @@ class Mutes extends ImmutablePureComponent {
scrollKey='mutes'
onLoadMore={this.handleLoadMore}
hasMore={hasMore}
isLoading={isLoading}
shouldUpdateScroll={shouldUpdateScroll}
emptyMessage={emptyMessage}
bindToDocument={!multiColumn}

View File

@ -24,19 +24,25 @@ class HashtagTimeline extends React.PureComponent {
isLoading: PropTypes.bool.isRequired,
hasMore: PropTypes.bool.isRequired,
hashtag: PropTypes.string.isRequired,
local: PropTypes.bool.isRequired,
};
static defaultProps = {
local: false,
};
componentDidMount () {
const { dispatch, hashtag } = this.props;
const { dispatch, hashtag, local } = this.props;
dispatch(expandHashtagTimeline(hashtag));
dispatch(expandHashtagTimeline(hashtag, { local }));
}
handleLoadMore = () => {
const maxId = this.props.statusIds.last();
const { dispatch, hashtag, local, statusIds } = this.props;
const maxId = statusIds.last();
if (maxId) {
this.props.dispatch(expandHashtagTimeline(this.props.hashtag, { maxId }));
dispatch(expandHashtagTimeline(hashtag, { maxId, local }));
}
}

View File

@ -2,12 +2,24 @@ import {
NOTIFICATIONS_UPDATE,
} from '../actions/notifications';
import {
FOLLOWERS_FETCH_REQUEST,
FOLLOWERS_FETCH_SUCCESS,
FOLLOWERS_FETCH_FAIL,
FOLLOWERS_EXPAND_REQUEST,
FOLLOWERS_EXPAND_SUCCESS,
FOLLOWERS_EXPAND_FAIL,
FOLLOWING_FETCH_REQUEST,
FOLLOWING_FETCH_SUCCESS,
FOLLOWING_FETCH_FAIL,
FOLLOWING_EXPAND_REQUEST,
FOLLOWING_EXPAND_SUCCESS,
FOLLOWING_EXPAND_FAIL,
FOLLOW_REQUESTS_FETCH_REQUEST,
FOLLOW_REQUESTS_FETCH_SUCCESS,
FOLLOW_REQUESTS_FETCH_FAIL,
FOLLOW_REQUESTS_EXPAND_REQUEST,
FOLLOW_REQUESTS_EXPAND_SUCCESS,
FOLLOW_REQUESTS_EXPAND_FAIL,
FOLLOW_REQUEST_AUTHORIZE_SUCCESS,
FOLLOW_REQUEST_REJECT_SUCCESS,
} from '../actions/accounts';
@ -16,12 +28,20 @@ import {
FAVOURITES_FETCH_SUCCESS,
} from '../actions/interactions';
import {
BLOCKS_FETCH_REQUEST,
BLOCKS_FETCH_SUCCESS,
BLOCKS_FETCH_FAIL,
BLOCKS_EXPAND_REQUEST,
BLOCKS_EXPAND_SUCCESS,
BLOCKS_EXPAND_FAIL,
} from '../actions/blocks';
import {
MUTES_FETCH_REQUEST,
MUTES_FETCH_SUCCESS,
MUTES_FETCH_FAIL,
MUTES_EXPAND_REQUEST,
MUTES_EXPAND_SUCCESS,
MUTES_EXPAND_FAIL,
} from '../actions/mutes';
import {
DIRECTORY_FETCH_REQUEST,
@ -47,12 +67,13 @@ const normalizeList = (state, type, id, accounts, next) => {
return state.setIn([type, id], ImmutableMap({
next,
items: ImmutableList(accounts.map(item => item.id)),
isLoading: false,
}));
};
const appendToList = (state, type, id, accounts, next) => {
return state.updateIn([type, id], map => {
return map.set('next', next).update('items', list => list.concat(accounts.map(item => item.id)));
return map.set('next', next).set('isLoading', false).update('items', list => list.concat(accounts.map(item => item.id)));
});
};
@ -68,10 +89,22 @@ export default function userLists(state = initialState, action) {
return normalizeList(state, 'followers', action.id, action.accounts, action.next);
case FOLLOWERS_EXPAND_SUCCESS:
return appendToList(state, 'followers', action.id, action.accounts, action.next);
case FOLLOWERS_FETCH_REQUEST:
case FOLLOWERS_EXPAND_REQUEST:
return state.setIn(['followers', action.id, 'isLoading'], true);
case FOLLOWERS_FETCH_FAIL:
case FOLLOWERS_EXPAND_FAIL:
return state.setIn(['followers', action.id, 'isLoading'], false);
case FOLLOWING_FETCH_SUCCESS:
return normalizeList(state, 'following', action.id, action.accounts, action.next);
case FOLLOWING_EXPAND_SUCCESS:
return appendToList(state, 'following', action.id, action.accounts, action.next);
case FOLLOWING_FETCH_REQUEST:
case FOLLOWING_EXPAND_REQUEST:
return state.setIn(['following', action.id, 'isLoading'], true);
case FOLLOWING_FETCH_FAIL:
case FOLLOWING_EXPAND_FAIL:
return state.setIn(['following', action.id, 'isLoading'], false);
case REBLOGS_FETCH_SUCCESS:
return state.setIn(['reblogged_by', action.id], ImmutableList(action.accounts.map(item => item.id)));
case FAVOURITES_FETCH_SUCCESS:
@ -79,9 +112,15 @@ export default function userLists(state = initialState, action) {
case NOTIFICATIONS_UPDATE:
return action.notification.type === 'follow_request' ? normalizeFollowRequest(state, action.notification) : state;
case FOLLOW_REQUESTS_FETCH_SUCCESS:
return state.setIn(['follow_requests', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next);
return state.setIn(['follow_requests', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next).setIn(['follow_requests', 'isLoading'], false);
case FOLLOW_REQUESTS_EXPAND_SUCCESS:
return state.updateIn(['follow_requests', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next);
return state.updateIn(['follow_requests', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next).setIn(['follow_requests', 'isLoading'], false);
case FOLLOW_REQUESTS_FETCH_REQUEST:
case FOLLOW_REQUESTS_EXPAND_REQUEST:
return state.setIn(['follow_requests', 'isLoading'], true);
case FOLLOW_REQUESTS_FETCH_FAIL:
case FOLLOW_REQUESTS_EXPAND_FAIL:
return state.setIn(['follow_requests', 'isLoading'], false);
case FOLLOW_REQUEST_AUTHORIZE_SUCCESS:
case FOLLOW_REQUEST_REJECT_SUCCESS:
return state.updateIn(['follow_requests', 'items'], list => list.filterNot(item => item === action.id));
@ -89,10 +128,22 @@ export default function userLists(state = initialState, action) {
return state.setIn(['blocks', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['blocks', 'next'], action.next);
case BLOCKS_EXPAND_SUCCESS:
return state.updateIn(['blocks', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['blocks', 'next'], action.next);
case BLOCKS_FETCH_REQUEST:
case BLOCKS_EXPAND_REQUEST:
return state.setIn(['blocks', 'isLoading'], true);
case BLOCKS_FETCH_FAIL:
case BLOCKS_EXPAND_FAIL:
return state.setIn(['blocks', 'isLoading'], false);
case MUTES_FETCH_SUCCESS:
return state.setIn(['mutes', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['mutes', 'next'], action.next);
case MUTES_EXPAND_SUCCESS:
return state.updateIn(['mutes', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['mutes', 'next'], action.next);
case MUTES_FETCH_REQUEST:
case MUTES_EXPAND_REQUEST:
return state.setIn(['mutes', 'isLoading'], true);
case MUTES_FETCH_FAIL:
case MUTES_EXPAND_FAIL:
return state.setIn(['mutes', 'isLoading'], false);
case DIRECTORY_FETCH_SUCCESS:
return state.setIn(['directory', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['directory', 'isLoading'], false);
case DIRECTORY_EXPAND_SUCCESS:

View File

@ -2,6 +2,45 @@ import EXIF from 'exif-js';
const MAX_IMAGE_PIXELS = 1638400; // 1280x1280px
const _browser_quirks = {};
// Some browsers will automatically draw images respecting their EXIF orientation
// while others won't, and the safest way to detect that is to examine how it
// is done on a known image.
// See https://github.com/w3c/csswg-drafts/issues/4666
// and https://github.com/blueimp/JavaScript-Load-Image/commit/1e4df707821a0afcc11ea0720ee403b8759f3881
const dropOrientationIfNeeded = (orientation) => new Promise(resolve => {
switch (_browser_quirks['image-orientation-automatic']) {
case true:
resolve(1);
break;
case false:
resolve(orientation);
break;
default:
// black 2x1 JPEG, with the following meta information set:
// - EXIF Orientation: 6 (Rotated 90° CCW)
const testImageURL =
'data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAA' +
'AAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA' +
'QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE' +
'BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/x' +
'ABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAA' +
'AAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==';
const img = new Image();
img.onload = () => {
const automatic = (img.width === 1 && img.height === 2);
_browser_quirks['image-orientation-automatic'] = automatic;
resolve(automatic ? 1 : orientation);
};
img.onerror = () => {
_browser_quirks['image-orientation-automatic'] = false;
resolve(orientation);
};
img.src = testImageURL;
}
});
const getImageUrl = inputFile => new Promise((resolve, reject) => {
if (window.URL && URL.createObjectURL) {
try {
@ -38,7 +77,11 @@ const getOrientation = (img, type = 'image/png') => new Promise(resolve => {
EXIF.getData(img, () => {
const orientation = EXIF.getTag(img, 'Orientation');
if (orientation !== 1) {
dropOrientationIfNeeded(orientation).then(resolve).catch(() => resolve(orientation));
} else {
resolve(orientation);
}
});
});

View File

@ -3,47 +3,53 @@
class DeliveryFailureTracker
FAILURE_DAYS_THRESHOLD = 7
def initialize(inbox_url)
@inbox_url = inbox_url
def initialize(url_or_host)
@host = url_or_host.start_with?('https://') || url_or_host.start_with?('http://') ? Addressable::URI.parse(url_or_host).normalized_host : url_or_host
end
def track_failure!
Redis.current.sadd(exhausted_deliveries_key, today)
Redis.current.sadd('unavailable_inboxes', @inbox_url) if reached_failure_threshold?
UnavailableDomain.create(domain: @host) if reached_failure_threshold?
end
def track_success!
Redis.current.del(exhausted_deliveries_key)
Redis.current.srem('unavailable_inboxes', @inbox_url)
UnavailableDomain.find_by(domain: @host)&.destroy
end
def days
Redis.current.scard(exhausted_deliveries_key) || 0
end
class << self
def filter(arr)
arr.reject(&method(:unavailable?))
def available?
!UnavailableDomain.where(domain: @host).exists?
end
def unavailable?(url)
Redis.current.sismember('unavailable_inboxes', url)
alias reset! track_success!
class << self
def without_unavailable(urls)
unavailable_domains_map = Rails.cache.fetch('unavailable_domains') { UnavailableDomain.pluck(:domain).each_with_object({}) { |domain, hash| hash[domain] = true } }
urls.reject do |url|
host = Addressable::URI.parse(url).normalized_host
unavailable_domains_map[host]
end
end
def available?(url)
!unavailable?(url)
new(url).available?
end
def track_inverse_success!(from_account)
new(from_account.inbox_url).track_success! if from_account.inbox_url.present?
new(from_account.shared_inbox_url).track_success! if from_account.shared_inbox_url.present?
def reset!(url)
new(url).reset!
end
end
private
def exhausted_deliveries_key
"exhausted_deliveries:#{@inbox_url}"
"exhausted_deliveries:#{@host}"
end
def today

View File

@ -413,7 +413,7 @@ class Account < ApplicationRecord
def inboxes
urls = reorder(nil).where(protocol: :activitypub).pluck(Arel.sql("distinct coalesce(nullif(accounts.shared_inbox_url, ''), accounts.inbox_url)"))
DeliveryFailureTracker.filter(urls)
DeliveryFailureTracker.without_unavailable(urls)
end
def search_for(terms, limit = 10, offset = 0)

View File

@ -16,8 +16,8 @@ class AccountAlias < ApplicationRecord
belongs_to :account
validates :acct, presence: true, domain: { acct: true }
validates :uri, presence: true
validates :uri, uniqueness: { scope: :account_id }
validate :validate_target_account
before_validation :set_uri
after_create :add_to_account
@ -44,4 +44,12 @@ class AccountAlias < ApplicationRecord
def remove_from_account
account.update(also_known_as: account.also_known_as.reject { |x| x == uri })
end
def validate_target_account
if uri.blank?
errors.add(:acct, I18n.t('migrations.errors.not_found'))
elsif ActivityPub::TagManager.instance.uri_for(account) == uri
errors.add(:acct, I18n.t('migrations.errors.move_to_self'))
end
end
end

View File

@ -14,7 +14,7 @@
# created_at :datetime not null
# updated_at :datetime not null
# published_at :datetime
# status_ids :bigint is an Array
# status_ids :bigint(8) is an Array
#
class Announcement < ApplicationRecord

View File

@ -27,7 +27,7 @@ class Relay < ApplicationRecord
payload = Oj.dump(follow_activity(activity_id))
update!(state: :pending, follow_activity_id: activity_id)
DeliveryFailureTracker.new(inbox_url).track_success!
DeliveryFailureTracker.track_success!(inbox_url)
ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url)
end
@ -36,7 +36,7 @@ class Relay < ApplicationRecord
payload = Oj.dump(unfollow_activity(activity_id))
update!(state: :idle, follow_activity_id: nil)
DeliveryFailureTracker.new(inbox_url).track_success!
DeliveryFailureTracker.track_success!(inbox_url)
ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url)
end

View File

@ -0,0 +1,22 @@
# frozen_string_literal: true
# == Schema Information
#
# Table name: unavailable_domains
#
# id :bigint(8) not null, primary key
# domain :string default(""), not null
# created_at :datetime not null
# updated_at :datetime not null
#
class UnavailableDomain < ApplicationRecord
include DomainNormalizable
after_commit :reset_cache!
private
def reset_cache!
Rails.cache.delete('unavailable_domains')
end
end

View File

@ -98,6 +98,7 @@ class User < ApplicationRecord
before_validation :sanitize_languages
before_create :set_approved
after_commit :send_pending_devise_notifications
# This avoids a deprecation warning from Rails 5.1
# It seems possible that a future release of devise-two-factor will
@ -306,11 +307,38 @@ class User < ApplicationRecord
protected
def send_devise_notification(notification, *args)
devise_mailer.send(notification, self, *args).deliver_later
# This method can be called in `after_update` and `after_commit` hooks,
# but we must make sure the mailer is actually called *after* commit,
# otherwise it may work on stale data. To do this, figure out if we are
# within a transaction.
if ActiveRecord::Base.connection.current_transaction.try(:records)&.include?(self)
pending_devise_notifications << [notification, args]
else
render_and_send_devise_message(notification, *args)
end
end
private
def send_pending_devise_notifications
pending_devise_notifications.each do |notification, args|
render_and_send_devise_message(notification, *args)
end
# Empty the pending notifications array because the
# after_commit hook can be called multiple times which
# could cause multiple emails to be sent.
pending_devise_notifications.clear
end
def pending_devise_notifications
@pending_devise_notifications ||= []
end
def render_and_send_devise_message(notification, *args)
devise_mailer.send(notification, self, *args).deliver_later
end
def set_approved
self.approved = open_registrations? || valid_invitation? || external?
end

View File

@ -171,12 +171,12 @@
%th= t('admin.accounts.inbox_url')
%td
= @account.inbox_url
= fa_icon DeliveryFailureTracker.unavailable?(@account.inbox_url) ? 'times' : 'check'
= fa_icon DeliveryFailureTracker.available?(@account.inbox_url) ? 'check' : 'times'
%tr
%th= t('admin.accounts.shared_inbox_url')
%td
= @account.shared_inbox_url
= fa_icon DeliveryFailureTracker.unavailable?(@account.shared_inbox_url) ? 'times' : 'check'
= fa_icon DeliveryFailureTracker.available?(@account.shared_inbox_url) ? 'check': 'times'
%div{ style: 'overflow: hidden' }
%div{ style: 'float: right' }

View File

@ -39,7 +39,7 @@
%h4= t 'footer.developers'
%ul
%li= link_to t('about.documentation'), 'https://docs.joinmastodon.org/'
%li= link_to t('about.api'), 'https://docs.joinmastodon.org/api/guidelines/'
%li= link_to t('about.api'), 'https://docs.joinmastodon.org/client/intro/'
.column-2
%h4= link_to t('about.what_is_mastodon'), 'https://joinmastodon.org/'
= link_to svg_logo, root_url, class: 'brand'

View File

@ -23,6 +23,10 @@
%th= t('simple_form.labels.account_alias.acct')
%th
%tbody
- if @aliases.empty?
%tr
%td.muted-hint{ colspan: 2 }= t('aliases.empty')
- else
- @aliases.each do |account_alias|
%tr
%td= account_alias.acct

View File

@ -17,9 +17,9 @@
= render 'application/card', account: @account
.fields-row__column.fields-group.fields-row__column-6
= f.input :header, wrapper: :with_label, input_html: { accept: AccountHeader::IMAGE_MIME_TYPES.join(',') }, hint: t('simple_form.hints.defaults.header', dimensions: '1500x500', size: number_to_human_size(AccountHeader::LIMIT))
= f.input :header, wrapper: :with_label, input_html: { accept: AccountHeader::IMAGE_MIME_TYPES.join(',') }, hint: picture_hint(t('simple_form.hints.defaults.header', dimensions: '1500x500', size: number_to_human_size(AccountHeader::LIMIT)), @account.header)
= f.input :avatar, wrapper: :with_label, input_html: { accept: AccountAvatar::IMAGE_MIME_TYPES.join(',') }, hint: t('simple_form.hints.defaults.avatar', dimensions: '400x400', size: number_to_human_size(AccountAvatar::LIMIT))
= f.input :avatar, wrapper: :with_label, input_html: { accept: AccountAvatar::IMAGE_MIME_TYPES.join(',') }, hint: picture_hint(t('simple_form.hints.defaults.avatar', dimensions: '400x400', size: number_to_human_size(AccountAvatar::LIMIT)), @account.avatar)
%hr.spacer/

View File

@ -12,13 +12,15 @@
%span.poll__number><
- if own_votes.include?(index)
%i.poll__voted__mark.fa.fa-check
= percent.round
= "#{percent.round}%"
%span.poll__option__text
= Formatter.instance.format_poll_option(status, option, autoplay: autoplay)
%span.poll__chart{ style: "width: #{percent}%" }
- else
%label.poll__option><
%span.poll__input{ class: poll.multiple? ? 'checkbox' : nil}><
%span.poll__option__text
= Formatter.instance.format_poll_option(status, option, autoplay: autoplay)
.poll__footer
- unless show_results

View File

@ -12,5 +12,5 @@
%h1= "##{@tag.name}"
%p= t('about.about_hashtag_html', hashtag: @tag.name)
#mastodon-timeline{ data: { props: Oj.dump(default_props.merge(hashtag: @tag.name)) }}
#mastodon-timeline{ data: { props: Oj.dump(default_props.merge(hashtag: @tag.name, local: @local)) }}
#modal-container

View File

@ -38,7 +38,7 @@
%table.input{ align: 'center', cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td= @resource.try(:unconfirmed_email) ? @resource.unconfirmed_email : @resource.email
%td= @resource.unconfirmed_email
%table.email-table{ cellspacing: 0, cellpadding: 0 }
%tbody

View File

@ -4,6 +4,6 @@
<%= t 'devise.mailer.email_changed.explanation' %>
<%= @resource.try(:unconfirmed_email) ? @resource.unconfirmed_email : @resource.email %>
<%= @resource.unconfirmed_email %>
<%= t 'devise.mailer.email_changed.extra' %>

View File

@ -12,7 +12,7 @@ class ActivityPub::DeliveryWorker
HEADERS = { 'Content-Type' => 'application/activity+json' }.freeze
def perform(json, source_account_id, inbox_url, options = {})
return if DeliveryFailureTracker.unavailable?(inbox_url)
return unless DeliveryFailureTracker.available?(inbox_url)
@options = options.with_indifferent_access
@json = json
@ -23,12 +23,14 @@ class ActivityPub::DeliveryWorker
perform_request
ensure
if @inbox_url.present?
if @performed
failure_tracker.track_success!
else
failure_tracker.track_failure!
end
end
end
private

View File

@ -25,7 +25,7 @@ class PostProcessMediaWorker
media_attachment = MediaAttachment.find(media_attachment_id)
media_attachment.processing = :in_progress
media_attachment.save
media_attachment.file.reprocess_original!
media_attachment.file.reprocess!(:original)
media_attachment.processing = :complete
media_attachment.save
rescue ActiveRecord::RecordNotFound

View File

@ -23,3 +23,9 @@ module Chewy
end
end
end
# ElasticSearch uses Faraday internally. Faraday interprets the
# http_proxy env variable by default which leads to issues when
# Mastodon is run with hidden services enabled, because
# ElasticSearch is *not* supposed to be accessed through a proxy
Faraday.ignore_env_proxy = true

View File

@ -635,6 +635,7 @@ en:
add_new: Create alias
created_msg: Successfully created a new alias. You can now initiate the move from the old account.
deleted_msg: Successfully remove the alias. Moving from that account to this one will no longer be possible.
empty: You have no aliases.
hint_html: If you want to move from another account to this one, here you can create an alias, which is required before you can proceed with moving followers from the old account to this one. This action by itself is <strong>harmless and reversible</strong>. <strong>The account migration is initiated from the old account</strong>.
remove: Unlink alias
appearance:

View File

@ -100,7 +100,9 @@ Rails.application.routes.draw do
get '/settings', to: redirect('/settings/profile')
namespace :settings do
resource :profile, only: [:show, :update]
resource :profile, only: [:show, :update] do
resources :pictures, only: :destroy
end
get :preferences, to: redirect('/settings/preferences/appearance')

View File

@ -0,0 +1,9 @@
class CreateUnavailableDomains < ActiveRecord::Migration[5.2]
def change
create_table :unavailable_domains do |t|
t.string :domain, default: '', null: false, index: { unique: true }
t.timestamps
end
end
end

View File

@ -0,0 +1,21 @@
class MigrateUnavailableInboxes < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def up
urls = Redis.current.smembers('unavailable_inboxes')
hosts = urls.map do |url|
Addressable::URI.parse(url).normalized_host
end.compact.uniq
UnavailableDomain.delete_all
hosts.each do |host|
UnavailableDomain.create(domain: host)
end
Redis.current.del(*(['unavailable_inboxes'] + Redis.current.keys('exhausted_deliveries:*')))
end
def down; end
end

View File

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2020_03_12_185443) do
ActiveRecord::Schema.define(version: 2020_04_07_202420) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@ -769,6 +769,13 @@ ActiveRecord::Schema.define(version: 2020_03_12_185443) do
t.index ["uri"], name: "index_tombstones_on_uri"
end
create_table "unavailable_domains", force: :cascade do |t|
t.string "domain", default: "", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["domain"], name: "index_unavailable_domains_on_domain", unique: true
end
create_table "user_invite_requests", force: :cascade do |t|
t.bigint "user_id"
t.text "text"

View File

@ -4,6 +4,7 @@ services:
db:
restart: always
image: postgres:9.6-alpine
shm_size: 256mb
networks:
- internal_network
healthcheck:

View File

@ -276,7 +276,7 @@ module Mastodon
preload_map = Hash.new { |hash, key| hash[key] = [] }
objects.map do |object|
segments = object.key.split('/').first
segments = object.key.split('/')
model_name = segments.first.classify
record_id = segments[2..-2].join.to_i

View File

@ -14,17 +14,6 @@ module Paperclip
end
end
def reprocess_original!
old_original_path = path(:original)
reprocess!(:original)
new_original_path = path(:original)
if new_original_path != old_original_path
@queued_for_delete << old_original_path
flush_deletes
end
end
def variant?(other_filename)
return true if original_filename == other_filename
return false if original_filename.nil?

View File

@ -15,7 +15,7 @@ end
namespace :emojis do
desc 'Generate a unicode to filename mapping'
task :generate do
source = 'http://www.unicode.org/Public/emoji/11.0/emoji-test.txt'
source = 'http://www.unicode.org/Public/emoji/12.0/emoji-test.txt'
codes = []
dest = Rails.root.join('app', 'javascript', 'mastodon', 'features', 'emoji', 'emoji_map.json')

View File

@ -72,7 +72,7 @@
"@rails/ujs": "^6.0.2",
"array-includes": "^3.1.1",
"arrow-key-navigation": "^1.1.0",
"autoprefixer": "^9.7.5",
"autoprefixer": "^9.7.6",
"axios": "^0.19.2",
"babel-loader": "^8.1.0",
"babel-plugin-lodash": "^3.3.4",
@ -111,7 +111,7 @@
"mark-loader": "^0.1.6",
"marky": "^1.2.1",
"mini-css-extract-plugin": "^0.9.0",
"mkdirp": "^1.0.3",
"mkdirp": "^1.0.4",
"npmlog": "^4.1.2",
"object-assign": "^4.1.1",
"object-fit-images": "^3.2.3",
@ -160,7 +160,7 @@
"tesseract.js": "^2.0.0-alpha.16",
"throng": "^4.0.0",
"tiny-queue": "^0.2.1",
"uuid": "^7.0.2",
"uuid": "^7.0.3",
"wavesurfer.js": "^3.3.1",
"webpack": "^4.42.1",
"webpack-assets-manifest": "^3.1.1",

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F7DECE" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#F7DECE" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#292F33" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#F7DECE" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F7DECE" d="M14.919 1.309c-1.46-.632-3.707.061-4.116 1.762-.572 2.374.726 4.444 2.239 4.331 1.586-.118 2.568-.436 3.263-2.042.695-1.605.074-3.419-1.386-4.051z"/><path fill="#F7DECE" d="M15.871 5.765c2.237-2.457-2.957-2.383-2.957-2.383-.983.003-.362 1.661-.853 2.538-.337.607.985.979.985.979s.612.011.62.755v.007c.001.189-.026.413-.124.71-.489 1.472 1.477 2.449 1.965.975.193-.584.143-1.104.071-1.586l-.007-.043c-.109-.715-.253-1.344.3-1.952z"/><path fill="#292F33" d="M16.763 1.884c-.697-1.012-3.117-1.965-4.713-.767-1.07-.222-1.517.787-1.445 1.379.057.473 1.209.633 1.469 1.535.209-.217.277-.674.242-.921.356.366.165 1.292 1.592 1.949 1.38.634 1.091 1.862 1.091 1.862s.749-.324 1.281-.9c1.019-1.101 1.251-3.022.483-4.137z"/><path fill="#F7DECE" d="M16.261 28.432c-.378-.1-.971-.58-1.154-.912-.661-1.197.171-3.476.19-4.777.005-.37-2.213-1.974-2.86-1.016s.991 4.719.812 6.193c-.04.326-.227.814-.126 1.015.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.222-.254-.428-.725-.807-.825zm7.51-3.222c-.334-.065-.85-.469-1.016-.753-.29-.498.157-3.642.127-4.946-.35-.234-2.393.926-2.393.926-.437 1.815.817 2.863.659 4.262-.032.284-.17.964-.071 1.132.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.178-.234-.414-.604-.748-.669zm3.984-12.977c-.589-.235-1.348-.276-2.104-.386-1.198-.175-2.852-.765-3.529-1.086-.825-.495-2.577-1.661-3.012-1.948S18.093 8.128 17.375 8h-.156c.385.542.609 1.159.748 2.841 0 0 3.319 1.661 3.595 1.753 1.125.375 3.182.366 4.344.512.602.076 1.021-.014 1.499-.047.722-.049 1.38-.055 1.422-.371.05-.367-.595-.265-1.072-.455zM10.999 8.402c-1.666.993-3.368 3.049-3.98 3.914-.36.283-.686.614-.897.736-.389.223-2.154 1.432-3.334 2.005-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566.8-.531 3.347-1.156 4.597-2.031.221-.155 2.385-2.163 2.781-2.741.543-1.515.282-2.556 0-2.842z"/><path fill="#292F33" d="M23.042 19.417c-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.034-.487-.172-1.295-.089-2.016.099-.853.26-1.689.26-1.689s1.633.727 3.402 1.267c.302-.363.618-1.395.559-1.833-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639s-.099.856-.749.918C14.337 8.98 13.56 8 13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.36.283-.526.447.927.602 2.128 1.035 2.128 1.035 1.188-1.024 2.078-1.535 2.474-2.113 0 0 .659 1.356.912 2.388.253 1.032.202 2.925.202 2.925s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.885 3.468.927 4.008 1.412 0 1.667-.359 1.667-.359s.02-.839.134-1.778c.069-.572.269-1.544.269-2.393 0-.849.217-1.424.343-1.776s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.693 1.658.8 2.703.893-.133 1.53-.499 1.53-.499s.079-1.336.098-1.916c.023-.706.412-2.193.265-2.824z"/><path fill="#67757F" d="M7.192 13.168c.795-1.126 3.067-4.339 5.508-4.55 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639s-.309.699-.751.766S13.56 8 13.56 8l-1.748.167c-2.678.421-4.566 3.941-5.32 4.598.106.104.456.283.7.403z"/><path fill="#67757F" d="M13.762 27.297c-.402-1.36-1.283-4.497-.45-6.056.075-.368-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.139 1.191-5.354.57c.174-1.719-1.134-4.337-1.134-4.337-.213-.025-.265.168-.408.424 0 0 .774 1.865.912 2.718.137.852.202 2.593.202 2.593s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884-.952 1.783-.099 2.98.625 6.492.169.008.336.008.518-.019zm7.32-4.562c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.69 1.734.8 2.703.309-.046.406-.073.706-.161-.613-.261-.735-1.154-.773-1.76z"/></svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F3D2A2" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#F3D2A2" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#FFE51E" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#F3D2A2" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F3D2A2" d="M14.919 1.309c-1.46-.632-3.707.061-4.116 1.762-.572 2.374.726 4.444 2.239 4.331 1.586-.118 2.568-.436 3.263-2.042.695-1.605.074-3.419-1.386-4.051z"/><path fill="#F3D2A2" d="M15.871 5.765c2.237-2.457-2.957-2.383-2.957-2.383-.983.003-.362 1.661-.853 2.538-.337.607.985.979.985.979s.612.011.62.755v.007c.001.189-.026.413-.124.71-.489 1.472 1.477 2.449 1.965.975.193-.584.143-1.104.071-1.586l-.007-.043c-.109-.715-.253-1.344.3-1.952z"/><path fill="#FFE51E" d="M16.763 1.884c-.697-1.012-3.117-1.965-4.713-.767-1.07-.222-1.517.787-1.445 1.379.057.473 1.209.633 1.469 1.535.209-.217.277-.674.242-.921.356.366.165 1.292 1.592 1.949 1.38.634 1.091 1.862 1.091 1.862s.749-.324 1.281-.9c1.019-1.101 1.251-3.022.483-4.137z"/><path fill="#F3D2A2" d="M16.261 28.432c-.378-.1-.971-.58-1.154-.912-.661-1.197.171-3.476.19-4.777.005-.37-2.213-1.974-2.86-1.016s.991 4.719.812 6.193c-.04.326-.227.814-.126 1.015.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.222-.254-.428-.725-.807-.825zm7.51-3.222c-.334-.065-.85-.469-1.016-.753-.29-.498.157-3.642.127-4.946-.35-.234-2.393.926-2.393.926-.437 1.815.817 2.863.659 4.262-.032.284-.17.964-.071 1.132.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.178-.234-.414-.604-.748-.669zm3.984-12.977c-.589-.235-1.348-.276-2.104-.386-1.198-.175-2.852-.765-3.529-1.086-.825-.495-2.577-1.661-3.012-1.948S18.093 8.128 17.375 8h-.156c.385.542.609 1.159.748 2.841 0 0 3.319 1.661 3.595 1.753 1.125.375 3.182.366 4.344.512.602.076 1.021-.014 1.499-.047.722-.049 1.38-.055 1.422-.371.05-.367-.595-.265-1.072-.455zM10.999 8.402c-1.666.993-3.368 3.049-3.98 3.914-.36.283-.686.614-.897.736-.389.223-2.154 1.432-3.334 2.005-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566.8-.531 3.347-1.156 4.597-2.031.221-.155 2.385-2.163 2.781-2.741.543-1.515.282-2.556 0-2.842z"/><path fill="#292F33" d="M23.042 19.417c-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.034-.487-.172-1.295-.089-2.016.099-.853.26-1.689.26-1.689s1.633.727 3.402 1.267c.302-.363.618-1.395.559-1.833-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639s-.099.856-.749.918C14.337 8.98 13.56 8 13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.36.283-.526.447.927.602 2.128 1.035 2.128 1.035 1.188-1.024 2.078-1.535 2.474-2.113 0 0 .659 1.356.912 2.388.253 1.032.202 2.925.202 2.925s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.885 3.468.927 4.008 1.412 0 1.667-.359 1.667-.359s.02-.839.134-1.778c.069-.572.269-1.544.269-2.393 0-.849.217-1.424.343-1.776s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.693 1.658.8 2.703.893-.133 1.53-.499 1.53-.499s.079-1.336.098-1.916c.023-.706.412-2.193.265-2.824z"/><path fill="#67757F" d="M7.192 13.168c.795-1.126 3.067-4.339 5.508-4.55 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639s-.309.699-.751.766S13.56 8 13.56 8l-1.748.167c-2.678.421-4.566 3.941-5.32 4.598.106.104.456.283.7.403z"/><path fill="#67757F" d="M13.762 27.297c-.402-1.36-1.283-4.497-.45-6.056.075-.368-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.139 1.191-5.354.57c.174-1.719-1.134-4.337-1.134-4.337-.213-.025-.265.168-.408.424 0 0 .774 1.865.912 2.718.137.852.202 2.593.202 2.593s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884-.952 1.783-.099 2.98.625 6.492.169.008.336.008.518-.019zm7.32-4.562c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.69 1.734.8 2.703.309-.046.406-.073.706-.161-.613-.261-.735-1.154-.773-1.76z"/></svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#D4AB88" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#D4AB88" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#963B22" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#D4AB88" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#D4AB88" d="M14.919 1.309c-1.46-.632-3.707.061-4.116 1.762-.572 2.374.726 4.444 2.239 4.331 1.586-.118 2.568-.436 3.263-2.042.695-1.605.074-3.419-1.386-4.051z"/><path fill="#D4AB88" d="M15.871 5.765c2.237-2.457-2.957-2.383-2.957-2.383-.983.003-.362 1.661-.853 2.538-.337.607.985.979.985.979s.612.011.62.755v.007c.001.189-.026.413-.124.71-.489 1.472 1.477 2.449 1.965.975.193-.584.143-1.104.071-1.586l-.007-.043c-.109-.715-.253-1.344.3-1.952z"/><path fill="#963B22" d="M16.763 1.884c-.697-1.012-3.117-1.965-4.713-.767-1.07-.222-1.517.787-1.445 1.379.057.473 1.209.633 1.469 1.535.209-.217.277-.674.242-.921.356.366.165 1.292 1.592 1.949 1.38.634 1.091 1.862 1.091 1.862s.749-.324 1.281-.9c1.019-1.101 1.251-3.022.483-4.137z"/><path fill="#D4AB88" d="M16.261 28.432c-.378-.1-.971-.58-1.154-.912-.661-1.197.171-3.476.19-4.777.005-.37-2.213-1.974-2.86-1.016s.991 4.719.812 6.193c-.04.326-.227.814-.126 1.015.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.222-.254-.428-.725-.807-.825zm7.51-3.222c-.334-.065-.85-.469-1.016-.753-.29-.498.157-3.642.127-4.946-.35-.234-2.393.926-2.393.926-.437 1.815.817 2.863.659 4.262-.032.284-.17.964-.071 1.132.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.178-.234-.414-.604-.748-.669zm3.984-12.977c-.589-.235-1.348-.276-2.104-.386-1.198-.175-2.852-.765-3.529-1.086-.825-.495-2.577-1.661-3.012-1.948S18.093 8.128 17.375 8h-.156c.385.542.609 1.159.748 2.841 0 0 3.319 1.661 3.595 1.753 1.125.375 3.182.366 4.344.512.602.076 1.021-.014 1.499-.047.722-.049 1.38-.055 1.422-.371.05-.367-.595-.265-1.072-.455zM10.999 8.402c-1.666.993-3.368 3.049-3.98 3.914-.36.283-.686.614-.897.736-.389.223-2.154 1.432-3.334 2.005-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566.8-.531 3.347-1.156 4.597-2.031.221-.155 2.385-2.163 2.781-2.741.543-1.515.282-2.556 0-2.842z"/><path fill="#292F33" d="M23.042 19.417c-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.034-.487-.172-1.295-.089-2.016.099-.853.26-1.689.26-1.689s1.633.727 3.402 1.267c.302-.363.618-1.395.559-1.833-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639s-.099.856-.749.918C14.337 8.98 13.56 8 13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.36.283-.526.447.927.602 2.128 1.035 2.128 1.035 1.188-1.024 2.078-1.535 2.474-2.113 0 0 .659 1.356.912 2.388.253 1.032.202 2.925.202 2.925s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.885 3.468.927 4.008 1.412 0 1.667-.359 1.667-.359s.02-.839.134-1.778c.069-.572.269-1.544.269-2.393 0-.849.217-1.424.343-1.776s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.693 1.658.8 2.703.893-.133 1.53-.499 1.53-.499s.079-1.336.098-1.916c.023-.706.412-2.193.265-2.824z"/><path fill="#67757F" d="M7.192 13.168c.795-1.126 3.067-4.339 5.508-4.55 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639s-.309.699-.751.766S13.56 8 13.56 8l-1.748.167c-2.678.421-4.566 3.941-5.32 4.598.106.104.456.283.7.403z"/><path fill="#67757F" d="M13.762 27.297c-.402-1.36-1.283-4.497-.45-6.056.075-.368-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.139 1.191-5.354.57c.174-1.719-1.134-4.337-1.134-4.337-.213-.025-.265.168-.408.424 0 0 .774 1.865.912 2.718.137.852.202 2.593.202 2.593s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884-.952 1.783-.099 2.98.625 6.492.169.008.336.008.518-.019zm7.32-4.562c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.69 1.734.8 2.703.309-.046.406-.073.706-.161-.613-.261-.735-1.154-.773-1.76z"/></svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#AF7E57" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#AF7E57" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#60352A" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#AF7E57" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#AF7E57" d="M14.919 1.309c-1.46-.632-3.707.061-4.116 1.762-.572 2.374.726 4.444 2.239 4.331 1.586-.118 2.568-.436 3.263-2.042.695-1.605.074-3.419-1.386-4.051z"/><path fill="#AF7E57" d="M15.871 5.765c2.237-2.457-2.957-2.383-2.957-2.383-.983.003-.362 1.661-.853 2.538-.337.607.985.979.985.979s.612.011.62.755v.007c.001.189-.026.413-.124.71-.489 1.472 1.477 2.449 1.965.975.193-.584.143-1.104.071-1.586l-.007-.043c-.109-.715-.253-1.344.3-1.952z"/><path fill="#60352A" d="M16.763 1.884c-.697-1.012-3.117-1.965-4.713-.767-1.07-.222-1.517.787-1.445 1.379.057.473 1.209.633 1.469 1.535.209-.217.277-.674.242-.921.356.366.165 1.292 1.592 1.949 1.38.634 1.091 1.862 1.091 1.862s.749-.324 1.281-.9c1.019-1.101 1.251-3.022.483-4.137z"/><path fill="#AF7E57" d="M16.261 28.432c-.378-.1-.971-.58-1.154-.912-.661-1.197.171-3.476.19-4.777.005-.37-2.213-1.974-2.86-1.016s.991 4.719.812 6.193c-.04.326-.227.814-.126 1.015.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.222-.254-.428-.725-.807-.825zm7.51-3.222c-.334-.065-.85-.469-1.016-.753-.29-.498.157-3.642.127-4.946-.35-.234-2.393.926-2.393.926-.437 1.815.817 2.863.659 4.262-.032.284-.17.964-.071 1.132.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.178-.234-.414-.604-.748-.669zm3.984-12.977c-.589-.235-1.348-.276-2.104-.386-1.198-.175-2.852-.765-3.529-1.086-.825-.495-2.577-1.661-3.012-1.948S18.093 8.128 17.375 8h-.156c.385.542.609 1.159.748 2.841 0 0 3.319 1.661 3.595 1.753 1.125.375 3.182.366 4.344.512.602.076 1.021-.014 1.499-.047.722-.049 1.38-.055 1.422-.371.05-.367-.595-.265-1.072-.455zM10.999 8.402c-1.666.993-3.368 3.049-3.98 3.914-.36.283-.686.614-.897.736-.389.223-2.154 1.432-3.334 2.005-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566.8-.531 3.347-1.156 4.597-2.031.221-.155 2.385-2.163 2.781-2.741.543-1.515.282-2.556 0-2.842z"/><path fill="#292F33" d="M23.042 19.417c-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.034-.487-.172-1.295-.089-2.016.099-.853.26-1.689.26-1.689s1.633.727 3.402 1.267c.302-.363.618-1.395.559-1.833-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639s-.099.856-.749.918C14.337 8.98 13.56 8 13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.36.283-.526.447.927.602 2.128 1.035 2.128 1.035 1.188-1.024 2.078-1.535 2.474-2.113 0 0 .659 1.356.912 2.388.253 1.032.202 2.925.202 2.925s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.885 3.468.927 4.008 1.412 0 1.667-.359 1.667-.359s.02-.839.134-1.778c.069-.572.269-1.544.269-2.393 0-.849.217-1.424.343-1.776s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.693 1.658.8 2.703.893-.133 1.53-.499 1.53-.499s.079-1.336.098-1.916c.023-.706.412-2.193.265-2.824z"/><path fill="#67757F" d="M7.192 13.168c.795-1.126 3.067-4.339 5.508-4.55 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639s-.309.699-.751.766S13.56 8 13.56 8l-1.748.167c-2.678.421-4.566 3.941-5.32 4.598.106.104.456.283.7.403z"/><path fill="#67757F" d="M13.762 27.297c-.402-1.36-1.283-4.497-.45-6.056.075-.368-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.139 1.191-5.354.57c.174-1.719-1.134-4.337-1.134-4.337-.213-.025-.265.168-.408.424 0 0 .774 1.865.912 2.718.137.852.202 2.593.202 2.593s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884-.952 1.783-.099 2.98.625 6.492.169.008.336.008.518-.019zm7.32-4.562c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.69 1.734.8 2.703.309-.046.406-.073.706-.161-.613-.261-.735-1.154-.773-1.76z"/></svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#7C533E" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#7C533E" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#0B0200" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#7C533E" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#7C533E" d="M14.919 1.309c-1.46-.632-3.707.061-4.116 1.762-.572 2.374.726 4.444 2.239 4.331 1.586-.118 2.568-.436 3.263-2.042.695-1.605.074-3.419-1.386-4.051z"/><path fill="#7C533E" d="M15.871 5.765c2.237-2.457-2.957-2.383-2.957-2.383-.983.003-.362 1.661-.853 2.538-.337.607.985.979.985.979s.612.011.62.755v.007c.001.189-.026.413-.124.71-.489 1.472 1.477 2.449 1.965.975.193-.584.143-1.104.071-1.586l-.007-.043c-.109-.715-.253-1.344.3-1.952z"/><path fill="#0B0200" d="M16.763 1.884c-.697-1.012-3.117-1.965-4.713-.767-1.07-.222-1.517.787-1.445 1.379.057.473 1.209.633 1.469 1.535.209-.217.277-.674.242-.921.356.366.165 1.292 1.592 1.949 1.38.634 1.091 1.862 1.091 1.862s.749-.324 1.281-.9c1.019-1.101 1.251-3.022.483-4.137z"/><path fill="#7C533E" d="M16.261 28.432c-.378-.1-.971-.58-1.154-.912-.661-1.197.171-3.476.19-4.777.005-.37-2.213-1.974-2.86-1.016s.991 4.719.812 6.193c-.04.326-.227.814-.126 1.015.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.222-.254-.428-.725-.807-.825zm7.51-3.222c-.334-.065-.85-.469-1.016-.753-.29-.498.157-3.642.127-4.946-.35-.234-2.393.926-2.393.926-.437 1.815.817 2.863.659 4.262-.032.284-.17.964-.071 1.132.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.178-.234-.414-.604-.748-.669zm3.984-12.977c-.589-.235-1.348-.276-2.104-.386-1.198-.175-2.852-.765-3.529-1.086-.825-.495-2.577-1.661-3.012-1.948S18.093 8.128 17.375 8h-.156c.385.542.609 1.159.748 2.841 0 0 3.319 1.661 3.595 1.753 1.125.375 3.182.366 4.344.512.602.076 1.021-.014 1.499-.047.722-.049 1.38-.055 1.422-.371.05-.367-.595-.265-1.072-.455zM10.999 8.402c-1.666.993-3.368 3.049-3.98 3.914-.36.283-.686.614-.897.736-.389.223-2.154 1.432-3.334 2.005-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566.8-.531 3.347-1.156 4.597-2.031.221-.155 2.385-2.163 2.781-2.741.543-1.515.282-2.556 0-2.842z"/><path fill="#292F33" d="M23.042 19.417c-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.034-.487-.172-1.295-.089-2.016.099-.853.26-1.689.26-1.689s1.633.727 3.402 1.267c.302-.363.618-1.395.559-1.833-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639s-.099.856-.749.918C14.337 8.98 13.56 8 13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.36.283-.526.447.927.602 2.128 1.035 2.128 1.035 1.188-1.024 2.078-1.535 2.474-2.113 0 0 .659 1.356.912 2.388.253 1.032.202 2.925.202 2.925s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.885 3.468.927 4.008 1.412 0 1.667-.359 1.667-.359s.02-.839.134-1.778c.069-.572.269-1.544.269-2.393 0-.849.217-1.424.343-1.776s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.693 1.658.8 2.703.893-.133 1.53-.499 1.53-.499s.079-1.336.098-1.916c.023-.706.412-2.193.265-2.824z"/><path fill="#67757F" d="M7.192 13.168c.795-1.126 3.067-4.339 5.508-4.55 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639s-.309.699-.751.766S13.56 8 13.56 8l-1.748.167c-2.678.421-4.566 3.941-5.32 4.598.106.104.456.283.7.403z"/><path fill="#67757F" d="M13.762 27.297c-.402-1.36-1.283-4.497-.45-6.056.075-.368-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.139 1.191-5.354.57c.174-1.719-1.134-4.337-1.134-4.337-.213-.025-.265.168-.408.424 0 0 .774 1.865.912 2.718.137.852.202 2.593.202 2.593s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884-.952 1.783-.099 2.98.625 6.492.169.008.336.008.518-.019zm7.32-4.562c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.69 1.734.8 2.703.309-.046.406-.073.706-.161-.613-.261-.735-1.154-.773-1.76z"/></svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#FFDC5D" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#FFDC5D" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#FFAC33" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#FFDC5D" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#FFDC5D" d="M14.919 1.309c-1.46-.632-3.707.061-4.116 1.762-.572 2.374.726 4.444 2.239 4.331 1.586-.118 2.568-.436 3.263-2.042.695-1.605.074-3.419-1.386-4.051z"/><path fill="#FFDC5D" d="M15.871 5.765c2.237-2.457-2.957-2.383-2.957-2.383-.983.003-.362 1.661-.853 2.538-.337.607.985.979.985.979s.612.011.62.755v.007c.001.189-.026.413-.124.71-.489 1.472 1.477 2.449 1.965.975.193-.584.143-1.104.071-1.586l-.007-.043c-.109-.715-.253-1.344.3-1.952z"/><path fill="#FFAC33" d="M16.763 1.884c-.697-1.012-3.117-1.965-4.713-.767-1.07-.222-1.517.787-1.445 1.379.057.473 1.209.633 1.469 1.535.209-.217.277-.674.242-.921.356.366.165 1.292 1.592 1.949 1.38.634 1.091 1.862 1.091 1.862s.749-.324 1.281-.9c1.019-1.101 1.251-3.022.483-4.137z"/><path fill="#FFDC5D" d="M16.261 28.432c-.378-.1-.971-.58-1.154-.912-.661-1.197.171-3.476.19-4.777.005-.37-2.213-1.974-2.86-1.016s.991 4.719.812 6.193c-.04.326-.227.814-.126 1.015.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.222-.254-.428-.725-.807-.825zm7.51-3.222c-.334-.065-.85-.469-1.016-.753-.29-.498.157-3.642.127-4.946-.35-.234-2.393.926-2.393.926-.437 1.815.817 2.863.659 4.262-.032.284-.17.964-.071 1.132.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.178-.234-.414-.604-.748-.669zm3.984-12.977c-.589-.235-1.348-.276-2.104-.386-1.198-.175-2.852-.765-3.529-1.086-.825-.495-2.577-1.661-3.012-1.948S18.093 8.128 17.375 8h-.156c.385.542.609 1.159.748 2.841 0 0 3.319 1.661 3.595 1.753 1.125.375 3.182.366 4.344.512.602.076 1.021-.014 1.499-.047.722-.049 1.38-.055 1.422-.371.05-.367-.595-.265-1.072-.455zM10.999 8.402c-1.666.993-3.368 3.049-3.98 3.914-.36.283-.686.614-.897.736-.389.223-2.154 1.432-3.334 2.005-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566.8-.531 3.347-1.156 4.597-2.031.221-.155 2.385-2.163 2.781-2.741.543-1.515.282-2.556 0-2.842z"/><path fill="#292F33" d="M23.042 19.417c-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.034-.487-.172-1.295-.089-2.016.099-.853.26-1.689.26-1.689s1.633.727 3.402 1.267c.302-.363.618-1.395.559-1.833-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639s-.099.856-.749.918C14.337 8.98 13.56 8 13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.36.283-.526.447.927.602 2.128 1.035 2.128 1.035 1.188-1.024 2.078-1.535 2.474-2.113 0 0 .659 1.356.912 2.388.253 1.032.202 2.925.202 2.925s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.885 3.468.927 4.008 1.412 0 1.667-.359 1.667-.359s.02-.839.134-1.778c.069-.572.269-1.544.269-2.393 0-.849.217-1.424.343-1.776s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.693 1.658.8 2.703.893-.133 1.53-.499 1.53-.499s.079-1.336.098-1.916c.023-.706.412-2.193.265-2.824z"/><path fill="#67757F" d="M7.192 13.168c.795-1.126 3.067-4.339 5.508-4.55 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639s-.309.699-.751.766S13.56 8 13.56 8l-1.748.167c-2.678.421-4.566 3.941-5.32 4.598.106.104.456.283.7.403z"/><path fill="#67757F" d="M13.762 27.297c-.402-1.36-1.283-4.497-.45-6.056.075-.368-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.139 1.191-5.354.57c.174-1.719-1.134-4.337-1.134-4.337-.213-.025-.265.168-.408.424 0 0 .774 1.865.912 2.718.137.852.202 2.593.202 2.593s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884-.952 1.783-.099 2.98.625 6.492.169.008.336.008.518-.019zm7.32-4.562c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.69 1.734.8 2.703.309-.046.406-.073.706-.161-.613-.261-.735-1.154-.773-1.76z"/></svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M36 20.363C34.648 19.937 32.158 17 30 17c-3 0-3-7-4-9s-3-4-3-5-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.658.179 7-.136.794-.107 1.493-.357 2-.864 0 0 0 8 2 11 0 0-1 1-2 4s-2 0-2-2-1-5-5-7c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#4289C1" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#D89882" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M36 20.363C34.529 19.5 31.846 18 30 17c-2.638-1.429-3.53-5.558-4.14-7.737C25.256 7.11 23.201 3.737 23 3c-.263-.965-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.146.009 6.488-.305.794-.107 2.005-.188 2.512-.695 0 0 .572 6.698 2 11 0 0-.209 1.075-1.209 4.075-.5 1.5-1.791 1.425-2.166.8S17 21 17 20c0-2-1-5-5-7-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#FA743E" d="M21 18c3.745 2.204 12.107.993 12.798.897S36 20.363 36 20.363v4.918H19.626s.348-2.123-.23-3.073C20.396 20.754 21 18 21 18z"/><path fill="#DD551F" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#E0AA94" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M36 20.363C34.648 19.937 32.158 17 30 17c-3 0-3-7-4-9s-3-4-3-5-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.658.179 7-.136.794-.107 1.493-.357 2-.864 0 0 0 8 2 11 0 0-1 1-2 4s-2 0-2-2-1-5-5-7c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#4289C1" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#C68F6A" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M36 20.363C34.529 19.5 31.846 18 30 17c-2.638-1.429-3.53-5.558-4.14-7.737C25.256 7.11 23.201 3.737 23 3c-.263-.965-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.146.009 6.488-.305.794-.107 2.005-.188 2.512-.695 0 0 .572 6.698 2 11 0 0-.209 1.075-1.209 4.075-.5 1.5-1.791 1.425-2.166.8S17 21 17 20c0-2-1-5-5-7-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#FA743E" d="M21 18c3.745 2.204 12.107.993 12.798.897S36 20.363 36 20.363v4.918H19.626s.348-2.123-.23-3.073C20.396 20.754 21 18 21 18z"/><path fill="#DD551F" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#D2A077" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M36 20.363C34.648 19.937 32.158 17 30 17c-3 0-3-7-4-9s-3-4-3-5-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.658.179 7-.136.794-.107 1.493-.357 2-.864 0 0 0 8 2 11 0 0-1 1-2 4s-2 0-2-2-1-5-5-7c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#4289C1" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#AA8052" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M36 20.363C34.529 19.5 31.846 18 30 17c-2.638-1.429-3.53-5.558-4.14-7.737C25.256 7.11 23.201 3.737 23 3c-.263-.965-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.146.009 6.488-.305.794-.107 2.005-.188 2.512-.695 0 0 .572 6.698 2 11 0 0-.209 1.075-1.209 4.075-.5 1.5-1.791 1.425-2.166.8S17 21 17 20c0-2-1-5-5-7-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#FA743E" d="M21 18c3.745 2.204 12.107.993 12.798.897S36 20.363 36 20.363v4.918H19.626s.348-2.123-.23-3.073C20.396 20.754 21 18 21 18z"/><path fill="#DD551F" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#B78B60" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M36 20.363C34.648 19.937 32.158 17 30 17c-3 0-3-7-4-9s-3-4-3-5-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.658.179 7-.136.794-.107 1.493-.357 2-.864 0 0 0 8 2 11 0 0-1 1-2 4s-2 0-2-2-1-5-5-7c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#4289C1" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#845636" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M36 20.363C34.529 19.5 31.846 18 30 17c-2.638-1.429-3.53-5.558-4.14-7.737C25.256 7.11 23.201 3.737 23 3c-.263-.965-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.146.009 6.488-.305.794-.107 2.005-.188 2.512-.695 0 0 .572 6.698 2 11 0 0-.209 1.075-1.209 4.075-.5 1.5-1.791 1.425-2.166.8S17 21 17 20c0-2-1-5-5-7-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#FA743E" d="M21 18c3.745 2.204 12.107.993 12.798.897S36 20.363 36 20.363v4.918H19.626s.348-2.123-.23-3.073C20.396 20.754 21 18 21 18z"/><path fill="#DD551F" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#90603E" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M36 20.363C34.648 19.937 32.158 17 30 17c-3 0-3-7-4-9s-3-4-3-5-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.658.179 7-.136.794-.107 1.493-.357 2-.864 0 0 0 8 2 11 0 0-1 1-2 4s-2 0-2-2-1-5-5-7c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#4289C1" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#543226" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M36 20.363C34.529 19.5 31.846 18 30 17c-2.638-1.429-3.53-5.558-4.14-7.737C25.256 7.11 23.201 3.737 23 3c-.263-.965-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.146.009 6.488-.305.794-.107 2.005-.188 2.512-.695 0 0 .572 6.698 2 11 0 0-.209 1.075-1.209 4.075-.5 1.5-1.791 1.425-2.166.8S17 21 17 20c0-2-1-5-5-7-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#FA743E" d="M21 18c3.745 2.204 12.107.993 12.798.897S36 20.363 36 20.363v4.918H19.626s.348-2.123-.23-3.073C20.396 20.754 21 18 21 18z"/><path fill="#DD551F" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#583529" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M36 20.363C34.648 19.937 32.158 17 30 17c-3 0-3-7-4-9s-3-4-3-5-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.658.179 7-.136.794-.107 1.493-.357 2-.864 0 0 0 8 2 11 0 0-1 1-2 4s-2 0-2-2-1-5-5-7c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#4289C1" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#EF9645" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M36 20.363C34.529 19.5 31.846 18 30 17c-2.638-1.429-3.53-5.558-4.14-7.737C25.256 7.11 23.201 3.737 23 3c-.263-.965-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.146.009 6.488-.305.794-.107 2.005-.188 2.512-.695 0 0 .572 6.698 2 11 0 0-.209 1.075-1.209 4.075-.5 1.5-1.791 1.425-2.166.8S17 21 17 20c0-2-1-5-5-7-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#FA743E" d="M21 18c3.745 2.204 12.107.993 12.798.897S36 20.363 36 20.363v4.918H19.626s.348-2.123-.23-3.073C20.396 20.754 21 18 21 18z"/><path fill="#DD551F" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#FCAB40" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.0 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.0 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.0 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Some files were not shown because too many files have changed in this diff Show More