Merge pull request #5020 from mempool/mononaut/custom-unfurls
custom unfurls
| @ -4,6 +4,7 @@ | ||||
|   "branding": { | ||||
|     "name": "onbtc", | ||||
|     "title": "Oficina Nacional del Bitcoin", | ||||
|     "header_img": "/resources/onbtc.svg", | ||||
|     "img": "/resources/elsalvador.svg", | ||||
|     "rounded_corner": true | ||||
|   }, | ||||
|  | ||||
| @ -2,8 +2,15 @@ | ||||
| <div class="preview-wrapper"> | ||||
|   <header> | ||||
|     <span class="header-brand" style="position: relative;"> | ||||
|       @if (enterpriseInfo?.img) { | ||||
|         <img [src]="enterpriseInfo.img" class="subdomain_logo" [class]="{'rounded': enterpriseInfo.rounded_corner}"> | ||||
|       } | ||||
|       @if (enterpriseInfo?.header_img) { | ||||
|         <img *ngIf="enterpriseInfo.header_img" [src]="enterpriseInfo?.header_img" alt="enterpriseInfo.title" height="36px"> | ||||
|       } @else { | ||||
|         <app-svg-images *ngIf="!officialMempoolSpace" name="mempoolSpace" viewBox="0 0 500 126" width="500" height="126" class="mempool-logo" style="width: 200px; height: 50px"></app-svg-images> | ||||
|         <app-svg-images *ngIf="officialMempoolSpace" name="officialMempoolSpace" style="width: 200px; height: 50px" width="500" height="126" viewBox="0 0 500 126"></app-svg-images> | ||||
|       } | ||||
|     </span> | ||||
| 
 | ||||
