Merge branch 'master' into update-empty-block-explainer

This commit is contained in:
wiz 2024-05-17 15:43:53 +09:00 committed by GitHub
commit 6b2b3459f7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
36 changed files with 1233 additions and 104 deletions

View file

@ -20,6 +20,7 @@
"@typescript-eslint/no-this-alias": 1,
"@typescript-eslint/no-var-requires": 1,
"@typescript-eslint/explicit-function-return-type": 1,
"@typescript-eslint/no-unused-vars": 1,
"no-console": 1,
"no-constant-condition": 1,
"no-dupe-else-if": 1,
@ -32,6 +33,7 @@
"prefer-rest-params": 1,
"quotes": [1, "single", { "allowTemplateLiterals": true }],
"semi": 1,
"curly": [1, "all"],
"eqeqeq": 1
}
}

View file

@ -24,6 +24,7 @@ class MiningRoutes {
.get(config.MEMPOOL.API_URL_PREFIX + 'mining/difficulty-adjustments', this.$getDifficultyAdjustments)
.get(config.MEMPOOL.API_URL_PREFIX + 'mining/reward-stats/:blockCount', this.$getRewardStats)
.get(config.MEMPOOL.API_URL_PREFIX + 'mining/blocks/fees/:interval', this.$getHistoricalBlockFees)
.get(config.MEMPOOL.API_URL_PREFIX + 'mining/blocks/fees', this.$getBlockFeesTimespan)
.get(config.MEMPOOL.API_URL_PREFIX + 'mining/blocks/rewards/:interval', this.$getHistoricalBlockRewards)
.get(config.MEMPOOL.API_URL_PREFIX + 'mining/blocks/fee-rates/:interval', this.$getHistoricalBlockFeeRates)
.get(config.MEMPOOL.API_URL_PREFIX + 'mining/blocks/sizes-weights/:interval', this.$getHistoricalBlockSizeAndWeight)
@ -217,6 +218,26 @@ class MiningRoutes {
}
}
private async $getBlockFeesTimespan(req: Request, res: Response) {
try {
if (!parseInt(req.query.from as string, 10) || !parseInt(req.query.to as string, 10)) {
throw new Error('Invalid timestamp range');
}
if (parseInt(req.query.from as string, 10) > parseInt(req.query.to as string, 10)) {
throw new Error('from must be less than to');
}
const blockFees = await mining.$getBlockFeesTimespan(parseInt(req.query.from as string, 10), parseInt(req.query.to as string, 10));
const blockCount = await BlocksRepository.$blockCount(null, null);
res.header('Pragma', 'public');
res.header('Cache-control', 'public');
res.header('X-total-count', blockCount.toString());
res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString());
res.json(blockFees);
} catch (e) {
res.status(500).send(e instanceof Error ? e.message : e);
}
}
private async $getHistoricalBlockRewards(req: Request, res: Response) {
try {
const blockRewards = await mining.$getHistoricalBlockRewards(req.params.interval);

View file

@ -45,11 +45,22 @@ class Mining {
*/
public async $getHistoricalBlockFees(interval: string | null = null): Promise<any> {
return await BlocksRepository.$getHistoricalBlockFees(
this.getTimeRange(interval, 5),
this.getTimeRange(interval),
Common.getSqlInterval(interval)
);
}
/**
* Get timespan block total fees
*/
public async $getBlockFeesTimespan(from: number, to: number): Promise<number> {
return await BlocksRepository.$getHistoricalBlockFees(
this.getTimeRangeFromTimespan(from, to),
null,
{from, to}
);
}
/**
* Get historical block rewards
*/
@ -646,6 +657,24 @@ class Mining {
}
}
private getTimeRangeFromTimespan(from: number, to: number, scale = 1): number {
const timespan = to - from;
switch (true) {
case timespan > 3600 * 24 * 365 * 4: return 86400 * scale; // 24h
case timespan > 3600 * 24 * 365 * 3: return 43200 * scale; // 12h
case timespan > 3600 * 24 * 365 * 2: return 43200 * scale; // 12h
case timespan > 3600 * 24 * 365: return 28800 * scale; // 8h
case timespan > 3600 * 24 * 30 * 6: return 28800 * scale; // 8h
case timespan > 3600 * 24 * 30 * 3: return 10800 * scale; // 3h
case timespan > 3600 * 24 * 30: return 7200 * scale; // 2h
case timespan > 3600 * 24 * 7: return 1800 * scale; // 30min
case timespan > 3600 * 24 * 3: return 300 * scale; // 5min
case timespan > 3600 * 24: return 1 * scale;
default: return 1 * scale;
}
}
// Finds the oldest block in a consecutive chain back from the tip
// assumes `blocks` is sorted in ascending height order
private getOldestConsecutiveBlock(blocks: DifficultyBlock[]): DifficultyBlock {

View file

@ -663,7 +663,7 @@ class BlocksRepository {
/**
* Get the historical averaged block fees
*/
public async $getHistoricalBlockFees(div: number, interval: string | null): Promise<any> {
public async $getHistoricalBlockFees(div: number, interval: string | null, timespan?: {from: number, to: number}): Promise<any> {
try {
let query = `SELECT
CAST(AVG(blocks.height) as INT) as avgHeight,
@ -677,6 +677,8 @@ class BlocksRepository {
if (interval !== null) {
query += ` WHERE blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`;
} else if (timespan) {
query += ` WHERE blockTimestamp BETWEEN FROM_UNIXTIME(${timespan.from}) AND FROM_UNIXTIME(${timespan.to})`;
}
query += ` GROUP BY UNIX_TIMESTAMP(blockTimestamp) DIV ${div}`;

View file

@ -1,4 +1,4 @@
FROM node:20.12.0-buster-slim AS builder
FROM node:20.13.1-buster-slim AS builder
ARG commitHash
ENV MEMPOOL_COMMIT_HASH=${commitHash}
@ -24,7 +24,7 @@ RUN npm install --omit=dev --omit=optional
WORKDIR /build
RUN npm run package
FROM node:20.12.0-buster-slim
FROM node:20.13.1-buster-slim
WORKDIR /backend

View file

@ -1,4 +1,4 @@
FROM node:20.12.0-buster-slim AS builder
FROM node:20.13.1-buster-slim AS builder
ARG commitHash
ENV DOCKER_COMMIT_HASH=${commitHash}

View file

@ -34,6 +34,7 @@
"prefer-rest-params": 1,
"quotes": [1, "single", { "allowTemplateLiterals": true }],
"semi": 1,
"curly": [1, "all"],
"eqeqeq": 1
}
}

View file

@ -26,7 +26,7 @@
"component": "twitter",
"mobileOrder": 5,
"props": {
"handle": "bitcoinofficesv"
"handle": "nayibbukele"
}
},
{

View file

@ -11,6 +11,7 @@ let configContent = {};
let gitCommitHash = '';
let packetJsonVersion = '';
let customConfig;
let customConfigContent;
try {
const rawConfig = fs.readFileSync(CONFIG_FILE_NAME);
@ -25,11 +26,16 @@ try {
}
if (configContent && configContent.CUSTOMIZATION) {
try {
customConfig = readConfig(configContent.CUSTOMIZATION);
customConfigContent = JSON.parse(customConfig);
} catch (e) {
console.log(`failed to load customization config from ${configContent.CUSTOMIZATION}`);
}
}
const baseModuleName = configContent.BASE_MODULE || 'mempool';
const customBuildName = (customConfig && configContent.enterprise) ? ('.' + configContent.enterprise) : '';
const customBuildName = (customConfigContent && customConfigContent.enterprise) ? ('.' + customConfigContent.enterprise) : '';
const indexFilePath = 'src/index.' + baseModuleName + customBuildName + '.html';
try {

View file

@ -343,8 +343,8 @@
<a href="https://opencrypto.org/" title="Coppa - Crypto Open Patent Alliance">
<img class="copa" src="/resources/profile/copa.png" />
</a>
<a href="https://bisq.network/" title="Bisq Network">
<img class="bisq" src="/resources/profile/bisq.svg" />
<a href="https://bitcoin.gob.sv" title="Oficina Nacional del Bitcoin">
<img class="sv" src="/resources/profile/onbtc-full.svg" />
</a>
</div>
</div>

View file

@ -129,8 +129,9 @@
position: relative;
width: 300px;
}
.bisq {
top: 3px;
.sv {
height: 85px;
width: auto;
position: relative;
}
}

View file

@ -175,6 +175,9 @@ export class AddressComponent implements OnInit, OnDestroy {
});
this.transactions = this.tempTransactions;
if (this.transactions.length === this.txCount) {
this.fullyLoaded = true;
}
this.isLoadingTransactions = false;
if (!this.showBalancePeriod()) {

View file

@ -4,6 +4,8 @@ import { Router, NavigationEnd } from '@angular/router';
import { StateService } from '../../services/state.service';
import { OpenGraphService } from '../../services/opengraph.service';
import { NgbTooltipConfig } from '@ng-bootstrap/ng-bootstrap';
import { ThemeService } from '../../services/theme.service';
import { SeoService } from '../../services/seo.service';
@Component({
selector: 'app-root',
@ -12,12 +14,12 @@ import { NgbTooltipConfig } from '@ng-bootstrap/ng-bootstrap';
providers: [NgbTooltipConfig]
})
export class AppComponent implements OnInit {
link: HTMLElement = document.getElementById('canonical');
constructor(
public router: Router,
private stateService: StateService,
private openGraphService: OpenGraphService,
private seoService: SeoService,
private themeService: ThemeService,
private location: Location,
tooltipConfig: NgbTooltipConfig,
@Inject(LOCALE_ID) private locale: string,
@ -52,11 +54,7 @@ export class AppComponent implements OnInit {
ngOnInit() {
this.router.events.subscribe((val) => {
if (val instanceof NavigationEnd) {
let domain = 'mempool.space';
if (this.stateService.env.BASE_MODULE === 'liquid') {
domain = 'liquid.network';
}
this.link.setAttribute('href', 'https://' + domain + this.location.path());
this.seoService.updateCanonical(this.location.path());
}
});
}

View file

@ -57,8 +57,9 @@ export class BalanceWidgetComponent implements OnInit, OnChanges {
calculateStats(summary: AddressTxSummary[]): void {
let weekTotal = 0;
let monthTotal = 0;
const weekAgo = (Date.now() / 1000) - (60 * 60 * 24 * 7);
const monthAgo = (Date.now() / 1000) - (60 * 60 * 24 * 30);
const weekAgo = (new Date(new Date().setHours(0, 0, 0, 0) - (7 * 24 * 60 * 60 * 1000)).getTime()) / 1000;
const monthAgo = (new Date(new Date().setHours(0, 0, 0, 0) - (30 * 24 * 60 * 60 * 1000)).getTime()) / 1000;
for (let i = 0; i < summary.length && summary[i].time >= monthAgo; i++) {
monthTotal += summary[i].value;
if (summary[i].time >= weekAgo) {

View file

@ -0,0 +1,55 @@
<app-indexing-progress></app-indexing-progress>
<div class="full-container">
<div class="card-header mb-0 mb-md-4">
<div class="d-flex d-md-block align-items-baseline">
<span i18n="mining.block-fees-subsidy-subsidy">Block Fees Vs Subsidy</span>
<button class="btn p-0 pl-2" style="margin: 0 0 4px 0px" (click)="onSaveChart()">
<fa-icon [icon]="['fas', 'download']" [fixedWidth]="true"></fa-icon>
</button>
</div>
<form [formGroup]="radioGroupForm" class="formRadioGroup" *ngIf="(statsObservable$ | async) as stats">
<div class="btn-group btn-group-toggle" name="radioBasic" [class]="{'disabled': isLoading}">
<label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 144" [class.active]="radioGroupForm.get('dateSpan').value === '24h'">
<input type="radio" [value]="'24h'" fragment="24h" [routerLink]="['/graphs/mining/block-fees-subsidy' | relativeUrl]" formControlName="dateSpan"> 24h
</label>
<label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 432" [class.active]="radioGroupForm.get('dateSpan').value === '3d'">
<input type="radio" [value]="'3d'" fragment="3d" [routerLink]="['/graphs/mining/block-fees-subsidy' | relativeUrl]" formControlName="dateSpan"> 3D
</label>
<label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 1008" [class.active]="radioGroupForm.get('dateSpan').value === '1w'">
<input type="radio" [value]="'1w'" fragment="1w" [routerLink]="['/graphs/mining/block-fees-subsidy' | relativeUrl]" formControlName="dateSpan"> 1W
</label>
<label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 4320" [class.active]="radioGroupForm.get('dateSpan').value === '1m'">
<input type="radio" [value]="'1m'" fragment="1m" [routerLink]="['/graphs/mining/block-fees-subsidy' | relativeUrl]" formControlName="dateSpan"> 1M
</label>
<label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 12960" [class.active]="radioGroupForm.get('dateSpan').value === '3m'">
<input type="radio" [value]="'3m'" fragment="3m" [routerLink]="['/graphs/mining/block-fees-subsidy' | relativeUrl]" formControlName="dateSpan"> 3M
</label>
<label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 25920" [class.active]="radioGroupForm.get('dateSpan').value === '6m'">
<input type="radio" [value]="'6m'" fragment="6m" [routerLink]="['/graphs/mining/block-fees-subsidy' | relativeUrl]" formControlName="dateSpan"> 6M
</label>
<label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 52560" [class.active]="radioGroupForm.get('dateSpan').value === '1y'">
<input type="radio" [value]="'1y'" fragment="1y" [routerLink]="['/graphs/mining/block-fees-subsidy' | relativeUrl]" formControlName="dateSpan"> 1Y
</label>
<label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 105120" [class.active]="radioGroupForm.get('dateSpan').value === '2y'">
<input type="radio" [value]="'2y'" fragment="2y" [routerLink]="['/graphs/mining/block-fees-subsidy' | relativeUrl]" formControlName="dateSpan"> 2Y
</label>
<label class="btn btn-primary btn-sm" *ngIf="stats.blockCount >= 157680" [class.active]="radioGroupForm.get('dateSpan').value === '3y'">
<input type="radio" [value]="'3y'" fragment="3y" [routerLink]="['/graphs/mining/block-fees-subsidy' | relativeUrl]" formControlName="dateSpan"> 3Y
</label>
<label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === 'all'">
<input type="radio" [value]="'all'" fragment="all" [routerLink]="['/graphs/mining/block-fees-subsidy' | relativeUrl]" formControlName="dateSpan"> ALL
</label>
</div>
</form>
</div>
<div class="chart" *browserOnly echarts [initOpts]="chartInitOptions" [options]="chartOptions" [style]="{opacity: isLoading ? 0.5 : 1}"
(chartInit)="onChartInit($event)">
</div>
<div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading">
<div class="spinner-border text-light"></div>
</div>
</div>

View file

@ -0,0 +1,66 @@
.card-header {
border-bottom: 0;
font-size: 18px;
@media (min-width: 465px) {
font-size: 20px;
}
@media (min-width: 992px) {
height: 40px;
}
}
.main-title {
position: relative;
color: #ffffff91;
margin-top: -13px;
font-size: 10px;
text-transform: uppercase;
font-weight: 500;
text-align: center;
padding-bottom: 3px;
}
.full-container {
display: flex;
flex-direction: column;
padding: 0px 15px;
width: 100%;
height: calc(100vh - 225px);
min-height: 400px;
@media (min-width: 992px) {
height: calc(100vh - 150px);
}
}
.chart {
display: flex;
flex: 1;
width: 100%;
padding-bottom: 20px;
padding-right: 10px;
@media (max-width: 992px) {
padding-bottom: 25px;
}
@media (max-width: 829px) {
padding-bottom: 50px;
}
@media (max-width: 767px) {
padding-bottom: 25px;
}
@media (max-width: 629px) {
padding-bottom: 55px;
}
@media (max-width: 567px) {
padding-bottom: 55px;
}
}
.chart-widget {
width: 100%;
height: 100%;
max-height: 270px;
}
.disabled {
pointer-events: none;
opacity: 0.5;
}

View file

@ -0,0 +1,510 @@
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, Inject, Input, LOCALE_ID, NgZone, OnInit } from '@angular/core';
import { EChartsOption } from '../../graphs/echarts';
import { Observable } from 'rxjs';
import { catchError, map, share, startWith, switchMap, tap } from 'rxjs/operators';
import { ApiService } from '../../services/api.service';
import { SeoService } from '../../services/seo.service';
import { formatNumber } from '@angular/common';
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
import { download, formatterXAxis } from '../../shared/graphs.utils';
import { ActivatedRoute, Router } from '@angular/router';
import { FiatShortenerPipe } from '../../shared/pipes/fiat-shortener.pipe';
import { FiatCurrencyPipe } from '../../shared/pipes/fiat-currency.pipe';
import { StateService } from '../../services/state.service';
import { MiningService } from '../../services/mining.service';
import { StorageService } from '../../services/storage.service';
import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe';
@Component({
selector: 'app-block-fees-subsidy-graph',
templateUrl: './block-fees-subsidy-graph.component.html',
styleUrls: ['./block-fees-subsidy-graph.component.scss'],
styles: [`
.loadingGraphs {
position: absolute;
top: 50%;
left: calc(50% - 15px);
z-index: 100;
}
`],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class BlockFeesSubsidyGraphComponent implements OnInit {
@Input() right: number | string = 45;
@Input() left: number | string = 75;
miningWindowPreference: string;
radioGroupForm: UntypedFormGroup;
chartOptions: EChartsOption = {};
chartInitOptions = {
renderer: 'svg',
};
statsObservable$: Observable<any>;
data: any;
subsidies: { [key: number]: number } = {};
isLoading = true;
formatNumber = formatNumber;
timespan = '';
chartInstance: any = undefined;
showFiat = false;
updateZoom = false;
zoomSpan = 100;
zoomTimeSpan = '';
constructor(
@Inject(LOCALE_ID) public locale: string,
private seoService: SeoService,
private apiService: ApiService,
private formBuilder: UntypedFormBuilder,
public stateService: StateService,
private storageService: StorageService,
private miningService: MiningService,
private route: ActivatedRoute,
private router: Router,
private zone: NgZone,
private fiatShortenerPipe: FiatShortenerPipe,
private fiatCurrencyPipe: FiatCurrencyPipe,
private cd: ChangeDetectorRef,
) {
this.radioGroupForm = this.formBuilder.group({ dateSpan: '1y' });
this.radioGroupForm.controls.dateSpan.setValue('1y');
this.subsidies = this.initSubsidies();
}
ngOnInit(): void {
this.seoService.setTitle($localize`:@@mining.block-fees-subsidy:Block Fees Vs Subsidy`);
this.seoService.setDescription($localize`:@@meta.description.bitcoin.graphs.block-fees-subsidy:See the mining fees earned per Bitcoin block compared to the Bitcoin block subsidy, visualized in BTC and USD over time.`);
this.miningWindowPreference = this.miningService.getDefaultTimespan('24h');
this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference });
this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference);
this.route
.fragment
.subscribe((fragment) => {
if (['24h', '3d', '1w', '1m', '3m', '6m', '1y', '2y', '3y', 'all'].indexOf(fragment) > -1) {
this.radioGroupForm.controls.dateSpan.setValue(fragment, { emitEvent: false });
}
});
this.statsObservable$ = this.radioGroupForm.get('dateSpan').valueChanges
.pipe(
startWith(this.radioGroupForm.controls.dateSpan.value),
switchMap((timespan) => {
this.isLoading = true;
this.storageService.setValue('miningWindowPreference', timespan);
this.timespan = timespan;
this.zoomTimeSpan = timespan;
this.isLoading = true;
return this.apiService.getHistoricalBlockFees$(timespan)
.pipe(
tap((response) => {
this.data = {
timestamp: response.body.map(val => val.timestamp * 1000),
blockHeight: response.body.map(val => val.avgHeight),
blockFees: response.body.map(val => val.avgFees / 100_000_000),
blockFeesFiat: response.body.filter(val => val['USD'] > 0).map(val => val.avgFees / 100_000_000 * val['USD']),
blockSubsidy: response.body.map(val => this.subsidies[Math.floor(Math.min(val.avgHeight / 210000, 33))] / 100_000_000),
blockSubsidyFiat: response.body.filter(val => val['USD'] > 0).map(val => this.subsidies[Math.floor(Math.min(val.avgHeight / 210000, 33))] / 100_000_000 * val['USD']),
};
this.prepareChartOptions();
this.isLoading = false;
}),
map((response) => {
return {
blockCount: parseInt(response.headers.get('x-total-count'), 10),
};
}),
);
}),
share()
);
}
prepareChartOptions() {
let title: object;
if (this.data.blockFees.length === 0) {
title = {
textStyle: {
color: 'grey',
fontSize: 15
},
text: $localize`:@@23555386d8af1ff73f297e89dd4af3f4689fb9dd:Indexing blocks`,
left: 'center',
top: 'center'
};
}
this.chartOptions = {
title: title,
color: [
'#ff9f00',
'#0aab2f',
],
animation: false,
grid: {
top: 80,
bottom: 80,
right: this.right,
left: this.left,
},
tooltip: {
show: !this.isMobile(),
trigger: 'axis',
axisPointer: {
type: 'line'
},
backgroundColor: 'color-mix(in srgb, var(--active-bg) 95%, transparent)',
borderRadius: 4,
shadowColor: 'color-mix(in srgb, var(--active-bg) 95%, transparent)',
textStyle: {
color: 'var(--tooltip-grey)',
align: 'left',
},
borderColor: 'var(--active-bg)',
formatter: function (data) {
if (data.length <= 0) {
return '';
}
let tooltip = `<b style="color: white; margin-left: 2px">${formatterXAxis(this.locale, this.zoomTimeSpan, parseInt(this.data.timestamp[data[0].dataIndex], 10))}</b><br>`;
for (let i = data.length - 1; i >= 0; i--) {
const tick = data[i];
if (!this.showFiat) tooltip += `${tick.marker} ${tick.seriesName}: ${formatNumber(tick.data, this.locale, '1.0-3')} BTC<br>`;
else tooltip += `${tick.marker} ${tick.seriesName}: ${this.fiatCurrencyPipe.transform(tick.data, null, 'USD') }<br>`;
}
if (!this.showFiat) tooltip += `<div style="margin-left: 2px">${formatNumber(data.reduce((acc, val) => acc + val.data, 0), this.locale, '1.0-3')} BTC</div>`;
else tooltip += `<div style="margin-left: 2px">${this.fiatCurrencyPipe.transform(data.reduce((acc, val) => acc + val.data, 0), null, 'USD')}</div>`;
if (['24h', '3d'].includes(this.zoomTimeSpan)) {
tooltip += `<small>` + $localize`At block <b style="color: white; margin-left: 2px">${data[0].axisValue}` + `</small>`;
} else {
tooltip += `<small>` + $localize`Around block <b style="color: white; margin-left: 2px">${data[0].axisValue}` + `</small>`;
}
return tooltip;
}.bind(this)
},
xAxis: this.data.blockFees.length === 0 ? undefined : [
{
type: 'category',
data: this.data.blockHeight,
show: false,
axisLabel: {
hideOverlap: true,
}
},
{
type: 'category',
data: this.data.timestamp,
show: true,
position: 'bottom',
axisLabel: {
color: 'var(--grey)',
formatter: (val) => {
return formatterXAxis(this.locale, this.timespan, parseInt(val, 10));
}
},
axisTick: {
show: false,
},
axisLine: {
show: false,
},
splitLine: {
show: false,
},
}
],
legend: this.data.blockFees.length === 0 ? undefined : {
data: [
{
name: 'Subsidy',
inactiveColor: 'var(--grey)',
textStyle: {
color: 'white',
},
icon: 'roundRect',
},
{
name: 'Fees',
inactiveColor: 'var(--grey)',
textStyle: {
color: 'white',
},
icon: 'roundRect',
},
{
name: 'Subsidy (USD)',
inactiveColor: 'var(--grey)',
textStyle: {
color: 'white',
},
icon: 'roundRect',
},
{
name: 'Fees (USD)',
inactiveColor: 'var(--grey)',
textStyle: {
color: 'white',
},
icon: 'roundRect',
},
],
selected: {
'Subsidy (USD)': this.showFiat,
'Fees (USD)': this.showFiat,
'Subsidy': !this.showFiat,
'Fees': !this.showFiat,
},
},
yAxis: this.data.blockFees.length === 0 ? undefined : [
{
type: 'value',
axisLabel: {
color: 'var(--grey)',
formatter: (val) => {
return `${val} BTC`;
}
},
min: 0,
splitLine: {
lineStyle: {
type: 'dotted',
color: 'var(--transparent-fg)',
opacity: 0.25,
}
},
},
{
type: 'value',
position: 'right',
axisLabel: {
color: 'var(--grey)',
formatter: function(val) {
return this.fiatShortenerPipe.transform(val, null, 'USD');
}.bind(this)
},
splitLine: {
show: false,
},
},
],
series: this.data.blockFees.length === 0 ? undefined : [
{
name: 'Subsidy',
yAxisIndex: 0,
type: 'bar',
stack: 'total',
data: this.data.blockSubsidy,
},
{
name: 'Fees',
yAxisIndex: 0,
type: 'bar',
stack: 'total',
data: this.data.blockFees,
},
{
name: 'Subsidy (USD)',
yAxisIndex: 1,
type: 'bar',
stack: 'total',
data: this.data.blockSubsidyFiat,
},
{
name: 'Fees (USD)',
yAxisIndex: 1,
type: 'bar',
stack: 'total',
data: this.data.blockFeesFiat,
},
],
dataZoom: this.data.blockFees.length === 0 ? undefined : [{
type: 'inside',
realtime: true,
zoomLock: true,
maxSpan: 100,
minSpan: 1,
moveOnMouseMove: false,
}, {
showDetail: false,
show: true,
type: 'slider',
brushSelect: false,
realtime: true,
left: 20,
right: 15,
selectedDataBackground: {
lineStyle: {
color: '#fff',
opacity: 0.45,
},
},
}],
};
}
onChartInit(ec) {
this.chartInstance = ec;
this.chartInstance.on('legendselectchanged', (params) => {
const isFiat = params.name.includes('USD');
if (isFiat === this.showFiat) return;
const isActivation = params.selected[params.name];
if (isFiat === isActivation) {
this.showFiat = true;
this.chartInstance.dispatchAction({ type: 'legendUnSelect', name: 'Subsidy' });
this.chartInstance.dispatchAction({ type: 'legendUnSelect', name: 'Fees' });
this.chartInstance.dispatchAction({ type: 'legendSelect', name: 'Subsidy (USD)' });
this.chartInstance.dispatchAction({ type: 'legendSelect', name: 'Fees (USD)' });
} else {
this.showFiat = false;
this.chartInstance.dispatchAction({ type: 'legendSelect', name: 'Subsidy' });
this.chartInstance.dispatchAction({ type: 'legendSelect', name: 'Fees' });
this.chartInstance.dispatchAction({ type: 'legendUnSelect', name: 'Subsidy (USD)' });
this.chartInstance.dispatchAction({ type: 'legendUnSelect', name: 'Fees (USD)' });
}
});
this.chartInstance.on('datazoom', (params) => {
if (params.silent || this.isLoading || ['24h', '3d'].includes(this.timespan)) {
return;
}
this.updateZoom = true;
});
this.chartInstance.on('click', (e) => {
this.zone.run(() => {
if (['24h', '3d'].includes(this.zoomTimeSpan)) {
const url = new RelativeUrlPipe(this.stateService).transform(`/block/${e.name}`);
if (e.event.event.shiftKey || e.event.event.ctrlKey || e.event.event.metaKey) {
window.open(url);
} else {
this.router.navigate([url]);
}
}
});
});
}
@HostListener('document:pointerup', ['$event'])
onPointerUp(event: PointerEvent) {
if (this.updateZoom) {
this.onZoom();
this.updateZoom = false;
}
}
isMobile() {
return (window.innerWidth <= 767.98);
}
initSubsidies(): { [key: number]: number } {
let blockReward = 50 * 100_000_000;
const subsidies = {};
for (let i = 0; i <= 33; i++) {
subsidies[i] = blockReward;
blockReward = Math.floor(blockReward / 2);
}
return subsidies;
}
onZoom() {
const option = this.chartInstance.getOption();
const timestamps = option.xAxis[1].data;
const startTimestamp = timestamps[option.dataZoom[0].startValue];
const endTimestamp = timestamps[option.dataZoom[0].endValue];
this.isLoading = true;
this.cd.detectChanges();
const subscription = this.apiService.getBlockFeesFromTimespan$(Math.floor(startTimestamp / 1000), Math.floor(endTimestamp / 1000))
.pipe(
tap((response) => {
const startIndex = option.dataZoom[0].startValue;
const endIndex = option.dataZoom[0].endValue;
// Update series with more granular data
const lengthBefore = this.data.timestamp.length;
this.data.timestamp.splice(startIndex, endIndex - startIndex, ...response.body.map(val => val.timestamp * 1000));
this.data.blockHeight.splice(startIndex, endIndex - startIndex, ...response.body.map(val => val.avgHeight));
this.data.blockFees.splice(startIndex, endIndex - startIndex, ...response.body.map(val => val.avgFees / 100_000_000));
this.data.blockFeesFiat.splice(startIndex, endIndex - startIndex, ...response.body.filter(val => val['USD'] > 0).map(val => val.avgFees / 100_000_000 * val['USD']));
this.data.blockSubsidy.splice(startIndex, endIndex - startIndex, ...response.body.map(val => this.subsidies[Math.floor(Math.min(val.avgHeight / 210000, 33))] / 100_000_000));
this.data.blockSubsidyFiat.splice(startIndex, endIndex - startIndex, ...response.body.filter(val => val['USD'] > 0).map(val => this.subsidies[Math.floor(Math.min(val.avgHeight / 210000, 33))] / 100_000_000 * val['USD']));
option.series[0].data = this.data.blockSubsidy;
option.series[1].data = this.data.blockFees;
option.series[2].data = this.data.blockSubsidyFiat;
option.series[3].data = this.data.blockFeesFiat;
option.xAxis[0].data = this.data.blockHeight;
option.xAxis[1].data = this.data.timestamp;
this.chartInstance.setOption(option, true);
const lengthAfter = this.data.timestamp.length;
// Update the zoom to keep the same range after the update
this.chartInstance.dispatchAction({
type: 'dataZoom',
startValue: startIndex,
endValue: endIndex + lengthAfter - lengthBefore,
silent: true,
});
// Update the chart
const newOption = this.chartInstance.getOption();
this.zoomSpan = newOption.dataZoom[0].end - newOption.dataZoom[0].start;
this.zoomTimeSpan = this.getTimeRangeFromTimespan(Math.floor(this.data.timestamp[newOption.dataZoom[0].startValue] / 1000), Math.floor(this.data.timestamp[newOption.dataZoom[0].endValue] / 1000));
this.isLoading = false;
}),
catchError(() => {
const newOption = this.chartInstance.getOption();
this.zoomSpan = newOption.dataZoom[0].end - newOption.dataZoom[0].start;
this.zoomTimeSpan = this.getTimeRangeFromTimespan(Math.floor(this.data.timestamp[newOption.dataZoom[0].startValue] / 1000), Math.floor(this.data.timestamp[newOption.dataZoom[0].endValue] / 1000));
this.isLoading = false;
this.cd.detectChanges();
return [];
})
).subscribe(() => {
subscription.unsubscribe();
this.cd.detectChanges();
});
}
getTimeRangeFromTimespan(from: number, to: number): string {
const timespan = to - from;
switch (true) {
case timespan >= 3600 * 24 * 365 * 4: return 'all';
case timespan >= 3600 * 24 * 365 * 3: return '4y';
case timespan >= 3600 * 24 * 365 * 2: return '3y';
case timespan >= 3600 * 24 * 365: return '2y';
case timespan >= 3600 * 24 * 30 * 6: return '1y';
case timespan >= 3600 * 24 * 30 * 3: return '6m';
case timespan >= 3600 * 24 * 30: return '3m';
case timespan >= 3600 * 24 * 7: return '1m';
case timespan >= 3600 * 24 * 3: return '1w';
case timespan >= 3600 * 24: return '3d';
default: return '24h';
}
}
onSaveChart() {
// @ts-ignore
const prevBottom = this.chartOptions.grid.bottom;
const now = new Date();
// @ts-ignore
this.chartOptions.grid.bottom = 40;
this.chartOptions.backgroundColor = 'var(--active-bg)';
this.chartInstance.setOption(this.chartOptions);
download(this.chartInstance.getDataURL({
pixelRatio: 2,
excludeComponents: ['dataZoom'],
}), `block-fees-subsidy-${this.timespan}-${Math.round(now.getTime() / 1000)}.svg`);
// @ts-ignore
this.chartOptions.grid.bottom = prevBottom;
this.chartOptions.backgroundColor = 'none';
this.chartInstance.setOption(this.chartOptions);
}
}

View file

@ -136,7 +136,12 @@ export class BlockPreviewComponent implements OnInit, OnDestroy {
return of(transactions);
})
),
this.stateService.env.ACCELERATOR === true && block.height > 819500 ? this.servicesApiService.getAccelerationHistory$({ blockHeight: block.height }) : of([])
this.stateService.env.ACCELERATOR === true && block.height > 819500
? this.servicesApiService.getAccelerationHistory$({ blockHeight: block.height })
.pipe(catchError(() => {
return of([]);
}))
: of([])
]);
}
),

View file

@ -345,7 +345,12 @@ export class BlockComponent implements OnInit, OnDestroy {
return of(null);
})
),
this.stateService.env.ACCELERATOR === true && block.height > 819500 ? this.servicesApiService.getAccelerationHistory$({ blockHeight: block.height }) : of([])
this.stateService.env.ACCELERATOR === true && block.height > 819500
? this.servicesApiService.getAccelerationHistory$({ blockHeight: block.height })
.pipe(catchError(() => {
return of([]);
}))
: of([])
]);
})
)

View file

@ -1,9 +1,9 @@
<div *ngIf="stateService.env.MINING_DASHBOARD || stateService.env.LIGHTNING" class="mb-3 d-flex menu">
<div *ngIf="stateService.env.MINING_DASHBOARD || stateService.env.LIGHTNING || stateService.env.ACCELERATOR" class="mb-3 d-flex menu" [style]="{'flex-wrap': flexWrap ? 'wrap' : ''}">
<a routerLinkActive="active" class="btn btn-primary" [class]="padding"
<a routerLinkActive="active" class="btn btn-primary w-33"
[routerLink]="['/graphs/mempool' | relativeUrl]">Mempool</a>
<div ngbDropdown [class]="padding" *ngIf="stateService.env.MINING_DASHBOARD">
<div ngbDropdown class="w-33" *ngIf="stateService.env.MINING_DASHBOARD">
<button class="btn btn-primary w-100" id="dropdownBasic1" ngbDropdownToggle i18n="mining">Mining</button>
<div ngbDropdownMenu aria-labelledby="dropdownBasic1">
<a class="dropdown-item" routerLinkActive="active" [routerLink]="['/graphs/mining/pools' | relativeUrl]"
@ -17,6 +17,8 @@
i18n="mining.block-fee-rates">Block Fee Rates</a>
<a class="dropdown-item" routerLinkActive="active" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]"
i18n="mining.block-fees">Block Fees</a>
<a class="dropdown-item" routerLinkActive="active" [routerLink]="['/graphs/mining/block-fees-subsidy' | relativeUrl]"
i18n="mining.block-fees">Block Fees Vs Subsidy</a>
<a class="dropdown-item" routerLinkActive="active" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"
i18n="mining.block-rewards">Block Rewards</a>
<a class="dropdown-item" routerLinkActive="active"
@ -26,7 +28,7 @@
</div>
</div>
<div ngbDropdown [class]="padding" *ngIf="stateService.env.LIGHTNING">
<div ngbDropdown class="w-33" *ngIf="stateService.env.LIGHTNING">
<button class="btn btn-primary w-100" id="dropdownBasic1" ngbDropdownToggle i18n="lightning">Lightning</button>
<div ngbDropdownMenu aria-labelledby="dropdownBasic1">
<a class="dropdown-item" routerLinkActive="active" [routerLink]="['/graphs/lightning/nodes-networks' | relativeUrl]"
@ -43,6 +45,14 @@
i18n="lightning.nodes-channels-world-map">Lightning Nodes Channels World Map</a>
</div>
</div>
<div ngbDropdown class="w-33" *ngIf="stateService.env.ACCELERATOR">
<button class="btn btn-primary w-100" id="dropdownBasic1" ngbDropdownToggle i18n="accelerator.accelerations">Accelerations</button>
<div ngbDropdownMenu aria-labelledby="dropdownBasic1">
<a class="dropdown-item" routerLinkActive="active" [routerLink]="['/graphs/acceleration/fees' | relativeUrl]"
i18n="accelerator.acceleration-fees">Acceleration Fees</a>
</div>
</div>
</div>
<router-outlet></router-outlet>

View file

@ -2,7 +2,7 @@
flex-grow: 1;
padding: 0 35px;
@media (min-width: 576px) {
max-width: 400px;
max-width: 600px;
}
& > * {
@ -11,5 +11,6 @@
&.last-child {
margin-inline-end: 0;
}
margin-bottom: 5px;
}
}

View file

@ -8,7 +8,7 @@ import { WebsocketService } from '../../services/websocket.service';
styleUrls: ['./graphs.component.scss'],
})
export class GraphsComponent implements OnInit {
padding = 'w-50';
flexWrap = false;
constructor(
public stateService: StateService,
@ -18,8 +18,8 @@ export class GraphsComponent implements OnInit {
ngOnInit(): void {
this.websocketService.want(['blocks']);
if (this.stateService.env.MINING_DASHBOARD === true && this.stateService.env.LIGHTNING === true) {
this.padding = 'w-33';
if (this.stateService.env.ACCELERATOR === true && (this.stateService.env.MINING_DASHBOARD === true || this.stateService.env.LIGHTNING === true)) {
this.flexWrap = true;
}
}
}

View file

@ -53,7 +53,7 @@
}
}
.formRadioGroup.mining {
@media (min-width: 1035px) {
@media (min-width: 1200px) {
position: relative;
top: -100px;
}

View file

@ -11,7 +11,7 @@
<div class="text-left">
<p *ngIf="officialMempoolSpace">The <a href="https://mempool.space/">mempool.space</a> website, the <a href="https://liquid.network/">liquid.network</a> website, their associated API services, and related network and server infrastructure (collectively, the "Website") are operated by Mempool Space K.K. in Japan ("Mempool", "We", or "Us") and self-hosted from <a href="https://bgp.tools/as/142052#connectivity">AS142052</a>.</p>
<p *ngIf="officialMempoolSpace">The <a href="https://mempool.space/">mempool.space</a> website, the <a href="https://liquid.network/">liquid.network</a> website, the <a href="https://bitcoin.gob.sv/">bitcoin.gob.sv</a> website, their associated API services, and related network and server infrastructure (collectively, the "Website") are operated by Mempool Space K.K. in Japan ("Mempool", "We", or "Us") and self-hosted from <a href="https://bgp.tools/as/142052#connectivity">AS142052</a>.</p>
<p *ngIf="!officialMempoolSpace">This website and its API service (collectively, the "Website") are operated by a member of the Bitcoin community ("We" or "Us"). Mempool Space K.K. in Japan ("Mempool") has no affiliation with the operator of this Website, and does not sponsor or endorse the information provided herein.</p>

View file

@ -1,4 +1,4 @@
import { Component, Input, ChangeDetectionStrategy, SecurityContext } from '@angular/core';
import { Component, Input, ChangeDetectionStrategy, SecurityContext, SimpleChanges, OnChanges } from '@angular/core';
import { LanguageService } from '../../services/language.service';
import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
@ -8,7 +8,7 @@ import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
styleUrls: ['./twitter-widget.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class TwitterWidgetComponent {
export class TwitterWidgetComponent implements OnChanges {
@Input() handle: string;
@Input() width = 300;
@Input() height = 400;
@ -27,12 +27,19 @@ export class TwitterWidgetComponent {
this.setIframeSrc();
}
ngOnChanges(changes: SimpleChanges): void {
if (changes.handle) {
this.setIframeSrc();
}
}
setIframeSrc(): void {
if (this.handle) {
this.iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(this.sanitizer.sanitize(SecurityContext.URL,
'https://syndication.twitter.com/srv/timeline-profile/screen-name/bitcoinofficesv?creatorScreenName=mempool'
`https://syndication.twitter.com/srv/timeline-profile/screen-name/${this.handle}?creatorScreenName=mempool`
+ '&dnt=true'
+ '&embedId=twitter-widget-0'
+ '&features=eyJ0ZndfdGltZWxpbmVfbGlzdCI6eyJidWNrZXQiOltdLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X2ZvbGxvd2VyX2NvdW50X3N1bnNldCI6eyJidWNrZXQiOnRydWUsInZlcnNpb24iOm51bGx9LCJ0ZndfdHdlZXRfZWRpdF9iYWNrZW5kIjp7ImJ1Y2tldCI6Im9uIiwidmVyc2lvbiI6bnVsbH0sInRmd19yZWZzcmNfc2Vzc2lvbiI6eyJidWNrZXQiOiJvbiIsInZlcnNpb24iOm51bGx9LCJ0ZndfZm9zbnJfc29mdF9pbnRlcnZlbnRpb25zX2VuYWJsZWQiOnsiYnVja2V0Ijoib24iLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X21peGVkX21lZGlhXzE1ODk3Ijp7ImJ1Y2tldCI6InRyZWF0bWVudCIsInZlcnNpb24iOm51bGx9LCJ0ZndfZXhwZXJpbWVudHNfY29va2llX2V4cGlyYXRpb24iOnsiYnVja2V0IjoxMjA5NjAwLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X3Nob3dfYmlyZHdhdGNoX3Bpdm90c19lbmFibGVkIjp7ImJ1Y2tldCI6Im9uIiwidmVyc2lvbiI6bnVsbH0sInRmd19kdXBsaWNhdGVfc2NyaWJlc190b19zZXR0aW5ncyI6eyJidWNrZXQiOiJvbiIsInZlcnNpb24iOm51bGx9LCJ0ZndfdXNlX3Byb2ZpbGVfaW1hZ2Vfc2hhcGVfZW5hYmxlZCI6eyJidWNrZXQiOiJvbiIsInZlcnNpb24iOm51bGx9LCJ0ZndfdmlkZW9faGxzX2R5bmFtaWNfbWFuaWZlc3RzXzE1MDgyIjp7ImJ1Y2tldCI6InRydWVfYml0cmF0ZSIsInZlcnNpb24iOm51bGx9LCJ0ZndfbGVnYWN5X3RpbWVsaW5lX3N1bnNldCI6eyJidWNrZXQiOnRydWUsInZlcnNpb24iOm51bGx9LCJ0ZndfdHdlZXRfZWRpdF9mcm9udGVuZCI6eyJidWNrZXQiOiJvbiIsInZlcnNpb24iOm51bGx9fQ%3D%3D'
+ '&features=eyJ0ZndfdGltZWxpbmVfgbGlzdCI6eyJidWNrZXQiOltdLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X2ZvbGxvd2VyX2NvdW50X3N1bnNldCI6eyJidWNrZXQiOnRydWUsInZlcnNpb24iOm51bGx9LCJ0ZndfdHdlZXRfZWRpdF9iYWNrZW5kIjp7ImJ1Y2tldCI6Im9uIiwidmVyc2lvbiI6bnVsbH0sInRmd19yZWZzcmNfc2Vzc2lvbiI6eyJidWNrZXQiOiJvbiIsInZlcnNpb24iOm51bGx9LCJ0ZndfZm9zbnJfc29mdF9pbnRlcnZlbnRpb25zX2VuYWJsZWQiOnsiYnVja2V0Ijoib24iLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X21peGVkX21lZGlhXzE1ODk3Ijp7ImJ1Y2tldCI6InRyZWF0bWVudCIsInZlcnNpb24iOm51bGx9LCJ0ZndfZXhwZXJpbWVudHNfY29va2llX2V4cGlyYXRpb24iOnsiYnVja2V0IjoxMjA5NjAwLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X3Nob3dfYmlyZHdhdGNoX3Bpdm90c19lbmFibGVkIjp7ImJ1Y2tldCI6Im9uIiwidmVyc2lvbiI6bnVsbH0sInRmd19kdXBsaWNhdGVfc2NyaWJlc190b19zZXR0aW5ncyI6eyJidWNrZXQiOiJvbiIsInZlcnNpb24iOm51bGx9LCJ0ZndfdXNlX3Byb2ZpbGVfaW1hZ2Vfc2hhcGVfZW5hYmxlZCI6eyJidWNrZXQiOiJvbiIsInZlcnNpb24iOm51bGx9LCJ0ZndfdmlkZW9faGxzX2R5bmFtaWNfbWFuaWZlc3RzXzE1MDgyIjp7ImJ1Y2tldCI6InRydWVfYml0cmF0ZSIsInZlcnNpb24iOm51bGx9LCJ0ZndfbGVnYWN5X3RpbWVsaW5lX3N1bnNldCI6eyJidWNrZXQiOnRydWUsInZlcnNpb24iOm51bGx9LCJ0ZndfdHdlZXRfZWRpdF9mcm9udGVuZCI6eyJidWNrZXQiOiJvbiIsInZlcnNpb24iOm51bGx9fQ%3D%3D'
+ '&frame=false'
+ '&hideBorder=true'
+ '&hideFooter=false'
@ -50,15 +57,14 @@ export class TwitterWidgetComponent {
+ '&widgetsVersion=2615f7e52b7e0%3A1702314776716'
));
}
}
onReady(): void {
console.log('ready!');
this.loading = false;
this.error = false;
}
onFailed(): void {
console.log('failed!')
this.loading = false;
this.error = true;
}

View file

@ -5,6 +5,7 @@ import { SharedModule } from '../shared/shared.module';
import { AccelerationFeesGraphComponent } from '../components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component';
import { BlockFeesGraphComponent } from '../components/block-fees-graph/block-fees-graph.component';
import { BlockFeesSubsidyGraphComponent } from '../components/block-fees-subsidy-graph/block-fees-subsidy-graph.component';
import { BlockRewardsGraphComponent } from '../components/block-rewards-graph/block-rewards-graph.component';
import { BlockFeeRatesGraphComponent } from '../components/block-fee-rates-graph/block-fee-rates-graph.component';
import { BlockSizesWeightsGraphComponent } from '../components/block-sizes-weights-graph/block-sizes-weights-graph.component';
@ -54,6 +55,7 @@ import { CommonModule } from '@angular/common';
GraphsComponent,
AccelerationFeesGraphComponent,
BlockFeesGraphComponent,
BlockFeesSubsidyGraphComponent,
BlockRewardsGraphComponent,
BlockFeeRatesGraphComponent,
BlockSizesWeightsGraphComponent,

View file

@ -3,6 +3,7 @@ import { RouterModule, Routes } from '@angular/router';
import { BlockHealthGraphComponent } from '../components/block-health-graph/block-health-graph.component';
import { BlockFeeRatesGraphComponent } from '../components/block-fee-rates-graph/block-fee-rates-graph.component';
import { BlockFeesGraphComponent } from '../components/block-fees-graph/block-fees-graph.component';
import { BlockFeesSubsidyGraphComponent } from '../components/block-fees-subsidy-graph/block-fees-subsidy-graph.component';
import { BlockRewardsGraphComponent } from '../components/block-rewards-graph/block-rewards-graph.component';
import { BlockSizesWeightsGraphComponent } from '../components/block-sizes-weights-graph/block-sizes-weights-graph.component';
import { GraphsComponent } from '../components/graphs/graphs.component';
@ -113,6 +114,11 @@ const routes: Routes = [
data: { networks: ['bitcoin'] },
component: BlockFeesGraphComponent,
},
{
path: 'mining/block-fees-subsidy',
data: { networks: ['bitcoin'] },
component: BlockFeesSubsidyGraphComponent,
},
{
path: 'mining/block-rewards',
data: { networks: ['bitcoin'] },

View file

@ -333,6 +333,12 @@ export class ApiService {
);
}
getBlockFeesFromTimespan$(from: number, to: number): Observable<any> {
return this.httpClient.get<any[]>(
this.apiBaseUrl + this.apiBasePath + `/api/v1/mining/blocks/fees?from=${from}&to=${to}`, { observe: 'response' }
);
}
getHistoricalBlockRewards$(interval: string | undefined) : Observable<any> {
return this.httpClient.get<any[]>(
this.apiBaseUrl + this.apiBasePath + `/api/v1/mining/blocks/rewards` +

View file

@ -11,8 +11,9 @@ export class SeoService {
network = '';
baseTitle = 'mempool';
baseDescription = 'Explore the full Bitcoin ecosystem&reg; with The Mempool Open Source Project&reg;.';
baseDomain = 'mempool.space';
canonicalLink: HTMLElement = document.getElementById('canonical');
canonicalLink: HTMLLinkElement = document.getElementById('canonical') as HTMLLinkElement;
constructor(
private titleService: Title,
@ -21,6 +22,16 @@ export class SeoService {
private router: Router,
private activatedRoute: ActivatedRoute,
) {
// save original meta tags
this.baseDescription = metaService.getTag('name=\'description\'')?.content || this.baseDescription;
this.baseTitle = titleService.getTitle()?.split(' - ')?.[0] || this.baseTitle;
try {
const canonicalUrl = new URL(this.canonicalLink?.href || '');
this.baseDomain = canonicalUrl?.host;
} catch (e) {
// leave as default
}
this.stateService.networkChanged$.subscribe((network) => this.network = network);
this.router.events.pipe(
filter(event => event instanceof NavigationEnd),
@ -72,11 +83,7 @@ export class SeoService {
}
updateCanonical(path) {
let domain = 'mempool.space';
if (this.stateService.env.BASE_MODULE === 'liquid') {
domain = 'liquid.network';
}
this.canonicalLink.setAttribute('href', 'https://' + domain + path);
this.canonicalLink.setAttribute('href', 'https://' + this.baseDomain + path);
}
getTitle(): string {
@ -94,10 +101,7 @@ export class SeoService {
}
getDescription(): string {
if ( (this.network === 'testnet') || (this.network === 'testnet4') || (this.network === 'signet') || (this.network === '') || (this.network == 'mainnet') )
return this.baseDescription + ' See the real-time status of your transactions, browse network stats, and more.';
if ( (this.network === 'liquid') || (this.network === 'liquidtestnet') )
return this.baseDescription + ' See Liquid transactions & assets, get network info, and more.';
return this.baseDescription;
}
ucfirst(str: string) {

View file

@ -102,7 +102,7 @@
<div class="row social-links">
<div class="col-sm-12">
<a href="https://github.com/mempool" target="_blank"><svg fill="#fff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a>
<a href="https://twitter.com/mempool" target="_blank"><svg fill="#fff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Twitter</title><path d="M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z"/></svg></a>
<a href="https://twitter.com/mempool" target="_blank"><svg width="20" height="20" style="width: 17px" viewBox="0 0 1200 1227" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M714.163 519.284L1160.89 0H1055.03L667.137 450.887L357.328 0H0L468.492 681.821L0 1226.37H105.866L515.491 750.218L842.672 1226.37H1200L714.137 519.284H714.163ZM569.165 687.828L521.697 619.934L144.011 79.6944H306.615L611.412 515.685L658.88 583.579L1055.08 1150.3H892.476L569.165 687.854V687.828Z" fill="white"/></svg></a>
<a href="nostr:npub18d4r6wanxkyrdfjdrjqzj2ukua5cas669ew2g5w7lf4a8te7awzqey6lt3" target="_blank"><svg fill="#fff" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 875 875"><path d="M684.72 485.57c.22 12.59-11.93 51.47-38.67 81.3-26.74 29.83-56.02 20.85-58.42 20.16s-3.09-4.46-7.89-3.77-9.6 6.17-18.86 7.2-17.49 1.71-26.06-1.37c-4.46.69-5.14.71-7.2 2.24s-17.83 10.79-21.6 11.47c0 7.2-1.37 44.57 0 55.89s3.77 25.71 7.54 36 2.74 10.63 7.54 9.94 13.37.34 15.77 4.11c2.4 3.77 1.37 6.51 5.49 8.23s60.69 17.14 99.43 19.2c26.74.69 42.86 2.74 52.12 19.54 1.37 7.89 7.54 13.03 11.31 14.06s8.23 2.06 12 5.83 1.03 8.23 5.49 11.66c4.46 3.43 14.74 8.57 25.37 13.71 10.63 5.14 15.09 13.37 15.77 16.11s1.71 10.97 1.71 10.97-8.91 0-10.97-2.06-2.74-5.83-2.74-5.83-6.17 1.03-7.54 3.43.69 2.74-7.89.69-11.66-3.77-18.17-8.57c-6.51-4.8-16.46-17.14-25.03-16.8 4.11 8.23 5.83 8.23 10.63 10.97s8.23 5.83 8.23 5.83l-7.2 4.46s-4.46 2.06-14.74-.69-11.66-4.46-12.69-10.63 0-9.26-2.74-14.4-4.11-15.77-22.29-21.26c-18.17-5.49-66.52-21.26-100.12-24.69s-22.63-2.74-28.11-1.37-15.77 4.46-26.4-1.37c-10.63-5.83-16.8-13.71-17.49-20.23s-1.71-10.97 0-19.2 3.43-19.89 1.71-26.74-14.06-55.89-19.89-64.12c-13.03 1.03-50.74-.69-50.74-.69s-2.4-.69-17.49 5.83-36.48 13.76-46.77 19.93-14.4 9.7-16.12 13.13c.12 3-1.23 7.72-2.79 9.06s-12.48 2.42-12.48 2.42-5.85 5.86-8.25 9.97c-6.86 9.6-55.2 125.14-66.52 149.83-13.54 32.57-9.77 27.43-37.71 27.43s-8.06.3-8.06.3-12.34 5.88-16.8 5.88-18.86-2.4-26.4 0-16.46 9.26-23.31 10.29-4.95-1.34-8.38-3.74c-4-.21-14.27-.12-14.27-.12s1.74-6.51 7.91-10.88c8.23-5.83 25.37-16.11 34.63-21.26s17.49-7.89 23.31-9.26 18.51-6.17 30.51-9.94 19.54-8.23 29.83-31.54 50.4-111.43 51.43-116.23c.63-2.96 3.73-6.48 4.8-15.09.66-5.35-2.49-13.04 1.71-22.63 10.97-25.03 21.6-20.23 26.4-20.23s17.14.34 26.4-1.37 15.43-2.74 24.69-7.89 11.31-8.91 11.31-8.91l-19.89-3.43s-18.51.69-25.03-4.46-15.43-15.77-15.43-15.77l-7.54-7.2 1.03 8.57s-5.14-8.91-6.51-10.29-8.57-6.51-11.31-11.31-7.54-25.03-7.54-25.03l-6.17 13.03-1.71-18.86-5.14 7.2-2.74-16.11-4.8 8.23-3.43-14.4-5.83 4.46-2.4-10.29-5.83-3.43s-14.06-9.26-16.46-9.6-4.46 3.43-4.46 3.43l1.37 12-12.2-6.27-7-11.9s2.36 4.01-9.62 7.53c-20.55 0-21.89-2.28-24.93-3.94-1.31-6.56-5.57-10.11-5.57-10.11h-20.57l-.34-6.86-7.89 3.09.69-10.29h-14.06l1.03-11.31h-8.91s3.09-9.26 25.71-22.97 25.03-16.46 46.29-17.14c21.26-.69 32.91 2.74 46.29 8.23s38.74 13.71 43.89 17.49c11.31-9.94 28.46-19.89 34.29-19.89 1.03-2.4 6.19-12.33 17.96-17.6 35.31-15.81 108.13-34 131.53-35.54 31.2-2.06 7.89-1.37 39.09 2.06 31.2 3.43 54.17 7.54 69.6 12.69 12.58 4.19 25.03 9.6 34.29 2.06 4.33-1.81 11.81-1.34 17.83-5.14 30.69-25.09 34.72-32.35 43.63-41.95s20.14-24.91 22.54-45.14 4.46-58.29-10.63-88.12-28.8-45.26-34.63-69.26c-5.83-24-8.23-61.03-6.17-73.03 2.06-12 5.14-22.29 6.86-30.51s9.94-14.74 19.89-16.46c9.94-1.71 17.83 1.37 22.29 4.8 4.46 3.43 11.65 6.28 13.37 10.29.34 1.71-1.37 6.51 8.23 8.23 9.6 1.71 16.05 4.16 16.05 4.16s15.64 4.29 3.11 7.73c-12.69 2.06-20.52-.71-24.29 1.69s-7.21 10.08-9.61 11.1-7.2.34-12 4.11-9.6 6.86-12.69 14.4-5.49 15.77-3.43 26.74 8.57 31.54 14.4 43.2c5.83 11.66 20.23 40.8 24.34 47.66s15.77 29.49 16.8 53.83 1.03 44.23 0 54.86-10.84 51.65-35.53 85.94c-8.16 14.14-23.21 31.9-24.67 35.03-1.45 3.13-3.02 4.88-1.61 7.65 4.62 9.05 12.87 22.13 14.71 29.22 2.29 6.64 6.99 16.13 7.22 28.72Z" style="stroke:#000;stroke-miterlimit:10;stroke-width:6px"/></svg></a>
<a href="https://primal.net/mempool" target="_blank"><svg fill="#fff" role="img" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg" ><path d="m155.5 253c-8.9 2-18.1 3-27.5 3-25.9 0-50-7.7-70.2-20.9-5-7.2-7.2-11.1-8.9-14-0.8-1.4-1.5-2.6-2.2-3.8-7.7-12.2-11.7-28-12.5-46.6-2.7-57.4 32.2-94 67.8-100.1 22.6-3.8 40.6 0.1 54.3 7.5-12.1-3.4-26.6-3.6-43.2 1.1-40.1 12.9-53.5 52.3-47.8 95.8 10 54.6 63.5 74.1 90.2 78zm-114.3-30.9c-7.4-13.2-14.2-33-15-51-2.9-60.9 34.4-101.6 74.5-108.3 54.7-9.3 85.1 23.1 95.6 47.1 0.4-0.3 0.6-0.9 0.3-1.4-17.2-37.4-52.8-63.2-94-63.2-46.8 0-88.5 33.6-102.6 83.4 0.2 36.9 16 70.2 41.2 93.4zm158.8 11.7c-9.2 6.3-19.3 11.5-30.1 15.2-5.1-0.9-10.9-2-14.9-2.8-1.9-0.4-3.4-0.7-4.3-0.9-24.4-4.4-67.9-20.1-77.5-71.6-2.6-20.6-0.7-39.7 6.1-54.8 6.7-14.9 18.4-26.3 36.1-32 20.6-5.6 37.7-2.9 50.3 3.9q-4.7-0.9-9.6-1c-27.4 0-49.7 23.9-49.7 53.3 0 11.7 3.6 22.5 9.6 31.3 0 0 17.2 32.5 64 29.6 41.7-2.6 63.4-40 66-53.8 1.3-7.2 2-14.6 2-22.2 0-66.3-53.7-120-120-120-50.1 0-93.1 30.8-111.1 74.4-6 7.9-11.2 16.7-15.4 26.2 9.3-61.5 62.4-108.6 126.5-108.6 70.7 0 128 57.3 128 128 0 44-22.2 82.8-56 105.8z" style="fill:#ffffff"/></svg></a>
<a href="https://youtube.com/@mempool" target="_blank"><svg fill="#fff" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>YouTube</title><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg></a>

View file

@ -0,0 +1,318 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="uuid-fa5acd80-1d5b-4de6-8d9e-e6db406e0d61" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" width="214.18" height="127.54" viewBox="0 0 214.18 127.54">
<g id="uuid-5ffb585d-20db-4fab-b25e-cd4c521b60a3" data-name="Layer 1">
<g>
<path d="m126.22,46.75c0-1.19-.15-1.81-1.6-1.81h-.73v-.4c.58-.02,2.02-.1,2.62-.12,1.15-.04,2.73-.06,3.12-.06,1.83,0,3.44.27,4.19.81.85.6,1.27,1.31,1.27,2.31,0,1.19-.98,2.29-2.37,2.54v.04c1.96.58,3.1,1.85,3.1,3.48s-1.15,3.96-4.5,3.96h-7.62v-.4h.48c1.71,0,2.04-.4,2.04-1.71v-8.64Zm1.73,3.21h2.27c2,0,3-.79,3-2.42,0-1.46-.88-2.79-3.44-2.79-.46,0-1.31.04-1.83.06v5.14Zm0,4.83c0,1.58.62,2.15,2.37,2.15,2.75,0,3.54-1.71,3.54-3.33s-1.23-3.25-3.67-3.25h-2.25v4.44Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m142.92,57.5h-5.06v-.4c1.29-.06,1.56-.4,1.56-1.79v-8.87c0-1.12-.4-1.44-1.56-1.5v-.4h5.06v.4c-1.31,0-1.77.29-1.77,1.69v8.83c0,1.23.33,1.65,1.77,1.65v.4Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m151.78,55.58c0,1.12.38,1.52,1.65,1.52h.77v.4h-6.56v-.4h.77c1.27,0,1.64-.4,1.64-1.52v-10.29h-3.62c-.83,0-1.21.48-1.52,2.31h-.38l.33-3.37h.4c.02.12.1.21.23.25s.27.06.42.06h10.02c.29,0,.6-.06.65-.31h.4l.33,3.37h-.38c-.31-1.83-.69-2.31-1.52-2.31h-3.62v10.29Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m171.4,47.96c-.69-1.94-2.48-3.21-4.75-3.21-3.48,0-5.64,2.52-5.64,6.02,0,3.77,2.71,6.54,5.87,6.54,1.65,0,3.67-.56,5.08-3.08h.4c-.27.94-.83,2.23-1.33,3.04-1.33-.19-2.25.56-4.71.56-4.23,0-7.27-2.79-7.27-6.64s3.12-6.96,7.48-6.96c2.62,0,3.75.83,4.39.83.23,0,.33-.06.38-.12h.31l.19,3.02h-.4Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m181.78,57.83c-4.08,0-7.52-2.62-7.52-6.52,0-4.15,3.19-7.08,7.62-7.08,3.94,0,7.31,2.69,7.31,6.44,0,4.21-3.37,7.16-7.42,7.16Zm-.44-13.08c-3.67,0-5.12,3.42-5.12,5.92,0,3.89,2.65,6.64,6,6.64s5.02-3,5.02-5.96c0-3.87-2.46-6.6-5.89-6.6Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m196.3,57.5h-5.06v-.4c1.29-.06,1.56-.4,1.56-1.79v-8.87c0-1.12-.4-1.44-1.56-1.5v-.4h5.06v.4c-1.31,0-1.77.29-1.77,1.69v8.83c0,1.23.33,1.65,1.77,1.65v.4Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m211.38,57.64l-10.79-11.29v8.94c0,1.5.33,1.81,2.1,1.81v.4h-4.83v-.4h.08c1.29,0,1.71-.44,1.71-1.4v-10.25c-.48-.33-1.02-.5-1.75-.52v-.4h3.27l9.81,10.23v-8.29c0-1.27-.38-1.5-2.04-1.54v-.4h4.87v.4c-1.56,0-1.9.27-1.9,1.08v11.62h-.54Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
</g>
<g>
<path d="m132.32,82.83c-4.08,0-7.52-2.62-7.52-6.52,0-4.15,3.19-7.08,7.62-7.08,3.94,0,7.31,2.69,7.31,6.44,0,4.21-3.37,7.17-7.42,7.17Zm-.44-13.08c-3.67,0-5.12,3.42-5.12,5.92,0,3.9,2.65,6.64,6,6.64s5.02-3,5.02-5.96c0-3.87-2.46-6.6-5.89-6.6Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m150.72,77.52h-.35c-.04-1.21-.48-1.58-1.48-1.58h-3.85v4.56c0,1.17.25,1.6,1.81,1.6v.4h-5.06v-.4c1.29-.08,1.52-.35,1.52-2.04v-8.17c0-1.33-.1-1.94-1.56-1.96v-.4h9.33v2.46h-.35c-.02-1.21-.44-1.71-1.73-1.71h-3.96v4.89h4.12c.77,0,1.15-.44,1.21-1.33h.35v3.67Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m161.78,77.52h-.35c-.04-1.21-.48-1.58-1.48-1.58h-3.85v4.56c0,1.17.25,1.6,1.81,1.6v.4h-5.06v-.4c1.29-.08,1.52-.35,1.52-2.04v-8.17c0-1.33-.1-1.94-1.56-1.96v-.4h9.33v2.46h-.35c-.02-1.21-.44-1.71-1.73-1.71h-3.96v4.89h4.12c.77,0,1.15-.44,1.21-1.33h.35v3.67Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m168.97,82.5h-5.06v-.4c1.29-.06,1.56-.4,1.56-1.79v-8.87c0-1.12-.4-1.44-1.56-1.5v-.4h5.06v.4c-1.31,0-1.77.29-1.77,1.69v8.83c0,1.23.33,1.65,1.77,1.65v.4Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m183.34,72.96c-.69-1.94-2.48-3.21-4.75-3.21-3.48,0-5.64,2.52-5.64,6.02,0,3.77,2.71,6.54,5.87,6.54,1.65,0,3.67-.56,5.08-3.08h.4c-.27.94-.83,2.23-1.33,3.04-1.33-.19-2.25.56-4.71.56-4.23,0-7.27-2.79-7.27-6.64,0-4.04,3.12-6.96,7.48-6.96,2.62,0,3.75.83,4.39.83.23,0,.33-.06.38-.12h.31l.19,3.02h-.4Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m194.76,77.81h-.4c-.17-1.48-.56-1.65-1.42-1.65h-3.52v4.44c0,.96.35,1.15,1.12,1.15h3.21c1.46,0,1.89-.56,2.42-2.35h.37l-.33,3.1h-11.06v-.4h.58c1.67,0,1.96-.46,1.96-1.71v-8.79c0-1.17-.27-1.67-1.67-1.67h-.46v-.4h10l.17,2.9h-.38c-.27-1.77-.79-2.15-1.54-2.15h-4.39v5.12h3.73c.75,0,1.1-.35,1.21-1.56h.4v3.96Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
</g>
<rect x="105.98" width=".63" height="127.54" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m37.27,44.3c-.46-1.08-.96-3.3-.93-3.81.1-2.09.07-2.71.27-4.85l2.31,2.46c-.05.83-.07,1.08,0,1.61.03.19.15,1.13.31,1.5l-1.96,3.1Z" style="fill: #fff; stroke-width: 0px;"/>
<path d="m39.23,41.2c-.16-.37-.29-1.31-.31-1.5-.07-.52-.05-.78,0-1.61l1.42,1.46-1.11,1.64Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m33.47,43.34c-.04-.48-.08-1.02-.08-1.26.01-1.5-.18-2.35,0-3.94.14-1.25.46-2.89.4-4.24-.03-.38.05-.76.07-1.13l2.87,2.98c-.2,2.14-.18,2.76-.27,4.85-.03.51.46,2.73.93,3.81l-.6.94-3.3-2.01Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m36.82,45.56l-3.5-2.13v-.08c-.06-.66-.09-1.07-.09-1.27,0-.55-.02-1.01-.04-1.46-.04-.76-.07-1.48.04-2.5.04-.35.09-.72.15-1.12.14-1,.3-2.14.25-3.1-.02-.25,0-.49.03-.73.01-.14.03-.28.04-.41v-.35s3.17,3.29,3.17,3.29v.07c-.15,1.53-.18,2.3-.22,3.36-.01.42-.03.9-.06,1.48-.03.48.46,2.68.92,3.74l.03.07-.72,1.13Zm-3.21-2.31l3.11,1.9.48-.75c-.44-1.08-.94-3.25-.91-3.8.03-.59.04-1.06.06-1.48.04-1.05.07-1.82.21-3.31l-2.59-2.69s0,.06-.01.09c-.02.23-.05.46-.03.68.05,1-.11,2.15-.25,3.16-.05.39-.11.76-.14,1.11-.11.99-.08,1.7-.04,2.45.02.45.04.91.04,1.47,0,.18.03.57.08,1.17" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m35.37,47.27c-.19-.29-.36-1.13-.4-1.3-.1-.45-.1-.7-.07-1.47l1.58.97-1.12,1.8Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m30.79,54.27c-.18-.1-.48-.39-.57-.65-.19-.51-.15-.5-.29-1.06-.08-.32-.08-.67-.16-1.01-.07-.33-.57-1.39-.59-1.82-.05-1.39-.55-2.33-.42-3.85.08-1.17.37-2.76.23-3.99-.04-.33.01-.71.03-1.04l3.22,1.96c-.12,2.01-.07,2.57-.07,4.52-.01.47.44,2.38.98,3.24l-2.36,3.7Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m30.84,54.47l-.12-.07c-.2-.11-.53-.43-.64-.73-.14-.36-.16-.47-.2-.69-.02-.1-.04-.21-.09-.39-.04-.17-.07-.35-.08-.52-.02-.16-.04-.33-.08-.49-.02-.12-.12-.36-.21-.61-.17-.45-.37-.95-.38-1.24-.02-.57-.12-1.07-.22-1.56-.14-.69-.28-1.4-.2-2.3.02-.34.07-.72.11-1.12.1-.93.22-1.99.12-2.84-.03-.25-.01-.52,0-.77,0-.1.01-.2.02-.29v-.26s3.53,2.14,3.53,2.14v.09c-.1,1.48-.09,2.17-.08,3.22,0,.37,0,.78,0,1.29-.01.45.43,2.33.96,3.16l.05.08-2.49,3.9Zm-1.69-13.36s0,.03,0,.05c-.02.24-.04.5,0,.72.1.88-.02,1.96-.12,2.91-.04.39-.08.77-.11,1.11-.07.86.06,1.52.2,2.22.1.5.2,1.02.23,1.61,0,.24.2.74.36,1.15.11.27.2.51.23.65.04.17.06.35.08.52.02.17.04.33.08.48.04.18.07.3.09.4.04.21.07.3.19.64.06.17.24.37.39.49l2.23-3.48c-.52-.89-.97-2.73-.96-3.24,0-.5,0-.92,0-1.29,0-1.03-.02-1.72.07-3.15l-2.93-1.79Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m36.2,55.44c.6.51,1.71.78,1.88.89.4.27.98.66,1.98.71.74.05,1.07-.13,1.82-.22.86-.1-.11.02.72-.14.42-.1.42-.17,1-.29.42-.09.85-.19,1.11-.52.1-.13.18-.23.19-.43h.57c.05.15-.11.45-.16.55-.04.05-.11.14-.15.19-.08.17-.07.13-.22.25-.04.03-.22.17-.27.19-.11.08-.22.18-.34.19-.56.09-.79.2-1.32.34-.51.14-.23.11-.61.2-.19.04-.57.18-.76.2-.34.05-.4.1-.75.18-.92.19-1.8.14-2.7.09-.37-.02-1.27-.2-1.58-.41-.56-.37-1.79-.51-2.33-.87-.08-.05-.42-.2-.49-.27-.53-.41-.96-.52-1.52-.85h3.96Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m39.4,58.03c-.41,0-.82-.02-1.23-.05-.41-.03-1.33-.21-1.67-.43-.26-.17-.71-.3-1.14-.42-.46-.13-.9-.25-1.19-.44-.03-.02-.09-.05-.16-.08-.18-.09-.3-.15-.36-.2-.3-.23-.58-.37-.88-.51-.19-.09-.39-.19-.61-.32l-.47-.28h4.56l.04.03c.4.34,1.07.58,1.47.72.22.08.33.12.39.16.38.26.95.64,1.91.69.45.03.74-.02,1.09-.1.2-.04.42-.08.7-.12l.3-.04c.07-.04.2-.06.41-.1.17-.04.27-.08.38-.12.14-.05.29-.1.61-.18.43-.09.8-.19,1.02-.47.09-.12.15-.2.16-.35v-.14h.83l.04.1c.07.18-.05.44-.17.66l-.02.04-.15.19c-.05.12-.07.14-.17.21l-.07.06s-.06.04-.09.07c-.1.07-.17.12-.22.15l-.04.03c-.1.07-.21.16-.35.17-.35.05-.57.12-.83.2-.14.04-.29.09-.48.14-.24.07-.29.09-.33.11-.06.03-.1.05-.29.1-.09.02-.2.05-.32.09-.17.05-.34.1-.46.12-.18.03-.28.05-.39.09-.09.03-.19.05-.35.09-.51.11-1.01.14-1.5.14m-6.55-2.44s.04.02.06.03c.31.15.6.29.94.55.04.04.21.12.3.16.08.04.15.08.18.1.25.17.69.29,1.11.41.45.13.93.26,1.23.46.28.18,1.15.36,1.51.38.92.05,1.77.1,2.66-.09.15-.03.24-.06.33-.08.12-.03.23-.07.43-.1.1-.01.26-.06.41-.11.13-.04.26-.08.34-.09.16-.04.19-.05.22-.07.05-.03.11-.06.39-.14.18-.05.33-.09.46-.13.27-.08.5-.15.88-.21.07,0,.14-.06.21-.11l.07-.05c.06-.03.13-.09.19-.13.04-.03.08-.06.09-.07l.06-.05q.05-.04.1-.14l.17-.22c.08-.15.11-.24.13-.3h-.29c-.04.16-.11.26-.19.36-.3.38-.72.49-1.21.6-.31.07-.44.12-.58.17-.11.04-.22.08-.42.13-.14.03-.22.05-.27.06-.04.04-.11.04-.16.05l-.32.04c-.26.03-.47.07-.67.11-.36.07-.68.14-1.17.1-1.04-.05-1.65-.47-2.05-.74-.03-.02-.18-.08-.33-.13-.43-.15-1.08-.38-1.52-.74h-3.3Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m40.53,55.44c.4.19.59.51,1.68.83.42,0,.89.18,1.28.17-.48.1-.49.17-.89.26-.83.17.14.04-.72.14-.75.09-1.08.27-1.82.22-1-.05-1.58-.45-1.98-.71-.18-.11-1.28-.38-1.88-.89h4.33Z" style="fill: #fff; stroke-width: 0px;"/>
<polygon points="36.66 45.33 36.66 45.33 29 40.69 28.86 40.88 36.48 45.57 36.66 45.33" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m33.88,32.41c.01-.28.18-.61.38-.6.01,0,.18-.01.26.03.12.02.14.08.16.18.05.25-.29.33-.52.36-.05,0-.22-.01-.26.05-.07.09-.03.06-.07.09.04,0,.08-.04.11-.05.19-.05.36-.05.61-.09.18-.02.29-.36.19-.47-.1-.13-.51-.22-.63-.14-.26.16-.34.45-.37.75.01-.06.11-.04.12-.1" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m32.4,31.13s.68.46,1.3.61c0,0-.1.52,0,.69,0,0-.55-.22-.82-.15,0,0-.14-.78-.48-1.15" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m33.61,32.95s.2-.2.27-.28c.04-.05-.1.28.03.36.12.24.04.68.01.8-.22.01-.41.08-.67-.13-.1-.08.03-.24.11-.38.04-.08.12-.28.25-.37" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m34.9,44.65l-2.65-1.65s-.67,5.5.83,7.68l2.29-3.42s-.76-1.78-.47-2.62" style="fill: #fff; stroke-width: 0px;"/>
<path d="m45.11,55.44s-1.21,2.3-4.58,0h4.58Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="40.54 39.38 40.54 39.38 33.82 32.41 33.69 32.57 40.34 39.56 40.54 39.38" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m44.89,61.86c.45,0,.93,0,2.97-.5,2.04-.48,3.72-1.72,4.12-1.9.4-.18.97-.13.97-.13-.22-.23-.84-.8-1.72-.8s-.54,0-1.29.32c-.75.31-2.32,1.26-4.97,1.26h-.05c-2.65,0-4.31-.95-5.06-1.26-.75-.32-.41-.32-1.29-.32s-1.5.57-1.73.8c0,0,.59-.05.98.13.39.18,2.08,1.42,4.12,1.9,2.03.5,2.52.5,2.96.5" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m37.07,60.12c.22-.13-.05-.48-.05-.48l.8-.18c-.4-.18-.98-.13-.98-.13-.15.13-.13.28-.15.4-.01.11-.01.29.08.38.08.08.31.01.31.01" style="fill: #fff; stroke-width: 0px;"/>
<path d="m37.82,59.46l-.8.18s.27.36.05.48l1.41-.27s-.22-.15-.66-.39" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m52.73,60.12c-.22-.13.04-.48.04-.48l-.79-.18c.4-.18.97-.13.97-.13.17.13.14.28.17.4.01.11.01.29-.08.38-.09.08-.31.01-.31.01" style="fill: #fff; stroke-width: 0px;"/>
<path d="m51.97,59.46l.79.18s-.25.36-.04.48l-1.41-.27s.22-.15.66-.39" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m39.34,59.09h.03c.2.1.33.24.24.49-.1.23-.3.24-.49.15h-.04s.27-.63.27-.63Zm-.07-.18l-.36.89.17.06c.27.11.53.05.66-.24.12-.31-.04-.53-.29-.63l-.17-.08Z" style="fill: #fff; stroke-width: 0px;"/>
<polygon points="39.67 60.13 40.06 59.26 40.16 59.3 39.77 60.17 39.67 60.13" style="fill: #fff; stroke-width: 0px;"/>
<path d="m40.54,59.63s.09,0,.14.03c.19.08.24.28.17.46-.08.18-.28.27-.45.19-.15-.08-.24-.27-.15-.46.06-.13.17-.22.29-.22m0-.15c-.19,0-.36.13-.45.32-.11.25,0,.53.24.64.24.1.53,0,.64-.28.1-.24,0-.54-.25-.65-.06-.03-.12-.04-.18-.04" style="fill: #fff; stroke-width: 0px;"/>
<path d="m41.6,60.1c-.01-.06-.04-.11-.1-.14-.06-.03-.17,0-.19.08-.02.08.03.14.06.18l.06.05c.1.09.17.19.1.34-.06.16-.23.23-.38.18-.13-.05-.2-.2-.16-.36l.11.02c-.04.09.01.19.1.23.09.04.19-.02.23-.11.04-.1-.03-.17-.09-.23l-.05-.05c-.08-.08-.14-.17-.09-.29.05-.14.2-.19.33-.14.1.04.15.11.17.22l-.1.02Z" style="fill: #fff; stroke-width: 0px;"/>
<path d="m42.3,60.15l-.15.54c-.04.15-.04.31.13.36.18.05.26-.08.31-.23l.15-.55.1.04-.17.57c-.05.2-.22.33-.42.27-.2-.05-.28-.24-.22-.45l.17-.59.1.04Z" style="fill: #fff; stroke-width: 0px;"/>
<polygon points="43.59 61.47 43.06 60.6 42.92 61.29 42.81 61.28 43 60.29 43.53 61.15 43.67 60.47 43.77 60.48 43.59 61.47" style="fill: #fff; stroke-width: 0px;"/>
<polygon points="43.83 61.45 43.95 60.5 44.05 60.52 43.93 61.47 43.83 61.45" style="fill: #fff; stroke-width: 0px;"/>
<path d="m44.63,60.68c.2.01.33.18.32.38,0,.2-.16.34-.34.34-.18-.01-.32-.18-.32-.37.01-.19.15-.35.34-.35m.02-.14c-.27-.01-.48.2-.5.47-.01.29.19.51.46.52.25.01.48-.18.5-.48.01-.27-.2-.51-.46-.51" style="fill: #fff; stroke-width: 0px;"/>
<polygon points="46.09 61.5 45.35 60.81 45.4 61.52 45.28 61.52 45.21 60.53 45.95 61.22 45.9 60.52 46.01 60.5 46.09 61.5" style="fill: #fff; stroke-width: 0px;"/>
<polygon points="46.69 61.36 46.51 60.42 46.62 60.4 46.79 61.23 47.06 61.18 47.08 61.29 46.69 61.36" style="fill: #fff; stroke-width: 0px;"/>
<polygon points="47.2 61.26 46.98 60.33 47.09 60.3 47.31 61.23 47.2 61.26" style="fill: #fff; stroke-width: 0px;"/>
<path d="m47.66,60.71c.07,0,.16,0,.17.1.04.12-.05.17-.14.19l-.08.03-.07-.29h.06s.04-.02.06-.03m-.15-.39c.06,0,.12.02.15.11.04.11-.04.15-.13.17h-.03s-.09-.27-.09-.27h.04s.04-.02.06-.02m-.02-.12s-.08,0-.12.02l-.1.04.26.92.2-.05c.15-.05.28-.17.23-.36-.02-.1-.12-.19-.24-.17.05-.05.06-.15.04-.21-.05-.15-.15-.19-.27-.18" style="fill: #fff; stroke-width: 0px;"/>
<polygon points="48.48 60.28 48.52 60.38 48.18 60.49 48.29 60.84 48.65 60.71 48.69 60.82 48.23 60.98 47.91 60.07 48.38 59.91 48.41 60.01 48.05 60.13 48.14 60.39 48.48 60.28" style="fill: #fff; stroke-width: 0px;"/>
<path d="m48.86,59.87s.09.04.12.1c.05.13-.05.19-.16.23h-.02s-.12-.29-.12-.29h.03s.1-.05.15-.05m.03-.12c-.09-.01-.16,0-.24.05l-.13.06.36.89.1-.04-.14-.39h.04s.39.26.39.26l.14-.05-.43-.28c.11-.06.15-.2.1-.33-.03-.08-.1-.15-.19-.17" style="fill: #fff; stroke-width: 0px;"/>
<polygon points="49.07 59.63 49.57 59.41 49.62 59.5 49.41 59.59 49.77 60.37 49.67 60.42 49.31 59.64 49.12 59.73 49.07 59.63" style="fill: #fff; stroke-width: 0px;"/>
<path d="m50.07,59.42l.29.24-.27.14-.03-.38Zm-.13-.26l.06,1.09.12-.06-.02-.25.38-.19.2.17.1-.06-.84-.69Z" style="fill: #fff; stroke-width: 0px;"/>
<path d="m50.9,58.93c.09,0,.18.06.25.17.13.22,0,.38-.18.5h-.02s-.35-.56-.35-.56l.03-.03c.1-.05.19-.08.28-.07m-.05-.15c-.09,0-.19.03-.28.09l-.17.09.51.83.15-.08c.25-.15.37-.41.2-.69-.1-.18-.25-.25-.4-.24" style="fill: #fff; stroke-width: 0px;"/>
<path d="m36.1,62.39c.15,0,.27-.11.27-.27,0-.14-.11-.26-.27-.26-.14,0-.27.12-.27.26,0,.15.13.27.27.27" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m34.6,64.25c.15,0,.27-.11.27-.27,0-.14-.11-.27-.27-.27-.14,0-.27.13-.27.27,0,.15.13.27.27.27" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m31.1,58.42c.14,0,.27-.13.27-.27,0-.15-.13-.27-.27-.27-.15,0-.27.11-.27.27,0,.14.11.27.27.27" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m28.94,59.5c.15,0,.29-.13.29-.29,0-.15-.14-.29-.29-.29-.17,0-.29.14-.29.29,0,.17.13.29.29.29" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m28.54,52.95c.15,0,.29-.13.29-.29,0-.15-.14-.29-.29-.29-.17,0-.29.14-.29.29,0,.17.13.29.29.29" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m26.72,53.48c.17,0,.29-.13.29-.29s-.13-.29-.29-.29c-.15,0-.29.13-.29.29s.14.29.29.29" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m27.65,47.65c.17,0,.29-.14.29-.29,0-.17-.13-.29-.29-.29s-.29.13-.29.29c0,.15.13.29.29.29" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m26.02,42.28c.15,0,.29-.13.29-.28,0-.17-.14-.29-.29-.29-.17,0-.29.13-.29.29,0,.15.13.28.29.28" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m28.1,42.82c.17,0,.29-.13.29-.29,0-.15-.13-.29-.29-.29s-.29.14-.29.29c0,.17.13.29.29.29" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m30.14,38.35c.15,0,.29-.13.29-.29,0-.15-.14-.28-.29-.28-.17,0-.29.13-.29.28,0,.17.13.29.29.29" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m28.58,37.11c.17,0,.29-.13.29-.29,0-.15-.13-.29-.29-.29s-.29.14-.29.29c0,.17.13.29.29.29" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m31.68,34.11c.17,0,.29-.13.29-.29s-.13-.29-.29-.29-.29.13-.29.29.13.29.29.29" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m25.36,47.69c.17,0,.29-.13.29-.28s-.13-.28-.29-.28c-.15,0-.28.13-.28.28s.13.28.28.28" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m53.69,62.39c-.15,0-.27-.11-.27-.27,0-.14.11-.26.27-.26.14,0,.27.12.27.26,0,.15-.13.27-.27.27" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m55.2,64.25c-.15,0-.27-.11-.27-.27,0-.14.11-.27.27-.27.14,0,.27.13.27.27,0,.15-.13.27-.27.27" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m58.69,58.42c-.14,0-.27-.13-.27-.27,0-.15.13-.27.27-.27.15,0,.27.11.27.27,0,.14-.11.27-.27.27" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m60.86,59.5c-.15,0-.29-.13-.29-.29,0-.15.14-.29.29-.29.17,0,.29.14.29.29,0,.17-.13.29-.29.29" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m61.25,52.95c-.15,0-.29-.13-.29-.29,0-.15.14-.29.29-.29.17,0,.29.14.29.29,0,.17-.13.29-.29.29" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m63.07,53.48c-.17,0-.29-.13-.29-.29s.13-.29.29-.29c.15,0,.29.13.29.29s-.14.29-.29.29" style="fill: #fff; stroke-width: 0px;"/>
<path d="m63.07,53.48c-.17,0-.29-.13-.29-.29s.13-.29.29-.29c.15,0,.29.13.29.29s-.14.29-.29.29" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m62.14,47.65c-.17,0-.29-.14-.29-.29,0-.17.13-.29.29-.29s.29.13.29.29c0,.15-.13.29-.29.29" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m63.77,42.28c-.15,0-.29-.13-.29-.28,0-.17.14-.29.29-.29.17,0,.29.13.29.29,0,.15-.13.28-.29.28" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m61.7,42.82c-.17,0-.29-.13-.29-.29,0-.15.13-.29.29-.29s.29.14.29.29c0,.17-.13.29-.29.29" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m59.66,38.35c-.15,0-.29-.13-.29-.29,0-.15.14-.28.29-.28.17,0,.29.13.29.28,0,.17-.13.29-.29.29" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m61.21,37.11c-.17,0-.29-.13-.29-.29,0-.15.13-.29.29-.29s.29.14.29.29c0,.17-.13.29-.29.29" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m58.12,34.11c-.17,0-.29-.13-.29-.29s.13-.29.29-.29.29.13.29.29-.13.29-.29.29" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m64.44,47.69c-.17,0-.29-.13-.29-.28s.13-.28.29-.28c.15,0,.28.13.28.28s-.13.28-.28.28" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m39.68,69.2s1.15-.09,1.33-.09.57-.79.75-.93c.18-.13,3.19-1.59,5.14-1.9,1.95-.31,4.94-1.47,5.57-1.77,3.24-1.55,6.86-4.43,7.66-5.62.84-1.24,1.73-4.11,2.13-5.66.18-.71,1.15-3.63,1.15-5.62,0-2.31-.27-4.2-.62-5.71-.34-1.5-2.93-5.91-4.51-7.88,0,0,3.55,5.5,4.17,7.61.61,2.17.79,4.8.75,6.31-.04,1.24-1.07,5.76-2.57,9.08-1.2,2.66-2.24,2.98-4.11,4.47-.88.7-2.56,1.81-3.98,2.52-1.41.7-4.42,1.59-5.22,1.72-.79.14-4.82,1.33-5.35,1.59-.54.27-1.9,1.46-2.26,1.86" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m39.68,69.2s1.15-.09,1.33-.09.57-.79.75-.93c.18-.13,3.19-1.59,5.14-1.9,1.95-.31,4.94-1.47,5.57-1.77,3.24-1.55,6.86-4.43,7.66-5.62.84-1.24,1.73-4.11,2.13-5.66.18-.71,1.15-3.63,1.15-5.62,0-2.31-.27-4.2-.62-5.71-.34-1.5-2.93-5.91-4.51-7.88,0,0,3.55,5.5,4.17,7.61.61,2.17.79,4.8.75,6.31-.04,1.24-1.07,5.76-2.57,9.08-1.2,2.66-2.24,2.98-4.11,4.47-.88.7-2.56,1.81-3.98,2.52-1.41.7-4.42,1.59-5.22,1.72-.79.14-4.82,1.33-5.35,1.59-.54.27-1.9,1.46-2.26,1.86" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m59.85,58.94c-.09-.41-.13-.71-.27-.84-.13-.14-.57-.68-.66-1.02-.09-.36,0-.62,0-.8s-.13-.79-.13-.79c0,0,.22-.75.4-.89.18-.13.62-.75.71-.93,0,0-.05.36.09.54.13.18.18.62.18.88,0,.27-.09.89,0,1.2.09.34.22.62.13,1.02-.08.32-.45,1.64-.45,1.64" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m59.99,58.49s1.01-1.29,1.01-1.82.09-.84.18-.97c.09-.13.66-.8.14-1.63-.23-.36-.27-.33-.39-.71-.18-.48-.54-.48-.59-.97,0,0-.13.57-.16,1.06-.05.48.04.66.08.93.05.27-.13.57-.13.97s.05.56.05.8c0,.13.17,1.81-.18,2.35" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m50.11,69.2s-1.15-.09-1.33-.09-.57-.79-.75-.93c-.18-.13-3.19-1.59-5.14-1.9-1.95-.31-4.94-1.47-5.57-1.77-3.24-1.55-6.86-4.43-7.66-5.62-.84-1.24-1.73-4.11-2.13-5.66-.18-.71-1.15-3.63-1.15-5.62,0-2.31.27-4.2.62-5.71.35-1.5,2.93-5.91,4.51-7.88,0,0-3.55,5.5-4.17,7.61-.61,2.17-.79,4.8-.75,6.31.04,1.24,1.07,5.76,2.57,9.08,1.2,2.66,2.24,2.98,4.11,4.47.88.7,2.56,1.81,3.98,2.52,1.41.7,4.42,1.59,5.22,1.72.79.14,4.82,1.33,5.35,1.59.54.27,1.9,1.46,2.26,1.86" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m29.94,58.94c.09-.41.13-.71.27-.84.13-.14.57-.68.66-1.02.09-.36,0-.62,0-.8s.13-.79.13-.79c0,0-.22-.75-.4-.89-.18-.13-.62-.75-.71-.93,0,0,.05.36-.09.54-.13.18-.18.62-.18.88,0,.27.09.89,0,1.2-.09.34-.22.62-.13,1.02.08.32.45,1.64.45,1.64" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m29.8,58.49s-1.01-1.29-1.01-1.82-.09-.84-.18-.97c-.09-.13-.66-.8-.14-1.63.23-.36.27-.33.4-.71.18-.48.54-.48.59-.97,0,0,.13.57.16,1.06.05.48-.04.66-.08.93-.05.27.13.57.13.97s-.05.56-.05.8c0,.13-.17,1.81.18,2.35" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m41.14,65.4s-.85-.09-1.17-.14c-.23-.03-.75-.15-1.05-.27-.25-.09-.75-.36-1.18-.82-.82-.87-.74-1.33-.88-1.36-.29-.05.46-.13.82-.08.34.04.83.29,1.15.6.33.3.84.65,1.02.78.18.14.31.19.5.45.19.26.18.42.8.84" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m42.32,66.02s-2.14-.96-2.36-1.13c-.23-.17-.59-.51-.82-.75-.22-.24-1.12-.7-1.27-.99-.1-.2-.66-.98-.99-1.59-.16-.32,1.43.1,1.43.1,1.3.52.71.15,1.43.69.43.33.73.61.84.85.17.38.36,1.04.55,1.39.18.34.52.79,1.2,1.44" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m43.48,66.29s-1.77-.46-2.57-1.55c-.57-.75-.57-.52-.82-.78-.29-.32-.75-.66-1.13-1.31.04.06-.51-1.73-.48-1.95.01-.13.67.09,1.21.32.46.19.73.56,1.12.8.47.31.54,1.07.75,1.43.31.52.34.79.34,1.04-.01.4.22.52.34.85.15.39.62.33,1.24,1.15" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m40.65,65.7s-1.5-.66-1.72-.71c-.23-.04-.32-.18-.62-.27-.25-.06-.48-.26-1.11-.13-.27.06-1.36.31-1.63.18-.27-.14.4.75.7.93.32.18.84.27,1.29.22.45-.04,1.06,0,1.29,0,.22,0,.34.05.66-.04.31-.09.39-.23,1.15-.18" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m41.67,65.7s-1.68-.42-1.96-.42-1.08.05-1.42.11c-.32.05-1.32-.05-1.62.1-.31.14-1.64.33-2,.24-.36-.08.71.96,1.13,1.07,1.36.38.95.33,1.83.1.54-.14,1.3-.18,1.57-.22.27-.05.22-.2.57-.36.36-.15.96-.54,1.89-.64" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m43.04,66.23s-1.68-.7-2.99-.34c-.9.26-.88.22-1.24.28-.42.06-.78-.15-1.47.13-.34.14-1.81.74-2.22.71-.37-.02,1.17.98,1.59.92,1.35-.19,2.62.27,3.25.01.56-.22.89-.37,1.17-.46.28-.1.43-.36.61-.48.18-.14.29-.48,1.29-.76" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m34.06,62.54s-.97-1.07-1.16-1.21c-.18-.14-.64-.47-.88-.69-.2-.18-.41-.57-1.03-.73-.27-.06-.92-.19-1.11-.42-.18-.24.04.85.24,1.15.2.29.64.6,1.06.75.42.15.96.46,1.15.56.2.09.31.19.62.24.32.06.46-.03,1.11.34" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m34.98,62.99s-1.64-1.16-1.9-1.29c-.25-.12-.73-.28-1.03-.38-.32-.09-1.15-.69-1.48-.69s-.96-.03-1.24-.24c-.29-.23-.04.8.28,1.1,1.06.94.33.66,1.21.84.54.11,1.25.41,1.5.48.27.08.29-.09.67-.06.38.01,1.1-.06,1.98.24" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m35.37,63.3s-.67-.45-2.01-.68c-.92-.17-.88-.2-1.22-.29-.41-.13-.5-.13-1.25-.17-.37-.03-1.82.45-2.17.24-.32-.18.36.45.77.6.59.22.51.6,1.15.8.68.22,1.39.48,1.78.41.31-.06.54-.2.97-.24.42-.05,1.16-.66,1.99-.67" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m35.51,62.95s.33-1.61.05-1.99c-.14-.18-.32-.43-.36-.84-.04-.39-.3-1.06-.48-1.27-.18-.23-.54-1.25-.45-1.5,0,0-.93.92-.88,1.5.04.57.04.43,0,.7-.05.27.22,1.15.39,1.41.18.27.09,1.07.27,1.24.18.18,1.24.89,1.45.75" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m35.37,63.3c.1.05-.56-.51-.88-.65-.31-.13-1.54-.48-1.63-.79-.09-.32-1.11-1.38-1.15-1.64-.04-.2-.23-.62-.18-.84.04-.22.13-.75.27-1.06.13-.32.43-1.06.75-1.2,0,0,.26.84.34,1.15.09.32.18.67.32.84.13.18.57,1.02.61,1.34.05.3.27,1.33.32,1.54.04.22.87,1.12,1.22,1.31" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m29.94,58.94c.04.23-.66-.23-1.02-.23s-1.41.14-1.68-.13c-.27-.27-.66-.75-.8-.84-.13-.09-.61-.89-.75-1.33-.13-.45-1.06-1.25-1.18-1.34,0,0,1.27-.26,2.08.27.79.53.84.41,1.02.48.18.09,1.54,1.25,1.63,1.68.09.45.66,1.2.71,1.43" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m29.94,58.94s-1.15-.8-1.41-.77c-.27.05-1.52-.88-1.59-1.45-.05-.31-.65-.74-.75-.93-.32-.54-.5-1.72-.93-2.04,0,0,1.2.31,1.5.36.57.09,1.06.18,1.27.66.23.48.41.89.58.93.18.05.43.66.52,1.29.09.61.8,1.95.8,1.95" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m27.67,52.87c.19.31.18-1.77.26-1.99.09-.22.32-.66.5-.84.18-.18.18-.79.27-.97.08-.18.04-1.38-.09-1.68,0,0-.36.27-.54.48-.18.22-.48.31-.57.57-.09.27-.27.27-.39.54-.14.27-.27.7-.18,1.06.09.36.04.49.04.8s.45,1.63.71,2.03" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m27.63,53.09s-.09-.57.14-.79c.22-.23.43-.23.52-.36.09-.14.05-.31.14-.48.09-.18.28-.47.3-.62.09-.48.36-1.02.13-1.54,0,0-.48.17-.61.26-.14.09-.54.45-.57.8-.05.39-.09.45-.23.66-.13.22-.31.88-.09,1.29.23.4.27.79.27.79" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m26.53,46.32s-.09-1.29.27-1.68c.36-.39.45-1.15,1.24-1.55,0,0-.04.32,0,.54.05.22.14.84,0,1.06-.13.23-.57.62-.57.8s-.31.62-.52.71c-.23.08-.41.13-.41.13" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m26.53,47.02s0-.92.27-1.18c.27-.27.41-.41.54-.57.13-.18.27-.62.57-.8.31-.18.84-.62.89-.79,0,0,.13,1.1-.18,1.68-.32.57-.32.88-.66,1.01-.36.14-.41.23-.54.32-.14.09-.36.22-.54.22s-.36.13-.36.13" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m27.55,53.05c.05.26.23-.57-.7-.57s-1.68-.36-2-.67c-.31-.31-.48-.52-.61-.66-.14-.13-.48-.66-.54-.93-.04-.25-.31-1.24-.27-1.41,0,0,.5.09.71.27.22.18.62.18.84.32.22.13.4.48.54.61.13.14.52.14.7.4.18.27.48.84.54,1.11.04.27.36.54.57.66.22.14.18.66.22.89" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m27.46,52.69s-.61-.75-.93-.75-1.1-.8-1.15-1.15c-.04-.36-.3-1.02-.48-1.16-.18-.13-.48-.43-.45-.97.05-.54.05-1.42.05-1.42,0,0,.18.54.43.66.27.13.75.31.84.49.09.18.45.18.59.71.13.52.13.48.22.66.09.18.31.39.39.75.09.36.57,1.27.48,2.17" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m26.54,47.81c-.02.24.36-.47-.48-.73-.85-.26-1.44-.79-1.63-1.16-.19-.36-.29-.61-.38-.76-.08-.17-.26-.74-.22-.99.03-.25.06-1.21.15-1.36,0,0,.42.22.56.43.15.23.52.35.69.52.15.18.22.55.31.71.09.15.45.27.54.55.09.29.2.9.17,1.16-.03.26.18.57.34.77.17.18-.03.65-.04.87" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m26.56,47.46s-.36-.85-.64-.93c-.28-.09-.74-.82-.77-1.15-.04-.38-.09-1.02-.22-1.18-.13-.17-.36-.71-.18-1.18.19-.47.48-1.1.48-1.1,0,0,.26.39.4.64.23.46.46.5.5.67.03.19.31.31.41.68.14.5-.01.47.01.66.04.18.18.45.15.79-.01.34.18,1.32-.15,2.1" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m27.24,42.12c.04-.13.31-.27.62-.36.31-.09.79-.79,1.01-.97.2-.19.32-.47.59-.62.27-.15.43-.7.52-1.24,0,0-.75.18-.97.22-.22.05-.66.32-.84.54-.18.22-.36.57-.54.66-.18.09-.39.62-.39.98v.79" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m27.2,41.72s-.05-.52-.05-.75c0-.27-.17-.98.22-1.55.27-.39,1.25-1.15,1.5-1.18,0,0,.18.7.14.92-.05.23-.28,1.11-.48,1.2-.2.09-.71,1.15-1.33,1.38" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m26.98,42.12c-.11.19-.04-.66-.31-.88-.27-.23-.31-.54-.31-.89s.08-.61.13-.84c.04-.22.71-1.15.66-1.41,0,0,.38.87.48,1.11.14.31-.09.62-.04.88.04.27.26.75.09,1.02-.14.23-.54.71-.71,1.02" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m29.46,37.47c.1.31.84-.31,1.01-.52.18-.23.45-.57.45-.57,0,0,.42-.51.54-.71.27-.48.2-1.36.09-1.29-.14.09-.62.36-.75.41-.14.04-.4.13-.48.34-.09.23-.18.54-.32.67-.13.13-.93.57-.52,1.67" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m29.19,37.47s.61-.43.84-.66c.27-.25.13-.61.27-.79.11-.17.43-.57.34-.84-.09-.27-.25-1.02-.25-1.02,0,0-.32.31-.54.53-.23.22-.27.4-.36.66-.09.27-.27.45-.36.66-.09.22,0,.66.05.93.04.27,0,.52,0,.52" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m48.65,65.4s.85-.09,1.17-.14c.23-.03.75-.15,1.05-.27.25-.09.75-.36,1.18-.82.82-.87.74-1.33.88-1.36.29-.05-.46-.13-.82-.08-.34.04-.83.29-1.15.6-.33.3-.84.65-1.02.78-.18.14-.31.19-.5.45-.19.26-.18.42-.8.84" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m47.48,66.02s2.14-.96,2.36-1.13c.23-.17.59-.51.82-.75.22-.24,1.12-.7,1.27-.99.1-.2.66-.98.99-1.59.17-.32-1.43.1-1.43.1-1.3.52-.71.15-1.43.69-.43.33-.73.61-.84.85-.17.38-.36,1.04-.55,1.39-.18.34-.52.79-1.2,1.44" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m46.32,66.29s1.77-.46,2.57-1.55c.57-.75.57-.52.82-.78.29-.32.75-.66,1.13-1.31-.04.06.51-1.73.48-1.95-.01-.13-.67.09-1.21.32-.46.19-.73.56-1.12.8-.47.31-.54,1.07-.75,1.43-.31.52-.34.79-.34,1.04.01.4-.22.52-.34.85-.15.39-.62.33-1.24,1.15" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m49.14,65.7s1.5-.66,1.72-.71c.23-.04.32-.18.62-.27.25-.06.48-.26,1.11-.13.27.06,1.36.31,1.63.18.27-.14-.4.75-.7.93-.32.18-.84.27-1.29.22-.45-.04-1.06,0-1.29,0-.22,0-.34.05-.66-.04-.31-.09-.39-.23-1.15-.18" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m48.12,65.7s1.68-.42,1.96-.42,1.08.05,1.42.11c.32.05,1.32-.05,1.62.1.31.14,1.64.33,2,.24.36-.08-.71.96-1.13,1.07-1.36.38-.95.33-1.83.1-.54-.14-1.3-.18-1.57-.22-.27-.05-.22-.2-.57-.36-.36-.15-.96-.54-1.89-.64" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m46.84,66.23s1.68-.7,2.99-.34c.9.26.88.22,1.24.28.42.06.78-.15,1.47.13.34.14,1.81.74,2.22.71.37-.02-1.17.98-1.59.92-1.35-.19-2.62.27-3.25.01-.56-.22-.89-.37-1.17-.46-.28-.1-.43-.36-.61-.48-.18-.14-.29-.48-1.29-.76Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m55.73,62.54s.97-1.07,1.16-1.21c.18-.14.64-.47.88-.69.2-.18.41-.57,1.03-.73.27-.06.92-.19,1.11-.42.18-.24-.04.85-.24,1.15-.2.29-.64.6-1.06.75-.42.15-.96.46-1.15.56-.2.09-.31.19-.62.24-.32.06-.46-.03-1.11.34" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m54.81,62.99s1.64-1.16,1.9-1.29c.25-.12.73-.28,1.03-.38.32-.09,1.15-.69,1.48-.69s.96-.03,1.24-.24c.29-.23.04.8-.28,1.1-1.06.94-.33.66-1.21.84-.54.11-1.25.41-1.5.48-.27.08-.29-.09-.67-.06-.38.01-1.1-.06-1.98.24" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m54.42,63.3s.67-.45,2.01-.68c.92-.17.88-.2,1.22-.29.41-.13.5-.13,1.25-.17.37-.03,1.82.45,2.17.24.32-.18-.36.45-.77.6-.59.22-.51.6-1.15.8-.68.22-1.39.48-1.78.41-.31-.06-.54-.2-.97-.24-.42-.05-1.16-.66-1.99-.67" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m54.28,62.95s-.33-1.61-.05-1.99c.14-.18.32-.43.36-.84.04-.39.31-1.06.48-1.27.18-.23.54-1.25.45-1.5,0,0,.93.92.88,1.5-.04.57-.04.43,0,.7.05.27-.22,1.15-.39,1.41-.18.27-.09,1.07-.27,1.24-.18.18-1.24.89-1.45.75" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m54.42,63.3c-.1.05.56-.51.88-.65.31-.13,1.54-.48,1.63-.79.09-.32,1.11-1.38,1.15-1.64.04-.2.23-.62.18-.84-.04-.22-.13-.75-.27-1.06-.13-.32-.43-1.06-.75-1.2,0,0-.26.84-.34,1.15-.09.32-.18.67-.32.84-.13.18-.57,1.02-.61,1.34-.05.3-.27,1.33-.32,1.54-.04.22-.87,1.12-1.22,1.31" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m59.85,58.94c-.04.23.66-.23,1.02-.23s1.41.14,1.68-.13c.27-.27.66-.75.8-.84.13-.09.61-.89.75-1.33.13-.45,1.06-1.25,1.18-1.34,0,0-1.28-.26-2.08.27-.79.53-.84.41-1.02.48-.18.09-1.54,1.25-1.63,1.68-.09.45-.66,1.2-.71,1.43" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m59.85,58.94s1.15-.8,1.41-.77c.27.05,1.52-.88,1.59-1.45.05-.31.65-.74.75-.93.32-.54.5-1.72.93-2.04,0,0-1.2.31-1.5.36-.57.09-1.06.18-1.27.66-.23.48-.41.89-.59.93-.18.05-.43.66-.52,1.29-.09.61-.8,1.95-.8,1.95" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m62.13,52.91c-.19.31-.18-1.77-.26-1.99-.09-.22-.32-.66-.5-.84-.18-.18-.18-.79-.27-.97-.08-.18-.04-1.38.09-1.68,0,0,.36.27.54.48.18.22.48.31.57.57.09.27.27.27.39.54.14.27.27.7.18,1.06-.09.36-.04.49-.04.8s-.45,1.63-.71,2.03" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m62.16,53.09s.09-.57-.14-.79c-.22-.23-.43-.23-.52-.36-.09-.14-.05-.31-.14-.48-.09-.18-.28-.47-.31-.62-.09-.48-.36-1.02-.13-1.54,0,0,.48.17.61.26.14.09.54.45.57.8.05.39.09.45.23.66.13.22.31.88.09,1.29-.23.4-.27.79-.27.79" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m63.26,46.32s.09-1.29-.27-1.68c-.36-.39-.45-1.15-1.24-1.55,0,0,.04.32,0,.54-.05.22-.14.84,0,1.06.13.23.57.62.57.8s.31.62.52.71c.23.08.41.13.41.13" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m63.26,47.02s0-.92-.27-1.18c-.27-.27-.41-.41-.54-.57-.13-.18-.27-.62-.57-.8-.31-.18-.84-.62-.89-.79,0,0-.13,1.1.18,1.68.32.57.32.88.66,1.01.36.14.41.23.54.32.14.09.36.22.54.22s.36.13.36.13" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m62.24,53.05c-.05.26-.23-.57.7-.57s1.68-.36,2-.67c.31-.31.48-.52.61-.66.14-.13.48-.66.54-.93.04-.25.31-1.24.27-1.41,0,0-.5.09-.71.27-.22.18-.62.18-.84.32-.22.13-.4.48-.54.61-.13.14-.52.14-.7.4-.18.27-.48.84-.54,1.11-.04.27-.36.54-.57.66-.22.14-.18.66-.22.89" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m62.33,52.69s.61-.75.93-.75,1.1-.8,1.15-1.15c.04-.36.31-1.02.48-1.16.18-.13.48-.43.45-.97-.05-.54-.05-1.42-.05-1.42,0,0-.18.54-.43.66-.27.13-.75.31-.84.49-.09.18-.45.18-.59.71-.13.52-.13.48-.22.66-.09.18-.31.39-.4.75-.09.36-.57,1.27-.48,2.17" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m63.25,47.81c.02.24-.36-.47.48-.73.85-.26,1.44-.79,1.63-1.16.19-.36.29-.61.38-.76.08-.17.26-.74.22-.99-.03-.25-.06-1.21-.15-1.36,0,0-.42.22-.56.43-.15.23-.52.35-.69.52-.15.18-.22.55-.31.71-.09.15-.45.27-.54.55-.09.29-.2.9-.17,1.16.02.26-.18.57-.34.77-.17.18.02.65.04.87" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m63.24,47.46s.36-.85.64-.93c.28-.09.74-.82.77-1.15.04-.38.09-1.02.22-1.18.13-.17.36-.71.18-1.18-.19-.47-.48-1.1-.48-1.1,0,0-.26.39-.4.64-.23.46-.46.5-.5.67-.03.19-.31.31-.41.68-.14.5.01.47-.01.66-.04.18-.18.45-.15.79.01.34-.18,1.32.15,2.1" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m62.55,42.12c-.04-.13-.31-.27-.62-.36-.31-.09-.79-.79-1.01-.97-.2-.19-.32-.47-.59-.62-.27-.15-.43-.7-.52-1.24,0,0,.75.18.97.22.22.05.66.32.84.54.18.22.36.57.54.66.18.09.39.62.39.98v.79" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m62.59,41.72s.05-.52.05-.75c0-.27.17-.98-.22-1.55-.27-.39-1.25-1.15-1.5-1.18,0,0-.18.7-.14.92.05.23.28,1.11.48,1.2.2.09.71,1.15,1.33,1.38" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m62.82,42.12c.11.19.04-.66.31-.88.27-.23.3-.54.3-.89s-.08-.61-.13-.84c-.04-.22-.71-1.15-.66-1.41,0,0-.38.87-.48,1.11-.14.31.09.62.04.88-.04.27-.25.75-.09,1.02.14.23.53.71.71,1.02" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m60.47,37.56s-.05-.13-.45-.13-.97-.04-1.15-.22c-.18-.18-.48-.41-.66-.5-.18-.08-.48-.48-.54-.66-.04-.18-.36-.52-.48-.52,0,0,.48-.05,1.02.09.52.13,1.28.4,1.45.75.18.34.8,1.18.8,1.18" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m60.33,37.47c-.1.31-.84-.31-1.01-.52-.18-.23-.45-.57-.45-.57,0,0-.42-.51-.54-.71-.27-.48-.2-1.36-.09-1.29.14.09.62.36.75.41.14.04.4.13.48.34.09.23.18.54.32.67.13.13.93.57.52,1.67" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m60.6,37.47s-.61-.43-.84-.66c-.27-.25-.13-.61-.27-.79-.11-.17-.43-.57-.34-.84.09-.27.26-1.02.26-1.02,0,0,.32.31.54.53.23.22.27.4.36.66.09.27.27.45.36.66.09.22,0,.66-.05.93-.04.27,0,.52,0,.52" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m44.76,65.61s.22-.54.66-.05c0,0,.54,1.25.13,1.29-.4.05-.79.13-.83-.09-.05-.22.04-1.15.04-1.15" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m45.34,65.44s.14-1.9.39-1.99c.27-.09,1.07-.54,1.55-.14.48.41.04,2.37-.14,2.55-.17.18-.43.73-1.45.6l-.14-.48s.54-.05.89-.23c.36-.18.47-.34.45-.52-.05-.27-.02-1.25-.29-1.34-.27-.09-.69-.22-.69-.22,0,0-.39,1.48-.48,1.9l-.09-.13Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m44.72,66.76s-1.82,1.06-.89,2.65l-.62-.39s-.34.62-.04.98c0,0-1.24-1.11-.27-2.43.98-1.34,1.77-1.25,1.77-1.25l.05.45Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m44.72,65.88s-.8-.54-1.95-.23c0,0-.51-1.64-.32-2.17.09-.24.27-.27.27-.27,0,0-.57-.35-.39,1.2.18,1.55.48,1.99.48,1.99,0,0,1.5.09,1.86-.09l.05-.43Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m44.72,65.88s-1.59-2.66-2-2.66c0,0-.46-.06.57-.18.36-.04.93,0,1.2.5.27.49.48,1.63.57,1.81,0,0-.31.09-.34.54" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m44.72,65.88s-1.07-.5-1.2-.62c-.14-.13-.36-1.63-.23-1.54,0,0-.43-.5-.57-.5-.09,0-.39.23-.31.75.09.54.22,1.34.36,1.68,0,0,.84-.34,1.95.23" style="fill: #fff; stroke-width: 0px;"/>
<path d="m45.69,66.76s.57.36.57,1.02.27,1.86.8,2.13c0,0,.13-.5.31-.59,0,0,.54.62.7.62,0,0-.31-.57-.31-.84s-.27-1.29-.54-1.54c-.26-.27-.79-.89-1.54-1.11v.31Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m45.91,63.67l-.48,1.9.13.41s.18-.05.27-.27c.09-.23.36-1.86.5-1.91l-.41-.13Z" style="fill: #fff; stroke-width: 0px;"/>
<path d="m43.37,33.24c-.11-.28-.14-2.17-.11-2.46.04-.51.92-3.01,1.1-3.3.19-.29.14-.36.22-.54l.25-.34c.19.32.33.82.37,1.21,0,0-.17,1.2-.31,1.73-.13.54-.47,1.27-.54,1.43-.17.37-.15.71-.05.74l-.93,1.53Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m43.35,33.57l-.11-.27c-.13-.33-.15-2.27-.12-2.53.04-.53.92-3.05,1.12-3.37.11-.17.13-.25.15-.33.01-.06.03-.11.06-.18l.41-.56.12.19c.19.32.35.83.39,1.27,0,.08-.17,1.25-.31,1.79-.11.46-.38,1.08-.5,1.34l-.05.11c-.12.26-.12.47-.11.55l.15.04-1.19,1.96Zm1.45-6.69l-.11.15s-.01.06-.02.1c-.02.1-.05.21-.19.42-.17.28-1.04,2.76-1.07,3.23-.02.24,0,1.4.05,2.02l.66-1.09c-.08-.17-.04-.51.1-.82l.05-.11c.11-.25.38-.85.48-1.29.14-.52.3-1.71.3-1.72-.03-.28-.12-.63-.24-.91" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m44.89,30.73l.14.15c.39-.42.42-1.3.42-1.3l-.25-1.77s-.17,1.2-.31,1.73c-.13.54-.47,1.27-.54,1.43-.25.64-.06.71-.05.74l.59-.98Z" style="fill: #fff; stroke-width: 0px;"/>
<path d="m45.03,30.88c.39-.42.42-1.3.42-1.3,0,0,.28,1.44.13,1.75-.15.31-.15.22-.13.37l-.42-.82Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m45.76,32.62l-.91-1.76.07-.08c.29-.31.37-.97.38-1.2l.04-1.35.26,1.33c.05.25.28,1.51.11,1.84-.05.1-.08.16-.11.2-.01.02-.02.03-.02.04l.02.04.16.95Zm-.55-1.72l.21.41s.02-.03.02-.05c.05-.09.04-.41,0-.79-.05.15-.13.31-.23.43" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m44.89,26.84s-.03-.28-.05-.38c-.01-.05.15.25.29.22.26.08.54.42.61.51-.11.17-.38.48-.57.42-.17-.05-.13-.29-.18-.45-.03-.08-.11-.18-.1-.32" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m44.62,26.64s.26-.13.34-.18c.05-.03-.19.23-.1.34.01.27-.2.65-.28.75-.19-.05-.38-.05-.54-.34-.06-.1.11-.22.23-.32.06-.05.2-.22.34-.26" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m45.02,26.46c.18-.22.5-.41.65-.28.01.01.14.09.18.17.08.09.06.13.02.23-.11.23-.42.11-.61.01-.04-.03-.15-.13-.22-.1-.1.04-.06.04-.1.04.04.02.08.01.1.02.18.05.31.15.52.26.15.06.43-.14.42-.28,0-.17-.27-.46-.39-.46-.29,0-.52.18-.73.41.05-.04.11.04.15-.01" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m44.85,26.46c-.17-.22-.48-.41-.64-.28-.01.01-.14.09-.18.17-.08.08-.08.13-.03.23.1.23.42.11.6.01.05-.03.17-.13.23-.1.1.04.06.04.1.04-.04.02-.08.01-.11.02-.17.05-.29.15-.52.26-.15.06-.42-.14-.42-.28.01-.18.28-.46.41-.46.29,0,.52.18.71.41-.04-.04-.1.04-.15-.01" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m44.92,26.33c-.08-.02-.17.05-.19.1-.03.06.03.17.1.18.1.04.24.01.27-.1.03-.1-.09-.13-.18-.18" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m44.9,24.56s.11.69.46,1.18c.34.5-.42.43-.47.61,0,0-.23-.5-.47-.62,0,0,.38-.6.48-1.16h0Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m44.89,59.27s-.06-.05-.1-.06c-.12-.08-.33-.08-.38-.14-.31-.34-.1-1.01.02-1.41.26-.76.29-1.47.46-2.19h.01c.17.73.2,1.43.45,2.19.14.41.34,1.07.04,1.41-.06.06-.27.06-.38.14-.04.01-.08.06-.11.06Z" style="fill: none; stroke: #d2d2d2; stroke-miterlimit: 10; stroke-width: .14px;"/>
<path d="m44.96,55.51c.21.69.32,1.4.61,2.12.15.36.13.96-.04,1.31l.24-.04c.1,0,.19-.05.27-.1.03-.01.07-.03.07-.07.03-.06.07-.12.11-.16.06-.06.14-.03.21-.08.02-.03.03-.05.04-.05.13-.09.25-.19.29-.35.02-.11.02-.24-.01-.36-.02-.09-.06-.14-.09-.21-.06-.11-.11-.21-.17-.32-.06-.11-.13-.2-.19-.31-.03-.06-.05-.11-.09-.15-.03-.05-.07-.09-.09-.14-.03-.05-.09-.08-.12-.12-.05-.05-.06-.04-.1-.08-.01-.01-.07-.02-.06-.05-.02,0-.06-.02-.07-.03-.11-.2-.2-.3-.31-.51-.05-.08-.08-.24-.09-.34l-.41.04h0Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m45.28,59.13l.12-.25c.15-.31.17-.86.04-1.18-.18-.45-.29-.9-.4-1.34-.07-.27-.13-.54-.21-.8v-.03s-.02-.15-.02-.15l.68-.06v.14c.02.12.05.23.08.27.06.11.11.18.15.26.04.07.09.14.14.22l.21-.02-.06.12s.04.03.07.06c.02.03.04.04.05.05.03.03.07.06.1.11.01.02.03.04.04.06.02.03.04.06.05.08.03.03.06.08.1.16.02.04.05.09.08.13.04.05.07.11.1.17l.17.32s.02.05.03.07c.02.05.05.1.07.18.04.13.04.28.01.43-.06.23-.23.36-.34.43,0,.01-.01.02-.02.03-.08.07-.14.08-.18.09-.01,0-.04,0-.04.01-.02.02-.05.06-.07.11-.01.08-.1.12-.14.14-.09.05-.19.1-.31.11l-.49.07Zm-.15-3.48c.06.21.11.43.17.64.11.42.21.86.39,1.3.13.32.14.81.04,1.19h.01c.08-.01.16-.05.23-.09.02-.01,0,0,0,.03.04-.11.09-.18.15-.23.06-.06.12-.07.17-.08.01,0,.04,0,.04-.01,0-.02.03-.05.06-.07.12-.08.2-.16.23-.26.02-.09.02-.19-.01-.28-.01-.05-.03-.08-.05-.12-.01-.03-.02-.05-.04-.08l-.16-.31s-.06-.09-.09-.14c-.04-.05-.07-.11-.1-.17-.03-.06-.05-.09-.08-.13-.03-.04-.04-.06-.05-.08-.02-.03-.04-.05-.05-.08,0,0-.02-.02-.04-.03-.03-.02-.05-.04-.07-.07,0,0-.02-.01-.03-.02-.02-.01-.03-.02-.05-.04,0,0-.03,0-.06-.03-.04-.02-.07-.05-.07-.05l-.03-.04c-.05-.1-.1-.17-.15-.24-.05-.08-.1-.16-.16-.27-.04-.07-.07-.16-.09-.26h-.12Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m44.88,55.43c-.15.73-.2,1.48-.45,2.25-.11.39-.3,1-.07,1.35h-.01s.01-.01.01-.01c-.11,0-.22-.04-.33-.08-.03-.01-.06-.02-.09-.06-.04-.06-.08-.11-.14-.15-.06-.05-.15-.01-.23-.06-.03-.03-.04-.05-.06-.05-.15-.08-.29-.17-.36-.33-.04-.12-.05-.24-.03-.37.01-.09.05-.15.08-.23.05-.12.1-.23.15-.35.05-.12.11-.22.18-.33.03-.06.05-.12.09-.17.02-.05.05-.1.09-.15.02-.05.09-.09.13-.14.05-.05.06-.05.1-.09.01-.01.08-.03.06-.05.03,0,.06-.03.06-.04.11-.22.2-.33.3-.55.05-.09.06-.26.06-.36h.46s0,0,0,0Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m44.37,59.17c-.13,0-.24-.04-.35-.07l-.05-.02s-.1-.05-.15-.12c-.04-.06-.06-.09-.09-.11h-.05s-.12-.02-.19-.07l-.05-.04c-.17-.08-.35-.2-.43-.41-.05-.15-.06-.31-.04-.46.01-.07.03-.13.06-.18,0-.02.02-.04.02-.06l.16-.36c.04-.09.09-.18.14-.26l.05-.08s.05-.11.1-.18c.02-.04.04-.1.09-.15.01-.03.05-.07.09-.1.01-.01.03-.03.04-.04.05-.05.07-.07.09-.08h0s-.06-.12-.06-.12h.2c.04-.08.08-.14.12-.2.05-.09.11-.18.16-.3.03-.06.05-.18.05-.3v-.15h.76s0,.18,0,.18c-.05.25-.09.5-.13.75-.08.49-.16,1-.33,1.52-.11.36-.27.94-.09,1.21l-.12.1v.12Zm-.69-.63s.02,0,.03,0c.05,0,.12,0,.19.06.08.04.13.12.18.19.02,0,.04.01.05.02-.07-.37.07-.82.16-1.15.17-.53.25-1.02.32-1.5.03-.2.06-.39.1-.58h-.13c0,.09-.03.2-.08.28-.05.12-.11.22-.17.32-.04.07-.08.14-.12.22-.02.05-.06.08-.1.1-.03.03-.06.04-.08.05,0,0-.02.02-.03.03-.01,0-.02.02-.05.04,0,.01-.04.04-.06.07-.01.01-.03.03-.04.04-.04.07-.07.11-.09.15-.04.06-.06.1-.08.16l-.06.11c-.04.08-.09.15-.12.23l-.15.35s-.01.04-.03.07c-.02.04-.03.08-.04.12-.02.1-.01.21.02.3.04.1.13.17.26.23.06.01.09.05.11.08,0,0,0,0,0,0" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="49.96 39.38 49.96 39.38 56.23 32.41 56.36 32.56 50.15 39.56 49.96 39.38" style="fill: #fff; stroke-width: 0px;"/>
<path d="m56.32,32.5c.27-.08.62-.04.69.14,0,.01.06.17.05.24.01.12-.01.15-.12.2-.22.13-.41-.14-.5-.34-.03-.05-.06-.18-.13-.2-.1-.02-.08,0-.1-.02.01.04.05.05.08.08.1.15.15.29.28.51.09.14.42.14.51.01.09-.14.03-.52-.08-.6-.23-.18-.53-.17-.82-.08.05-.01.06.09.13.06" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m56.34,32.37c.09.01.1.13.09.19-.01.06-.11.11-.18.09-.1-.04-.2-.13-.17-.24.04-.1.17-.05.25-.04" style="fill: #fff; stroke-width: 0px;"/>
<rect x="44.89" y="39.43" width=".98" height=".17" transform="translate(-2.73 75.66) rotate(-77.97)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="45.17 39.98 45 39.96 45.1 38.99 45.27 39.01 45.17 39.98" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="44.8" y="38.98" width=".17" height=".97" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="44.63 39.98 44.52 39.01 44.7 38.99 44.8 39.96 44.63 39.98" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="45.74 46.04 45.16 43.54 45.33 43.5 45.9 46 45.74 46.04" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="45.58" y="43.43" width=".17" height="1.55" transform="translate(-11.51 16.45) rotate(-18.18)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="46.08" y="43.28" width=".17" height="2.71" transform="translate(-14.47 23.49) rotate(-24.8)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="46.92 45.45 45.71 43.36 45.86 43.27 47.07 45.36 46.92 45.45" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="46.72" y="42.92" width=".17" height="2.88" transform="translate(-17.31 37.44) rotate(-37.3)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="46.77" y="42.82" width=".17" height="2.34" transform="translate(-17.36 41.33) rotate(-40.82)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="48.42 45.1 46.16 43.04 46.27 42.91 48.54 44.97 48.42 45.1" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="46.86" y="42.5" width=".17" height="1.52" transform="translate(-15.62 55.98) rotate(-54.15)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="46.78" y="42.42" width=".17" height=".97" transform="translate(-13.74 62.01) rotate(-59.97)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="46.88" y="42.21" width=".17" height=".98" transform="translate(-11.06 68.43) rotate(-66.19)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="47.49 42.71 46.57 42.4 46.62 42.24 47.54 42.55 47.49 42.71" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="47.57 42.43 46.63 42.23 46.67 42.06 47.61 42.26 47.57 42.43" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="47.63 42.14 46.67 42.04 46.68 41.87 47.65 41.97 47.63 42.14" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="46.69" y="41.67" width=".97" height=".17" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="46.68 41.67 46.67 41.5 47.63 41.4 47.65 41.57 46.68 41.67" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="46.64" y="41.2" width=".98" height=".17" transform="translate(-7.57 10.73) rotate(-12.03)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="46.57" y="40.98" width=".98" height=".17" transform="translate(-10.48 16.77) rotate(-18.22)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="46.57 41.11 46.5 40.96 47.39 40.56 47.46 40.72 46.57 41.11" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="46.5 40.93 46.41 40.78 47.26 40.3 47.34 40.45 46.5 40.93" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="46.41 40.77 46.3 40.63 47.08 40.06 47.18 40.2 46.41 40.77" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="46.29 40.62 46.17 40.49 46.9 39.84 47.01 39.97 46.29 40.62" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="45.94" y="39.97" width=".98" height=".17" transform="translate(-14.37 48.06) rotate(-48.29)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="46.02 40.35 45.88 40.24 46.45 39.47 46.59 39.57 46.02 40.35" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="45.87 40.24 45.72 40.15 46.2 39.31 46.35 39.4 45.87 40.24" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="45.71 40.15 45.55 40.08 45.95 39.19 46.1 39.26 45.71 40.15" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="45.12" y="39.5" width=".97" height=".17" transform="translate(-6.42 70.24) rotate(-71.46)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m45.77,42.57s-.25-.14-.41-.14-.83-.04-1.1.04c-.15.05-.28.18-.28.18,0,0,.18.18.54.22.37.02.6,0,.79-.06.22-.06.46-.23.46-.23" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m44.03,42.3s.03-.5.37-1.12c0,0-.11.18-.18.33,0,0-.19.1-.31-.04-.11-.11-.05-.17.04-.34.08-.14.06-.28.17-.37.09-.09.17-.1.41-.1s.39.03.6.31c.18.24.28.47.37.6.2.32.2.7.2.7l.06.3s-.26-.14-.41-.14-.83-.04-1.1.04c-.15.05-.28.18-.28.18,0,0-.1-.23.05-.34" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m44.75,45.13v-2.64s.09-.08.29,0v2.61s.06,2-.15,1.99c-.26,0-.14-.46-.14-1.96" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m42.13,42.91l.05.1-.51.22.08.18-.08.02c-.05-.11-.09-.15-.22-.13l-.04-.08.71-.32Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m41.58,42.69s-.08-.08-.09-.14c-.03-.13.02-.27.19-.31.08-.02.27-.02.33.22.03.1.01.23-.15.29l-.02-.1c.09-.02.11-.1.09-.19-.02-.1-.11-.14-.22-.11-.1.03-.14.11-.13.2.01.05.05.1.11.13v.08s-.42.04-.42.04l-.09-.39h.1s.08.31.08.31h.22Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m41.37,41.27c-.13,0-.18.09-.18.18-.01.08,0,.19.11.2.08,0,.1-.05.11-.09l.08-.23c.03-.1.1-.17.22-.15.19.01.23.19.22.33-.01.14-.06.2-.09.23-.08.06-.14.08-.22.06v-.1c.15.01.2-.1.22-.2.01-.08,0-.2-.12-.22-.09-.01-.11.03-.15.15l-.05.17c-.03.05-.06.17-.2.15-.13-.01-.24-.1-.23-.29.02-.28.19-.29.28-.29v.1h0Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="41.34 40.77 41.56 40.84 41.7 40.42 41.79 40.46 41.65 40.87 41.91 40.96 42.06 40.5 42.15 40.53 41.97 41.09 41.21 40.84 41.39 40.28 41.49 40.32 41.34 40.77" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m41.9,39.71s.04.02.06.03c.08.05.08.12.03.19l-.1.17-.22-.13.12-.18s.07-.08.12-.07m-.05-.12c-.06.01-.12.06-.16.12l-.17.3.67.42.06-.08-.29-.18.13-.21c.09-.15.03-.28-.07-.34-.05-.03-.11-.04-.17-.03" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="42.79 39.63 42.72 39.71 42.21 39.23 42.02 39.42 41.96 39.35 42.41 38.88 42.48 38.95 42.29 39.15 42.79 39.63" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="43.06 39.41 42.58 38.77 42.66 38.7 43.14 39.34 43.06 39.41" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="43.04 38.56 43.16 38.78 43.55 38.58 43.59 38.67 43.21 38.87 43.32 39.1 43.76 38.88 43.79 38.96 43.27 39.24 42.9 38.53 43.42 38.26 43.46 38.35 43.04 38.56" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m44.52,38.78l-.1-.46s-.01-.11-.04-.19l-.08.7-.1.03-.37-.61c.01.08.04.18.05.19l.1.47h-.1s-.18-.76-.18-.76l.15-.02.37.61.08-.71.15-.04.17.79h-.1Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m44.89,38.41l.19.02c.08,0,.17.03.17.13,0,.08-.06.13-.17.13l-.2-.02v-.26Zm.02-.33l.18.02c.11,0,.16.03.16.11-.01.09-.06.11-.17.1h-.18l.02-.23Zm-.12-.11l-.04.8h.34c.18.02.28-.07.28-.2.01-.14-.09-.18-.14-.2.09-.04.11-.11.11-.16.01-.12-.06-.21-.21-.22h-.35s0,0,0,0Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m45.78,38.18l.23.08c.05.01.13.03.09.15-.02.1-.1.1-.17.08l-.22-.06.07-.25Zm-.1-.14l-.21.78.1.03.08-.33.26.07c.13.04.11.11.1.17-.01.02-.05.14-.04.19l.13.04h0s-.02-.05,0-.1l.02-.14c.04-.1,0-.14-.04-.17.05-.03.13-.04.16-.16.05-.17-.07-.24-.19-.28l-.36-.12Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="46.62 38.5 46.5 38.7 46.88 38.93 46.83 39.01 46.45 38.79 46.32 39.02 46.73 39.27 46.69 39.34 46.18 39.05 46.57 38.36 47.08 38.65 47.03 38.74 46.62 38.5" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m47.58,39.26l.12.15c.09.1.08.21-.06.34-.14.11-.27.11-.36,0l-.12-.14.42-.36Zm0-.17l-.61.51.2.26c.18.19.39.11.53,0,.18-.14.22-.35.08-.51l-.21-.24Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="48.14 39.98 47.91 40.09 48.11 40.48 48.02 40.53 47.83 40.13 47.59 40.25 47.81 40.68 47.72 40.72 47.45 40.19 48.16 39.84 48.43 40.36 48.34 40.4 48.14 39.98" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m47.86,41.41v-.1s.54-.08.54-.08l-.02-.18h.08c.04.11.05.15.18.16v.08s-.76.11-.76.11Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m48.46,41.81c.05,0,.11.03.1.13,0,.1-.06.13-.1.13-.06-.01-.12-.07-.12-.15,0-.06.05-.11.12-.11m-.35-.04c.06,0,.13.05.12.15,0,.08-.03.14-.14.14-.11,0-.13-.09-.13-.16,0-.11.08-.14.15-.14m0-.13s-.11,0-.18.07c-.05.06-.06.14-.06.19-.01.18.11.27.23.27.06.01.15,0,.2-.11.01.04.05.1.16.1.1.01.21-.05.21-.23.01-.18-.11-.25-.2-.25-.08,0-.13.03-.16.11-.03-.09-.09-.14-.19-.16" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m48.34,42.35c.26.06.23.26.22.33-.04.13-.15.22-.29.18-.13-.03-.17-.13-.2-.27l-.03-.09c-.02-.12-.08-.15-.11-.17l-.1.42-.09-.03.13-.52c.17.05.23.14.27.26l.03.12c.03.09.05.16.15.18.05.03.14,0,.17-.11.04-.14-.09-.18-.14-.19v-.1Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m47.57,43.11l.05-.1.5.24.08-.17.08.02c-.05.13-.06.18.04.26l-.03.08-.71-.33Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m45.56,51.52c-.92,0-1.83-.01-2.72-.03-1.54-.02-3.14-.05-4.77,0-.04,0-.07,0-.19,0-.08,0-.21,0-.44,0-.15,0-.26,0-.38,0-.09,0-.18,0-.29,0-.54,0-1.07,0-1.62-.01-.5,0-1.03,0-1.61-.01h-.3s1.18-2.01,1.18-2.01l.11.02s.13-.05.36-.22l.04-.03c.05-.03.1-.1.13-.16.04-.07.08-.13.14-.19.08-.09.25-.19.42-.28.06-.03.12-.06.16-.09.62-.38.87-.59,1.27-1.12.62-.86,1.33-1.5,2.14-1.96.34-.2.82-.11,1.12.02.09.04.17.11.26.17l.08.06c.31.24.74.44,1.37.63.42.13.63.36.85.61.1.12.21.24.35.36.21.19.44.34.68.46.05.02.08.07.12.11,0,.01.02.03.03.04.1.07.2.14.3.21.15.1.32.21.45.33.41.37.8.75,1.18,1.14.05.05.08.11.11.17.01.02.03.06.04.07l.11.1c.25.24.49.48.78.61.26.13.49.28.72.43.1.07.2.13.3.19l.49.3-.57.02c-.82.03-1.62.04-2.42.04m-5.42-.4c.92,0,1.83.01,2.71.03,1.48.02,3.01.05,4.57,0-.17-.11-.34-.21-.52-.3-.34-.16-.61-.42-.87-.67l-.1-.1c-.05-.04-.09-.11-.12-.17-.01-.02-.03-.06-.04-.07-.38-.39-.76-.76-1.17-1.13-.12-.1-.26-.2-.41-.3-.11-.07-.22-.15-.33-.23-.02,0-.05-.05-.09-.1,0-.01-.02-.03-.03-.04-.24-.11-.49-.28-.73-.49-.15-.14-.27-.27-.38-.39-.21-.24-.36-.41-.69-.51-.67-.2-1.14-.42-1.49-.69l-.08-.06c-.07-.05-.14-.11-.18-.13-.24-.1-.6-.16-.81-.03-.78.43-1.44,1.04-2.04,1.86-.43.57-.71.8-1.36,1.2-.05.03-.11.06-.18.1-.11.06-.28.15-.33.21-.04.04-.06.08-.1.13-.06.1-.13.2-.24.27l-.03.02c-.2.15-.35.24-.48.28l-.77,1.31c.46,0,.89,0,1.31,0,.55,0,1.08,0,1.62.01.1,0,.18,0,.27,0,.13,0,.25-.01.4,0,.23,0,.36,0,.44,0,.08,0,.11,0,.15,0,.71-.02,1.41-.03,2.1-.03" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m47.86,51.39h-.05l-.07-.03-.16-.1c-.22-.14-.45-.29-.69-.41-.34-.16-.61-.42-.88-.68l-.1-.09c-.05-.04-.09-.11-.12-.17-.01-.02-.03-.06-.04-.07-.38-.39-.76-.76-1.16-1.13-.12-.1-.26-.2-.42-.3-.11-.07-.22-.15-.33-.23-.02,0-.05-.05-.09-.1-.01-.01-.02-.03-.03-.04-.23-.1-.49-.28-.73-.49-.14-.13-.25-.26-.36-.37-.11-.12-.21-.23-.32-.33l-.15-.12.14-.14c.16-.12.32-.24.52-.33.27-.16.68-.1.95.03.06.02.17.08.29.19.24.2.57.36,1.13.53.36.11.54.3.73.51.08.09.17.19.29.29.19.18.37.3.56.38l.05.04s.03.03.05.06c.01.02.03.04.04.05.05.03.13.08.2.13.14.09.29.19.43.31.38.36.69.66.98.95.04.04.07.1.09.14,0,.02.02.04.03.05l.07.06c.21.2.43.41.67.53.2.09.38.21.55.32.1.06.19.12.29.18l.5.29-.58.03c-.77.04-1.54.04-2.28.04m-5.15-4.64c.07.07.13.14.2.22.1.11.2.22.33.34.21.19.44.34.68.46.05.03.08.07.12.11,0,.01.02.03.03.04.1.07.2.14.3.21.16.1.32.21.45.33.41.37.8.75,1.18,1.14.05.05.08.11.11.17.01.02.03.06.04.07l.1.1c.25.25.49.48.79.61.26.13.5.28.73.43l.11.07c.55,0,1.11,0,1.68-.02-.11-.07-.22-.13-.34-.19-.3-.14-.53-.37-.76-.59l-.06-.05c-.06-.04-.09-.11-.11-.17,0-.01-.02-.04-.02-.04-.28-.29-.59-.59-.96-.94-.11-.1-.24-.18-.39-.27-.08-.05-.16-.1-.23-.16-.04-.04-.07-.08-.1-.11-.19-.08-.39-.22-.61-.42-.12-.1-.22-.21-.31-.31-.18-.19-.3-.33-.58-.41-.42-.13-.9-.31-1.25-.59-.13-.11-.19-.13-.2-.13-.24-.11-.52-.13-.66-.04-.1.05-.2.11-.28.16" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m50,51.28h-.05l-.04-.03c-.07-.04-.14-.09-.21-.14-.16-.1-.31-.2-.47-.27-.3-.14-.54-.37-.77-.59l-.05-.05c-.06-.04-.09-.11-.11-.17,0-.02-.02-.04-.02-.04-.28-.29-.59-.59-.96-.93-.11-.1-.25-.18-.39-.27-.08-.05-.16-.1-.24-.16-.04-.04-.07-.08-.1-.11-.19-.09-.39-.23-.61-.42-.12-.11-.22-.21-.31-.31-.18-.19-.3-.33-.58-.42-.13-.04-.23-.08-.32-.1l-.33-.08.26-.22c.14-.12.32-.24.53-.36.28-.16.66-.09.9.02.08.03.17.11.26.18.25.19.59.35,1.02.47.34.1.51.29.68.48.07.08.15.17.25.26.15.14.31.24.51.34l.08.08s.02.03.04.05c.06.05.13.09.2.13.13.09.26.18.38.28l.03.03c.3.27.58.53.87.83.04.04.07.1.09.13l.12.13c.18.17.35.34.56.44.2.09.37.2.54.31.08.05.16.11.24.15l.5.3-.58.02c-.65.02-1.28.04-1.9.04m-4.8-4.25c.37.11.55.31.73.51.08.09.17.19.29.29.19.18.37.3.56.38l.05.03s.03.03.05.07c.01.02.03.04.04.05.05.03.13.08.2.13.14.09.29.19.43.31.38.35.69.66.98.95.04.04.07.1.09.14,0,.02.02.04.03.05l.07.06c.21.2.43.41.68.53.19.08.35.19.51.3.05.04.11.07.16.11.43,0,.85,0,1.29-.02-.09-.05-.18-.1-.27-.15-.26-.12-.46-.31-.65-.5l-.1-.09s-.08-.1-.1-.14c0-.01-.02-.04-.02-.04-.28-.29-.56-.55-.85-.82l-.03-.03c-.1-.09-.21-.17-.34-.25-.07-.05-.14-.09-.21-.14-.02-.01-.06-.05-.1-.11-.22-.11-.39-.23-.55-.38-.11-.1-.19-.19-.28-.28-.16-.18-.27-.31-.52-.38-.47-.14-.85-.32-1.13-.53-.07-.06-.15-.13-.19-.14-.22-.1-.46-.11-.59-.04-.08.05-.15.09-.21.13" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m52.24,51.07h-.62v-.15l-.08.13-.1-.06c-.12-.08-.24-.15-.38-.22-.25-.12-.45-.31-.64-.5l-.1-.09s-.07-.1-.1-.14c0-.02-.02-.04-.02-.04-.28-.29-.55-.54-.84-.81l-.04-.04c-.1-.09-.21-.17-.34-.25-.07-.05-.14-.09-.21-.14-.02-.01-.06-.05-.1-.1-.22-.11-.4-.23-.55-.38-.13-.12-.23-.23-.32-.33l-.04-.05v-.16s.06-.05.06-.05c.21-.18.42-.33.64-.45.27-.15.61-.04.75.02.08.04.15.1.22.15.19.16.46.26.83.38.28.08.42.24.55.4.06.07.12.14.2.21.11.09.24.19.4.26l.05.03.05.06c.06.05.12.08.18.12.1.07.21.14.3.23.26.24.48.45.72.69.04.05.06.09.08.12.05.06.1.11.14.15.13.12.26.23.4.31.16.07.31.17.45.27.06.04.11.07.17.11l.48.3-.57.02c-.54.02-1.08.02-1.61.02h0Zm-4.08-3.25c.05.06.11.12.18.18.14.13.3.24.51.34l.08.08s.02.03.03.04c.06.04.13.09.19.13.13.09.26.18.38.29l.04.04c.3.27.58.53.86.82.04.04.07.1.09.14l.12.13c.18.17.35.34.56.43.15.08.28.16.41.24l.06.04c.52,0,1.06,0,1.59,0-.04-.02-.07-.04-.11-.05-.19-.1-.34-.24-.48-.36-.04-.04-.09-.08-.13-.12-.05-.05-.07-.1-.09-.14,0-.02-.02-.04-.02-.04-.22-.22-.44-.43-.68-.65-.09-.08-.18-.14-.27-.2-.06-.04-.13-.08-.19-.13-.02,0-.05-.04-.08-.07-.18-.09-.33-.2-.45-.3-.1-.09-.17-.17-.24-.25-.12-.14-.21-.24-.39-.29-.41-.13-.71-.25-.94-.44-.05-.04-.11-.09-.15-.11-.17-.07-.34-.08-.44-.03-.16.09-.3.19-.45.3" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m53.87,51.1l-.27-.19c-.13-.1-.27-.18-.43-.25-.19-.1-.34-.24-.48-.37-.04-.04-.09-.08-.13-.12-.05-.05-.07-.1-.09-.13,0-.02-.02-.04-.02-.04-.23-.22-.45-.44-.69-.67-.08-.07-.17-.13-.26-.19-.06-.04-.13-.08-.19-.13-.02,0-.05-.04-.08-.07-.18-.09-.33-.2-.45-.3-.1-.09-.18-.17-.24-.25-.06-.07-.11-.13-.17-.18l-.03.02-.11-.11.1-.15-.08-.11c.15-.12.28-.2.4-.26.16-.1.39-.1.66,0,.05.02.1.06.15.1l.05.04c.18.13.41.24.69.32.25.07.37.21.49.34.05.06.1.12.17.18.11.1.23.17.34.23l.06.05.03.04s.08.06.12.08c.1.06.21.13.3.22.2.19.41.38.61.59.04.04.06.09.08.12,0,.02,0,0-.02-.02l.08.07c.13.12.25.23.39.3.12.06.22.13.33.19.07.05.14.09.22.13l.52.29-.6.03c-.48.02-.95.02-1.42.03v.17Zm-3.23-3.1c.05.05.1.11.15.16.06.07.12.14.21.22.11.09.24.19.4.27l.05.04.05.06c.07.05.12.08.18.12.1.07.21.14.3.22.25.23.48.45.72.69.04.06.06.09.08.12.05.06.1.11.14.15.13.12.26.23.4.31.14.07.28.14.41.23.31,0,.63,0,.95,0,0,0-.02,0-.02-.01-.17-.09-.32-.22-.46-.35l-.06-.05s-.07-.09-.08-.12c-.2-.21-.4-.4-.61-.59-.07-.07-.15-.12-.24-.18-.05-.03-.09-.06-.13-.08-.03-.01-.06-.05-.08-.08-.13-.07-.26-.15-.38-.26-.08-.07-.14-.14-.2-.21-.1-.12-.17-.2-.32-.24-.32-.09-.59-.21-.8-.37-.02-.02-.04-.03-.06-.05-.02-.02-.04-.04-.06-.05-.15-.06-.29-.07-.37-.02-.05.03-.11.06-.16.1" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="44.36" y="39.04" width=".17" height=".98" transform="translate(-7.6 10.74) rotate(-12.7)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="42.99" y="44.69" width="2.57" height=".17" transform="translate(-9.72 77.18) rotate(-76.29)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="43.96 44.99 43.79 44.93 44.31 43.45 44.47 43.51 43.96 44.99" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="42.23" y="44.56" width="2.74" height=".17" transform="translate(-15.68 64.14) rotate(-63.88)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="42.8 45.46 42.65 45.37 43.94 43.28 44.08 43.37 42.8 45.46" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="42.06 45.57 41.93 45.47 43.78 43.17 43.92 43.28 42.06 45.57" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="41.68" y="43.91" width="2.4" height=".17" transform="translate(-18.53 45.96) rotate(-47.57)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="41.2 45.11 41.09 44.98 43.49 42.92 43.61 43.05 41.2 45.11" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="42.17 43.79 42.07 43.65 43.38 42.76 43.48 42.9 42.17 43.79" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="42.36" y="42.83" width="1.01" height=".17" transform="translate(-15.33 25.79) rotate(-28.64)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="42.31 42.99 42.25 42.83 43.19 42.43 43.26 42.59 42.31 42.99" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="42.15" y="42.4" width="1.02" height=".17" transform="translate(-10.8 14.79) rotate(-17.49)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="42.08" y="42.17" width="1.02" height=".17" transform="translate(-7.69 9.52) rotate(-11.7)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="42.05 42.15 42.03 41.98 43.06 41.88 43.07 42.05 42.05 42.15" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="42.03" y="41.69" width="1.03" height=".17" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="43.06 41.68 42.03 41.58 42.05 41.41 43.07 41.51 43.06 41.68" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="42.5" y="40.78" width=".17" height="1.03" transform="translate(-6.24 75) rotate(-78.73)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="42.57" y="40.56" width=".17" height="1.03" transform="translate(-9.21 69.65) rotate(-72.77)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="43.18 41.13 42.23 40.73 42.3 40.57 43.25 40.97 43.18 41.13" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="42.76" y="40.12" width=".17" height="1.02" transform="translate(-13.3 58.89) rotate(-61.49)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="43.35 40.79 42.53 40.21 42.63 40.07 43.45 40.64 43.35 40.79" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="43.48 40.63 42.71 39.98 42.83 39.85 43.59 40.5 43.48 40.63" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="43.24" y="39.57" width=".17" height="1" transform="translate(-15.69 40.67) rotate(-43.34)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="43.77 40.36 43.16 39.59 43.29 39.48 43.9 40.25 43.77 40.36" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="43.92 40.25 43.41 39.41 43.56 39.32 44.07 40.16 43.92 40.25" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="43.88" y="39.19" width=".17" height=".99" transform="translate(-12.72 22.51) rotate(-25.21)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<rect x="44.11" y="39.11" width=".17" height=".98" transform="translate(-10.72 17.11) rotate(-19.59)" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m53.02,44.3c.43-1.08.89-3.3.87-3.81-.09-2.09-.06-2.71-.26-4.85l-2.15,2.46c.05.83.06,1.08,0,1.61-.02.19-.14,1.13-.29,1.5l1.83,3.1Z" style="fill: #fff; stroke-width: 0px;"/>
<path d="m51.18,41.2c.15-.37.27-1.31.29-1.5.06-.52.05-.78,0-1.61l-1.33,1.46,1.03,1.64Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m56.56,43.34c.04-.48.08-1.02.08-1.26-.01-1.5.17-2.35,0-3.94-.13-1.25-.43-2.89-.37-4.24.03-.38-.05-.76-.06-1.13l-2.68,2.98c.19,2.14.17,2.76.25,4.85.03.51-.43,2.73-.87,3.81l.56.94,3.08-2.01Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m53.43,45.56l-.68-1.14.03-.07c.43-1.07.88-3.26.86-3.75-.03-.59-.04-1.06-.06-1.49-.04-1.06-.06-1.83-.2-3.36v-.07s2.96-3.31,2.96-3.31v.37c.02.14.03.27.05.42.02.24.05.48.03.73-.05.96.1,2.1.23,3.1.05.39.1.77.14,1.12.1,1.02.07,1.73.04,2.5-.02.45-.04.9-.04,1.45,0,.26-.04.85-.08,1.27v.07s-3.28,2.14-3.28,2.14Zm-.34-1.17l.44.74,2.89-1.89c.03-.41.07-.94.07-1.17,0-.56.02-1.02.04-1.47.03-.75.07-1.46-.04-2.45-.04-.35-.08-.72-.13-1.11-.13-1.02-.28-2.17-.24-3.16.02-.23,0-.46-.03-.69v-.08s-2.4,2.67-2.4,2.67c.13,1.5.16,2.26.2,3.31.01.42.03.89.05,1.48.02.51-.41,2.66-.85,3.8" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m54.79,47.27c.18-.29.33-1.13.37-1.3.09-.45.09-.7.06-1.47l-1.48.97,1.05,1.8Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m59.07,54.27c.17-.1.45-.39.54-.65.18-.51.14-.5.27-1.06.08-.32.08-.67.15-1.01.06-.33.54-1.39.55-1.82.05-1.39.51-2.33.39-3.85-.08-1.17-.34-2.76-.22-3.99.04-.33-.01-.71-.02-1.04l-3.01,1.96c.12,2.01.06,2.57.06,4.52.01.47-.41,2.38-.92,3.24l2.2,3.7Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m59.01,54.47l-2.33-3.9.05-.08c.49-.83.91-2.71.9-3.15,0-.51,0-.93,0-1.3,0-1.05.02-1.74-.07-3.22v-.09s3.3-2.15,3.3-2.15v.26c.01.09.02.19.03.29.02.26.04.53,0,.78-.09.85.02,1.9.12,2.84.04.4.08.78.1,1.12.07.9-.06,1.61-.19,2.3-.09.49-.18.99-.2,1.57,0,.29-.19.79-.35,1.24-.09.25-.18.49-.2.61-.04.16-.06.33-.07.5-.02.17-.04.35-.08.52-.04.17-.06.29-.08.39-.04.22-.07.33-.19.69-.11.3-.42.62-.6.73l-.13.08Zm-1.98-3.9l2.07,3.47c.14-.12.29-.31.35-.48.12-.34.14-.43.18-.65.02-.1.04-.22.08-.39.04-.15.05-.31.07-.48.02-.17.04-.35.08-.52.03-.13.11-.37.21-.65.15-.4.33-.9.33-1.15.02-.59.12-1.11.21-1.61.13-.7.25-1.36.19-2.22-.02-.34-.06-.72-.1-1.11-.1-.95-.21-2.02-.11-2.9.03-.22,0-.48,0-.72,0-.01,0-.02,0-.04l-2.72,1.77c.08,1.43.07,2.12.07,3.15,0,.37,0,.78,0,1.29.01.5-.4,2.35-.89,3.23" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m54.01,55.43c-.56.51-1.59.78-1.76.89-.37.27-.92.66-1.85.71-.69.05-.99-.13-1.7-.22-.8-.1.1.02-.68-.14-.39-.1-.39-.17-.93-.29-.39-.09-.79-.19-1.03-.52-.09-.13-.17-.23-.18-.43h-.54c-.05.15.1.45.15.55.04.05.1.14.14.19.08.17.06.13.2.25.04.03.2.17.26.19.1.08.2.18.32.19.52.09.74.2,1.24.34.47.14.22.11.57.2.18.04.54.18.71.2.32.05.37.1.7.18.85.19,1.68.14,2.52.09.34-.02,1.18-.2,1.48-.41.52-.37,1.67-.51,2.18-.87.08-.05.4-.2.46-.27.5-.41.89-.52,1.41-.85h-3.69Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m51.03,58.03c-.46,0-.93-.03-1.41-.14-.15-.03-.24-.06-.32-.09-.11-.03-.19-.06-.37-.09-.11-.02-.27-.07-.43-.12-.11-.04-.22-.07-.29-.09-.19-.05-.23-.07-.28-.1-.03-.02-.08-.04-.3-.11-.17-.05-.31-.1-.44-.14-.24-.08-.44-.15-.78-.2-.13-.01-.23-.1-.33-.17l-.06-.05s-.08-.06-.18-.13c-.03-.02-.06-.04-.07-.05l-.09-.07c-.09-.07-.11-.1-.17-.24l-.14-.2c-.11-.22-.21-.47-.15-.65l.03-.1h.78v.14c.02.15.07.23.15.34.21.29.54.38.95.48.31.07.45.13.58.18.1.04.19.07.36.12.19.04.31.07.38.1l.28.04c.26.03.47.08.65.12.33.07.6.13,1.01.1.89-.05,1.42-.43,1.77-.68.06-.04.17-.09.37-.16.37-.14,1-.38,1.37-.72l.04-.04h4.27l-.44.28c-.21.13-.39.23-.57.32-.28.14-.54.28-.83.52-.04.04-.15.1-.32.2-.06.03-.12.06-.15.08-.27.19-.68.31-1.11.44-.4.12-.82.25-1.06.42-.32.22-1.19.41-1.55.43-.38.02-.77.05-1.16.05m-5.07-1.71s.03.02.07.05c.05.04.12.1.15.11l.09.07c.06.05.13.11.18.11.36.06.58.13.83.21.13.04.26.09.43.13.26.08.32.11.37.14.03.02.05.03.2.07.08.02.19.05.32.09.14.04.29.1.38.11.2.03.3.06.41.1.08.02.17.05.3.08.83.19,1.63.14,2.47.09.34-.02,1.15-.2,1.41-.38.28-.2.72-.33,1.15-.46.39-.12.8-.24,1.03-.4.03-.02.1-.06.18-.1.08-.04.23-.12.26-.15.33-.27.6-.41.89-.57.02-.01.04-.02.06-.03h-3.07c-.42.36-1.04.59-1.42.74-.13.05-.27.1-.31.13-.38.27-.95.69-1.92.74-.46.03-.76-.03-1.1-.1-.19-.04-.38-.08-.62-.11l-.3-.04s-.11-.01-.15-.05c-.04-.01-.12-.03-.24-.05-.19-.05-.29-.09-.4-.13-.12-.05-.25-.1-.54-.17-.37-.08-.83-.19-1.12-.58-.08-.11-.15-.22-.19-.37h-.25c.02.06.05.16.13.32l.13.18q.06.13.11.17l.08.07Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m49.97,55.43c-.37.19-.55.51-1.57.83-.4,0-.83.18-1.2.17.45.1.46.17.83.26.78.17-.13.04.68.14.7.09,1.01.27,1.69.22.93-.05,1.48-.45,1.85-.71.17-.11,1.2-.38,1.76-.89h-4.04Z" style="fill: #fff; stroke-width: 0px;"/>
<polygon points="53.58 45.32 53.58 45.32 60.73 40.69 60.86 40.88 53.75 45.57 53.58 45.32" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m56.18,32.41c-.01-.28-.17-.61-.36-.6-.01,0-.17-.01-.24.03-.11.02-.13.08-.15.18-.05.25.27.33.48.36.05,0,.2-.01.24.05.06.09.02.06.06.09-.04,0-.08-.04-.1-.05-.18-.05-.33-.05-.57-.09-.17-.02-.27-.36-.18-.47.09-.13.47-.22.59-.14.24.16.32.45.34.75-.01-.06-.1-.04-.11-.1" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m57.55,31.12s-.64.46-1.21.61c0,0,.09.52,0,.69,0,0,.51-.22.76-.15,0,0,.13-.78.45-1.15" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m56.43,32.95s-.19-.2-.26-.28c-.04-.05.09.28-.02.36-.11.24-.04.68-.01.8.2.01.38.08.62-.13.09-.08-.02-.24-.1-.38-.04-.08-.11-.28-.23-.37" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m55.23,44.65l2.48-1.65s.66,5.77-.74,7.95l-2.18-3.68s.71-1.78.44-2.62" style="fill: #fff; stroke-width: 0px;"/>
<path d="m45.69,55.43s1.13,2.3,4.28,0h-4.28Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="49.96 39.38 49.96 39.38 56.23 32.41 56.36 32.56 50.15 39.56 49.96 39.38" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m46.76,35.05c-1.99-1.23-3.77-.02-3.79,0l-.1-.14s1.89-1.29,3.98,0l-.09.15Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m46.71,34.38c-2-1.23-3.77-.02-3.79,0l-.1-.14s1.89-1.29,3.98,0l-.09.15Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m46.26,33.61c-1.53-.94-2.9-.01-2.92,0l-.1-.14s1.48-1.01,3.1,0l-.09.15Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m37,60.26c-.18-.04-.3-.13-.36-.26-.12-.27.08-.61.09-.63l.11.07s-.17.3-.08.51c.04.09.13.15.27.19l-.03.13Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m52.73,60.12s.78,0,.22-.79" style="fill: none; stroke: #d2d2d2; stroke-miterlimit: 10; stroke-width: .06px;"/>
<path d="m52.73,60.16h0v-.07s.28,0,.36-.16c.07-.12,0-.32-.17-.58l.05-.04c.2.28.26.49.18.65-.1.19-.39.2-.42.2Z" style="fill: none; stroke: #d2d2d2; stroke-miterlimit: 10; stroke-width: .06px;"/>
<path d="m59.67,55.43h-29.55l14.77-24.71,14.78,24.71Zm-14.78-23.1l-13.33,22.3h26.67l-13.34-22.3Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="44.97 9.18 46.02 11.32 48.38 11.66 46.67 13.32 47.08 15.67 44.97 14.56 42.85 15.67 43.26 13.32 41.55 11.66 43.91 11.32 44.97 9.18" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="44.97 9.18 46.02 11.32 48.38 11.66 46.67 13.32 47.08 15.67 44.97 14.56 42.85 15.67 43.26 13.32 41.55 11.66 43.91 11.32 44.97 9.18" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="60.34 13.14 61.39 15.28 63.75 15.62 62.04 17.28 62.45 19.64 60.34 18.53 58.22 19.64 58.63 17.28 56.92 15.62 59.28 15.28 60.34 13.14" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="72.23 22.77 73.29 24.91 75.65 25.25 73.94 26.92 74.34 29.27 72.23 28.16 70.12 29.27 70.53 26.92 68.82 25.25 71.18 24.91 72.23 22.77" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="79.29 36.57 80.34 38.7 82.7 39.05 80.99 40.71 81.4 43.06 79.29 41.95 77.17 43.06 77.58 40.71 75.87 39.05 78.23 38.7 79.29 36.57" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="79.29 52.57 80.35 54.71 82.71 55.06 81 56.72 81.4 59.07 79.29 57.96 77.18 59.07 77.58 56.72 75.87 55.06 78.23 54.71 79.29 52.57" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="72.25 66.43 73.3 68.57 75.66 68.91 73.96 70.58 74.36 72.93 72.25 71.82 70.14 72.93 70.54 70.58 68.83 68.91 71.19 68.57 72.25 66.43" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="60.41 76.07 61.47 78.21 63.83 78.56 62.12 80.22 62.52 82.57 60.41 81.46 58.3 82.57 58.7 80.22 56.99 78.56 59.35 78.21 60.41 76.07" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="44.81 79.46 45.87 81.6 48.23 81.94 46.52 83.6 46.92 85.96 44.81 84.85 42.7 85.96 43.11 83.6 41.4 81.94 43.76 81.6 44.81 79.46" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="29.56 76.08 30.62 78.22 32.98 78.57 31.27 80.23 31.67 82.58 29.56 81.47 27.45 82.58 27.85 80.23 26.15 78.57 28.51 78.22 29.56 76.08" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="17.72 66.45 18.78 68.59 21.14 68.93 19.43 70.59 19.83 72.95 17.72 71.84 15.61 72.95 16.01 70.59 14.3 68.93 16.66 68.59 17.72 66.45" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="10.67 52.68 11.72 54.82 14.08 55.16 12.38 56.82 12.78 59.17 10.67 58.06 8.56 59.17 8.96 56.82 7.25 55.16 9.61 54.82 10.67 52.68" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="10.67 36.57 11.72 38.7 14.08 39.05 12.38 40.71 12.78 43.06 10.67 41.95 8.56 43.06 8.96 40.71 7.25 39.05 9.61 38.7 10.67 36.57" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="17.82 22.79 18.88 24.93 21.24 25.27 19.53 26.94 19.93 29.29 17.82 28.18 15.71 29.29 16.12 26.94 14.41 25.27 16.77 24.93 17.82 22.79" style="fill: #d2d2d2; stroke-width: 0px;"/>
<polygon points="29.54 13.15 30.6 15.29 32.96 15.63 31.25 17.3 31.65 19.65 29.54 18.54 27.43 19.65 27.84 17.3 26.13 15.63 28.49 15.29 29.54 13.15" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m8.34,103.99c-1.4.72-3.2.89-3.8.89-3.1,0-4.55-2.39-4.55-4.46s1.49-4.79,4.94-4.79c1.52,0,2.52.48,2.82.48.13,0,.24-.03.33-.1h.2v2.29h-.28c-.38-1.77-1.59-2.32-2.9-2.32-2.49,0-3.77,2.07-3.77,4.35,0,2.9,2.04,4.19,3.67,4.19.65,0,1.37-.14,2.17-.54v-1.78c0-.81-.28-1.08-1.13-1.08h-.52v-.25h3.82v.25c-.71.04-.99.28-.99.89v1.97Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m14.4,104.88c-2.77,0-5.11-1.78-5.11-4.43,0-2.82,2.17-4.82,5.18-4.82,2.68,0,4.97,1.83,4.97,4.38,0,2.86-2.29,4.87-5.04,4.87m-.3-8.89c-2.49,0-3.48,2.32-3.48,4.02,0,2.65,1.8,4.52,4.08,4.52s3.41-2.04,3.41-4.05c0-2.63-1.67-4.49-4.01-4.49" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m20.78,97.35c0-.81-.1-1.23-1.09-1.23h-.49v-.27c.4-.01,1.37-.07,1.78-.08.78-.03,1.85-.04,2.12-.04,1.25,0,2.34.18,2.85.55.58.41.86.89.86,1.57,0,.81-.67,1.56-1.61,1.73v.03c1.33.4,2.11,1.26,2.11,2.36s-.78,2.69-3.06,2.69h-5.18v-.27h.33c1.16,0,1.39-.27,1.39-1.16v-5.88Zm1.17,2.18h1.54c1.36,0,2.04-.54,2.04-1.64,0-.99-.6-1.9-2.34-1.9-.31,0-.89.03-1.25.04v3.5Zm0,3.29c0,1.08.42,1.46,1.61,1.46,1.87,0,2.41-1.16,2.41-2.27s-.84-2.21-2.49-2.21h-1.53v3.02Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m31,104.66h-3.44v-.27c.88-.04,1.06-.27,1.06-1.22v-6.03c0-.76-.27-.98-1.06-1.02v-.27h3.44v.27c-.89,0-1.2.2-1.2,1.15v6c0,.84.23,1.12,1.2,1.12v.27Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m37.9,101.47h-.27c-.11-1.01-.38-1.12-.96-1.12h-2.39v3.02c0,.65.24.78.76.78h2.18c.99,0,1.29-.38,1.64-1.6h.25l-.23,2.11h-7.52v-.27h.4c1.13,0,1.33-.31,1.33-1.16v-5.98c0-.79-.18-1.13-1.13-1.13h-.31v-.27h6.8l.11,1.97h-.25c-.18-1.2-.54-1.46-1.05-1.46h-2.99v3.48h2.54c.51,0,.75-.24.82-1.06h.27v2.69Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m41.42,103.32c0,.85.34,1.06,1.13,1.06h.33v.27h-4.01v-.27h.24c.84,0,1.13-.23,1.13-1.17v-5.96c0-.88-.24-1.13-1.06-1.13h-.31v-.27c.34,0,1.2-.06,1.78-.08.58-.03.86-.04,1.78-.04,2.62,0,3.8,1.08,3.8,2.52,0,1.06-.72,1.95-1.88,2.29.52.41.95.81,1.61,1.47l1.12,1.12c.84.84,1.7,1.36,2.79,1.43v.25c-2.48.11-3.12-.42-4.38-1.68l-.93-.93c-.62-.62-1.12-1.03-1.46-1.26-.35.01-.58.03-.96.03-.31,0-.49-.01-.72-.03v2.39Zm0-2.66c.34.04.55.03.88.03,1.57,0,2.61-.67,2.61-2.37,0-1.32-.59-2.34-2.77-2.34-.27,0-.45,0-.71.03v4.64Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m57.85,104.9l-7.33-7.67v6.07c0,1.02.23,1.23,1.43,1.23v.27h-3.29v-.27h.06c.88,0,1.16-.3,1.16-.95v-6.97c-.33-.23-.69-.34-1.19-.35v-.27h2.22l6.67,6.95v-5.64c0-.86-.25-1.02-1.39-1.05v-.27h3.31v.27c-1.06,0-1.29.18-1.29.74v7.9h-.37Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m64.28,104.88c-2.77,0-5.11-1.78-5.11-4.43,0-2.82,2.17-4.82,5.18-4.82,2.68,0,4.97,1.83,4.97,4.38,0,2.86-2.29,4.87-5.04,4.87m-.3-8.89c-2.49,0-3.48,2.32-3.48,4.02,0,2.65,1.8,4.52,4.08,4.52s3.41-2.04,3.41-4.05c0-2.63-1.67-4.49-4.01-4.49" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m74.11,97.26c0-.92-.24-1.15-1.08-1.15h-.28v-.27c.52-.03,1.22-.06,2-.08.78-.03,1.64-.04,2.38-.04,3.74,0,5.39,1.9,5.39,4.23,0,2.14-1.66,4.7-5.24,4.7h-4.53v-.27h.24c.77,0,1.12-.21,1.12-1.03v-6.09Zm1.17,6.34c0,.58.04.78,1.16.78,1.9,0,2.69-.27,3.57-1.15.52-.51,1.17-1.6,1.17-3.06,0-1.05-.3-2.21-1.13-3.04-.65-.65-1.66-1.15-3.64-1.15-.58,0-.96.04-1.13.06v7.56Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m88.74,101.47h-.27c-.11-1.01-.38-1.12-.96-1.12h-2.39v3.02c0,.65.24.78.76.78h2.18c.99,0,1.29-.38,1.64-1.6h.25l-.23,2.11h-7.52v-.27h.4c1.13,0,1.33-.31,1.33-1.16v-5.98c0-.79-.18-1.13-1.13-1.13h-.31v-.27h6.8l.11,1.97h-.25c-.18-1.2-.54-1.46-1.05-1.46h-2.99v3.48h2.54c.51,0,.75-.24.82-1.06h.27v2.69Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m6.67,114.9h-.27c-.11-1.02-.39-1.14-.98-1.14h-2.43v3.06c0,.66.24.79.78.79h2.21c1.01,0,1.31-.39,1.67-1.62h.26l-.23,2.14H.05v-.27h.4c1.15,0,1.35-.32,1.35-1.18v-6.06c0-.8-.19-1.15-1.15-1.15h-.32v-.27h6.9l.11,2h-.26c-.19-1.22-.55-1.48-1.06-1.48h-3.03v3.54h2.57c.52,0,.76-.24.83-1.08h.27v2.73Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m14.82,118.14h-6.42v-.27h.47c.66,0,.91-.21.91-.95v-6.37c0-.76-.23-1.08-1.14-1.08h-.2v-.27h4.24v.27h-.53c-.93,0-1.18.1-1.18.99v6.62c0,.39.16.53.58.53h2.11c.85,0,1.11-.33,2.01-1.58h.26l-1.11,2.1Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m20.08,115.95c.3,1.28,1.31,2.03,2.43,2.03.96,0,1.98-.56,1.98-1.7,0-2.07-4.61-2.7-4.61-5.21,0-1.19,1.09-2.08,2.56-2.08,1.21,0,1.45.36,1.96.36.11,0,.17-.03.26-.14h.23l.24,1.82h-.24c-.4-1.03-1.32-1.7-2.31-1.7s-1.61.55-1.61,1.35c0,2.04,4.61,2.59,4.61,5.23,0,1.41-1.25,2.46-2.93,2.46-.79,0-1.8-.39-2-.39-.13,0-.23.07-.29.16h-.24l-.3-2.18h.27Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m28.89,114.17l-.83,2.26c-.1.27-.29.7-.29.9,0,.39.37.53,1.16.53h.23v.27h-3.32v-.27c.93-.01,1.09-.17,1.55-1.42l2.61-7.14-.13-.32h1.25l3,7.98c.29.76.59.9,1.31.9v.27h-3.95v-.27h.37c.82,0,1.12-.09,1.12-.49,0-.23-.1-.45-.16-.59l-.96-2.61h-2.97Zm1.46-3.98l-1.22,3.35h2.49l-1.27-3.35Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m41.8,118.14h-6.42v-.27h.47c.66,0,.91-.21.91-.95v-6.37c0-.76-.23-1.08-1.14-1.08h-.2v-.27h4.24v.27h-.53c-.93,0-1.18.1-1.18.99v6.62c0,.39.16.53.58.53h2.11c.85,0,1.11-.33,2.01-1.58h.26l-1.11,2.1Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m45.06,118.37l-3.12-7.77c-.36-.91-.53-1.12-1.41-1.12v-.27h3.95v.27c-1.32.03-1.64.33-1.36.99l2.59,6.44,2.27-5.93c.16-.4.24-.69.24-.89,0-.43-.36-.6-1.34-.6v-.27h3.33v.27c-.75,0-1.14.35-1.48,1.24l-2.96,7.66h-.72Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m51.6,114.17l-.83,2.26c-.1.27-.29.7-.29.9,0,.39.37.53,1.16.53h.23v.27h-3.32v-.27c.93-.01,1.09-.17,1.55-1.42l2.61-7.14-.13-.32h1.25l3,7.98c.29.76.59.9,1.31.9v.27h-3.95v-.27h.37c.82,0,1.12-.09,1.12-.49,0-.23-.1-.45-.16-.59l-.96-2.61h-2.97Zm1.46-3.98l-1.22,3.35h2.49l-1.27-3.35Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m59.38,110.64c0-.93-.24-1.16-1.09-1.16h-.29v-.27c.53-.03,1.24-.06,2.03-.09.79-.03,1.67-.04,2.41-.04,3.79,0,5.47,1.92,5.47,4.3,0,2.17-1.68,4.77-5.32,4.77h-4.6v-.27h.24c.78,0,1.14-.21,1.14-1.05v-6.18Zm1.19,6.44c0,.59.04.79,1.18.79,1.92,0,2.73-.27,3.62-1.16.53-.52,1.19-1.62,1.19-3.1,0-1.06-.3-2.24-1.15-3.09-.66-.66-1.68-1.16-3.69-1.16-.59,0-.98.04-1.15.06v7.67Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m73.74,118.37c-2.82,0-5.19-1.81-5.19-4.5,0-2.86,2.2-4.89,5.26-4.89,2.72,0,5.04,1.85,5.04,4.44,0,2.9-2.33,4.94-5.11,4.94m-.3-9.02c-2.53,0-3.54,2.36-3.54,4.08,0,2.69,1.83,4.58,4.14,4.58s3.46-2.07,3.46-4.11c0-2.67-1.7-4.55-4.07-4.55" style="fill: #d2d2d2; stroke-width: 0px;"/>
<path d="m81.33,116.79c0,.86.35,1.08,1.15,1.08h.33v.27h-4.07v-.27h.24c.85,0,1.15-.23,1.15-1.19v-6.05c0-.89-.25-1.15-1.08-1.15h-.32v-.27c.35,0,1.22-.06,1.81-.09.59-.03.88-.04,1.81-.04,2.66,0,3.85,1.09,3.85,2.56,0,1.08-.73,1.98-1.91,2.33.53.42.96.82,1.64,1.49l1.13,1.14c.85.85,1.72,1.38,2.83,1.45v.26c-2.52.12-3.16-.43-4.44-1.71l-.95-.95c-.63-.63-1.14-1.05-1.48-1.28-.36.01-.59.03-.98.03-.32,0-.5-.01-.73-.03v2.43Zm0-2.7c.35.04.56.03.89.03,1.6,0,2.64-.68,2.64-2.4,0-1.34-.6-2.37-2.82-2.37-.27,0-.46,0-.72.03v4.71Z" style="fill: #d2d2d2; stroke-width: 0px;"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 78 KiB

View file

@ -27,6 +27,11 @@
try_files $uri =404;
expires 5m;
}
# only cache /resources/customize.* for 5 minutes since it changes often
location /resources/customize. {
try_files $uri =404;
expires 5m;
}
location @index-redirect {
rewrite (.*) /$lang/index.html;

View file

@ -6,7 +6,6 @@ listen=1
discover=1
par=16
dbcache=8192
maxmempool=4096
mempoolfullrbf=1
maxconnections=100
onion=127.0.0.1:9050
@ -20,6 +19,7 @@ whitelist=2401:b140::/32
[main]
mempoolexpiry=999999
maxmempool=4096
rpcbind=127.0.0.1:8332
rpcbind=[::1]:8332
bind=0.0.0.0:8333
@ -38,6 +38,14 @@ zmqpubrawtx=tcp://127.0.0.1:8335
#addnode=[2401:b140:2::92:204]:8333
#addnode=[2401:b140:2::92:205]:8333
#addnode=[2401:b140:2::92:206]:8333
#addnode=[2401:b140:2::92:207]:8333
#addnode=[2401:b140:2::92:208]:8333
#addnode=[2401:b140:2::92:209]:8333
#addnode=[2401:b140:2::92:210]:8333
#addnode=[2401:b140:2::92:211]:8333
#addnode=[2401:b140:2::92:212]:8333
#addnode=[2401:b140:2::92:213]:8333
#addnode=[2401:b140:2::92:214]:8333
#addnode=[2401:b140:3::92:201]:8333
#addnode=[2401:b140:3::92:202]:8333
#addnode=[2401:b140:3::92:203]:8333
@ -50,6 +58,12 @@ zmqpubrawtx=tcp://127.0.0.1:8335
#addnode=[2401:b140:4::92:204]:8333
#addnode=[2401:b140:4::92:205]:8333
#addnode=[2401:b140:4::92:206]:8333
#addnode=[2401:b140:4::92:207]:8333
#addnode=[2401:b140:4::92:208]:8333
#addnode=[2401:b140:4::92:209]:8333
#addnode=[2401:b140:4::92:210]:8333
#addnode=[2401:b140:4::92:211]:8333
#addnode=[2401:b140:4::92:212]:8333
[test]
daemon=1
@ -71,6 +85,14 @@ zmqpubrawtx=tcp://127.0.0.1:18335
#addnode=[2401:b140:2::92:204]:18333
#addnode=[2401:b140:2::92:205]:18333
#addnode=[2401:b140:2::92:206]:18333
#addnode=[2401:b140:2::92:207]:18333
#addnode=[2401:b140:2::92:208]:18333
#addnode=[2401:b140:2::92:209]:18333
#addnode=[2401:b140:2::92:210]:18333
#addnode=[2401:b140:2::92:211]:18333
#addnode=[2401:b140:2::92:212]:18333
#addnode=[2401:b140:2::92:213]:18333
#addnode=[2401:b140:2::92:214]:18333
#addnode=[2401:b140:3::92:201]:18333
#addnode=[2401:b140:3::92:202]:18333
#addnode=[2401:b140:3::92:203]:18333
@ -83,39 +105,12 @@ zmqpubrawtx=tcp://127.0.0.1:18335
#addnode=[2401:b140:4::92:204]:18333
#addnode=[2401:b140:4::92:205]:18333
#addnode=[2401:b140:4::92:206]:18333
[testnet4]
daemon=1
rpcbind=127.0.0.1:48332
rpcbind=[::1]:48332
bind=0.0.0.0:48333
bind=[::]:48333
zmqpubrawblock=tcp://127.0.0.1:48334
zmqpubrawtx=tcp://127.0.0.1:48335
#addnode=[2401:b140:1::92:201]:48333
#addnode=[2401:b140:1::92:202]:48333
#addnode=[2401:b140:1::92:203]:48333
#addnode=[2401:b140:1::92:204]:48333
#addnode=[2401:b140:1::92:205]:48333
#addnode=[2401:b140:1::92:206]:48333
#addnode=[2401:b140:2::92:201]:48333
#addnode=[2401:b140:2::92:202]:48333
#addnode=[2401:b140:2::92:203]:48333
#addnode=[2401:b140:2::92:204]:48333
#addnode=[2401:b140:2::92:205]:48333
#addnode=[2401:b140:2::92:206]:48333
#addnode=[2401:b140:3::92:201]:48333
#addnode=[2401:b140:3::92:202]:48333
#addnode=[2401:b140:3::92:203]:48333
#addnode=[2401:b140:3::92:204]:48333
#addnode=[2401:b140:3::92:205]:48333
#addnode=[2401:b140:3::92:206]:48333
#addnode=[2401:b140:4::92:201]:48333
#addnode=[2401:b140:4::92:202]:48333
#addnode=[2401:b140:4::92:203]:48333
#addnode=[2401:b140:4::92:204]:48333
#addnode=[2401:b140:4::92:205]:48333
#addnode=[2401:b140:4::92:206]:48333
#addnode=[2401:b140:4::92:207]:18333
#addnode=[2401:b140:4::92:208]:18333
#addnode=[2401:b140:4::92:209]:18333
#addnode=[2401:b140:4::92:210]:18333
#addnode=[2401:b140:4::92:211]:18333
#addnode=[2401:b140:4::92:212]:18333
[signet]
daemon=1
@ -137,6 +132,14 @@ zmqpubrawtx=tcp://127.0.0.1:38335
#addnode=[2401:b140:2::92:204]:38333
#addnode=[2401:b140:2::92:205]:38333
#addnode=[2401:b140:2::92:206]:38333
#addnode=[2401:b140:2::92:207]:38333
#addnode=[2401:b140:2::92:208]:38333
#addnode=[2401:b140:2::92:209]:38333
#addnode=[2401:b140:2::92:210]:38333
#addnode=[2401:b140:2::92:211]:38333
#addnode=[2401:b140:2::92:212]:38333
#addnode=[2401:b140:2::92:213]:38333
#addnode=[2401:b140:2::92:214]:38333
#addnode=[2401:b140:3::92:201]:38333
#addnode=[2401:b140:3::92:202]:38333
#addnode=[2401:b140:3::92:203]:38333
@ -149,3 +152,60 @@ zmqpubrawtx=tcp://127.0.0.1:38335
#addnode=[2401:b140:4::92:204]:38333
#addnode=[2401:b140:4::92:205]:38333
#addnode=[2401:b140:4::92:206]:38333
#addnode=[2401:b140:4::92:207]:38333
#addnode=[2401:b140:4::92:208]:38333
#addnode=[2401:b140:4::92:209]:38333
#addnode=[2401:b140:4::92:210]:38333
#addnode=[2401:b140:4::92:211]:38333
#addnode=[2401:b140:4::92:212]:38333
#addnode=[2401:b140:4::92:213]:38333
#addnode=[2401:b140:4::92:214]:38333
[testnet4]
daemon=1
rpcbind=127.0.0.1:48332
rpcbind=[::1]:48332
bind=0.0.0.0:48333
bind=[::]:48333
zmqpubrawblock=tcp://127.0.0.1:48334
zmqpubrawtx=tcp://127.0.0.1:48335
#addnode=[2401:b140:1::92:201]:48333
#addnode=[2401:b140:1::92:202]:48333
#addnode=[2401:b140:1::92:203]:48333
#addnode=[2401:b140:1::92:204]:48333
#addnode=[2401:b140:1::92:205]:48333
#addnode=[2401:b140:1::92:206]:48333
#addnode=[2401:b140:2::92:201]:48333
#addnode=[2401:b140:2::92:202]:48333
#addnode=[2401:b140:2::92:203]:48333
#addnode=[2401:b140:2::92:204]:48333
#addnode=[2401:b140:2::92:205]:48333
#addnode=[2401:b140:2::92:206]:48333
#addnode=[2401:b140:2::92:207]:48333
#addnode=[2401:b140:2::92:208]:48333
#addnode=[2401:b140:2::92:209]:48333
#addnode=[2401:b140:2::92:210]:48333
#addnode=[2401:b140:2::92:211]:48333
#addnode=[2401:b140:2::92:212]:48333
#addnode=[2401:b140:2::92:213]:48333
#addnode=[2401:b140:2::92:214]:48333
#addnode=[2401:b140:3::92:201]:48333
#addnode=[2401:b140:3::92:202]:48333
#addnode=[2401:b140:3::92:203]:48333
#addnode=[2401:b140:3::92:204]:48333
#addnode=[2401:b140:3::92:205]:48333
#addnode=[2401:b140:3::92:206]:48333
#addnode=[2401:b140:4::92:201]:48333
#addnode=[2401:b140:4::92:202]:48333
#addnode=[2401:b140:4::92:203]:48333
#addnode=[2401:b140:4::92:204]:48333
#addnode=[2401:b140:4::92:205]:48333
#addnode=[2401:b140:4::92:206]:48333
#addnode=[2401:b140:4::92:207]:48333
#addnode=[2401:b140:4::92:208]:48333
#addnode=[2401:b140:4::92:209]:48333
#addnode=[2401:b140:4::92:210]:48333
#addnode=[2401:b140:4::92:211]:48333
#addnode=[2401:b140:4::92:212]:48333
#addnode=[2401:b140:4::92:213]:48333
#addnode=[2401:b140:4::92:214]:48333

View file

@ -2,4 +2,5 @@
@reboot sleep 5 ; /usr/local/bin/bitcoind -signet >/dev/null 2>&1
@reboot sleep 10 ; screen -dmS mainnet /bitcoin/electrs/start mainnet
@reboot sleep 10 ; screen -dmS testnet /bitcoin/electrs/start testnet
@reboot sleep 10 ; screen -dmS testnet4 /bitcoin/electrs/start testnet4
@reboot sleep 10 ; screen -dmS signet /bitcoin/electrs/start signet

View file

@ -90,6 +90,11 @@ location /resources/config. {
try_files $uri =404;
expires 5m;
}
# only cache /resources/customize.* for 5 minutes since it changes often
location /resources/customize. {
try_files $uri =404;
expires 5m;
}
# cache /main.f40e91d908a068a2.js forever since they never change
location ~* ^/.+\..+\.(js|css)$ {

View file

@ -5,7 +5,7 @@
},
"MEMPOOL": {
"HTTP_HOST": "http://127.0.0.1",
"HTTP_PORT": 83,
"HTTP_PORT": 84,
"NETWORK": "onbtc"
},
"PUPPETEER": {