ETH Price: $3,489.28 (+0.03%)
Gas: 2 Gwei

Contract

0x6CAF132C5C7EE5FCBda4d24238f27f14D2f40B5b
 

Overview

ETH Balance

1.970696969696969696 ETH

Eth Value

$6,876.31 (@ $3,489.28/ETH)

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw186513402023-11-25 21:18:35238 days ago1700947115IN
0x6CAF132C...4D2f40B5b
0 ETH0.0007910927.80155897
Withdraw186457902023-11-25 2:39:59239 days ago1700879999IN
0x6CAF132C...4D2f40B5b
0 ETH0.0008254829.01016659
Accept Bid186457842023-11-25 2:38:47239 days ago1700879927IN
0x6CAF132C...4D2f40B5b
0 ETH0.0020817832.09219907
Place Bid186456982023-11-25 2:21:35239 days ago1700878895IN
0x6CAF132C...4D2f40B5b
1.45 ETH0.0013993124.25957044
Withdraw186456942023-11-25 2:20:47239 days ago1700878847IN
0x6CAF132C...4D2f40B5b
0 ETH0.0006375922.40716302
Place Bid186456902023-11-25 2:19:59239 days ago1700878799IN
0x6CAF132C...4D2f40B5b
1.42069696 ETH0.0012048820.88879013
Withdraw186456642023-11-25 2:14:47239 days ago1700878487IN
0x6CAF132C...4D2f40B5b
0 ETH0.0005592919.65541418
Place Bid186456592023-11-25 2:13:47239 days ago1700878427IN
0x6CAF132C...4D2f40B5b
1.2 ETH0.001141219.7847689
Withdraw186456542023-11-25 2:12:47239 days ago1700878367IN
0x6CAF132C...4D2f40B5b
0 ETH0.0005645219.83928262
Place Bid186456492023-11-25 2:11:47239 days ago1700878307IN
0x6CAF132C...4D2f40B5b
1 ETH0.0011506519.94864617
Withdraw186456472023-11-25 2:11:23239 days ago1700878283IN
0x6CAF132C...4D2f40B5b
0 ETH0.0005775620.29749579
Place Bid186455632023-11-25 1:54:23239 days ago1700877263IN
0x6CAF132C...4D2f40B5b
0.9 ETH0.0013036922.60188812
Place Bid186449122023-11-24 23:43:23239 days ago1700869403IN
0x6CAF132C...4D2f40B5b
0.85115219 ETH0.0028782249.89908525
Place Bid186443272023-11-24 21:44:59239 days ago1700862299IN
0x6CAF132C...4D2f40B5b
0.6 ETH0.0016933229.356734
Withdraw186169432023-11-21 1:44:11243 days ago1700531051IN
0x6CAF132C...4D2f40B5b
0 ETH0.0014065949.43218262
Place Bid186066112023-11-19 15:00:59244 days ago1700406059IN
0x6CAF132C...4D2f40B5b
0.55 ETH0.0012059720.90773116
Withdraw186001712023-11-18 17:20:35245 days ago1700328035IN
0x6CAF132C...4D2f40B5b
0 ETH0.0010316636.25615071
Withdraw185973152023-11-18 7:41:59246 days ago1700293319IN
0x6CAF132C...4D2f40B5b
0 ETH0.0005436119.10421025
Place Bid185960852023-11-18 3:32:47246 days ago1700278367IN
0x6CAF132C...4D2f40B5b
0.51 ETH0.0011456319.86149262
Withdraw185942942023-11-17 21:31:35246 days ago1700256695IN
0x6CAF132C...4D2f40B5b
0 ETH0.0007290125.61992717
Place Bid185926132023-11-17 15:53:11246 days ago1700236391IN
0x6CAF132C...4D2f40B5b
0.5 ETH0.0023465340.68116477
Place Bid185920992023-11-17 14:09:59246 days ago1700230199IN
0x6CAF132C...4D2f40B5b
0.15 ETH0.0021967338.08414245
Place Bid185920712023-11-17 14:04:11246 days ago1700229851IN
0x6CAF132C...4D2f40B5b
0.1 ETH0.0031724135.52978309
0x60806040185920322023-11-17 13:56:23246 days ago1700229383IN
 Create: Screensaver
0 ETH0.088669328.56575401

Latest 10 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
186513402023-11-25 21:18:35238 days ago1700947115
0x6CAF132C...4D2f40B5b
0.6 ETH
186457902023-11-25 2:39:59239 days ago1700879999
0x6CAF132C...4D2f40B5b
1.45 ETH
186456942023-11-25 2:20:47239 days ago1700878847
0x6CAF132C...4D2f40B5b
1.2 ETH
186456642023-11-25 2:14:47239 days ago1700878487
0x6CAF132C...4D2f40B5b
1 ETH
186456542023-11-25 2:12:47239 days ago1700878367
0x6CAF132C...4D2f40B5b
0.9 ETH
186456472023-11-25 2:11:23239 days ago1700878283
0x6CAF132C...4D2f40B5b
0.85115219 ETH
186169432023-11-21 1:44:11243 days ago1700531051
0x6CAF132C...4D2f40B5b
0.51 ETH
186001712023-11-18 17:20:35245 days ago1700328035
0x6CAF132C...4D2f40B5b
0.5 ETH
185973152023-11-18 7:41:59246 days ago1700293319
0x6CAF132C...4D2f40B5b
0.15 ETH
185942942023-11-17 21:31:35246 days ago1700256695
0x6CAF132C...4D2f40B5b
0.1 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Screensaver

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2023-11-17
*/

//    _|_|_|                                                                                                        
//  _|          _|_|_|  _|  _|_|    _|_|      _|_|    _|_|_|      _|_|_|    _|_|_|  _|      _|    _|_|    _|  _|_|  
//    _|_|    _|        _|_|      _|_|_|_|  _|_|_|_|  _|    _|  _|_|      _|    _|  _|      _|  _|_|_|_|  _|_|      
//        _|  _|        _|        _|        _|        _|    _|      _|_|  _|    _|    _|  _|    _|        _|        
//  _|_|_|      _|_|_|  _|          _|_|_|    _|_|_|  _|    _|  _|_|_|      _|_|_|      _|        _|_|_|  _|  
//
// SPDX-License-Identifier: MIT
// Copyright Han, 2023

pragma solidity ^0.8.21;