|     <div [ngSwitch]="network.val"> | ||||
|  | ||||
| @ -18,7 +18,7 @@ | ||||
|     flex-direction: row; | ||||
|     justify-content: space-between; | ||||
|     align-items: center; | ||||
|     background: var(--active-bg); | ||||
|     background: var(--stat-box-bg); | ||||
|     text-align: start; | ||||
|     font-size: 1.8em; | ||||
|   } | ||||
| @ -77,3 +77,15 @@ | ||||
|     flex-shrink: 1; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| .subdomain_logo { | ||||
|   height: 35px; | ||||
|   overflow: clip; | ||||
|   max-width: 140px; | ||||
|   margin: auto; | ||||
|   align-self: center; | ||||
|   margin-right: 1em; | ||||
|   .rounded { | ||||
|     border-radius: 5px; | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -1,7 +1,8 @@ | ||||
| import { Component, OnInit } from '@angular/core'; | ||||
| import { StateService } from '../../services/state.service'; | ||||
| import { Observable, merge, of } from 'rxjs'; | ||||
| import { Observable, Subscription, merge, of } from 'rxjs'; | ||||
| import { LanguageService } from '../../services/language.service'; | ||||
| import { EnterpriseService } from '../../services/enterprise.service'; | ||||
| 
 | ||||
| @Component({ | ||||
|   selector: 'app-master-page-preview', | ||||
| @ -13,15 +14,23 @@ export class MasterPagePreviewComponent implements OnInit { | ||||
|   lightning$: Observable<boolean>; | ||||
|   officialMempoolSpace = this.stateService.env.OFFICIAL_MEMPOOL_SPACE; | ||||
|   urlLanguage: string; | ||||
|   subdomain = ''; | ||||
|   enterpriseInfo: any; | ||||
|   enterpriseInfo$: Subscription; | ||||
| 
 | ||||
|   constructor( | ||||
|     public stateService: StateService, | ||||
|     private languageService: LanguageService, | ||||
|     private enterpriseService: EnterpriseService, | ||||
|   ) { } | ||||
| 
 | ||||
|   ngOnInit() { | ||||
|     this.network$ = merge(of(''), this.stateService.networkChanged$); | ||||
|     this.lightning$ = this.stateService.lightningChanged$; | ||||
|     this.urlLanguage = this.languageService.getLanguageForUrl(); | ||||
|     this.subdomain = this.enterpriseService.getSubdomain(); | ||||
|     this.enterpriseInfo$ = this.enterpriseService.info$.subscribe(info => { | ||||
|       this.enterpriseInfo = info; | ||||
|     }); | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -24,8 +24,12 @@ | ||||
|       <div class="vertical-line"></div> | ||||
|     </ng-template> | ||||
|     <ng-container *ngIf="{ val: connectionState$ | async } as connectionState"> | ||||
|       @if (enterpriseInfo?.header_img) { | ||||
|         <img [src]="enterpriseInfo?.header_img" alt="enterpriseInfo.title" height="36px"> | ||||
|       } @else { | ||||
|         <app-svg-images *ngIf="!officialMempoolSpace" name="mempoolSpace" viewBox="0 0 500 126" class="mempool-logo" [ngStyle]="{'opacity': connectionState.val === 2 ? 1 : 0.5 }"></app-svg-images> | ||||
|         <app-svg-images *ngIf="officialMempoolSpace" name="officialMempoolSpace" viewBox="0 0 500 126"></app-svg-images> | ||||
|       } | ||||
|       <div class="connection-badge"> | ||||
|         <div class="badge badge-warning" *ngIf="connectionState.val === 0" i18n="master-page.offline">Offline</div> | ||||
|         <div class="badge badge-warning" *ngIf="connectionState.val === 1" i18n="master-page.reconnecting">Reconnecting...</div> | ||||
| @ -41,8 +45,12 @@ | ||||
|       <div class="vertical-line"></div> | ||||
|     </ng-template> | ||||
|     <ng-container *ngIf="{ val: connectionState$ | async } as connectionState"> | ||||
|       @if (enterpriseInfo?.header_img) { | ||||
|         <img [src]="enterpriseInfo?.header_img" alt="enterpriseInfo.title" height="36px"> | ||||
|       } @else { | ||||
|         <app-svg-images *ngIf="!officialMempoolSpace" name="mempoolSpace" viewBox="0 0 500 126" class="mempool-logo" [ngStyle]="{'opacity': connectionState.val === 2 ? 1 : 0.5 }"></app-svg-images> | ||||
|         <app-svg-images *ngIf="officialMempoolSpace" name="officialMempoolSpace" viewBox="0 0 500 126"></app-svg-images> | ||||
|       } | ||||
|         <div class="connection-badge"> | ||||
|         <div class="badge badge-warning" *ngIf="connectionState.val === 0" i18n="master-page.offline">Offline</div> | ||||
|         <div class="badge badge-warning" *ngIf="connectionState.val === 1" i18n="master-page.reconnecting">Reconnecting...</div> | ||||
|  | ||||
| @ -50,7 +50,7 @@ export class EnterpriseService { | ||||
|     if (this.stateService.env.customize?.branding) { | ||||
|       const info = this.stateService.env.customize?.branding; | ||||
|       this.insertMatomo(info.site_id); | ||||
|       this.seoService.setEnterpriseTitle(info.title); | ||||
|       this.seoService.setEnterpriseTitle(info.title, true); | ||||
|       this.info$.next(info); | ||||
|     } else { | ||||
|       this.apiService.getEnterpriseInfo$(this.subdomain).subscribe((info) => { | ||||
|  | ||||
| @ -50,8 +50,12 @@ export class SeoService { | ||||
|     this.metaService.updateTag({ property: 'og:meta:ready', content: 'ready'}); | ||||
|   } | ||||
| 
 | ||||
|   setEnterpriseTitle(title: string) { | ||||
|   setEnterpriseTitle(title: string, override: boolean = false) { | ||||
|     if (override) { | ||||
|       this.baseTitle = title; | ||||
|     } else { | ||||
|       this.baseTitle = title + ' - ' + this.baseTitle; | ||||
|     } | ||||
|     this.resetTitle(); | ||||
|   } | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										45
									
								
								frontend/src/index.sv.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,45 @@ | ||||
| <!doctype html> | ||||
| <html lang="en"> | ||||
| 
 | ||||
| <head> | ||||
|   <meta charset="utf-8"> | ||||
|   <title>Oficina Nacional del Bitcoin - Bitcoin Explorer</title> | ||||
|   <script src="/resources/config.js"></script> | ||||
|   <script src="/resources/customize.js"></script> | ||||
|   <base href="/"> | ||||
| 
 | ||||
|   <meta name="description" content="Explore the full Bitcoin ecosystem with The Mempool Open Source Project®. See the real-time status of your transactions, get network info, and more." /> | ||||
|   <meta property="og:image" content="https://mempool.space/resources/sv/onbtc-preview.jpg" /> | ||||
|   <meta property="og:image:type" content="image/jpeg" /> | ||||
|   <meta property="og:image:width" content="2000" /> | ||||
|   <meta property="og:image:height" content="1000" /> | ||||
|   <meta property="og:description" content="Explore the full Bitcoin ecosystem with The Mempool Open Source Project®. See the real-time status of your transactions, get network info, and more." /> | ||||
|   <meta name="twitter:card" content="summary_large_image"> | ||||
|   <meta name="twitter:site" content="@mempool"> | ||||
|   <meta name="twitter:creator" content="@mempool"> | ||||
|   <meta name="twitter:title" content="Oficina Nacional del Bitcoin - Bitcoin Explorer"> | ||||
|   <meta name="twitter:description" content="Explore the full Bitcoin ecosystem with The Mempool Open Source Project®. See the real-time status of your transactions, get network info, and more." /> | ||||
|   <meta name="twitter:image" content="https://mempool.space/resources/sv/onbtc-preview.jpg" /> | ||||
|   <meta name="twitter:domain" content="bitcoin.gob.sv"> | ||||
| 
 | ||||
|   <link rel="apple-touch-icon" sizes="180x180" href="/resources/sv/favicons/apple-touch-icon.png"> | ||||
|   <link rel="icon" type="image/png" sizes="32x32" href="/resources/sv/favicons/favicon-32x32.png"> | ||||
|   <link rel="icon" type="image/png" sizes="16x16" href="/resources/sv/favicons/favicon-16x16.png"> | ||||
|   <link rel="manifest" href="/resources/sv/favicons/site.webmanifest"> | ||||
|   <link rel="shortcut icon" href="/resources/sv/favicons/favicon.ico"> | ||||
|   <link id="canonical" rel="canonical" href="https://bitcoin.gob.sv"> | ||||
| 
 | ||||
|   <meta name="apple-mobile-web-app-capable" content="yes"> | ||||
|   <meta name="apple-mobile-web-app-status-bar-style" content="black"> | ||||
|   <meta name="msapplication-TileColor" content="#000000"> | ||||
|   <meta name="msapplication-config" content="/resources/favicons/browserconfig.xml"> | ||||
|   <meta name="theme-color" content="#1d1f31"> | ||||
| 
 | ||||
|   <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
| </head> | ||||
| 
 | ||||
| <body> | ||||
|   <app-root></app-root> | ||||
| </body> | ||||
| 
 | ||||
| </html> | ||||
| @ -7,8 +7,31 @@ | ||||
|    viewBox="0 0 42.26523 42.986894" | ||||
|    version="1.1" | ||||
|    id="svg5" | ||||
|    sodipodi:docname="elsalvador.svg" | ||||
|    inkscape:version="1.2.2 (b0a84865, 2022-12-01)" | ||||
|    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||||
|    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
|    xmlns="http://www.w3.org/2000/svg" | ||||
|    xmlns:svg="http://www.w3.org/2000/svg"> | ||||
|   <sodipodi:namedview | ||||
|      id="namedview469" | ||||
|      pagecolor="#ffffff" | ||||
|      bordercolor="#000000" | ||||
|      borderopacity="0.25" | ||||
|      inkscape:showpageshadow="2" | ||||
|      inkscape:pageopacity="0.0" | ||||
|      inkscape:pagecheckerboard="0" | ||||
|      inkscape:deskcolor="#d1d1d1" | ||||
|      showgrid="false" | ||||
|      inkscape:zoom="2.8463012" | ||||
|      inkscape:cx="21.606989" | ||||
|      inkscape:cy="67.982966" | ||||
|      inkscape:window-width="1728" | ||||
|      inkscape:window-height="1051" | ||||
|      inkscape:window-x="0" | ||||
|      inkscape:window-y="38" | ||||
|      inkscape:window-maximized="1" | ||||
|      inkscape:current-layer="svg5" /> | ||||
|   <defs | ||||
|      id="defs2"> | ||||
|     <clipPath | ||||
| @ -19,15 +42,9 @@ | ||||
|          id="path3810" /> | ||||
|     </clipPath> | ||||
|   </defs> | ||||
|   <g | ||||
|      id="layer1" | ||||
|      transform="translate(-73.844614,-44.443426)"> | ||||
|     <g | ||||
|        id="g1912" | ||||
|        transform="matrix(0.35277777,0,0,-0.35277777,-80.542642,240.94663)"> | ||||
|   <g | ||||
|      id="g3806" | ||||
|          transform="matrix(1.0712585,0,0,1.0712585,423.38928,-41.000061)"> | ||||
|      transform="matrix(0.37791618,0,0,-0.37791618,-5.0249309,210.96711)"> | ||||
|     <g | ||||
|        id="g3808" /> | ||||
|     <g | ||||
| @ -42,74 +59,64 @@ | ||||
|   </g> | ||||
|   <g | ||||
|      id="g1994" | ||||
|          transform="matrix(1.3192867,0,0,1.3192867,517.37057,382.23187)" /> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,28.129579,61.660297)" /> | ||||
|   <g | ||||
|      id="g1998" | ||||
|          transform="matrix(1.3192867,0,0,1.3192867,526.52417,394.92909)" /> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,31.358766,57.181)" /> | ||||
|   <g | ||||
|      id="g2002" | ||||
|          transform="matrix(1.3192867,0,0,1.3192867,538.98378,384.09721)" /> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,35.754239,61.002247)" /> | ||||
|   <g | ||||
|      id="g2006" | ||||
|          transform="matrix(1.3192867,0,0,1.3192867,553.35306,381.17539)" /> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,40.823402,62.033)" /> | ||||
|   <g | ||||
|      id="g2010" | ||||
|          transform="matrix(1.3192867,0,0,1.3192867,564.29707,386.23208)" /> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,44.684205,60.249112)" /> | ||||
|   <g | ||||
|      id="g2014" | ||||
|          transform="matrix(1.3192867,0,0,1.3192867,569.89757,387.51272)" /> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,46.659937,59.797331)" /> | ||||
|   <g | ||||
|      id="g2018" | ||||
|          transform="matrix(1.3192867,0,0,1.3192867,595.97406,380.78937)" /> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,55.859143,62.169179)" /> | ||||
|   <g | ||||
|      id="g2022" | ||||
|          transform="matrix(1.3192867,0,0,1.3192867,605.72583,394.92909)" /> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,59.299351,57.181)" /> | ||||
|   <g | ||||
|      id="g2026" | ||||
|          transform="matrix(1.3192867,0,0,1.3192867,623.66668,382.83861)" /> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,65.628484,61.446253)" /> | ||||
|   <g | ||||
|      id="g2030" | ||||
|          transform="matrix(1.3192867,0,0,1.3192867,645.02963,386.23208)" /> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,73.164857,60.249112)" /> | ||||
|   <g | ||||
|      id="g2034" | ||||
|          transform="matrix(1.3192867,0,0,1.3192867,514.72038,364.90964)" /> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,27.194651,67.771195)" /> | ||||
|   <g | ||||
|      id="g2038" | ||||
|          transform="matrix(1.3192867,0,0,1.3192867,527.65889,359.77854)" /> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,31.75907,69.581333)" /> | ||||
|   <g | ||||
|      id="g2042" | ||||
|          transform="matrix(1.3192867,0,0,1.3192867,536.01222,363.24496)" /> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,34.705939,68.358457)" /> | ||||
|   <g | ||||
|      id="g2046" | ||||
|          transform="matrix(1.3192867,0,0,1.3192867,552.32652,372.38934)" /> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,40.461261,65.132523)" /> | ||||
|   <g | ||||
|      id="g2050" | ||||
|          transform="matrix(1.3192867,0,0,1.3192867,570.49046,359.77854)" /> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,46.869095,69.581333)" /> | ||||
|   <g | ||||
|      id="g2054" | ||||
|          transform="matrix(1.3192867,0,0,1.3192867,575.66681,359.41389)" /> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,48.695196,69.709973)" /> | ||||
|   <g | ||||
|      id="g2058" | ||||
|          transform="matrix(1.3192867,0,0,1.3192867,588.37721,372.38934)" /> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,53.179143,65.132523)" /> | ||||
|   <g | ||||
|      id="g2062" | ||||
|          transform="matrix(1.3192867,0,0,1.3192867,600.31214,361.46617)" /> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,57.389521,68.985975)" /> | ||||
|   <g | ||||
|      id="g2066" | ||||
|          transform="matrix(1.3192867,0,0,1.3192867,620.73707,373.73474)" /> | ||||
|       <g | ||||
|          id="g1734"> | ||||
|         <rect | ||||
|            style="fill:#313945;fill-opacity:1;stroke:none;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none" | ||||
|            id="rect3899" | ||||
|            width="119.80694" | ||||
|            height="121.85262" | ||||
|            x="437.63318" | ||||
|            y="-557.01697" | ||||
|            transform="scale(1,-1)" /> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,64.594982,64.657896)" /> | ||||
|   <g | ||||
|      id="g10388" | ||||
|            transform="matrix(1.3192867,0,0,1.3192867,-217.93244,-154.01197)"> | ||||
|      transform="matrix(0.46541502,0,0,-0.46541502,-231.26898,250.8352)"> | ||||
|     <g | ||||
|        id="g2126" | ||||
|        transform="translate(523.73704,534.17142)"> | ||||
| @ -1125,7 +1132,4 @@ | ||||
|       </g> | ||||
|     </g> | ||||
|   </g> | ||||
|       </g> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
|  | ||||
| Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 80 KiB | 
							
								
								
									
										118
									
								
								frontend/src/resources/onbtc.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,118 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||
| 
 | ||||
| <svg | ||||
|    width="166.66856mm" | ||||
|    height="27.910412mm" | ||||
|    viewBox="0 0 166.66856 27.910412" | ||||
|    version="1.1" | ||||
|    id="svg5" | ||||
|    sodipodi:docname="onbtc.svg" | ||||
|    inkscape:version="1.2.2 (b0a84865, 2022-12-01)" | ||||
|    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||||
|    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
|    xmlns="http://www.w3.org/2000/svg" | ||||
|    xmlns:svg="http://www.w3.org/2000/svg"> | ||||
|   <sodipodi:namedview | ||||
|      id="namedview188" | ||||
|      pagecolor="#ffffff" | ||||
|      bordercolor="#000000" | ||||
|      borderopacity="0.25" | ||||
|      inkscape:showpageshadow="2" | ||||
|      inkscape:pageopacity="0.0" | ||||
|      inkscape:pagecheckerboard="0" | ||||
|      inkscape:deskcolor="#d1d1d1" | ||||
|      inkscape:document-units="mm" | ||||
|      showgrid="false" | ||||
|      inkscape:zoom="1.9192657" | ||||
|      inkscape:cx="243.84326" | ||||
|      inkscape:cy="52.88481" | ||||
|      inkscape:window-width="1728" | ||||
|      inkscape:window-height="1051" | ||||
|      inkscape:window-x="0" | ||||
|      inkscape:window-y="38" | ||||
|      inkscape:window-maximized="1" | ||||
|      inkscape:current-layer="text1855" /> | ||||
|   <defs | ||||
|      id="defs2" /> | ||||
|   <g | ||||
|      aria-label="OFICINA NACIONAL DEL BITCOIN" | ||||
|      id="text1855" | ||||
|      style="fill:#d2d2d2;stroke-width:3.37609;stroke-linecap:square" | ||||
|      transform="translate(-15.744428,-40.187266)"> | ||||
|     <path | ||||
|        d="m 28.492368,45.40464 c 0,-3.039246 -2.735322,-5.217373 -5.92653,-5.217373 -3.596442,0 -6.179801,2.380743 -6.179801,5.740798 0,3.157439 2.785976,5.284912 6.095377,5.284912 3.275632,0 6.010954,-2.397628 6.010954,-5.808337 z m -1.587162,0.557195 c 0,2.397627 -1.317007,4.829024 -4.069213,4.829024 -2.718437,0 -4.862794,-2.22878 -4.862794,-5.386219 0,-2.026164 1.181929,-4.795255 4.153636,-4.795255 2.785976,0 4.778371,2.211895 4.778371,5.35245 z" | ||||
|        id="path415" /> | ||||
|     <path | ||||
|        d="m 37.390604,43.935671 h -0.28704 c -0.05065,0.726042 -0.354579,1.080621 -0.979313,1.080621 h -3.34317 v -3.967905 h 3.208093 c 1.046851,0 1.384545,0.405233 1.40143,1.384545 h 0.28704 v -1.992394 h -7.564346 v 0.320809 c 1.181929,0.01689 1.266352,0.506541 1.266352,1.587162 v 6.618803 c 0,1.36766 -0.185731,1.587161 -1.232583,1.6547 v 0.32081 h 4.102982 v -0.32081 c -1.266352,0 -1.468968,-0.354579 -1.468968,-1.300122 v -3.697749 h 3.123669 c 0.810466,0 1.165045,0.303924 1.198814,1.283237 h 0.28704 z" | ||||
|        id="path417" /> | ||||
|     <path | ||||
|        d="m 43.215796,50.622012 c -1.165044,0 -1.435199,-0.337694 -1.435199,-1.333891 v -7.159113 c 0,-1.131275 0.371463,-1.367661 1.435199,-1.367661 v -0.320809 h -4.102982 v 0.320809 c 0.945543,0.05065 1.266353,0.303925 1.266353,1.215698 v 7.192883 c 0,1.131275 -0.219501,1.40143 -1.266353,1.452084 v 0.32081 h 4.102982 z" | ||||
|        id="path419" /> | ||||
|     <path | ||||
|        d="m 55.18702,43.209629 -0.151963,-2.448282 h -0.25327 c -0.03377,0.05065 -0.118193,0.101308 -0.303925,0.101308 -0.523426,0 -1.435199,-0.675388 -3.562672,-0.675388 -3.528902,0 -6.061607,2.363858 -6.061607,5.63949 0,3.12367 2.465166,5.38622 5.89276,5.38622 1.992395,0 2.735322,-0.60785 3.815943,-0.455887 0.405233,-0.658504 0.861119,-1.705355 1.080621,-2.465167 h -0.32081 c -1.148159,2.043049 -2.785975,2.498936 -4.119867,2.498936 -2.566474,0 -4.761485,-2.245665 -4.761485,-5.301796 0,-2.83663 1.756009,-4.879678 4.575754,-4.879678 1.840432,0 3.292516,1.029966 3.849711,2.600244 z" | ||||
|        id="path421" /> | ||||
|     <path | ||||
|        d="m 61.147288,50.622012 c -1.165044,0 -1.435199,-0.337694 -1.435199,-1.333891 v -7.159113 c 0,-1.131275 0.371463,-1.367661 1.435199,-1.367661 v -0.320809 h -4.102982 v 0.320809 c 0.945543,0.05065 1.266352,0.303925 1.266352,1.215698 v 7.192883 c 0,1.131275 -0.219501,1.40143 -1.266352,1.452084 v 0.32081 h 4.102982 z" | ||||
|        id="path423" /> | ||||
|     <path | ||||
|        d="m 73.810786,51.061014 v -9.421663 c 0,-0.658503 0.270155,-0.878004 1.536508,-0.878004 v -0.320809 h -3.95102 v 0.320809 c 1.350776,0.03377 1.654701,0.219501 1.654701,1.249468 v 6.720111 l -7.952694,-8.290388 h -2.650899 v 0.320809 c 0.590965,0.01689 1.029967,0.151962 1.418315,0.422117 v 8.307273 c 0,0.776696 -0.337694,1.131275 -1.384545,1.131275 h -0.06754 v 0.32081 h 3.917251 v -0.32081 c -1.4352,0 -1.705355,-0.25327 -1.705355,-1.468969 v -7.243536 l 8.746275,9.151507 z" | ||||
|        id="path425" /> | ||||
|     <path | ||||
|        d="m 82.776557,46.282644 1.131275,3.073016 c 0.06754,0.168847 0.185732,0.422117 0.185732,0.692272 0,0.472772 -0.354579,0.57408 -1.317007,0.57408 h -0.439002 v 0.32081 h 4.643293 v -0.32081 c -0.844235,0 -1.198814,-0.168847 -1.536508,-1.063736 l -3.528902,-9.371009 h -1.468969 l 0.151962,0.371464 -3.073016,8.391696 c -0.54031,1.468969 -0.726042,1.6547 -1.823547,1.671585 v 0.32081 h 3.900366 v -0.32081 h -0.270156 c -0.928658,0 -1.36766,-0.168847 -1.36766,-0.624734 0,-0.236386 0.219501,-0.742927 0.337694,-1.063736 l 0.979312,-2.650898 z m -0.28704,-0.742927 h -2.921053 l 1.4352,-3.934135 z" | ||||
|        id="path427" /> | ||||
|     <path | ||||
|        d="m 103.6629,51.061014 v -9.421663 c 0,-0.658503 0.27015,-0.878004 1.53651,-0.878004 v -0.320809 h -3.95102 v 0.320809 c 1.35077,0.03377 1.6547,0.219501 1.6547,1.249468 v 6.720111 l -7.952698,-8.290388 h -2.650898 v 0.320809 c 0.590965,0.01689 1.029967,0.151962 1.418315,0.422117 v 8.307273 c 0,0.776696 -0.337694,1.131275 -1.384545,1.131275 h -0.06754 v 0.32081 h 3.91725 v -0.32081 c -1.435199,0 -1.705354,-0.25327 -1.705354,-1.468969 v -7.243536 l 8.74628,9.151507 z" | ||||
|        id="path429" /> | ||||
|     <path | ||||
|        d="m 112.62867,46.282644 1.13127,3.073016 c 0.0675,0.168847 0.18574,0.422117 0.18574,0.692272 0,0.472772 -0.35458,0.57408 -1.31701,0.57408 h -0.439 v 0.32081 h 4.64329 v -0.32081 c -0.84424,0 -1.19881,-0.168847 -1.53651,-1.063736 l -3.5289,-9.371009 h -1.46897 l 0.15196,0.371464 -3.07301,8.391696 c -0.54031,1.468969 -0.72604,1.6547 -1.82355,1.671585 v 0.32081 h 3.90037 v -0.32081 h -0.27016 c -0.92866,0 -1.36766,-0.168847 -1.36766,-0.624734 0,-0.236386 0.2195,-0.742927 0.33769,-1.063736 l 0.97932,-2.650898 z m -0.28704,-0.742927 h -2.92105 l 1.4352,-3.934135 z" | ||||
|        id="path431" /> | ||||
|     <path | ||||
|        d="m 127.45339,43.209629 -0.15196,-2.448282 h -0.25327 c -0.0338,0.05065 -0.1182,0.101308 -0.30393,0.101308 -0.52342,0 -1.4352,-0.675388 -3.56267,-0.675388 -3.5289,0 -6.06161,2.363858 -6.06161,5.63949 0,3.12367 2.46517,5.38622 5.89276,5.38622 1.9924,0 2.73533,-0.60785 3.81595,-0.455887 0.40523,-0.658504 0.86112,-1.705355 1.08062,-2.465167 h -0.32081 c -1.14816,2.043049 -2.78598,2.498936 -4.11987,2.498936 -2.56647,0 -4.76148,-2.245665 -4.76148,-5.301796 0,-2.83663 1.756,-4.879678 4.57575,-4.879678 1.84043,0 3.29252,1.029966 3.84971,2.600244 z" | ||||
|        id="path433" /> | ||||
|     <path | ||||
|        d="m 133.41366,50.622012 c -1.16505,0 -1.4352,-0.337694 -1.4352,-1.333891 v -7.159113 c 0,-1.131275 0.37146,-1.367661 1.4352,-1.367661 v -0.320809 h -4.10299 v 0.320809 c 0.94555,0.05065 1.26636,0.303925 1.26636,1.215698 v 7.192883 c 0,1.131275 -0.2195,1.40143 -1.26636,1.452084 v 0.32081 h 4.10299 z" | ||||
|        id="path435" /> | ||||
|     <path | ||||
|        d="m 147.17466,45.40464 c 0,-3.039246 -2.73532,-5.217373 -5.92653,-5.217373 -3.59644,0 -6.1798,2.380743 -6.1798,5.740798 0,3.157439 2.78597,5.284912 6.09537,5.284912 3.27564,0 6.01096,-2.397628 6.01096,-5.808337 z m -1.58717,0.557195 c 0,2.397627 -1.317,4.829024 -4.06921,4.829024 -2.71843,0 -4.86279,-2.22878 -4.86279,-5.386219 0,-2.026164 1.18193,-4.795255 4.15363,-4.795255 2.78598,0 4.77837,2.211895 4.77837,5.35245 z" | ||||
|        id="path437" /> | ||||
|     <path | ||||
|        d="m 159.97326,51.061014 v -9.421663 c 0,-0.658503 0.27016,-0.878004 1.53651,-0.878004 v -0.320809 h -3.95102 v 0.320809 c 1.35078,0.03377 1.6547,0.219501 1.6547,1.249468 v 6.720111 l -7.95269,-8.290388 h -2.6509 v 0.320809 c 0.59096,0.01689 1.02996,0.151962 1.41831,0.422117 v 8.307273 c 0,0.776696 -0.33769,1.131275 -1.38454,1.131275 h -0.0675 v 0.32081 h 3.91725 v -0.32081 c -1.4352,0 -1.70536,-0.25327 -1.70536,-1.468969 v -7.243536 l 8.74628,9.151507 z" | ||||
|        id="path439" /> | ||||
|     <path | ||||
|        d="m 168.93903,46.282644 1.13127,3.073016 c 0.0675,0.168847 0.18573,0.422117 0.18573,0.692272 0,0.472772 -0.35458,0.57408 -1.317,0.57408 h -0.43901 v 0.32081 h 4.6433 v -0.32081 c -0.84424,0 -1.19882,-0.168847 -1.53651,-1.063736 l -3.5289,-9.371009 h -1.46897 l 0.15196,0.371464 -3.07302,8.391696 c -0.54031,1.468969 -0.72604,1.6547 -1.82354,1.671585 v 0.32081 h 3.90036 v -0.32081 h -0.27015 c -0.92866,0 -1.36766,-0.168847 -1.36766,-0.624734 0,-0.236386 0.2195,-0.742927 0.33769,-1.063736 l 0.97931,-2.650898 z m -0.28704,-0.742927 h -2.92106 l 1.4352,-3.934135 z" | ||||
|        id="path441" /> | ||||
|     <path | ||||
|        d="m 182.413,48.477655 h -0.30393 c -1.06373,1.468969 -1.36766,1.857317 -2.36386,1.857317 h -2.48205 c -0.48965,0 -0.67538,-0.168847 -0.67538,-0.624734 v -7.783847 c 0,-1.046851 0.28704,-1.165044 1.38454,-1.165044 h 0.62474 v -0.320809 h -4.98099 v 0.320809 h 0.23638 c 1.06374,0 1.3339,0.371463 1.3339,1.266352 v 7.479923 c 0,0.86112 -0.28704,1.11439 -1.06374,1.11439 h -0.5572 v 0.32081 h 7.54747 z" | ||||
|        id="path443" /> | ||||
|     <path | ||||
|        d="m 17.36535,66.27413 c 0,0.979312 -0.422118,1.232583 -1.333892,1.232583 h -0.287039 v 0.320809 h 5.403104 c 4.271829,0 6.247339,-3.056131 6.247339,-5.60572 0,-2.785976 -1.97551,-5.048526 -6.433071,-5.048526 -0.878004,0 -1.907971,0.01689 -2.83663,0.05065 -0.928658,0.03377 -1.756009,0.06754 -2.380742,0.101308 v 0.32081 h 0.337694 c 0.996197,0 1.283237,0.270155 1.283237,1.36766 z m 1.40143,-8.712506 c 0.202616,-0.01688 0.658503,-0.06754 1.350776,-0.06754 2.363858,0 3.562672,0.590965 4.339368,1.367661 0.996197,0.996198 1.350776,2.380743 1.350776,3.630211 0,1.739124 -0.776696,3.039246 -1.40143,3.647095 -1.046851,1.046852 -1.992395,1.367661 -4.254945,1.367661 -1.333891,0 -1.384545,-0.236386 -1.384545,-0.928659 z" | ||||
|        id="path445" /> | ||||
|     <path | ||||
|        d="m 36.157993,60.820371 h -0.320809 c -0.08442,0.979313 -0.371464,1.266353 -0.979313,1.266353 H 31.83551 v -4.153636 h 3.562672 c 0.607849,0 1.029966,0.303924 1.249468,1.739124 h 0.303924 L 36.816497,57.325238 H 28.71184 v 0.32081 h 0.371464 c 1.131275,0 1.350776,0.405233 1.350776,1.350776 v 7.125343 c 0,1.013083 -0.236386,1.384546 -1.587162,1.384546 h -0.472772 v 0.320809 h 8.965776 l 0.270155,-2.51582 h -0.303924 c -0.422118,1.452084 -0.776696,1.907971 -1.958625,1.907971 h -2.600244 c -0.624734,0 -0.911774,-0.151962 -0.911774,-0.928658 v -3.596442 h 2.853514 c 0.692273,0 1.013082,0.135078 1.14816,1.333892 h 0.320809 z" | ||||
|        id="path447" /> | ||||
|     <path | ||||
|        d="m 47.53828,65.362356 h -0.303925 c -1.063736,1.468969 -1.367661,1.857317 -2.363858,1.857317 h -2.482051 c -0.489656,0 -0.675388,-0.168847 -0.675388,-0.624734 v -7.783847 c 0,-1.046851 0.28704,-1.165044 1.384545,-1.165044 h 0.624734 v -0.32081 h -4.980986 v 0.32081 h 0.236385 c 1.063737,0 1.333892,0.371463 1.333892,1.266352 v 7.479923 c 0,0.861119 -0.28704,1.11439 -1.063736,1.11439 h -0.557195 v 0.320809 h 7.547461 z" | ||||
|        id="path449" /> | ||||
|     <path | ||||
|        d="m 54.410318,66.122167 c 0,1.063737 -0.270155,1.384546 -1.6547,1.384546 H 52.36727 v 0.320809 h 6.1798 c 2.718437,0 3.647095,-1.874202 3.647095,-3.208093 0,-1.317007 -0.928658,-2.346973 -2.51582,-2.819745 v -0.03377 c 1.131275,-0.202617 1.924856,-1.097506 1.924856,-2.059934 0,-0.810465 -0.337694,-1.384545 -1.029967,-1.874202 -0.607849,-0.439002 -1.907971,-0.658503 -3.393825,-0.658503 -0.320809,0 -1.604046,0.01689 -2.532705,0.05065 -0.489656,0.01688 -1.654701,0.08442 -2.127472,0.101308 v 0.32081 h 0.590964 c 1.181929,0 1.300122,0.506541 1.300122,1.468969 z m 1.40143,-8.577427 c 0.422118,-0.01688 1.114391,-0.05065 1.485854,-0.05065 2.076818,0 2.785976,1.080621 2.785976,2.26255 0,1.317007 -0.810466,1.958626 -2.431397,1.958626 h -1.840433 z m 0,4.49133 h 1.823548 c 1.97551,0 2.971707,1.333891 2.971707,2.634013 0,1.317007 -0.641618,2.701552 -2.870399,2.701552 -1.418315,0 -1.924856,-0.455887 -1.924856,-1.739124 z" | ||||
|        id="path451" /> | ||||
|     <path | ||||
|        d="m 67.951819,67.506713 c -1.165044,0 -1.435199,-0.337694 -1.435199,-1.333891 v -7.159114 c 0,-1.131274 0.371463,-1.36766 1.435199,-1.36766 v -0.32081 h -4.102982 v 0.32081 c 0.945543,0.05065 1.266353,0.303924 1.266353,1.215698 v 7.192883 c 0,1.131275 -0.219502,1.40143 -1.266353,1.452084 v 0.320809 h 4.102982 z" | ||||
|        id="path453" /> | ||||
|     <path | ||||
|        d="m 75.127789,57.933088 h 2.937938 c 0.675388,0 0.979313,0.388348 1.232584,1.874201 h 0.303924 L 79.33208,57.071968 h -0.320809 c -0.03377,0.202616 -0.28704,0.25327 -0.523426,0.25327 h -8.121541 c -0.118193,0 -0.236386,-0.01688 -0.337694,-0.05065 -0.101308,-0.03377 -0.168847,-0.101308 -0.185732,-0.202616 h -0.320809 l -0.270155,2.735321 h 0.303924 c 0.253271,-1.485853 0.557195,-1.874201 1.232583,-1.874201 h 2.937938 v 8.341042 c 0,0.911774 -0.303924,1.232583 -1.333891,1.232583 h -0.624734 v 0.320809 h 5.318681 v -0.320809 h -0.624734 c -1.029967,0 -1.333892,-0.320809 -1.333892,-1.232583 z" | ||||
|        id="path455" /> | ||||
|     <path | ||||
|        d="m 91.353956,60.094329 -0.151962,-2.448281 h -0.25327 c -0.03377,0.05065 -0.118193,0.101308 -0.303925,0.101308 -0.523426,0 -1.4352,-0.675388 -3.562672,-0.675388 -3.528902,0 -6.061607,2.363858 -6.061607,5.63949 0,3.12367 2.465166,5.386219 5.89276,5.386219 1.992395,0 2.735322,-0.607849 3.815943,-0.455886 0.405232,-0.658504 0.861119,-1.705355 1.08062,-2.465167 h -0.320809 c -1.14816,2.043049 -2.785976,2.498936 -4.119867,2.498936 -2.566474,0 -4.761486,-2.245665 -4.761486,-5.301796 0,-2.83663 1.756009,-4.879679 4.575754,-4.879679 1.840433,0 3.292517,1.029967 3.849712,2.600244 z" | ||||
|        id="path457" /> | ||||
|     <path | ||||
|        d="m 105.45265,62.28934 c 0,-3.039246 -2.73532,-5.217372 -5.926531,-5.217372 -3.596441,0 -6.1798,2.380743 -6.1798,5.740798 0,3.157439 2.785975,5.284911 6.095376,5.284911 3.275635,0 6.010955,-2.397627 6.010955,-5.808337 z m -1.58716,0.557196 c 0,2.397627 -1.31701,4.829024 -4.069216,4.829024 -2.718437,0 -4.862794,-2.228781 -4.862794,-5.38622 0,-2.026164 1.181929,-4.795255 4.153637,-4.795255 2.785973,0 4.778373,2.211896 4.778373,5.352451 z" | ||||
|        id="path459" /> | ||||
|     <path | ||||
|        d="m 111.21033,67.506713 c -1.16504,0 -1.4352,-0.337694 -1.4352,-1.333891 v -7.159114 c 0,-1.131274 0.37147,-1.36766 1.4352,-1.36766 v -0.32081 h -4.10298 v 0.32081 c 0.94554,0.05065 1.26635,0.303924 1.26635,1.215698 v 7.192883 c 0,1.131275 -0.2195,1.40143 -1.26635,1.452084 v 0.320809 h 4.10298 z" | ||||
|        id="path461" /> | ||||
|     <path | ||||
|        d="m 123.87383,67.945715 v -9.421663 c 0,-0.658503 0.27015,-0.878004 1.53651,-0.878004 v -0.32081 h -3.95102 v 0.32081 c 1.35077,0.03377 1.6547,0.219501 1.6547,1.249468 v 6.72011 l -7.9527,-8.290388 h -2.6509 v 0.32081 c 0.59097,0.01688 1.02997,0.151962 1.41832,0.422117 v 8.307273 c 0,0.776696 -0.33769,1.131275 -1.38455,1.131275 h -0.0675 v 0.320809 h 3.91726 v -0.320809 c -1.4352,0 -1.70536,-0.253271 -1.70536,-1.468969 v -7.243537 l 8.74628,9.151508 z" | ||||
|        id="path463" /> | ||||
|   </g> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 14 KiB | 
							
								
								
									
										
											BIN
										
									
								
								frontend/src/resources/sv/favicons/android-chrome-192x192.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 19 KiB | 
							
								
								
									
										
											BIN
										
									
								
								frontend/src/resources/sv/favicons/android-chrome-512x512.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 66 KiB | 
							
								
								
									
										
											BIN
										
									
								
								frontend/src/resources/sv/favicons/apple-touch-icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 18 KiB | 
							
								
								
									
										
											BIN
										
									
								
								frontend/src/resources/sv/favicons/favicon-16x16.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 756 B | 
							
								
								
									
										
											BIN
										
									
								
								frontend/src/resources/sv/favicons/favicon-32x32.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.7 KiB | 
							
								
								
									
										
											BIN
										
									
								
								frontend/src/resources/sv/favicons/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 15 KiB | 
							
								
								
									
										1
									
								
								frontend/src/resources/sv/favicons/site.webmanifest
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1 @@ | ||||
| {"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} | ||||
							
								
								
									
										
											BIN
										
									
								
								frontend/src/resources/sv/onbtc-preview.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 80 KiB | 
| @ -129,8 +129,8 @@ export NVM_DIR="${HOME}/.nvm" | ||||
| source "${NVM_DIR}/nvm.sh" | ||||
| 
 | ||||
| # what to look for | ||||
| frontends=(mainnet liquid) | ||||
| backends=(mainnet testnet signet liquid liquidtestnet) | ||||
| frontends=(mainnet liquid onbtc) | ||||
| backends=(mainnet testnet signet liquid liquidtestnet onbtc) | ||||
| frontend_repos=() | ||||
| backend_repos=() | ||||
| 
 | ||||
| @ -151,7 +151,7 @@ for repo in $backend_repos;do | ||||
| done | ||||
| 
 | ||||
| # build unfurlers | ||||
| for repo in mainnet liquid;do | ||||
| for repo in $frontend_repos;do | ||||
|     build_unfurler "${repo}" | ||||
| done | ||||
| 
 | ||||
| @ -166,7 +166,7 @@ for repo in $frontend_repos;do | ||||
| done | ||||
| 
 | ||||
| # ship frontend dist folders to public_html | ||||
| for target in mainnet liquid;do | ||||
| for target in $frontend_repos;do | ||||
|     ship_frontend "${target}" | ||||
| done | ||||
| 
 | ||||
|  | ||||
| @ -1,5 +1,4 @@ | ||||
| { | ||||
|   "BASE_MODULE": "bisq", | ||||
|   "OFFICIAL_MEMPOOL_SPACE": true, | ||||
|   "TESTNET_ENABLED": true, | ||||
|   "LIQUID_ENABLED": true, | ||||
| @ -10,5 +9,10 @@ | ||||
|   "MEMPOOL_WEBSITE_URL": "https://mempool.space", | ||||
|   "LIQUID_WEBSITE_URL": "https://liquid.network", | ||||
|   "BISQ_WEBSITE_URL": "https://bisq.markets", | ||||
|   "ITEMS_PER_PAGE": 25 | ||||
|   "ITEMS_PER_PAGE": 25, | ||||
|   "LIGHTNING": true, | ||||
|   "ACCELERATOR": true, | ||||
|   "PUBLIC_ACCELERATIONS": true, | ||||
|   "AUDIT": true, | ||||
|   "CUSTOMIZATION": "custom-sv-config.json" | ||||
| } | ||||
| @ -15,7 +15,7 @@ screen -dmS x startx | ||||
| sleep 3 | ||||
| 
 | ||||
| # start unfurlers for each frontend | ||||
| for site in mainnet liquid ;do | ||||
| for site in mainnet liquid onbtc;do | ||||
|     cd "$HOME/${site}/unfurler" && \ | ||||
|     echo "starting mempool unfurler: ${site}" && \ | ||||
|     screen -dmS "unfurler-${site}" sh -c 'while true;do npm run unfurler;sleep 2;done' | ||||
|  | ||||
| @ -1,12 +1,12 @@ | ||||
| { | ||||
|   "SERVER": { | ||||
|     "HOST": "https://bisq.fra.mempool.space", | ||||
|     "HTTP_PORT": 8002 | ||||
|     "HOST": "https://onbtc.tk7.mempool.space", | ||||
|     "HTTP_PORT": 8003 | ||||
|   }, | ||||
|   "MEMPOOL": { | ||||
|     "HTTP_HOST": "http://127.0.0.1", | ||||
|     "HTTP_PORT": 82, | ||||
|     "NETWORK": "bisq" | ||||
|     "HTTP_PORT": 83, | ||||
|     "NETWORK": "onbtc" | ||||
|   }, | ||||
|   "PUPPETEER": { | ||||
|     "CLUSTER_SIZE": 8, | ||||
| @ -50,6 +50,9 @@ class Server { | ||||
|       case "bisq": | ||||
|         canonical = "https://bisq.markets" | ||||
|         break; | ||||
|       case "onbtc": | ||||
|         canonical = "https://bitcoin.gob.sv" | ||||
|         break; | ||||
|       default: | ||||
|         canonical = "https://mempool.space" | ||||
|     } | ||||
|  | ||||
| @ -252,6 +252,24 @@ const networks = { | ||||
|   bisq: { | ||||
|     fallbackImg: '/resources/bisq/bisq-markets-preview.png', | ||||
|     routes: {} // no routes supported
 | ||||
|   }, | ||||
|   onbtc: { | ||||
|     fallbackImg: '/resources/onbtc/onbtc-preview.png', | ||||
|     routes: { // only dynamic routes supported
 | ||||
|       block: routes.block, | ||||
|       address: routes.address, | ||||
|       tx: routes.tx, | ||||
|       mining: { | ||||
|         title: "Mining", | ||||
|         routes: { | ||||
|           pool: routes.mining.routes.pool, | ||||
|         } | ||||
|       }, | ||||
|       lightning: { | ||||
|         title: "Lightning", | ||||
|         routes: routes.lightning.routes, | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| }; | ||||
| 
 | ||||
|  | ||||