contract Screensaver {
    event ArtpieceCreated(address indexed creator);
    event ArtpieceTransferred(address indexed oldOwner, address indexed newOwner);
    event BidAccepted(uint256 value, address indexed fromAddress, address indexed toAddress);
    event BidPlaced(uint256 value, address indexed fromAddress);
    event BidWithdrawn(uint256 value, address indexed fromAddress);
    event ListedForSale(uint256 value, address indexed fromAddress, address indexed toAddress);
    event SaleCanceled(uint256 value, address indexed fromAddress, address indexed toAddress);
    event SaleCompleted(uint256 value, address indexed fromAddress, address indexed toAddress);

    error FundsTransfer();
    error InsufficientFunds();
    error ListedForSaleToSpecificAddress();
    error NoBid();
    error NotForSale();
    error NotOwner();
    error NotRoyaltyRecipient();
    error NotYourBid();
    error NullAddress();
    error RoyaltyTooHigh();

    string public constant MANIFEST = (
        'This is our way of seeing things, stranger in a strange land.' '\n'
    );

    string public constant CORE = (
        '"use strict";let w=window,d=document,b=d.body;b||(d.createElement("body"),d.documentElement.appendChild(b)),d.body.style.touchAction="none",d.body.style.userSelect="none";let c=d.querySelector("canvas");c||(c=d.createElement("canvas"),c.style.display="block",b.appendChild(c));const mobile=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),SIGNATURE_SVG="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjMiIHZpZXdCb3g9IjAgMCAyNCAyMyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02IDBIN1YxSDhWMkg5SDEwSDExVjFIMTJIMTNIMTRIMTVIMTZIMTdIMThWMEgxOUgyMFYxSDIxVjBIMjJIMjNIMjRWMVYyVjNWNFY1VjZWN1Y4VjlWMTBWMTFIMjNWMTJWMTNIMjJWMTRWMTVWMTZWMTdWMThWMTlWMjBWMjFIMjNWMjJIMjJIMjFIMjBIMTlIMThIMTdIMTZIMTVWMjNIMTRIMTNIMTJIMTFIMTBIOUg4SDdWMjJINkg1SDRIM0gySDFWMjFWMjBWMTlWMThWMTdWMTZWMTVIMlYxNFYxM1YxMlYxMVYxMFY5VjhIM1Y5VjEwVjExVjEyVjEzVjE0VjE1VjE2SDJWMTdWMThWMTlWMjBWMjFIM0g0SDVINkg3SDhWMjJIOUgxMEgxMUgxMkgxM0gxNFYyMUgxNUgxNkgxN0gxOEgxOUgyMFYyMEgyMVYxOVYxOFYxN1YxNkgyMFYxNVYxNEgyMVYxM1YxMkgyMlYxMVYxMEgyM1Y5VjhWN1Y2VjVWNFYzVjJWMUgyMlYySDIxVjNIMjBWMkgxOUgxOEgxN0gxNkgxNUgxNEgxM0gxMlYzSDExSDEwSDlIOEg3VjJINkg1SDRIM0gyVjNWNFY1VjZWN1Y4SDFWN1Y2VjVWNFYzVjJIMFYxSDFIMkgzSDRINUg2VjBaTTEwIDlIMTFIMTJIMTNIMTRWMTBWMTFWMTJWMTNIMTNIMTJIMTFIMTBWMTJWMTFWMTBWOVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=",appendSignature=()=>{const e=d.createElement("img");e.src=SIGNATURE_SVG.trim(),e.style.cssText="width:40px;z-index:50;position:fixed;bottom:20px;right:20px;",b.appendChild(e)};let h={},s={};const glOptions={powerPreference:"high-performance"};mobile&&delete glOptions.powerPreference;let gl=c.getContext("webgl",glOptions);if(h.uniform=(e,v)=>{let t=Array.isArray(v)?v.length-1:0,l=[["uniform1f",0,"float"],["uniform2fv",[0,0],"vec2"]],c={};return c.name=e,c.type=l[t][0],c.value=v||l[t][1],c.inner_type=l[t][2],c.location="",c.dirty=!1,c},s.uniforms=[["u_resolution",[0,0]],["u_time",0],["u_mouse",[0,0]]],s.uniforms.forEach(((e,v)=>s.uniforms[v]=h.uniform(e[0],e[1]))),h.resize=()=>{let e=s.uniforms[0],v={x:h.ix.mouse.x/e.value[0],y:h.ix.mouse.y/e.value[1]},t=window.devicePixelRatio;e.value[0]=c.width=w.innerWidth*t,e.value[1]=c.height=w.innerHeight*t,e.dirty=!0,c.style.width="100%",c.style.height="100%",h.ix.set(c.width*v.x,c.height*v.y)},h.ix={start:{x:0,y:0},mouse:{x:0,y:0}},h.ix.events={start:["mousedown","touchstart"],move:["mousemove","touchmove"],stop:["mouseup","touchend"]},w.PointerEvent&&(h.ix.events={start:["pointerdown"],move:["pointermove"],stop:["pointerup"]}),h.ix.save=()=>{let e=s.uniforms[2];e.value=[h.ix.mouse.x,h.ix.mouse.y],e.dirty=!0},h.ix.set=(e,v)=>{h.ix.mouse={x:e,y:v},h.ix.save()},h.ix.start=e=>{h.ix.start.x=e.clientX,h.ix.start.y=e.clientY;for(let e of h.ix.events.move)d.addEventListener(e,h.ix.move)},h.ix.move=e=>{h.ix.mouse.x+=(e.clientX-h.ix.start.x)*window.devicePixelRatio,h.ix.mouse.y-=(e.clientY-h.ix.start.y)*window.devicePixelRatio,h.ix.start.x=e.clientX,h.ix.start.y=e.clientY,h.ix.save()},h.ix.stop=()=>{for(let e of h.ix.events.move)d.removeEventListener(e,h.ix.move)},h.buildShader=(e,v)=>{let t=gl.createShader(e);return gl.shaderSource(t,v),gl.compileShader(t),t},h.initProgram=(e,v)=>{s.program=gl.createProgram();const t=h.buildShader(gl.VERTEX_SHADER,v),l=h.buildShader(gl.FRAGMENT_SHADER,e);gl.attachShader(s.program,t),gl.attachShader(s.program,l),gl.linkProgram(s.program);for(let e in s.uniforms){let v=s.uniforms[e];v.location=gl.getUniformLocation(s.program,v.name),v.dirty=!0}let c=Float32Array.of(-1,1,-1,-1,1,1,1,-1),o=gl.createBuffer(),r=gl.getAttribLocation(s.program,"p");gl.bindBuffer(gl.ARRAY_BUFFER,o),gl.bufferData(gl.ARRAY_BUFFER,c,gl.STATIC_DRAW),gl.enableVertexAttribArray(r),gl.vertexAttribPointer(r,2,gl.FLOAT,!1,0,0),gl.useProgram(s.program)},s.pixel=new Uint8Array(4),h.render=()=>{gl.viewport(0,0,c.width,c.height);let e=s.uniforms[1];e.value=.001*performance.now(),e.dirty=!0;let v=s.uniforms.filter((e=>e.dirty));for(let e in v)gl[v[e].type](v[e].location,v[e].value),v[e].dirty=!1;gl.drawArrays(gl.TRIANGLE_STRIP,0,4),gl.readPixels(0,0,1,1,gl.RGBA,gl.UNSIGNED_BYTE,s.pixel),requestAnimationFrame(h.render)},gl){const e="attribute vec2 p;void main(){gl_Position=vec4(p,1.0,1.0);}",v=`${["#ifdef GL_ES","precision highp float;","#endif","#define AA "+(mobile?1:2),"#define R(a)mat2(cos(a),sin(a),-sin(a),cos(a))"].map((e=>`${e}${String.fromCharCode(10)}`)).join("")}uniform vec2 u_resolution;uniform float u_time;uniform vec2 u_mouse;const vec3 v=vec3(-.35,.05,4.3);const vec3 f=vec3(.88),l=vec3(2),c=vec3(1.42,-.97,-.1822),y=vec3(.768,.036,-.65),n=vec3(-.8,1.25,.666);const vec3 x=vec3(0,.5,0);const vec3 m=vec3(0,.2,0);const vec3 z=vec3(.015,.2,0);float a,r;vec3 s(vec3 v,vec4 l){return v+2.*cross(l.xyz,cross(l.xyz,v)+v*l.w);}vec3 h(vec3 v,float l){return s(v,vec4(sin(l/2.),0,0,cos(l/2.)));}vec3 p(vec3 v,float l){return s(v,vec4(0,sin(l/2.),0,cos(l/2.)));}vec3 e(vec3 v,float l){return s(v,vec4(0,0,sin(l/2.),cos(l/2.)));}mat4 t(vec3 v,float l){v=normalize(v);float x=sin(l),f=cos(l),y=1.-f;return mat4(y*v.x*v.x+f,y*v.x*v.y-v.z*x,y*v.z*v.x+v.y*x,0.,y*v.x*v.y+v.z*x,y*v.y*v.y+f,y*v.y*v.z-v.x*x,0.,y*v.z*v.x-v.y*x,y*v.y*v.z+v.x*x,y*v.z*v.z+f,0.,0.,0.,0.,1.);}vec3 e(vec3 v){float x=(v.x+16.)/116.,y=v.y/5e2+x,l=x-v.z/2e2;return vec3(95.047*(y>.206897?y*y*y:(y-16./116.)/7.787),1e2*(x>.206897?x*x*x:(x-16./116.)/7.787),108.883*(l>.206897?l*l*l:(l-16./116.)/7.787));}vec3 h(vec3 v){vec3 l=v/1e2*mat3(3.2406,-1.5372,-.4986,-.9689,1.8758,.0415,.0557,-.204,1.057),f;f.x=l.x>.0031308?1.055*pow(l.x,1./2.4)-.055:12.92*l.x;f.y=l.y>.0031308?1.055*pow(l.y,1./2.4)-.055:12.92*l.y;f.z=l.z>.0031308?1.055*pow(l.z,1./2.4)-.055:12.92*l.z;return f;}vec3 p(vec3 v){float l=v.y,y=v.x,f=v.z;l=50.*(l+1.);y*=127.;f*=127.;return h(e(vec3(l,y,f)));}vec3 s(vec3 v){v-=vec3(.1,.8,0);v.x-=.151;v.y-=.007;v.z+=.253;v.y*=2.;return v;}vec3 t(vec3 v){vec2 l=vec2(0);v=p(v,l.y);v=e(v,l.x);v=(vec4(v,1)*t(x,2.*acos(-1.)*u_time/20.)).xyz;v=(vec4(v,1)*t(m,2.*acos(-1.)*u_time/20.)).xyz;v=(vec4(v,1)*t(z,2.*acos(-1.)*u_time/10.)).xyz;v-=n;v-=y;v=h(v,c.x);v=p(v,c.y);v=e(v,c.z);v+=n;return v;}vec3 w(vec3 v){v=t(v);const vec3 l=vec3(0,-1,0);v+=l;v=h(v,-1.570795);v-=l;return v;}vec3 d(vec3 v){v=t(v);v=s(v);return p(v);}float d(float v,float l){float y=max(.004-abs(v-l),0.);return min(v,l)-y*y*.25/.004;}float w(float v,float l){return-d(v,-l);}float u(vec3 v){vec3 l=vec3(0);v=w(v);float f=length(v-l-vec3(1.895,2.0474,-1.4359))-3.;{vec3 x=v-l-vec3(-4.3351,-3.9846,-29.485);f=w(length(x)-30.,f);}{vec3 x=v-l-vec3(.53786,-21.914,-19.741);f=w(length(x)-30.,f);}{vec3 x=v-l-vec3(-1.7741,45.048,24.641);f=w(length(x)-50.,f);}{vec3 x=v-l-vec3(-2.1311,67.427,45.365);f=w(length(x)-50.,f);}{vec3 x=v-l-vec3(39.081,8.7784,31.357);f=w(length(x)-49.86,f);}{vec3 x=v-l-vec3(28.62,12.917,40.135);f=w(length(x)-50.,f);}{vec3 x=v-l-vec3(-.16214,54.491,60.143);f=w(length(x)-80.,f);}{vec3 x=v-l-vec3(15.418,17.653,77.38);f=w(length(x)-80.,f);}{vec3 x=v-l-vec3(-40.298,-9.302,68.882);f=w(length(x)-79.98,f);}{vec3 x=v-l-vec3(-51.08,20.818,59.105);f=w(length(x)-80.01,f);}{vec3 x=v-l-vec3(17.042,-1.99,78.88);f=w(length(x)-79.96,f);}{vec3 x=v-l-vec3(10.826,.01142,-28.229);f=w(length(x)-30.,f);}return f;}vec2 i(vec3 v){float x=u(v);return vec2(x,1);}vec2 d(vec3 v,vec3 x,float l){float f=0.,y=0.;for(int r=0;r<128;r++){vec3 m=v+x*f;vec2 c=i(m);y=c.y;f+=c.x*l;if(abs(c.x)<.001||f>10.)break;}return vec2(f,y);}vec3 A(vec3 v){vec2 l=vec2(.02,0);vec3 x=vec3(l.x,0,0),f=vec3(0,l.x,0),y=vec3(0,0,l);return normalize(vec3(i(v+x).x-i(v-x).x,i(v+f).x-i(v-f).x,i(v+y).x-i(v-y).x));}vec3 A(vec3 v,vec3 x,vec3 f){vec3 y=vec3(.31),r=y*.25,c=normalize(l);float m=clamp(dot(f,c),0.,1.);r+=y*m;m=clamp(dot(x,reflect(c,f)),0.,1.),r+=pow(m,15.)*.17;return r;}float A(vec3 v,vec3 x){float f=-.2,y,l;f*=f;y=-dot(x,v);l=1.-y;return f+(1.-f)*pow(l,5.);}vec3 e(vec3 v,vec3 x,vec3 y){vec3 l=v,c,m,z,n,i;vec2 a=d(l+x*.01,x,-1.),s;c=A(l);m=l+y*.01;m-=c*.001;s=d(m,y,-1.);if(s.x<=0.)a.x=0.;v=l+x*.01;z=1.-d(v);z=clamp(z,0.,1.);float u=4.*(mod(r/4.,2.*acos(-1.))/(2.*acos(-1.))),e;u=u>3.?pow(max(0.,abs(1.-2.*(4.-u))*2.-1.),2.):1.;n=exp(-10.*u*z*a.x);e=clamp(a.x,0.,1.);i=mix(f,vec3(.4),e);i*=n;return clamp(i,0.,1.);}vec3 i(vec3 v,vec3 x){vec3 l=vec3(0),y;vec2 m=d(v,x,1.);y=v+m.x*x;if(m.x>=10.)return f;if(m.y==1.){vec3 c=A(y),r;l=A(y,x,c);float i=A(x,c);i=clamp(i,0.,1.);r=e(y,refract(x,c,1./1.5),x);l+=mix(r,f,i);}return l;}vec3 h(float v,float x,float l){float y=sin(l);return vec3(v*y*cos(x),v*cos(l),v*y*sin(x));}void main(){a=u_time/5.;r=2.*acos(-1.)*a;vec3 l=vec3(u_mouse/u_resolution,0),f,x,y,c;l+=v;if(l.y==0.)l.y=.001;float m=l.y*3.14159,z;f=h(l.z,-l.x*(2.*acos(-1.)),m);x=normalize(vec3(0)-f);z=floor(mod(l.y,2.))==0.?1.:-1.;y=normalize(cross(vec3(0,z,0),x));mat3 u=mat3(y,cross(x,y),x);c=vec3(0);for(int s=0;s<AA;s++)for(int n=0;n<AA;n++){vec2 e=vec2(s,n)/float(AA)-.5,A=(gl_FragCoord.xy+e-.5*u_resolution.xy)*1.16920251224065/u_resolution.y;c+=i(f,normalize(u*vec3(A,1)));}c/=float(AA*AA);gl_FragColor=vec4(c,1);}`;h.initProgram(v,e),h.resize(),h.ix.set(c.width/2,c.height/2),h.render();for(let e of h.ix.events.start)d.addEventListener(e,h.ix.start);for(let e of h.ix.events.stop)d.addEventListener(e,h.ix.stop);window.addEventListener("resize",h.resize),appendSignature()}else{const e=d.createElement("div");e.style.cssText="align-items:center;background:#969696;color:#fff;display:flex;font-family:monospace;font-size:20px;height:100vh;justify-content:center;left:0;position:fixed;top:0;width:100vw;",e.innerHTML="Your browser does not support WebGL.",b.append(e)}'
    );

    modifier onlyOwner() {
        if (owner != msg.sender) {
            revert NotOwner();
        }

        _;
    }

    modifier onlyRoyaltyRecipient() {
        if (royaltyRecipient != msg.sender) {
            revert NotRoyaltyRecipient();
        }

        _;
    }

    struct Offer {
        bool active;
        uint256 value;
        address toAddress;
    }

    struct Bid {
        bool active;
        uint256 value;
        address fromAddress;
    }

    address public owner;

    Offer public currentOffer;

    Bid public currentBid;

    address public royaltyRecipient;

    uint256 public royaltyPercentage;

    mapping (address => uint256) public pendingWithdrawals;

    constructor(uint256 _royaltyPercentage) {
        if (_royaltyPercentage >= 100) {
            revert RoyaltyTooHigh();
        }

        owner = msg.sender;
        royaltyRecipient = msg.sender;
        royaltyPercentage = _royaltyPercentage;

        emit ArtpieceCreated(msg.sender);
    }

    function name() public view virtual returns (string memory) {
        return 'Screensaver';
    }

    function symbol() public view virtual returns (string memory) {
        return 'SS';
    }

    function artpiece() public view virtual returns (string memory) {
        return string.concat(
            '<!DOCTYPE html>'
            '<html>'
                '<head>'
                    '<title>', 'Screensaver', '</title>'

                    '<meta name="viewport" content="width=device-width, initial-scale=1" />'

                    '<style>html,body{background:#969696;margin:0;padding:0;overflow:hidden;}</style>'
                '</head>'

                '<body>'
                    '<script type="text/javascript">',
                        CORE,
                    '</script>'
                '</body>'
            '</html>'
        );
    }

    function withdraw() public {
        uint256 amount = pendingWithdrawals[msg.sender];

        pendingWithdrawals[msg.sender] = 0;

        _sendFunds(amount);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        if (newOwner == address(0)) {
            revert NullAddress();
        }

        _transferOwnership(newOwner);

        if (currentBid.fromAddress == newOwner) {
            uint256 amount = currentBid.value;

            currentBid = Bid({ active: false, value: 0, fromAddress: address(0) });

            pendingWithdrawals[newOwner] += amount;
        }

        if (currentOffer.active) {
            currentOffer = Offer({ active: false, value: 0, toAddress: address(0) });
        }
    }

    function listForSale(uint256 salePriceInWei) public onlyOwner {
        currentOffer = Offer({ active: true, value: salePriceInWei, toAddress: address(0) });

        emit ListedForSale(salePriceInWei, msg.sender, address(0));
    }

    function listForSaleToAddress(uint256 salePriceInWei, address toAddress) public onlyOwner {
        currentOffer = Offer({ active: true, value: salePriceInWei, toAddress: toAddress });

        emit ListedForSale(salePriceInWei, msg.sender, toAddress);
    }

    function cancelFromSale() public onlyOwner {
        Offer memory oldOffer = currentOffer;

        currentOffer = Offer({ active: false, value: 0, toAddress: address(0) });

        emit SaleCanceled(oldOffer.value, msg.sender, oldOffer.toAddress);
    }

    function buyNow() public payable {
        if (!currentOffer.active) {
            revert NotForSale();
        }

        if (currentOffer.toAddress != address(0) && currentOffer.toAddress != msg.sender) {
            revert ListedForSaleToSpecificAddress();
        }

        if (msg.value != currentOffer.value) {
            revert InsufficientFunds();
        }

        currentOffer = Offer({ active: false, value: 0, toAddress: address(0) });

        uint256 royaltyAmount = _calcRoyalty(msg.value);

        pendingWithdrawals[owner] += msg.value - royaltyAmount;
        pendingWithdrawals[royaltyRecipient] += royaltyAmount;

        emit SaleCompleted(msg.value, owner, msg.sender);

        _transferOwnership(msg.sender);
    }

    function placeBid() public payable {
        if (msg.value <= currentBid.value) {
            revert InsufficientFunds();
        }

        if (currentBid.value > 0) {
            pendingWithdrawals[currentBid.fromAddress] += currentBid.value;
        }

        currentBid = Bid({ active: true, value: msg.value, fromAddress: msg.sender });

        emit BidPlaced(msg.value, msg.sender);
    }

    function acceptBid() public onlyOwner {
        if (!currentBid.active) {
            revert NoBid();
        }

        uint256 amount = currentBid.value;
        address bidder = currentBid.fromAddress;

        currentOffer = Offer({ active: false, value: 0, toAddress: address(0) });
        currentBid = Bid({ active: false, value: 0, fromAddress: address(0) });

        uint256 royaltyAmount = _calcRoyalty(amount);

        pendingWithdrawals[owner] += amount - royaltyAmount;
        pendingWithdrawals[royaltyRecipient] += royaltyAmount;

        emit BidAccepted(amount, owner, bidder);

        _transferOwnership(bidder);
    }

    function withdrawBid() public {
        if (msg.sender != currentBid.fromAddress) {
            revert NotYourBid();
        }

        uint256 amount = currentBid.value;

        currentBid = Bid({ active: false, value: 0, fromAddress: address(0) });

        _sendFunds(amount);

        emit BidWithdrawn(amount, msg.sender);
    }

    function setRoyaltyRecipient(address newRoyaltyRecipient) public onlyRoyaltyRecipient {
        if (newRoyaltyRecipient == address(0)) {
            revert NullAddress();
        }

        royaltyRecipient = newRoyaltyRecipient;
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = owner;

        owner = newOwner;

        emit ArtpieceTransferred(oldOwner, newOwner);
    }

    function _sendFunds(uint256 amount) internal virtual {
        (bool success, ) = msg.sender.call{value: amount}('');

        if (!success) {
            revert FundsTransfer();
        }
    }

    function _calcRoyalty(uint256 amount) internal virtual returns (uint256) {
        return (amount * royaltyPercentage) / 100;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_royaltyPercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"FundsTransfer","type":"error"},{"inputs":[],"name":"InsufficientFunds","type":"error"},{"inputs":[],"name":"ListedForSaleToSpecificAddress","type":"error"},{"inputs":[],"name":"NoBid","type":"error"},{"inputs":[],"name":"NotForSale","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"NotRoyaltyRecipient","type":"error"},{"inputs":[],"name":"NotYourBid","type":"error"},{"inputs":[],"name":"NullAddress","type":"error"},{"inputs":[],"name":"RoyaltyTooHigh","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creator","type":"address"}],"name":"ArtpieceCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"ArtpieceTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"}],"name":"BidAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"}],"name":"BidPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"}],"name":"BidWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"}],"name":"ListedForSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"}],"name":"SaleCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"fromAddress","type":"address"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"}],"name":"SaleCompleted","type":"event"},{"inputs":[],"name":"CORE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANIFEST","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptBid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"artpiece","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyNow","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"cancelFromSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentBid","outputs":[{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address","name":"fromAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentOffer","outputs":[{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address","name":"toAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"salePriceInWei","type":"uint256"}],"name":"listForSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"salePriceInWei","type":"uint256"},{"internalType":"address","name":"toAddress","type":"address"}],"name":"listForSaleToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pendingWithdrawals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"placeBid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"royaltyPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRoyaltyRecipient","type":"address"}],"name":"setRoyaltyRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawBid","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561000f575f80fd5b506040516136f63803806136f683398101604081905261002e916100a2565b6064811061004f5760405163c2b03beb60e01b815260040160405180910390fd5b5f8054336001600160a01b031991821681178355600780549092168117909155600883905560405190917fcaea53471edbf6ace3d253c1bdecf4553374dd40c18148776b57bf5af0f7f02f91a2506100b9565b5f602082840312156100b2575f80fd5b5051919050565b613630806100c65f395ff3fe608060405260043610610126575f3560e01c80638a71bb2d116100a8578063def181011161006d578063def18101146102f0578063e52a787414610340578063ecfc7ecc14610354578063f2fde38b1461035c578063f3f437031461037b578063fa4e28f6146103a6575f80fd5b80638a71bb2d1461025e5780638da5cb5b1461028157806395d89b411461029f5780639c3962f0146102c9578063c7857fb5146102d1575f80fd5b80633ccfd60b116100ee5780633ccfd60b146101cc57806341e42f30146101e057806342c47217146101ff5780634c00de82146102135780636b6c07741461024a575f80fd5b806306fdde031461012a5780630dca550e1461016f57806337271cc71461019057806337a908fc146101a457806338739dad146101b8575b5f80fd5b348015610135575f80fd5b5060408051808201909152600b81526a29b1b932b2b739b0bb32b960a91b60208201525b6040516101669190610d9d565b60405180910390f35b34801561017a575f80fd5b5061018e610189366004610dea565b6103d0565b005b34801561019b575f80fd5b5061018e610480565b3480156101af575f80fd5b50610159610527565b3480156101c3575f80fd5b50610159610569565b3480156101d7575f80fd5b5061018e610585565b3480156101eb575f80fd5b5061018e6101fa366004610e14565b6105a4565b34801561020a575f80fd5b5061018e610618565b34801561021e575f80fd5b50600754610232906001600160a01b031681565b6040516001600160a01b039091168152602001610166565b348015610255575f80fd5b506101596106f0565b348015610269575f80fd5b5061027360085481565b604051908152602001610166565b34801561028c575f80fd5b505f54610232906001600160a01b031681565b3480156102aa575f80fd5b50604080518082019091526002815261535360f01b6020820152610159565b61018e61070f565b3480156102dc575f80fd5b5061018e6102eb366004610e34565b610889565b3480156102fb575f80fd5b5060045460055460065461031a9260ff1691906001600160a01b031683565b60408051931515845260208401929092526001600160a01b031690820152606001610166565b34801561034b575f80fd5b5061018e610922565b61018e610ab1565b348015610367575f80fd5b5061018e610376366004610e14565b610b85565b348015610386575f80fd5b50610273610395366004610e14565b60096020525f908152604090205481565b3480156103b1575f80fd5b5060015460025460035461031a9260ff1691906001600160a01b031683565b5f546001600160a01b031633146103fa576040516330cd747160e01b815260040160405180910390fd5b604080516060810182526001808252602082018590526001600160a01b038416918301829052805460ff1916811790556002849055600380546001600160a01b03191682179055905133907f812dc3f3c55b5006c05a0b308b2cb2eee57e2b53135f8b53ff5728c329b480a0906104749086815260200190565b60405180910390a35050565b6006546001600160a01b031633146104ab5760405163173f0e6f60e21b815260040160405180910390fd5b60058054604080516060810182525f8082526020820181905291018190526004805460ff19169055909155600680546001600160a01b03191690556104ef81610ca1565b60405181815233907f5e9c7ae3229b2cda5065d7058fcc05765c695c29ce05313fbe96cb2ca639231a9060200160405180910390a250565b6060604051806125a0016040528061257b815260200161108061257b91396040516020016105559190610e4b565b604051602081830303815290604052905090565b6040518060600160405280603e8152602001611042603e913981565b335f90815260096020526040812080549190556105a181610ca1565b50565b6007546001600160a01b031633146105cf57604051631229bf3760e11b815260040160405180910390fd5b6001600160a01b0381166105f65760405163e99d5ac560e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610642576040516330cd747160e01b815260040160405180910390fd5b60408051606080820183526001805460ff811615158452600280546020808701918252600380546001600160a01b038082168a8c019081528b51998a018c525f808b52948a01859052988b0184905260ff1990961690965592556001600160a01b03199093169055915190519351929391169133917ff1f48fe426adbd884772d4c165015a460df54458ff7e238dff36fe3c5d341ccf916106e591815260200190565b60405180910390a350565b604051806125a0016040528061257b815260200161108061257b913981565b60015460ff1661073257604051631d99ddbf60e01b815260040160405180910390fd5b6003546001600160a01b03161580159061075757506003546001600160a01b03163314155b156107755760405163d6da33db60e01b815260040160405180910390fd5b60025434146107975760405163356680b760e01b815260040160405180910390fd5b604080516060810182525f8082526020820181905291018190526001805460ff191690556002819055600380546001600160a01b03191690556107d934610d0b565b90506107e58134610fe5565b5f80546001600160a01b03168152600960205260408120805490919061080c908490610ff8565b90915550506007546001600160a01b03165f908152600960205260408120805483929061083a908490610ff8565b90915550505f5460405134815233916001600160a01b0316907fdb87be53c711a1eb193f5fffddcfd85425990853a8423fa2bfd4a8620c218ed49060200160405180910390a36105a133610d2c565b5f546001600160a01b031633146108b3576040516330cd747160e01b815260040160405180910390fd5b604080516060810182526001808252602082018490525f918301829052805460ff1916811790556002839055600380546001600160a01b0319169055905133907f812dc3f3c55b5006c05a0b308b2cb2eee57e2b53135f8b53ff5728c329b480a0906106e59085815260200190565b5f546001600160a01b0316331461094c576040516330cd747160e01b815260040160405180910390fd5b60045460ff1661096f576040516313650ef160e11b815260040160405180910390fd5b600580546006805460408051606080820183525f80835260208084018290529284018190526001805460ff199081169091556002829055600380546001600160a01b031990811690915585519384018652828452938301829052919093018390526004805490911690559481905593811690915590916001600160a01b03909116906109fa83610d0b565b9050610a068184610fe5565b5f80546001600160a01b031681526009602052604081208054909190610a2d908490610ff8565b90915550506007546001600160a01b03165f9081526009602052604081208054839290610a5b908490610ff8565b90915550505f546040518481526001600160a01b038481169216907fd32f7ef8c20232133e4dbd098b49d6b86ab580eee8a90a815925e900584749639060200160405180910390a3610aac82610d2c565b505050565b6005543411610ad35760405163356680b760e01b815260040160405180910390fd5b60055415610b0d576005546006546001600160a01b03165f9081526009602052604081208054909190610b07908490610ff8565b90915550505b604080516060810182526001808252346020808401829052339385018490526004805460ff19169093179092556005819055600680546001600160a01b03191684179055925192835290917f5445de3f4fe13efb115ec05c57e09cc0e277801d0cd2ae780457ebcd8688c391910160405180910390a2565b5f546001600160a01b03163314610baf576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b038116610bd65760405163e99d5ac560e01b815260040160405180910390fd5b610bdf81610d2c565b6006546001600160a01b03808316911603610c5c5760058054604080516060810182525f80825260208083018290529183018190526004805460ff1916905593849055600680546001600160a01b03191690556001600160a01b0385168452600990528220805491928392610c55908490610ff8565b9091555050505b60015460ff16156105a157604080516060810182525f8082526020820181905291018190526001805460ff19169055600255600380546001600160a01b031916905550565b6040515f90339083908381818185875af1925050503d805f8114610ce0576040519150601f19603f3d011682016040523d82523d5f602084013e610ce5565b606091505b5050905080610d07576040516342bb570960e01b815260040160405180910390fd5b5050565b5f606460085483610d1c919061100b565b610d269190611022565b92915050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917fb0594827696749bdc48b310d4a5cfee5e9a89491f1c6bea2b928c2c33db414de9190a35050565b5f5b83811015610d95578181015183820152602001610d7d565b50505f910152565b602081525f8251806020840152610dbb816040850160208701610d7b565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114610de5575f80fd5b919050565b5f8060408385031215610dfb575f80fd5b82359150610e0b60208401610dcf565b90509250929050565b5f60208284031215610e24575f80fd5b610e2d82610dcf565b9392505050565b5f60208284031215610e44575f80fd5b5035919050565b7f3c21444f43545950452068746d6c3e3c68746d6c3e3c686561643e3c7469746c815261329f60f11b60208201526a29b1b932b2b739b0bb32b960a91b60228201527f3c2f7469746c653e3c6d657461206e616d653d2276696577706f72742220636f602d8201527f6e74656e743d2277696474683d6465766963652d77696474682c20696e697469604d8201527f616c2d7363616c653d3122202f3e3c7374796c653e68746d6c2c626f64797b62606d8201527f61636b67726f756e643a233936393639363b6d617267696e3a303b7061646469608d8201527f6e673a303b6f766572666c6f773a68696464656e3b7d3c2f7374796c653e3c2f60ad8201527f686561643e3c626f64793e3c73637269707420747970653d22746578742f6a6160cd820152693b30b9b1b934b83a111f60b11b60ed8201525f8251610f988160f7850160208701610d7b565b8201610fc660f782017f3c2f7363726970743e3c2f626f64793e3c2f68746d6c3e0000000000000000009052565b61010e019392505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610d2657610d26610fd1565b80820180821115610d2657610d26610fd1565b8082028115828204841417610d2657610d26610fd1565b5f8261103c57634e487b7160e01b5f52601260045260245ffd5b50049056fe54686973206973206f757220776179206f6620736565696e67207468696e67732c20737472616e67657220696e206120737472616e6765206c616e642e0a2275736520737472696374223b6c657420773d77696e646f772c643d646f63756d656e742c623d642e626f64793b627c7c28642e637265617465456c656d656e742822626f647922292c642e646f63756d656e74456c656d656e742e617070656e644368696c64286229292c642e626f64792e7374796c652e746f756368416374696f6e3d226e6f6e65222c642e626f64792e7374796c652e7573657253656c6563743d226e6f6e65223b6c657420633d642e717565727953656c6563746f72282263616e76617322293b637c7c28633d642e637265617465456c656d656e74282263616e76617322292c632e7374796c652e646973706c61793d22626c6f636b222c622e617070656e644368696c64286329293b636f6e7374206d6f62696c653d2f416e64726f69647c7765624f537c6950686f6e657c695061647c69506f647c426c61636b42657272797c49454d6f62696c657c4f70657261204d696e692f692e74657374286e6176696761746f722e757365724167656e74292c5349474e41545552455f5356473d22646174613a696d6167652f7376672b786d6c3b6261736536342c50484e325a79423361575230614430694d6a51694947686c6157646f644430694d6a4d6949485a705a58644362336739496a41674d4341794e4341794d7949675a6d6c7362443069626d39755a53496765473173626e4d39496d6830644841364c79393364336375647a4d7562334a6e4c7a49774d44417663335a6e496a344b50484268644767675a6d6c73624331796457786c50534a6c646d56756232526b4969426a62476c774c584a3162475539496d56325a5735765a47516949475139496b3032494442494e315978534468574d6b67355344457753444578566a46494d544a494d544e494d5452494d5456494d545a494d5464494d5468574d4567784f5567794d46597853444978566a42494d6a4a494d6a4e494d6a52574d565979566a4e574e465931566a5a574e315934566a6c574d5442574d5446494d6a4e574d544a574d544e494d6a4a574d5452574d5456574d545a574d5464574d5468574d546c574d6a42574d6a46494d6a4e574d6a4a494d6a4a494d6a46494d6a42494d546c494d5468494d5464494d545a494d5456574d6a4e494d5452494d544e494d544a494d5446494d5442494f556734534464574d6a4a494e6b6731534452494d306779534446574d6a46574d6a42574d546c574d5468574d5464574d545a574d5456494d6c59784e4659784d3159784d6c59784d5659784d465935566a68494d315935566a4577566a4578566a4579566a457a566a4530566a4531566a453253444a574d5464574d5468574d546c574d6a42574d6a46494d306730534456494e6b6733534468574d6a4a494f5567784d4567784d5567784d6b67784d3067784e4659794d5567784e5567784e6b67784e3067784f4567784f5567794d4659794d4567794d5659784f5659784f4659784e3159784e6b67794d4659784e5659784e4567794d5659784d3159784d6b67794d6c59784d5659784d4567794d315935566a68574e315932566a56574e46597a566a4a574d5567794d6c597953444978566a4e494d6a42574d6b67784f5567784f4567784e3067784e6b67784e5567784e4567784d3067784d6c597a534445785344457753446c494f456733566a4a494e6b6731534452494d306779566a4e574e465931566a5a574e315934534446574e315932566a56574e46597a566a4a494d465978534446494d6b677a534452494e556732566a42615454457749446c494d5446494d544a494d544e494d5452574d5442574d5446574d544a574d544e494d544e494d544a494d5446494d5442574d544a574d5446574d5442574f566f6949475a7062477739496e646f6158526c4969382b436a777663335a6e50676f3d222c617070656e645369676e61747572653d28293d3e7b636f6e737420653d642e637265617465456c656d656e742822696d6722293b652e7372633d5349474e41545552455f5356472e7472696d28292c652e7374796c652e637373546578743d2277696474683a343070783b7a2d696e6465783a35303b706f736974696f6e3a66697865643b626f74746f6d3a323070783b72696768743a323070783b222c622e617070656e644368696c642865297d3b6c657420683d7b7d2c733d7b7d3b636f6e737420676c4f7074696f6e733d7b706f776572507265666572656e63653a22686967682d706572666f726d616e6365227d3b6d6f62696c65262664656c65746520676c4f7074696f6e732e706f776572507265666572656e63653b6c657420676c3d632e676574436f6e746578742822776562676c222c676c4f7074696f6e73293b696628682e756e69666f726d3d28652c76293d3e7b6c657420743d41727261792e697341727261792876293f762e6c656e6774682d313a302c6c3d5b5b22756e69666f726d3166222c302c22666c6f6174225d2c5b22756e69666f726d326676222c5b302c305d2c2276656332225d5d2c633d7b7d3b72657475726e20632e6e616d653d652c632e747970653d6c5b745d5b305d2c632e76616c75653d767c7c6c5b745d5b315d2c632e696e6e65725f747970653d6c5b745d5b325d2c632e6c6f636174696f6e3d22222c632e64697274793d21312c637d2c732e756e69666f726d733d5b5b22755f7265736f6c7574696f6e222c5b302c305d5d2c5b22755f74696d65222c305d2c5b22755f6d6f757365222c5b302c305d5d5d2c732e756e69666f726d732e666f7245616368282828652c76293d3e732e756e69666f726d735b765d3d682e756e69666f726d28655b305d2c655b315d2929292c682e726573697a653d28293d3e7b6c657420653d732e756e69666f726d735b305d2c763d7b783a682e69782e6d6f7573652e782f652e76616c75655b305d2c793a682e69782e6d6f7573652e792f652e76616c75655b315d7d2c743d77696e646f772e646576696365506978656c526174696f3b652e76616c75655b305d3d632e77696474683d772e696e6e657257696474682a742c652e76616c75655b315d3d632e6865696768743d772e696e6e65724865696768742a742c652e64697274793d21302c632e7374796c652e77696474683d2231303025222c632e7374796c652e6865696768743d2231303025222c682e69782e73657428632e77696474682a762e782c632e6865696768742a762e79297d2c682e69783d7b73746172743a7b783a302c793a307d2c6d6f7573653a7b783a302c793a307d7d2c682e69782e6576656e74733d7b73746172743a5b226d6f757365646f776e222c22746f7563687374617274225d2c6d6f76653a5b226d6f7573656d6f7665222c22746f7563686d6f7665225d2c73746f703a5b226d6f7573657570222c22746f756368656e64225d7d2c772e506f696e7465724576656e74262628682e69782e6576656e74733d7b73746172743a5b22706f696e746572646f776e225d2c6d6f76653a5b22706f696e7465726d6f7665225d2c73746f703a5b22706f696e7465727570225d7d292c682e69782e736176653d28293d3e7b6c657420653d732e756e69666f726d735b325d3b652e76616c75653d5b682e69782e6d6f7573652e782c682e69782e6d6f7573652e795d2c652e64697274793d21307d2c682e69782e7365743d28652c76293d3e7b682e69782e6d6f7573653d7b783a652c793a767d2c682e69782e7361766528297d2c682e69782e73746172743d653d3e7b682e69782e73746172742e783d652e636c69656e74582c682e69782e73746172742e793d652e636c69656e74593b666f72286c65742065206f6620682e69782e6576656e74732e6d6f766529642e6164644576656e744c697374656e657228652c682e69782e6d6f7665297d2c682e69782e6d6f76653d653d3e7b682e69782e6d6f7573652e782b3d28652e636c69656e74582d682e69782e73746172742e78292a77696e646f772e646576696365506978656c526174696f2c682e69782e6d6f7573652e792d3d28652e636c69656e74592d682e69782e73746172742e79292a77696e646f772e646576696365506978656c526174696f2c682e69782e73746172742e783d652e636c69656e74582c682e69782e73746172742e793d652e636c69656e74592c682e69782e7361766528297d2c682e69782e73746f703d28293d3e7b666f72286c65742065206f6620682e69782e6576656e74732e6d6f766529642e72656d6f76654576656e744c697374656e657228652c682e69782e6d6f7665297d2c682e6275696c645368616465723d28652c76293d3e7b6c657420743d676c2e6372656174655368616465722865293b72657475726e20676c2e736861646572536f7572636528742c76292c676c2e636f6d70696c655368616465722874292c747d2c682e696e697450726f6772616d3d28652c76293d3e7b732e70726f6772616d3d676c2e63726561746550726f6772616d28293b636f6e737420743d682e6275696c6453686164657228676c2e5645525445585f5348414445522c76292c6c3d682e6275696c6453686164657228676c2e465241474d454e545f5348414445522c65293b676c2e61747461636853686164657228732e70726f6772616d2c74292c676c2e61747461636853686164657228732e70726f6772616d2c6c292c676c2e6c696e6b50726f6772616d28732e70726f6772616d293b666f72286c6574206520696e20732e756e69666f726d73297b6c657420763d732e756e69666f726d735b655d3b762e6c6f636174696f6e3d676c2e676574556e69666f726d4c6f636174696f6e28732e70726f6772616d2c762e6e616d65292c762e64697274793d21307d6c657420633d466c6f6174333241727261792e6f66282d312c312c2d312c2d312c312c312c312c2d31292c6f3d676c2e63726561746542756666657228292c723d676c2e6765744174747269624c6f636174696f6e28732e70726f6772616d2c227022293b676c2e62696e6442756666657228676c2e41525241595f4255464645522c6f292c676c2e6275666665724461746128676c2e41525241595f4255464645522c632c676c2e5354415449435f44524157292c676c2e656e61626c6556657274657841747472696241727261792872292c676c2e766572746578417474726962506f696e74657228722c322c676c2e464c4f41542c21312c302c30292c676c2e75736550726f6772616d28732e70726f6772616d297d2c732e706978656c3d6e65772055696e743841727261792834292c682e72656e6465723d28293d3e7b676c2e76696577706f727428302c302c632e77696474682c632e686569676874293b6c657420653d732e756e69666f726d735b315d3b652e76616c75653d2e3030312a706572666f726d616e63652e6e6f7728292c652e64697274793d21303b6c657420763d732e756e69666f726d732e66696c7465722828653d3e652e646972747929293b666f72286c6574206520696e207629676c5b765b655d2e747970655d28765b655d2e6c6f636174696f6e2c765b655d2e76616c7565292c765b655d2e64697274793d21313b676c2e6472617741727261797328676c2e545249414e474c455f53545249502c302c34292c676c2e72656164506978656c7328302c302c312c312c676c2e524742412c676c2e554e5349474e45445f425954452c732e706978656c292c72657175657374416e696d6174696f6e4672616d6528682e72656e646572297d2c676c297b636f6e737420653d22617474726962757465207665633220703b766f6964206d61696e28297b676c5f506f736974696f6e3d7665633428702c312e302c312e30293b7d222c763d60247b5b2223696664656620474c5f4553222c22707265636973696f6e20686967687020666c6f61743b222c2223656e646966222c2223646566696e6520414120222b286d6f62696c653f313a32292c2223646566696e6520522861296d61743228636f732861292c73696e2861292c2d73696e2861292c636f7328612929225d2e6d61702828653d3e60247b657d247b537472696e672e66726f6d43686172436f6465283130297d6029292e6a6f696e282222297d756e69666f726d207665633220755f7265736f6c7574696f6e3b756e69666f726d20666c6f617420755f74696d653b756e69666f726d207665633220755f6d6f7573653b636f6e7374207665633320763d76656333282d2e33352c2e30352c342e33293b636f6e7374207665633320663d76656333282e3838292c6c3d766563332832292c633d7665633328312e34322c2d2e39372c2d2e31383232292c793d76656333282e3736382c2e3033362c2d2e3635292c6e3d76656333282d2e382c312e32352c2e363636293b636f6e7374207665633320783d7665633328302c2e352c30293b636f6e73742076656333206d3d7665633328302c2e322c30293b636f6e73742076656333207a3d76656333282e3031352c2e322c30293b666c6f617420612c723b766563332073287665633320762c76656334206c297b72657475726e20762b322e2a63726f7373286c2e78797a2c63726f7373286c2e78797a2c76292b762a6c2e77293b7d766563332068287665633320762c666c6f6174206c297b72657475726e207328762c766563342873696e286c2f322e292c302c302c636f73286c2f322e2929293b7d766563332070287665633320762c666c6f6174206c297b72657475726e207328762c7665633428302c73696e286c2f322e292c302c636f73286c2f322e2929293b7d766563332065287665633320762c666c6f6174206c297b72657475726e207328762c7665633428302c302c73696e286c2f322e292c636f73286c2f322e2929293b7d6d6174342074287665633320762c666c6f6174206c297b763d6e6f726d616c697a652876293b666c6f617420783d73696e286c292c663d636f73286c292c793d312e2d663b72657475726e206d61743428792a762e782a762e782b662c792a762e782a762e792d762e7a2a782c792a762e7a2a762e782b762e792a782c302e2c792a762e782a762e792b762e7a2a782c792a762e792a762e792b662c792a762e792a762e7a2d762e782a782c302e2c792a762e7a2a762e782d762e792a782c792a762e792a762e7a2b762e782a782c792a762e7a2a762e7a2b662c302e2c302e2c302e2c302e2c312e293b7d76656333206528766563332076297b666c6f617420783d28762e782b31362e292f3131362e2c793d762e792f3565322b782c6c3d782d762e7a2f3265323b72657475726e20766563332839352e3034372a28793e2e3230363839373f792a792a793a28792d31362e2f3131362e292f372e373837292c3165322a28783e2e3230363839373f782a782a783a28782d31362e2f3131362e292f372e373837292c3130382e3838332a286c3e2e3230363839373f6c2a6c2a6c3a286c2d31362e2f3131362e292f372e37383729293b7d76656333206828766563332076297b76656333206c3d762f3165322a6d61743328332e323430362c2d312e353337322c2d2e343938362c2d2e393638392c312e383735382c2e303431352c2e303535372c2d2e3230342c312e303537292c663b662e783d6c2e783e2e303033313330383f312e3035352a706f77286c2e782c312e2f322e34292d2e3035353a31322e39322a6c2e783b662e793d6c2e793e2e303033313330383f312e3035352a706f77286c2e792c312e2f322e34292d2e3035353a31322e39322a6c2e793b662e7a3d6c2e7a3e2e303033313330383f312e3035352a706f77286c2e7a2c312e2f322e34292d2e3035353a31322e39322a6c2e7a3b72657475726e20663b7d76656333207028766563332076297b666c6f6174206c3d762e792c793d762e782c663d762e7a3b6c3d35302e2a286c2b312e293b792a3d3132372e3b662a3d3132372e3b72657475726e206828652876656333286c2c792c662929293b7d76656333207328766563332076297b762d3d76656333282e312c2e382c30293b762e782d3d2e3135313b762e792d3d2e3030373b762e7a2b3d2e3235333b762e792a3d322e3b72657475726e20763b7d76656333207428766563332076297b76656332206c3d766563322830293b763d7028762c6c2e79293b763d6528762c6c2e78293b763d287665633428762c31292a7428782c322e2a61636f73282d312e292a755f74696d652f32302e29292e78797a3b763d287665633428762c31292a74286d2c322e2a61636f73282d312e292a755f74696d652f32302e29292e78797a3b763d287665633428762c31292a74287a2c322e2a61636f73282d312e292a755f74696d652f31302e29292e78797a3b762d3d6e3b762d3d793b763d6828762c632e78293b763d7028762c632e79293b763d6528762c632e7a293b762b3d6e3b72657475726e20763b7d76656333207728766563332076297b763d742876293b636f6e73742076656333206c3d7665633328302c2d312c30293b762b3d6c3b763d6828762c2d312e353730373935293b762d3d6c3b72657475726e20763b7d76656333206428766563332076297b763d742876293b763d732876293b72657475726e20702876293b7d666c6f6174206428666c6f617420762c666c6f6174206c297b666c6f617420793d6d6178282e3030342d61627328762d6c292c302e293b72657475726e206d696e28762c6c292d792a792a2e32352f2e3030343b7d666c6f6174207728666c6f617420762c666c6f6174206c297b72657475726e2d6428762c2d6c293b7d666c6f6174207528766563332076297b76656333206c3d766563332830293b763d772876293b666c6f617420663d6c656e67746828762d6c2d7665633328312e3839352c322e303437342c2d312e3433353929292d332e3b7b7665633320783d762d6c2d76656333282d342e333335312c2d332e393834362c2d32392e343835293b663d77286c656e6774682878292d33302e2c66293b7d7b7665633320783d762d6c2d76656333282e35333738362c2d32312e3931342c2d31392e373431293b663d77286c656e6774682878292d33302e2c66293b7d7b7665633320783d762d6c2d76656333282d312e373734312c34352e3034382c32342e363431293b663d77286c656e6774682878292d35302e2c66293b7d7b7665633320783d762d6c2d76656333282d322e313331312c36372e3432372c34352e333635293b663d77286c656e6774682878292d35302e2c66293b7d7b7665633320783d762d6c2d766563332833392e3038312c382e373738342c33312e333537293b663d77286c656e6774682878292d34392e38362c66293b7d7b7665633320783d762d6c2d766563332832382e36322c31322e3931372c34302e313335293b663d77286c656e6774682878292d35302e2c66293b7d7b7665633320783d762d6c2d76656333282d2e31363231342c35342e3439312c36302e313433293b663d77286c656e6774682878292d38302e2c66293b7d7b7665633320783d762d6c2d766563332831352e3431382c31372e3635332c37372e3338293b663d77286c656e6774682878292d38302e2c66293b7d7b7665633320783d762d6c2d76656333282d34302e3239382c2d392e3330322c36382e383832293b663d77286c656e6774682878292d37392e39382c66293b7d7b7665633320783d762d6c2d76656333282d35312e30382c32302e3831382c35392e313035293b663d77286c656e6774682878292d38302e30312c66293b7d7b7665633320783d762d6c2d766563332831372e3034322c2d312e39392c37382e3838293b663d77286c656e6774682878292d37392e39362c66293b7d7b7665633320783d762d6c2d766563332831302e3832362c2e30313134322c2d32382e323239293b663d77286c656e6774682878292d33302e2c66293b7d72657475726e20663b7d76656332206928766563332076297b666c6f617420783d752876293b72657475726e207665633228782c31293b7d766563322064287665633320762c7665633320782c666c6f6174206c297b666c6f617420663d302e2c793d302e3b666f7228696e7420723d303b723c3132383b722b2b297b76656333206d3d762b782a663b7665633220633d69286d293b793d632e793b662b3d632e782a6c3b69662861627328632e78293c2e3030317c7c663e31302e29627265616b3b7d72657475726e207665633228662c79293b7d76656333204128766563332076297b76656332206c3d76656332282e30322c30293b7665633320783d76656333286c2e782c302c30292c663d7665633328302c6c2e782c30292c793d7665633328302c302c6c293b72657475726e206e6f726d616c697a652876656333286928762b78292e782d6928762d78292e782c6928762b66292e782d6928762d66292e782c6928762b79292e782d6928762d79292e7829293b7d766563332041287665633320762c7665633320782c766563332066297b7665633320793d76656333282e3331292c723d792a2e32352c633d6e6f726d616c697a65286c293b666c6f6174206d3d636c616d7028646f7428662c63292c302e2c312e293b722b3d792a6d3b6d3d636c616d7028646f7428782c7265666c65637428632c6629292c302e2c312e292c722b3d706f77286d2c31352e292a2e31373b72657475726e20723b7d666c6f61742041287665633320762c766563332078297b666c6f617420663d2d2e322c792c6c3b662a3d663b793d2d646f7428782c76293b6c3d312e2d793b72657475726e20662b28312e2d66292a706f77286c2c352e293b7d766563332065287665633320762c7665633320782c766563332079297b76656333206c3d762c632c6d2c7a2c6e2c693b7665633220613d64286c2b782a2e30312c782c2d312e292c733b633d41286c293b6d3d6c2b792a2e30313b6d2d3d632a2e3030313b733d64286d2c792c2d312e293b696628732e783c3d302e29612e783d302e3b763d6c2b782a2e30313b7a3d312e2d642876293b7a3d636c616d70287a2c302e2c312e293b666c6f617420753d342e2a286d6f6428722f342e2c322e2a61636f73282d312e29292f28322e2a61636f73282d312e2929292c653b753d753e332e3f706f77286d617828302e2c61627328312e2d322e2a28342e2d7529292a322e2d312e292c322e293a312e3b6e3d657870282d31302e2a752a7a2a612e78293b653d636c616d7028612e782c302e2c312e293b693d6d697828662c76656333282e34292c65293b692a3d6e3b72657475726e20636c616d7028692c302e2c312e293b7d766563332069287665633320762c766563332078297b76656333206c3d766563332830292c793b76656332206d3d6428762c782c312e293b793d762b6d2e782a783b6966286d2e783e3d31302e2972657475726e20663b6966286d2e793d3d312e297b7665633320633d412879292c723b6c3d4128792c782c63293b666c6f617420693d4128782c63293b693d636c616d7028692c302e2c312e293b723d6528792c7265667261637428782c632c312e2f312e35292c78293b6c2b3d6d697828722c662c69293b7d72657475726e206c3b7d76656333206828666c6f617420762c666c6f617420782c666c6f6174206c297b666c6f617420793d73696e286c293b72657475726e207665633328762a792a636f732878292c762a636f73286c292c762a792a73696e287829293b7d766f6964206d61696e28297b613d755f74696d652f352e3b723d322e2a61636f73282d312e292a613b76656333206c3d7665633328755f6d6f7573652f755f7265736f6c7574696f6e2c30292c662c782c792c633b6c2b3d763b6966286c2e793d3d302e296c2e793d2e3030313b666c6f6174206d3d6c2e792a332e31343135392c7a3b663d68286c2e7a2c2d6c2e782a28322e2a61636f73282d312e29292c6d293b783d6e6f726d616c697a6528766563332830292d66293b7a3d666c6f6f72286d6f64286c2e792c322e29293d3d302e3f312e3a2d312e3b793d6e6f726d616c697a652863726f7373287665633328302c7a2c30292c7829293b6d61743320753d6d61743328792c63726f737328782c79292c78293b633d766563332830293b666f7228696e7420733d303b733c41413b732b2b29666f7228696e74206e3d303b6e3c41413b6e2b2b297b7665633220653d7665633228732c6e292f666c6f6174284141292d2e352c413d28676c5f46726167436f6f72642e78792b652d2e352a755f7265736f6c7574696f6e2e7879292a312e31363932303235313232343036352f755f7265736f6c7574696f6e2e793b632b3d6928662c6e6f726d616c697a6528752a7665633328412c312929293b7d632f3d666c6f61742841412a4141293b676c5f46726167436f6c6f723d7665633428632c31293b7d603b682e696e697450726f6772616d28762c65292c682e726573697a6528292c682e69782e73657428632e77696474682f322c632e6865696768742f32292c682e72656e64657228293b666f72286c65742065206f6620682e69782e6576656e74732e737461727429642e6164644576656e744c697374656e657228652c682e69782e7374617274293b666f72286c65742065206f6620682e69782e6576656e74732e73746f7029642e6164644576656e744c697374656e657228652c682e69782e73746f70293b77696e646f772e6164644576656e744c697374656e65722822726573697a65222c682e726573697a65292c617070656e645369676e617475726528297d656c73657b636f6e737420653d642e637265617465456c656d656e74282264697622293b652e7374796c652e637373546578743d22616c69676e2d6974656d733a63656e7465723b6261636b67726f756e643a233936393639363b636f6c6f723a236666663b646973706c61793a666c65783b666f6e742d66616d696c793a6d6f6e6f73706163653b666f6e742d73697a653a323070783b6865696768743a31303076683b6a7573746966792d636f6e74656e743a63656e7465723b6c6566743a303b706f736974696f6e3a66697865643b746f703a303b77696474683a31303076773b222c652e696e6e657248544d4c3d22596f75722062726f7773657220646f6573206e6f7420737570706f727420576562474c2e222c622e617070656e642865297da2646970667358221220f3ecae26ae544a1b9339c6beaa309446632079d8bc45afe1a72e93f190d786b664736f6c634300081500330000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405260043610610126575f3560e01c80638a71bb2d116100a8578063def181011161006d578063def18101146102f0578063e52a787414610340578063ecfc7ecc14610354578063f2fde38b1461035c578063f3f437031461037b578063fa4e28f6146103a6575f80fd5b80638a71bb2d1461025e5780638da5cb5b1461028157806395d89b411461029f5780639c3962f0146102c9578063c7857fb5146102d1575f80fd5b80633ccfd60b116100ee5780633ccfd60b146101cc57806341e42f30146101e057806342c47217146101ff5780634c00de82146102135780636b6c07741461024a575f80fd5b806306fdde031461012a5780630dca550e1461016f57806337271cc71461019057806337a908fc146101a457806338739dad146101b8575b5f80fd5b348015610135575f80fd5b5060408051808201909152600b81526a29b1b932b2b739b0bb32b960a91b60208201525b6040516101669190610d9d565b60405180910390f35b34801561017a575f80fd5b5061018e610189366004610dea565b6103d0565b005b34801561019b575f80fd5b5061018e610480565b3480156101af575f80fd5b50610159610527565b3480156101c3575f80fd5b50610159610569565b3480156101d7575f80fd5b5061018e610585565b3480156101eb575f80fd5b5061018e6101fa366004610e14565b6105a4565b34801561020a575f80fd5b5061018e610618565b34801561021e575f80fd5b50600754610232906001600160a01b031681565b6040516001600160a01b039091168152602001610166565b348015610255575f80fd5b506101596106f0565b348015610269575f80fd5b5061027360085481565b604051908152602001610166565b34801561028c575f80fd5b505f54610232906001600160a01b031681565b3480156102aa575f80fd5b50604080518082019091526002815261535360f01b6020820152610159565b61018e61070f565b3480156102dc575f80fd5b5061018e6102eb366004610e34565b610889565b3480156102fb575f80fd5b5060045460055460065461031a9260ff1691906001600160a01b031683565b60408051931515845260208401929092526001600160a01b031690820152606001610166565b34801561034b575f80fd5b5061018e610922565b61018e610ab1565b348015610367575f80fd5b5061018e610376366004610e14565b610b85565b348015610386575f80fd5b50610273610395366004610e14565b60096020525f908152604090205481565b3480156103b1575f80fd5b5060015460025460035461031a9260ff1691906001600160a01b031683565b5f546001600160a01b031633146103fa576040516330cd747160e01b815260040160405180910390fd5b604080516060810182526001808252602082018590526001600160a01b038416918301829052805460ff1916811790556002849055600380546001600160a01b03191682179055905133907f812dc3f3c55b5006c05a0b308b2cb2eee57e2b53135f8b53ff5728c329b480a0906104749086815260200190565b60405180910390a35050565b6006546001600160a01b031633146104ab5760405163173f0e6f60e21b815260040160405180910390fd5b60058054604080516060810182525f8082526020820181905291018190526004805460ff19169055909155600680546001600160a01b03191690556104ef81610ca1565b60405181815233907f5e9c7ae3229b2cda5065d7058fcc05765c695c29ce05313fbe96cb2ca639231a9060200160405180910390a250565b6060604051806125a0016040528061257b815260200161108061257b91396040516020016105559190610e4b565b604051602081830303815290604052905090565b6040518060600160405280603e8152602001611042603e913981565b335f90815260096020526040812080549190556105a181610ca1565b50565b6007546001600160a01b031633146105cf57604051631229bf3760e11b815260040160405180910390fd5b6001600160a01b0381166105f65760405163e99d5ac560e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610642576040516330cd747160e01b815260040160405180910390fd5b60408051606080820183526001805460ff811615158452600280546020808701918252600380546001600160a01b038082168a8c019081528b51998a018c525f808b52948a01859052988b0184905260ff1990961690965592556001600160a01b03199093169055915190519351929391169133917ff1f48fe426adbd884772d4c165015a460df54458ff7e238dff36fe3c5d341ccf916106e591815260200190565b60405180910390a350565b604051806125a0016040528061257b815260200161108061257b913981565b60015460ff1661073257604051631d99ddbf60e01b815260040160405180910390fd5b6003546001600160a01b03161580159061075757506003546001600160a01b03163314155b156107755760405163d6da33db60e01b815260040160405180910390fd5b60025434146107975760405163356680b760e01b815260040160405180910390fd5b604080516060810182525f8082526020820181905291018190526001805460ff191690556002819055600380546001600160a01b03191690556107d934610d0b565b90506107e58134610fe5565b5f80546001600160a01b03168152600960205260408120805490919061080c908490610ff8565b90915550506007546001600160a01b03165f908152600960205260408120805483929061083a908490610ff8565b90915550505f5460405134815233916001600160a01b0316907fdb87be53c711a1eb193f5fffddcfd85425990853a8423fa2bfd4a8620c218ed49060200160405180910390a36105a133610d2c565b5f546001600160a01b031633146108b3576040516330cd747160e01b815260040160405180910390fd5b604080516060810182526001808252602082018490525f918301829052805460ff1916811790556002839055600380546001600160a01b0319169055905133907f812dc3f3c55b5006c05a0b308b2cb2eee57e2b53135f8b53ff5728c329b480a0906106e59085815260200190565b5f546001600160a01b0316331461094c576040516330cd747160e01b815260040160405180910390fd5b60045460ff1661096f576040516313650ef160e11b815260040160405180910390fd5b600580546006805460408051606080820183525f80835260208084018290529284018190526001805460ff199081169091556002829055600380546001600160a01b031990811690915585519384018652828452938301829052919093018390526004805490911690559481905593811690915590916001600160a01b03909116906109fa83610d0b565b9050610a068184610fe5565b5f80546001600160a01b031681526009602052604081208054909190610a2d908490610ff8565b90915550506007546001600160a01b03165f9081526009602052604081208054839290610a5b908490610ff8565b90915550505f546040518481526001600160a01b038481169216907fd32f7ef8c20232133e4dbd098b49d6b86ab580eee8a90a815925e900584749639060200160405180910390a3610aac82610d2c565b505050565b6005543411610ad35760405163356680b760e01b815260040160405180910390fd5b60055415610b0d576005546006546001600160a01b03165f9081526009602052604081208054909190610b07908490610ff8565b90915550505b604080516060810182526001808252346020808401829052339385018490526004805460ff19169093179092556005819055600680546001600160a01b03191684179055925192835290917f5445de3f4fe13efb115ec05c57e09cc0e277801d0cd2ae780457ebcd8688c391910160405180910390a2565b5f546001600160a01b03163314610baf576040516330cd747160e01b815260040160405180910390fd5b6001600160a01b038116610bd65760405163e99d5ac560e01b815260040160405180910390fd5b610bdf81610d2c565b6006546001600160a01b03808316911603610c5c5760058054604080516060810182525f80825260208083018290529183018190526004805460ff1916905593849055600680546001600160a01b03191690556001600160a01b0385168452600990528220805491928392610c55908490610ff8565b9091555050505b60015460ff16156105a157604080516060810182525f8082526020820181905291018190526001805460ff19169055600255600380546001600160a01b031916905550565b6040515f90339083908381818185875af1925050503d805f8114610ce0576040519150601f19603f3d011682016040523d82523d5f602084013e610ce5565b606091505b5050905080610d07576040516342bb570960e01b815260040160405180910390fd5b5050565b5f606460085483610d1c919061100b565b610d269190611022565b92915050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917fb0594827696749bdc48b310d4a5cfee5e9a89491f1c6bea2b928c2c33db414de9190a35050565b5f5b83811015610d95578181015183820152602001610d7d565b50505f910152565b602081525f8251806020840152610dbb816040850160208701610d7b565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114610de5575f80fd5b919050565b5f8060408385031215610dfb575f80fd5b82359150610e0b60208401610dcf565b90509250929050565b5f60208284031215610e24575f80fd5b610e2d82610dcf565b9392505050565b5f60208284031215610e44575f80fd5b5035919050565b7f3c21444f43545950452068746d6c3e3c68746d6c3e3c686561643e3c7469746c815261329f60f11b60208201526a29b1b932b2b739b0bb32b960a91b60228201527f3c2f7469746c653e3c6d657461206e616d653d2276696577706f72742220636f602d8201527f6e74656e743d2277696474683d6465766963652d77696474682c20696e697469604d8201527f616c2d7363616c653d3122202f3e3c7374796c653e68746d6c2c626f64797b62606d8201527f61636b67726f756e643a233936393639363b6d617267696e3a303b7061646469608d8201527f6e673a303b6f766572666c6f773a68696464656e3b7d3c2f7374796c653e3c2f60ad8201527f686561643e3c626f64793e3c73637269707420747970653d22746578742f6a6160cd820152693b30b9b1b934b83a111f60b11b60ed8201525f8251610f988160f7850160208701610d7b565b8201610fc660f782017f3c2f7363726970743e3c2f626f64793e3c2f68746d6c3e0000000000000000009052565b61010e019392505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610d2657610d26610fd1565b80820180821115610d2657610d26610fd1565b8082028115828204841417610d2657610d26610fd1565b5f8261103c57634e487b7160e01b5f52601260045260245ffd5b50049056fe54686973206973206f757220776179206f6620736565696e67207468696e67732c20737472616e67657220696e206120737472616e6765206c616e642e0a2275736520737472696374223b6c657420773d77696e646f772c643d646f63756d656e742c623d642e626f64793b627c7c28642e637265617465456c656d656e742822626f647922292c642e646f63756d656e74456c656d656e742e617070656e644368696c64286229292c642e626f64792e7374796c652e746f756368416374696f6e3d226e6f6e65222c642e626f64792e7374796c652e7573657253656c6563743d226e6f6e65223b6c657420633d642e717565727953656c6563746f72282263616e76617322293b637c7c28633d642e637265617465456c656d656e74282263616e76617322292c632e7374796c652e646973706c61793d22626c6f636b222c622e617070656e644368696c64286329293b636f6e7374206d6f62696c653d2f416e64726f69647c7765624f537c6950686f6e657c695061647c69506f647c426c61636b42657272797c49454d6f62696c657c4f70657261204d696e692f692e74657374286e6176696761746f722e757365724167656e74292c5349474e41545552455f5356473d22646174613a696d6167652f7376672b786d6c3b6261736536342c50484e325a79423361575230614430694d6a51694947686c6157646f644430694d6a4d6949485a705a58644362336739496a41674d4341794e4341794d7949675a6d6c7362443069626d39755a53496765473173626e4d39496d6830644841364c79393364336375647a4d7562334a6e4c7a49774d44417663335a6e496a344b50484268644767675a6d6c73624331796457786c50534a6c646d56756232526b4969426a62476c774c584a3162475539496d56325a5735765a47516949475139496b3032494442494e315978534468574d6b67355344457753444578566a46494d544a494d544e494d5452494d5456494d545a494d5464494d5468574d4567784f5567794d46597853444978566a42494d6a4a494d6a4e494d6a52574d565979566a4e574e465931566a5a574e315934566a6c574d5442574d5446494d6a4e574d544a574d544e494d6a4a574d5452574d5456574d545a574d5464574d5468574d546c574d6a42574d6a46494d6a4e574d6a4a494d6a4a494d6a46494d6a42494d546c494d5468494d5464494d545a494d5456574d6a4e494d5452494d544e494d544a494d5446494d5442494f556734534464574d6a4a494e6b6731534452494d306779534446574d6a46574d6a42574d546c574d5468574d5464574d545a574d5456494d6c59784e4659784d3159784d6c59784d5659784d465935566a68494d315935566a4577566a4578566a4579566a457a566a4530566a4531566a453253444a574d5464574d5468574d546c574d6a42574d6a46494d306730534456494e6b6733534468574d6a4a494f5567784d4567784d5567784d6b67784d3067784e4659794d5567784e5567784e6b67784e3067784f4567784f5567794d4659794d4567794d5659784f5659784f4659784e3159784e6b67794d4659784e5659784e4567794d5659784d3159784d6b67794d6c59784d5659784d4567794d315935566a68574e315932566a56574e46597a566a4a574d5567794d6c597953444978566a4e494d6a42574d6b67784f5567784f4567784e3067784e6b67784e5567784e4567784d3067784d6c597a534445785344457753446c494f456733566a4a494e6b6731534452494d306779566a4e574e465931566a5a574e315934534446574e315932566a56574e46597a566a4a494d465978534446494d6b677a534452494e556732566a42615454457749446c494d5446494d544a494d544e494d5452574d5442574d5446574d544a574d544e494d544e494d544a494d5446494d5442574d544a574d5446574d5442574f566f6949475a7062477739496e646f6158526c4969382b436a777663335a6e50676f3d222c617070656e645369676e61747572653d28293d3e7b636f6e737420653d642e637265617465456c656d656e742822696d6722293b652e7372633d5349474e41545552455f5356472e7472696d28292c652e7374796c652e637373546578743d2277696474683a343070783b7a2d696e6465783a35303b706f736974696f6e3a66697865643b626f74746f6d3a323070783b72696768743a323070783b222c622e617070656e644368696c642865297d3b6c657420683d7b7d2c733d7b7d3b636f6e737420676c4f7074696f6e733d7b706f776572507265666572656e63653a22686967682d706572666f726d616e6365227d3b6d6f62696c65262664656c65746520676c4f7074696f6e732e706f776572507265666572656e63653b6c657420676c3d632e676574436f6e746578742822776562676c222c676c4f7074696f6e73293b696628682e756e69666f726d3d28652c76293d3e7b6c657420743d41727261792e697341727261792876293f762e6c656e6774682d313a302c6c3d5b5b22756e69666f726d3166222c302c22666c6f6174225d2c5b22756e69666f726d326676222c5b302c305d2c2276656332225d5d2c633d7b7d3b72657475726e20632e6e616d653d652c632e747970653d6c5b745d5b305d2c632e76616c75653d767c7c6c5b745d5b315d2c632e696e6e65725f747970653d6c5b745d5b325d2c632e6c6f636174696f6e3d22222c632e64697274793d21312c637d2c732e756e69666f726d733d5b5b22755f7265736f6c7574696f6e222c5b302c305d5d2c5b22755f74696d65222c305d2c5b22755f6d6f757365222c5b302c305d5d5d2c732e756e69666f726d732e666f7245616368282828652c76293d3e732e756e69666f726d735b765d3d682e756e69666f726d28655b305d2c655b315d2929292c682e726573697a653d28293d3e7b6c657420653d732e756e69666f726d735b305d2c763d7b783a682e69782e6d6f7573652e782f652e76616c75655b305d2c793a682e69782e6d6f7573652e792f652e76616c75655b315d7d2c743d77696e646f772e646576696365506978656c526174696f3b652e76616c75655b305d3d632e77696474683d772e696e6e657257696474682a742c652e76616c75655b315d3d632e6865696768743d772e696e6e65724865696768742a742c652e64697274793d21302c632e7374796c652e77696474683d2231303025222c632e7374796c652e6865696768743d2231303025222c682e69782e73657428632e77696474682a762e782c632e6865696768742a762e79297d2c682e69783d7b73746172743a7b783a302c793a307d2c6d6f7573653a7b783a302c793a307d7d2c682e69782e6576656e74733d7b73746172743a5b226d6f757365646f776e222c22746f7563687374617274225d2c6d6f76653a5b226d6f7573656d6f7665222c22746f7563686d6f7665225d2c73746f703a5b226d6f7573657570222c22746f756368656e64225d7d2c772e506f696e7465724576656e74262628682e69782e6576656e74733d7b73746172743a5b22706f696e746572646f776e225d2c6d6f76653a5b22706f696e7465726d6f7665225d2c73746f703a5b22706f696e7465727570225d7d292c682e69782e736176653d28293d3e7b6c657420653d732e756e69666f726d735b325d3b652e76616c75653d5b682e69782e6d6f7573652e782c682e69782e6d6f7573652e795d2c652e64697274793d21307d2c682e69782e7365743d28652c76293d3e7b682e69782e6d6f7573653d7b783a652c793a767d2c682e69782e7361766528297d2c682e69782e73746172743d653d3e7b682e69782e73746172742e783d652e636c69656e74582c682e69782e73746172742e793d652e636c69656e74593b666f72286c65742065206f6620682e69782e6576656e74732e6d6f766529642e6164644576656e744c697374656e657228652c682e69782e6d6f7665297d2c682e69782e6d6f76653d653d3e7b682e69782e6d6f7573652e782b3d28652e636c69656e74582d682e69782e73746172742e78292a77696e646f772e646576696365506978656c526174696f2c682e69782e6d6f7573652e792d3d28652e636c69656e74592d682e69782e73746172742e79292a77696e646f772e646576696365506978656c526174696f2c682e69782e73746172742e783d652e636c69656e74582c682e69782e73746172742e793d652e636c69656e74592c682e69782e7361766528297d2c682e69782e73746f703d28293d3e7b666f72286c65742065206f6620682e69782e6576656e74732e6d6f766529642e72656d6f76654576656e744c697374656e657228652c682e69782e6d6f7665297d2c682e6275696c645368616465723d28652c76293d3e7b6c657420743d676c2e6372656174655368616465722865293b72657475726e20676c2e736861646572536f7572636528742c76292c676c2e636f6d70696c655368616465722874292c747d2c682e696e697450726f6772616d3d28652c76293d3e7b732e70726f6772616d3d676c2e63726561746550726f6772616d28293b636f6e737420743d682e6275696c6453686164657228676c2e5645525445585f5348414445522c76292c6c3d682e6275696c6453686164657228676c2e465241474d454e545f5348414445522c65293b676c2e61747461636853686164657228732e70726f6772616d2c74292c676c2e61747461636853686164657228732e70726f6772616d2c6c292c676c2e6c696e6b50726f6772616d28732e70726f6772616d293b666f72286c6574206520696e20732e756e69666f726d73297b6c657420763d732e756e69666f726d735b655d3b762e6c6f636174696f6e3d676c2e676574556e69666f726d4c6f636174696f6e28732e70726f6772616d2c762e6e616d65292c762e64697274793d21307d6c657420633d466c6f6174333241727261792e6f66282d312c312c2d312c2d312c312c312c312c2d31292c6f3d676c2e63726561746542756666657228292c723d676c2e6765744174747269624c6f636174696f6e28732e70726f6772616d2c227022293b676c2e62696e6442756666657228676c2e41525241595f4255464645522c6f292c676c2e6275666665724461746128676c2e41525241595f4255464645522c632c676c2e5354415449435f44524157292c676c2e656e61626c6556657274657841747472696241727261792872292c676c2e766572746578417474726962506f696e74657228722c322c676c2e464c4f41542c21312c302c30292c676c2e75736550726f6772616d28732e70726f6772616d297d2c732e706978656c3d6e65772055696e743841727261792834292c682e72656e6465723d28293d3e7b676c2e76696577706f727428302c302c632e77696474682c632e686569676874293b6c657420653d732e756e69666f726d735b315d3b652e76616c75653d2e3030312a706572666f726d616e63652e6e6f7728292c652e64697274793d21303b6c657420763d732e756e69666f726d732e66696c7465722828653d3e652e646972747929293b666f72286c6574206520696e207629676c5b765b655d2e747970655d28765b655d2e6c6f636174696f6e2c765b655d2e76616c7565292c765b655d2e64697274793d21313b676c2e6472617741727261797328676c2e545249414e474c455f53545249502c302c34292c676c2e72656164506978656c7328302c302c312c312c676c2e524742412c676c2e554e5349474e45445f425954452c732e706978656c292c72657175657374416e696d6174696f6e4672616d6528682e72656e646572297d2c676c297b636f6e737420653d22617474726962757465207665633220703b766f6964206d61696e28297b676c5f506f736974696f6e3d7665633428702c312e302c312e30293b7d222c763d60247b5b2223696664656620474c5f4553222c22707265636973696f6e20686967687020666c6f61743b222c2223656e646966222c2223646566696e6520414120222b286d6f62696c653f313a32292c2223646566696e6520522861296d61743228636f732861292c73696e2861292c2d73696e2861292c636f7328612929225d2e6d61702828653d3e60247b657d247b537472696e672e66726f6d43686172436f6465283130297d6029292e6a6f696e282222297d756e69666f726d207665633220755f7265736f6c7574696f6e3b756e69666f726d20666c6f617420755f74696d653b756e69666f726d207665633220755f6d6f7573653b636f6e7374207665633320763d76656333282d2e33352c2e30352c342e33293b636f6e7374207665633320663d76656333282e3838292c6c3d766563332832292c633d7665633328312e34322c2d2e39372c2d2e31383232292c793d76656333282e3736382c2e3033362c2d2e3635292c6e3d76656333282d2e382c312e32352c2e363636293b636f6e7374207665633320783d7665633328302c2e352c30293b636f6e73742076656333206d3d7665633328302c2e322c30293b636f6e73742076656333207a3d76656333282e3031352c2e322c30293b666c6f617420612c723b766563332073287665633320762c76656334206c297b72657475726e20762b322e2a63726f7373286c2e78797a2c63726f7373286c2e78797a2c76292b762a6c2e77293b7d766563332068287665633320762c666c6f6174206c297b72657475726e207328762c766563342873696e286c2f322e292c302c302c636f73286c2f322e2929293b7d766563332070287665633320762c666c6f6174206c297b72657475726e207328762c7665633428302c73696e286c2f322e292c302c636f73286c2f322e2929293b7d766563332065287665633320762c666c6f6174206c297b72657475726e207328762c7665633428302c302c73696e286c2f322e292c636f73286c2f322e2929293b7d6d6174342074287665633320762c666c6f6174206c297b763d6e6f726d616c697a652876293b666c6f617420783d73696e286c292c663d636f73286c292c793d312e2d663b72657475726e206d61743428792a762e782a762e782b662c792a762e782a762e792d762e7a2a782c792a762e7a2a762e782b762e792a782c302e2c792a762e782a762e792b762e7a2a782c792a762e792a762e792b662c792a762e792a762e7a2d762e782a782c302e2c792a762e7a2a762e782d762e792a782c792a762e792a762e7a2b762e782a782c792a762e7a2a762e7a2b662c302e2c302e2c302e2c302e2c312e293b7d76656333206528766563332076297b666c6f617420783d28762e782b31362e292f3131362e2c793d762e792f3565322b782c6c3d782d762e7a2f3265323b72657475726e20766563332839352e3034372a28793e2e3230363839373f792a792a793a28792d31362e2f3131362e292f372e373837292c3165322a28783e2e3230363839373f782a782a783a28782d31362e2f3131362e292f372e373837292c3130382e3838332a286c3e2e3230363839373f6c2a6c2a6c3a286c2d31362e2f3131362e292f372e37383729293b7d76656333206828766563332076297b76656333206c3d762f3165322a6d61743328332e323430362c2d312e353337322c2d2e343938362c2d2e393638392c312e383735382c2e303431352c2e303535372c2d2e3230342c312e303537292c663b662e783d6c2e783e2e303033313330383f312e3035352a706f77286c2e782c312e2f322e34292d2e3035353a31322e39322a6c2e783b662e793d6c2e793e2e303033313330383f312e3035352a706f77286c2e792c312e2f322e34292d2e3035353a31322e39322a6c2e793b662e7a3d6c2e7a3e2e303033313330383f312e3035352a706f77286c2e7a2c312e2f322e34292d2e3035353a31322e39322a6c2e7a3b72657475726e20663b7d76656333207028766563332076297b666c6f6174206c3d762e792c793d762e782c663d762e7a3b6c3d35302e2a286c2b312e293b792a3d3132372e3b662a3d3132372e3b72657475726e206828652876656333286c2c792c662929293b7d76656333207328766563332076297b762d3d76656333282e312c2e382c30293b762e782d3d2e3135313b762e792d3d2e3030373b762e7a2b3d2e3235333b762e792a3d322e3b72657475726e20763b7d76656333207428766563332076297b76656332206c3d766563322830293b763d7028762c6c2e79293b763d6528762c6c2e78293b763d287665633428762c31292a7428782c322e2a61636f73282d312e292a755f74696d652f32302e29292e78797a3b763d287665633428762c31292a74286d2c322e2a61636f73282d312e292a755f74696d652f32302e29292e78797a3b763d287665633428762c31292a74287a2c322e2a61636f73282d312e292a755f74696d652f31302e29292e78797a3b762d3d6e3b762d3d793b763d6828762c632e78293b763d7028762c632e79293b763d6528762c632e7a293b762b3d6e3b72657475726e20763b7d76656333207728766563332076297b763d742876293b636f6e73742076656333206c3d7665633328302c2d312c30293b762b3d6c3b763d6828762c2d312e353730373935293b762d3d6c3b72657475726e20763b7d76656333206428766563332076297b763d742876293b763d732876293b72657475726e20702876293b7d666c6f6174206428666c6f617420762c666c6f6174206c297b666c6f617420793d6d6178282e3030342d61627328762d6c292c302e293b72657475726e206d696e28762c6c292d792a792a2e32352f2e3030343b7d666c6f6174207728666c6f617420762c666c6f6174206c297b72657475726e2d6428762c2d6c293b7d666c6f6174207528766563332076297b76656333206c3d766563332830293b763d772876293b666c6f617420663d6c656e67746828762d6c2d7665633328312e3839352c322e303437342c2d312e3433353929292d332e3b7b7665633320783d762d6c2d76656333282d342e333335312c2d332e393834362c2d32392e343835293b663d77286c656e6774682878292d33302e2c66293b7d7b7665633320783d762d6c2d76656333282e35333738362c2d32312e3931342c2d31392e373431293b663d77286c656e6774682878292d33302e2c66293b7d7b7665633320783d762d6c2d76656333282d312e373734312c34352e3034382c32342e363431293b663d77286c656e6774682878292d35302e2c66293b7d7b7665633320783d762d6c2d76656333282d322e313331312c36372e3432372c34352e333635293b663d77286c656e6774682878292d35302e2c66293b7d7b7665633320783d762d6c2d766563332833392e3038312c382e373738342c33312e333537293b663d77286c656e6774682878292d34392e38362c66293b7d7b7665633320783d762d6c2d766563332832382e36322c31322e3931372c34302e313335293b663d77286c656e6774682878292d35302e2c66293b7d7b7665633320783d762d6c2d76656333282d2e31363231342c35342e3439312c36302e313433293b663d77286c656e6774682878292d38302e2c66293b7d7b7665633320783d762d6c2d766563332831352e3431382c31372e3635332c37372e3338293b663d77286c656e6774682878292d38302e2c66293b7d7b7665633320783d762d6c2d76656333282d34302e3239382c2d392e3330322c36382e383832293b663d77286c656e6774682878292d37392e39382c66293b7d7b7665633320783d762d6c2d76656333282d35312e30382c32302e3831382c35392e313035293b663d77286c656e6774682878292d38302e30312c66293b7d7b7665633320783d762d6c2d766563332831372e3034322c2d312e39392c37382e3838293b663d77286c656e6774682878292d37392e39362c66293b7d7b7665633320783d762d6c2d766563332831302e3832362c2e30313134322c2d32382e323239293b663d77286c656e6774682878292d33302e2c66293b7d72657475726e20663b7d76656332206928766563332076297b666c6f617420783d752876293b72657475726e207665633228782c31293b7d766563322064287665633320762c7665633320782c666c6f6174206c297b666c6f617420663d302e2c793d302e3b666f7228696e7420723d303b723c3132383b722b2b297b76656333206d3d762b782a663b7665633220633d69286d293b793d632e793b662b3d632e782a6c3b69662861627328632e78293c2e3030317c7c663e31302e29627265616b3b7d72657475726e207665633228662c79293b7d76656333204128766563332076297b76656332206c3d76656332282e30322c30293b7665633320783d76656333286c2e782c302c30292c663d7665633328302c6c2e782c30292c793d7665633328302c302c6c293b72657475726e206e6f726d616c697a652876656333286928762b78292e782d6928762d78292e782c6928762b66292e782d6928762d66292e782c6928762b79292e782d6928762d79292e7829293b7d766563332041287665633320762c7665633320782c766563332066297b7665633320793d76656333282e3331292c723d792a2e32352c633d6e6f726d616c697a65286c293b666c6f6174206d3d636c616d7028646f7428662c63292c302e2c312e293b722b3d792a6d3b6d3d636c616d7028646f7428782c7265666c65637428632c6629292c302e2c312e292c722b3d706f77286d2c31352e292a2e31373b72657475726e20723b7d666c6f61742041287665633320762c766563332078297b666c6f617420663d2d2e322c792c6c3b662a3d663b793d2d646f7428782c76293b6c3d312e2d793b72657475726e20662b28312e2d66292a706f77286c2c352e293b7d766563332065287665633320762c7665633320782c766563332079297b76656333206c3d762c632c6d2c7a2c6e2c693b7665633220613d64286c2b782a2e30312c782c2d312e292c733b633d41286c293b6d3d6c2b792a2e30313b6d2d3d632a2e3030313b733d64286d2c792c2d312e293b696628732e783c3d302e29612e783d302e3b763d6c2b782a2e30313b7a3d312e2d642876293b7a3d636c616d70287a2c302e2c312e293b666c6f617420753d342e2a286d6f6428722f342e2c322e2a61636f73282d312e29292f28322e2a61636f73282d312e2929292c653b753d753e332e3f706f77286d617828302e2c61627328312e2d322e2a28342e2d7529292a322e2d312e292c322e293a312e3b6e3d657870282d31302e2a752a7a2a612e78293b653d636c616d7028612e782c302e2c312e293b693d6d697828662c76656333282e34292c65293b692a3d6e3b72657475726e20636c616d7028692c302e2c312e293b7d766563332069287665633320762c766563332078297b76656333206c3d766563332830292c793b76656332206d3d6428762c782c312e293b793d762b6d2e782a783b6966286d2e783e3d31302e2972657475726e20663b6966286d2e793d3d312e297b7665633320633d412879292c723b6c3d4128792c782c63293b666c6f617420693d4128782c63293b693d636c616d7028692c302e2c312e293b723d6528792c7265667261637428782c632c312e2f312e35292c78293b6c2b3d6d697828722c662c69293b7d72657475726e206c3b7d76656333206828666c6f617420762c666c6f617420782c666c6f6174206c297b666c6f617420793d73696e286c293b72657475726e207665633328762a792a636f732878292c762a636f73286c292c762a792a73696e287829293b7d766f6964206d61696e28297b613d755f74696d652f352e3b723d322e2a61636f73282d312e292a613b76656333206c3d7665633328755f6d6f7573652f755f7265736f6c7574696f6e2c30292c662c782c792c633b6c2b3d763b6966286c2e793d3d302e296c2e793d2e3030313b666c6f6174206d3d6c2e792a332e31343135392c7a3b663d68286c2e7a2c2d6c2e782a28322e2a61636f73282d312e29292c6d293b783d6e6f726d616c697a6528766563332830292d66293b7a3d666c6f6f72286d6f64286c2e792c322e29293d3d302e3f312e3a2d312e3b793d6e6f726d616c697a652863726f7373287665633328302c7a2c30292c7829293b6d61743320753d6d61743328792c63726f737328782c79292c78293b633d766563332830293b666f7228696e7420733d303b733c41413b732b2b29666f7228696e74206e3d303b6e3c41413b6e2b2b297b7665633220653d7665633228732c6e292f666c6f6174284141292d2e352c413d28676c5f46726167436f6f72642e78792b652d2e352a755f7265736f6c7574696f6e2e7879292a312e31363932303235313232343036352f755f7265736f6c7574696f6e2e793b632b3d6928662c6e6f726d616c697a6528752a7665633328412c312929293b7d632f3d666c6f61742841412a4141293b676c5f46726167436f6c6f723d7665633428632c31293b7d603b682e696e697450726f6772616d28762c65292c682e726573697a6528292c682e69782e73657428632e77696474682f322c632e6865696768742f32292c682e72656e64657228293b666f72286c65742065206f6620682e69782e6576656e74732e737461727429642e6164644576656e744c697374656e657228652c682e69782e7374617274293b666f72286c65742065206f6620682e69782e6576656e74732e73746f7029642e6164644576656e744c697374656e657228652c682e69782e73746f70293b77696e646f772e6164644576656e744c697374656e65722822726573697a65222c682e726573697a65292c617070656e645369676e617475726528297d656c73657b636f6e737420653d642e637265617465456c656d656e74282264697622293b652e7374796c652e637373546578743d22616c69676e2d6974656d733a63656e7465723b6261636b67726f756e643a233936393639363b636f6c6f723a236666663b646973706c61793a666c65783b666f6e742d66616d696c793a6d6f6e6f73706163653b666f6e742d73697a653a323070783b6865696768743a31303076683b6a7573746966792d636f6e74656e743a63656e7465723b6c6566743a303b706f736974696f6e3a66697865643b746f703a303b77696474683a31303076773b222c652e696e6e657248544d4c3d22596f75722062726f7773657220646f6573206e6f7420737570706f727420576562474c2e222c622e617070656e642865297da2646970667358221220f3ecae26ae544a1b9339c6beaa309446632079d8bc45afe1a72e93f190d786b664736f6c63430008150033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _royaltyPercentage (uint256): 0

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.