Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
1,111 RELICS
Holders
353
Total Transfers
-
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
TheReliquary
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: Unlicense/// @title: the reliquary/// @author: remnynt.eth/*_ _ _ _| |_| |__ ___ _ __ ___| (_) __ _ _ _ __ _ _ __ _ _| __| '_ \ / _ \ | '__/ _ \ | |/ _` | | | |/ _` | '__| | | || |_| | | | __/ | | | __/ | | (_| | |_| | (_| | | | |_| |\__|_| |_|\___| |_| \___|_|_|\__, |\__,_|\__,_|_| \__, ||_| |___/*//*Seeker,Rumors abound ... proof of the divine? The "original" mystery?The way I see it, there was no spark; time has no beginning.We can try to find that early place, before everything; indeed, perhaps it's our duty.But that quest to find the first little thing that happened is an asymptote to the unknowable.As if something could flicker out of nothing, the first vibration in a void is just as likelythe last of what came before, dancing on a mirror's edge.And yet, undaunted, we pull on those strings, yearning to unravel the mystery of our origin.Which thus far, brings us to the elements eight. Whether you worship those gods, practice theschools of magic, or pay no heed at all, the one shared truth is that these elements are the
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.0;import "./utils/Bytecode.sol";/**@title A key-value storage with auto-generated keys for storing chunks of data with a lower write & read cost.@author Agustin Aguilar <aa@horizon.io>Readme: https://github.com/0xsequence/sstore2#readme*/library SSTORE2 {error WriteError();/**@notice Stores `_data` and returns `pointer` as key for later retrieval@dev The pointer is a contract address with `_data` as code@param _data to be written@return pointer Pointer to the written `_data`*/function write(bytes memory _data) internal returns (address pointer) {// Append 00 to _data so contract can't be called// Build init codebytes memory code = Bytecode.creationCodeFor(abi.encodePacked(hex'00',
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (token/ERC721/utils/ERC721Holder.sol)pragma solidity ^0.8.0;import "../IERC721Receiver.sol";/*** @dev Implementation of the {IERC721Receiver} interface.** Accepts all token transfers.* Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.*/contract ERC721Holder is IERC721Receiver {/*** @dev See {IERC721Receiver-onERC721Received}.** Always returns `IERC721Receiver.onERC721Received.selector`.*/function onERC721Received(address,address,uint256,bytes memory) public virtual override returns (bytes4) {return this.onERC721Received.selector;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)pragma solidity ^0.8.0;/*** @dev Contract module that helps prevent reentrant calls to a function.** Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier* available, which can be applied to functions to make sure there are no nested* (reentrant) calls to them.** Note that because there is a single `nonReentrant` guard, functions marked as* `nonReentrant` may not call one another. This can be worked around by making* those functions `private`, and then adding `external` `nonReentrant` entry* points to them.** TIP: If you would like to learn more about reentrancy and alternative ways* to protect against it, check out our blog post* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].*/abstract contract ReentrancyGuard {// Booleans are more expensive than uint256 or any type that takes up a full// word because each write operation emits an extra SLOAD to first read the// slot's contents, replace the bits taken up by the boolean, and then write// back. This is the compiler's defense against contract upgrades and
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)pragma solidity ^0.8.0;/*** @dev String operations.*/library Strings {bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";/*** @dev Converts a `uint256` to its ASCII `string` decimal representation.*/function toString(uint256 value) internal pure returns (string memory) {// Inspired by OraclizeAPI's implementation - MIT licence// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.solif (value == 0) {return "0";}uint256 temp = value;uint256 digits;while (temp != 0) {digits++;temp /= 10;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)pragma solidity ^0.8.4;import 'erc721a/contracts/ERC721A.sol';import '@openzeppelin/contracts/access/Ownable.sol';/// @notice ERC721ATM/// @dev ERC721A + Trustless Metadata/// An extension built on ERC721A v3.0.0 with trustless metadata upgrades./// ~ upgradable: contract owner can add new metadata contracts,/// all tokens use the most recent by default./// ~ immutable: token holders can opt-out of metadata updates by/// overriding tokens they hold to use any previously set metadata contract.abstract contract ERC721ATM is ERC721A, Ownable {/// allow for new metadata contracts but keep those previously used,/// the last entry in the list is the current metadata contractaddress[] public metadataAddressList;/// allow for token holders to opt-out of metadata contract updatesmapping(uint256 => uint256) public metadataOverrides;error MissingMetadata();error MetadataNumberTooLow();error MetadataNumberTooHigh();
1234567891011121314151617181920212223242526// SPDX-License-Identifier: Unlicensepragma solidity ^0.8.4;import '@openzeppelin/contracts/access/Ownable.sol';import '@openzeppelin/contracts/utils/Strings.sol';import './Base64.sol';import './TRScript.sol';import './TRRolls.sol';interface ITRMeta {function tokenURI(TRKeys.RuneCore memory core) external view returns (string memory);function tokenScript(TRKeys.RuneCore memory core) external view returns (string memory);function getElement(TRKeys.RuneCore memory core) external view returns (string memory);function getColorCount(TRKeys.RuneCore memory core) external view returns (uint256);function getColorByIndex(TRKeys.RuneCore memory core, uint256 index) external view returns (string memory);function getGrailId(TRKeys.RuneCore memory core) external view returns (uint256);function getMaxRelicLevel() external pure returns (uint8);}/// @notice The Reliquary Metadata v1contract TRMeta is Ownable, ITRMeta {using Strings for uint256;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.0;library Bytecode {error InvalidCodeAtRange(uint256 _size, uint256 _start, uint256 _end);/**@notice Generate a creation code that results on a contract with `_code` as bytecode@param _code The returning value of the resulting `creationCode`@return creationCode (constructor) for new contract*/function creationCodeFor(bytes memory _code) internal pure returns (bytes memory) {/*0x00 0x63 0x63XXXXXX PUSH4 _code.length size0x01 0x80 0x80 DUP1 size size0x02 0x60 0x600e PUSH1 14 14 size size0x03 0x60 0x6000 PUSH1 00 0 14 size size0x04 0x39 0x39 CODECOPY size0x05 0x60 0x6000 PUSH1 00 0 size0x06 0xf3 0xf3 RETURN<CODE>*/return abi.encodePacked(hex"63",
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)pragma solidity ^0.8.0;/*** @title ERC721 token receiver interface* @dev Interface for any contract that wants to support safeTransfers* from ERC721 asset contracts.*/interface IERC721Receiver {/*** @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}* by `operator` from `from`, this function is called.** It must return its Solidity selector to confirm the token transfer.* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.** The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.*/function onERC721Received(address operator,address from,uint256 tokenId,bytes calldata data) external returns (bytes4);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Creator: Chiru Labspragma solidity ^0.8.4;import '@openzeppelin/contracts/token/ERC721/IERC721.sol';import '@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol';import '@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol';import '@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol';import '@openzeppelin/contracts/utils/Address.sol';import '@openzeppelin/contracts/utils/Context.sol';import '@openzeppelin/contracts/utils/Strings.sol';import '@openzeppelin/contracts/utils/introspection/ERC165.sol';error ApprovalCallerNotOwnerNorApproved();error ApprovalQueryForNonexistentToken();error ApproveToCaller();error ApprovalToCurrentOwner();error BalanceQueryForZeroAddress();error MintedQueryForZeroAddress();error BurnedQueryForZeroAddress();error AuxQueryForZeroAddress();error MintToZeroAddress();error MintZeroQuantity();error OwnerIndexOutOfBounds();error OwnerQueryForNonexistentToken();
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)pragma solidity ^0.8.0;import "../utils/Context.sol";/*** @dev Contract module which provides a basic access control mechanism, where* there is an account (an owner) that can be granted exclusive access to* specific functions.** By default, the owner account will be the one that deploys the contract. This* can later be changed with {transferOwnership}.** This module is used through inheritance. It will make available the modifier* `onlyOwner`, which can be applied to your functions to restrict their use to* the owner.*/abstract contract Ownable is Context {address private _owner;event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);/*** @dev Initializes the contract setting the deployer as the initial owner.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)pragma solidity ^0.8.0;import "../../utils/introspection/IERC165.sol";/*** @dev Required interface of an ERC721 compliant contract.*/interface IERC721 is IERC165 {/*** @dev Emitted when `tokenId` token is transferred from `from` to `to`.*/event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);/*** @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.*/event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);/*** @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.*/event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)pragma solidity ^0.8.0;import "../IERC721.sol";/*** @title ERC-721 Non-Fungible Token Standard, optional metadata extension* @dev See https://eips.ethereum.org/EIPS/eip-721*/interface IERC721Metadata is IERC721 {/*** @dev Returns the token collection name.*/function name() external view returns (string memory);/*** @dev Returns the token collection symbol.*/function symbol() external view returns (string memory);/*** @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.*/function tokenURI(uint256 tokenId) external view returns (string memory);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol)pragma solidity ^0.8.0;import "../IERC721.sol";/*** @title ERC-721 Non-Fungible Token Standard, optional enumeration extension* @dev See https://eips.ethereum.org/EIPS/eip-721*/interface IERC721Enumerable is IERC721 {/*** @dev Returns the total amount of tokens stored by the contract.*/function totalSupply() external view returns (uint256);/*** @dev Returns a token ID owned by `owner` at a given `index` of its token list.* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.*/function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);/*** @dev Returns a token ID at a given `index` of all the tokens stored by the contract.* Use along with {totalSupply} to enumerate all tokens.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)pragma solidity ^0.8.0;/*** @dev Collection of functions related to the address type*/library Address {/*** @dev Returns true if `account` is a contract.** [IMPORTANT]* ====* It is unsafe to assume that an address for which this function returns* false is an externally-owned account (EOA) and not a contract.** Among others, `isContract` will return false for the following* types of addresses:** - an externally-owned account* - a contract in construction* - an address where a contract will be created* - an address where a contract lived, but was destroyed* ====*/
123456789101112131415161718192021222324// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)pragma solidity ^0.8.0;/*** @dev Provides information about the current execution context, including the* sender of the transaction and its data. While these are generally available* via msg.sender and msg.data, they should not be accessed in such a direct* manner, since when dealing with meta-transactions the account sending and* paying for execution may not be the actual sender (as far as an application* is concerned).** This contract is only required for intermediate, library-like contracts.*/abstract contract Context {function _msgSender() internal view virtual returns (address) {return msg.sender;}function _msgData() internal view virtual returns (bytes calldata) {return msg.data;}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)pragma solidity ^0.8.0;import "./IERC165.sol";/*** @dev Implementation of the {IERC165} interface.** Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check* for the additional interface id that will be supported. For example:** ```solidity* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);* }* ```** Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.*/abstract contract ERC165 is IERC165 {/*** @dev See {IERC165-supportsInterface}.*/function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC165 standard, as defined in the* https://eips.ethereum.org/EIPS/eip-165[EIP].** Implementers can declare support of contract interfaces, which can then be* queried by others ({ERC165Checker}).** For an implementation, see {ERC165}.*/interface IERC165 {/*** @dev Returns true if this contract implements the interface defined by* `interfaceId`. See the corresponding* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]* to learn more about how these ids are created.** This function call must use less than 30 000 gas.*/function supportsInterface(bytes4 interfaceId) external view returns (bool);}
1234567891011121314151617181920212223242526/// SPDX-License-Identifier: MIT/// @title Base64/// @notice Provides a function for encoding some bytes in base64/// @author Brecht Devos <brecht@loopring.org>pragma solidity ^0.8.4;library Base64 {bytes internal constant TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';/// @notice Encodes some bytes to the base64 representationfunction encode(bytes memory data) internal pure returns (string memory) {uint256 len = data.length;if (len == 0) return '';// multiply by 4/3 rounded upuint256 encodedLen = 4 * ((len + 2) / 3);// Add some extra buffer at the endbytes memory result = new bytes(encodedLen + 32);bytes memory table = TABLE;assembly {let tablePtr := add(table, 1)let resultPtr := add(result, 32)
12345678// SPDX-License-Identifier: Unlicensepragma solidity ^0.8.4;/// @notice The Reliquary Canvas Applibrary TRScript {string public constant SCRIPT = 'for(var TH="",i=0;8>i;i++)TH+=H.substr(2,6);H="0x"+TH;for(var HB=!1,PC=64,MT=50,PI=Math.PI,TAU=2*PI,abs=Math.abs,min=Math.min,max=Math.max,sin=Math.sin,cos=Math.cos,pow=Math.pow,sqrt=Math.sqrt,ceil=Math.ceil,floor=Math.floor,rm=null,wW=0,wH=0,cS=1,canvas=null,ctx=null,L2=1<V,BC2=[{x:.5,y:.5},{x:.75,y:0}],BC3=[{x:.65,y:.15},{x:.5,y:.5},{x:.75,y:.75}],BC4=[{x:.5,y:0},{x:0,y:.5},{x:.5,y:1},{x:1,y:.5}],BC5=[{x:.5,y:.5},{x:.5,y:0},{x:0,y:.5},{x:.5,y:1},{x:1,y:.5}],BC6=[{x:.5,y:.5},{x:.5,y:0},{x:1,y:0},{x:1,y:1},{x:0,y:1},{x:0,y:0}],BC=[,,BC2,BC3,BC4,BC5,BC6],gvy=null,pxS=C/1e3,TS=TAU/127.5,DLO=.5+.5*F/1e3,DMD=1e3+19e3*F/1e3,DHI=8+24*F/1e3,RFOP=800<=F?.5+.5*(F-800)/199:0,wST=0,wS=[],wSE=0,eL=[],cPC=P.length,cP=[],pI=0,plC=BC[cPC],iFR=!0,dt=0,pvT=0,iPs=!1,iPt=!1,iEs=!1,iBx=!1,bxS=null,pB=9,pP=Array(PC),x=0;x<PC;x++){pP[x]=Array(PC);for(var y=0;y<PC;y++)pP[x][y]=0}if(L&&L.length===PC)for(var y=0;y<PC;y++)for(var row,x=0;x<PC;x++)row=""+L[y],pP[x][y]=+row.charAt(x);var sp=0;"Zen"==E&&(sp=256),"Tranquil"==E&&(sp=64),"Normal"==E&&(sp=16),"Fast"==E&&(sp=4),"Swift"==E&&(sp=2),"Hyper"==E&&(sp=.5);varsM=SD,sV=-1,sSS=1/3;"Pajamas"==Y&&(sM=SS,sSS=1/99),"Silk"==Y&&(sM=SS,sSS=1/3),"Sketch"==Y&&(sM=SRS);function SD(c,a){return c.distance-a.distance}function SS(){var a=sV;return sV+=sSS,2<=sV&&(sV-=3),a}function SRS(){var a=sV;return sV+=1/(rm()*PC),2<=sV&&(sV-=3),a}var flipX=!("Mirrored"!=D&&"MirroredUpsideDown"!=D),flipY=!("UpsideDown"!=D&&"MirroredUpsideDown"!=D),gv=3;"Lunar"==G&&(gv=.5),"Atmospheric"==G&&(gv=1),"Low"==G&&(gv=2),"High"==G&&(gv=6),"Massive"==G&&(gv=9),"Stellar"==G&&(gv=12),"Galactic"==G&&(gv=24);var ess={l:[]};"Heavenly"==N&&(ess={c:{r:{o:64},g:{o:64},b:{o:32}},l:[{st:{x:.006},n:{s:.006,d:128,c:.024,xp:.5},op:.4},{st:{x:-.007},n:{s:.007,d:128,c:.022,xp:.5},op:.6},{st:{y:.008},n:{s:.008,d:128,c:.02,xp:.5},op:.8},{st:{y:-.009},n:{s:.009,d:128,c:.018,xp:.5},op:1}]}),"Fae"==N&&(ess={l:[{c:{a:{o:16,e:-96}},st:{x:.002,y:-.017},op:.75,sc:1},{c:{a:{o:-16,e:96}},st:{x:-.001,y:-.015},op:.9,sc:1},{c:{a:{o:52,e:8}},st:{x:-.01,y:-.03},op:.9,n:{s:.02,d:64,c:.015,xp:2}}]}),"Prismatic"==N&&(ess={l:[{c:{r:{o:-64,e:128},g:{o:-64,e:128},b:{o:-32,e:64}},op:.75,n:{s:.001,d:1024,c:.001,xp:1}},{c:{r:{o:-64,e:255},g:{o:-64,e:255},b:{o:-32,e:128}},op:.25,n:{s:.001,d:1024,c:.001,xp:1}}]}),"Radiant"==N&&(ess={c:{r:{o:60,e:80},g:{o:60,e:80},b:{o:40,e:60}},l:[{op:1,n:{s:3e-4,d:40,c:.0014,xp:1}}]}),"Photonic"==N&&(ess={c:{a:{o:-64,e:140}},l:[{op:1,n:{s:.01,d:9999,c:.001,xp:3}},{op:1,n:{s:.009,d:9999,c:.001,xp:3}},{op:1,n:{s:.008,d:9999,c:.001,xp:3}},{op:1,n:{s:.007,d:9999,c:.001,xp:3}},{op:1,n:{s:.006,d:9999,c:.001,xp:3}},{op:1,n:{s:.005,d:9999,c:.001,xp:3}}]}),"Forest"==N&&(ess={c:{r:{o:-16,e:96},g:{o:-16,e:96},b:{o:16,e:-96}},l:[{st:{x:.002,y:-.014},op:.4,sc:1},{st:{x:-.001,y:-.012},op:.4,sc:1},{c:{r:{o:96,e:8},g:{o:128,e:8},b:{o:32,e:8}},st:{y:-.05},op:.3,n:{s:.02,d:1024,c:.006,xp:1}}]}),"Life"==N&&(ess={st:{x:-.006},c:{r:{o:-6,e:12},g:{o:-48,e:128},b:{o:-6,e:12}},l:[{op:.1,n:{s:.06,d:32,c:.03,xp:1}},{op:.3,n:{s:.03,d:32,c:.05,xp:2}},{op:.5,n:{s:.02,d:32,c:.07,xp:3}}]}),"Swamp"==N&&(ess={l:[{c:{r:{o:-192},b:{o:32,e:128}},st:{x:.005,y:.005},op:.8,sc:1},{c:{r:{o:-128,e:-64},g:{o:-64,e:128},b:{o:-64,e:-64}},op:1,n:{s:0,d:256,c:.04,xp:2}}]}),"Wildblood"==N&&(ess={c:{r:{o:128,e:128},g:{o:-64,e:32},b:{o:-64,e:32}},l:[{op:.3,n:{s:.002,d:64,c:.075,xp:1}},{op:.3,n:{s:.003,d:64,c:.015,xp:2}},{op:.3,n:{s:.004,d:64,c:.0023,xp:3}}]}),"Soul"==N&&(ess={n:{s:.25,d:128,c:.01,xp:3},l:[{c:{r:{o:200},g:{o:-100},b:{o:-100}},st:{x:-.005,y:-.015},op:1/3},{c:{r:{o:-100},g:{o:200},b:{o:-100}},st:{x:.005,y:-.015},op:1/3},{c:{r:{o:-100},g:{o:-100},b:{o:200}},st:{x:0,y:-.03},op:1/3}]}),"Magic"==N&&(ess={n:{s:.05,d:128,c:.015,xp:.5},l:[{c:{r:{o:200},b:{o:-200}},st:{x:-.02},op:1/3},{c:{r:{o:-200},g:{o:200}},st:{y:-.02},op:1/3},{c:{g:{o:-200},b:{o:200}},st:{x:.02},op:1/3}]}),"Astral"==N&&(ess={c:{r:{o:-64,e:96},g:{o:-64,e:64},b:{o:-64,e:96}},l:[{op:.33,n:{s:.003,d:512,c:.003,xp:1}},{op:.33,n:{s:.003,d:512,c:.003,xp:1}},{op:.33,n:{s:.003,d:512,c:.003,xp:1}},{op:.33,n:{s:.003,d:512,c:.003,xp:1}},{op:.33,n:{s:.003,d:512,c:.003,xp:1}},{op:.33,n:{s:.003,d:512,c:.003,xp:1}}]}),"Forbidden"==N&&(ess={c:{r:{o:-64,e:32},g:{o:-64,e:32},b:{o:128,e:128}},l:[{op:.3,n:{s:.001,d:64,c:.1,xp:1}},{op:.3,n:{s:.002,d:64,c:.02,xp:2}},{op:.3,n:{s:.003,d:64,c:.003,xp:3}}]}),"Runic"==N&&(ess={st:{x:-.005,y:.025},c:{r:{o:-56,e:200},g:{o:-256},b:{o:200,e:56}},n:{noBlend:!0,s:.05,d:19,c:.019,xp:2},l:[{op:.9}]}),"Unknown"==N&&(ess={l:[{c:{a:{o:256}},st:{delay:2,x:.003},n:{s:.25,d:256,c:.01,xp:1},op:1},{c:{a:{o:-256}},st:{delay:1,y:-.006},n:{s:.5,d:256,c:.01,xp:1},op:1}]}),"Tidal"==N&&(ess={c:{r:{o:48},g:{o:48},b:{o:64}},l:[{st:{x:-.02,y:-.015},op:.25,n:{s:.025,d:44,c:.032,xp:2}},{st:{x:-.02,y:.015},op:.25,n:{s:.025,d:44,c:.032,xp:2}},{st:{x:-.04,y:-.03},op:.5,n:{s:.0125,d:44,c:.016,xp:1}},{st:{x:-.04,y:.03},op:.5,n:{s:.0125,d:44,c:.016,xp:1}}]}),"Arctic"==N&&(ess={c:{r:{o:-32,e:64},g:{o:-32,e:64},b:{o:64,e:196}},l:[{op:1,n:{s:2e-6,d:48,c:.0025,xp:1}},{op:.2,n:{s:1e-6,d:512,c:.0025,xp:1}}]}),"Storm"==N&&(ess={l:[{c:{b:{e:255}},st:{x:.04,y:.04},op:1,sc:1},{c:{b:{o:-64,e:128}},st:{x:.03,y:.03},op:1,sc:0},{c:{r:{o:64,e:8},g:{o:64,e:8},b:{o:96,e:8}},st:{x:.05,y:.05},op:.5,n:{s:.01,d:64,c:.008,xp:2}}]}),"Illuvial"==N&&(ess={c:{r:{o:48},g:{o:48},b:{o:64}},l:[{st:{x:.02,y:.025},op:.2,n:{s:.03,d:44,c:.096,xp:2}},{st:{x:.03,y:.025},op:.2,n:{s:.03,d:44,c:.096,xp:2}},{st:{x:.04,y:.05},op:.5,n:{s:.015,d:44,c:.048,xp:1}},{st:{x:.06,y:.05},op:.5,n:{s:.015,d:44,c:.048,xp:1}}]}),"Undine"==N&&(ess={l:[{c:{r:{e:64},g:{e:64},b:{o:32,e:64}},op:.5,n:{s:.01,d:4444,c:.001,xp:1}},{c:{r:{o:-16,e:-333},g:{o:-16,e:-333},b:{o:-16,e:-222}},op:1,n:{s:.008,d:222,c:1e-4,xp:3}}]}),"Mineral"==N&&(ess={l:[{c:{a:{o:-16,e:48}},op:1},{c:{a:{o:-8,e:24}},op:1}]}),"Craggy"==N&&(ess={c:{r:{o:-25,e:-45},g:{o:-35,e:-55},b:{o:-45,e:-65}},n:{s:0,d:240,c:.064,xp:.75},l:[{op:1}]}),"Dwarven"==N&&(ess={c:{r:{o:-75,e:-25},g:{o:-85,e:-35},b:{o:-95,e:-45}},n:{s:0,d:128,c:.016,xp:1},l:[{op:1}]}),"Gnomic"==N&&(ess={c:{r:{o:-25,e:-45},g:{o:-35,e:-55},b:{o:-45,e:-65}},n:{s:0,d:240,c:.0064,xp:.8},l:[{op:1}]}),"Crystal"==N&&(ess={c:{a:{o:-32,e:128}},l:[{op:1},{op:1}]}),"Sylphic"==N&&(ess={l:[{c:{a:{o:-48,e:96}},st:{x:.06},op:1},{c:{a:{o:-16,e:64}},st:{x:.03},op:1}]}),"Visceral"==N&&(ess={c:{r:{o:-48},g:{o:128},b:{o:-48}},l:[{st:{x:.09},op:.1,n:{s:.14,d:128,c:.02,xp:1}},{st:{x:.12},op:.1,n:{s:.16,d:256,c:.004,xp:2}},{st:{x:.15},op:.1,n:{s:.18,d:512,c:6e-4,xp:3}}]}),"Frosted"==N&&(ess={l:[{c:{a:{o:128}},st:{x:-.06,y:.01},op:.33},{c:{r:{o:128},g:{o:128},b:{o:255}},st:{x:-.04,y:.007},op:.33},{c:{a:{o:128,e:8}},st:{x:-.07,y:.015},op:.33,n:{s:.01,d:64,c:.008,xp:2}},{c:{a:{o:128,e:8}},st:{x:-.08,y:.016},op:.33,n:{s:.008,d:64,c:.008,xp:2}}]}),"Electric"==N&&(ess={st:{x:.002,y:-.01},c:{r:{o:-256},g:{o:200,e:56},b:{o:-56,e:200}},n:{noBlend:!0,s:.05,d:19,c:.019,xp:2},l:[{op:.9}]}),"Magnetic"==N&&(ess={l:[{c:{a:{o:-255}},st:{x:-.001,y:-.001},op:.5,n:{s:.0024,d:2,c:4,xp:6}},{c:{a:{o:255}},st:{x:.001,y:.001},op:.5,n:{s:.0018,d:2,c:4,xp:6}}]}),"Infernal"==N&&(ess={l:[{c:{r:{e:255}},st:{x:.006,y:-.03},op:1,sc:1},{c:{r:{o:-64,e:128}},st:{x:.003,y:-.015},op:1,sc:0}]}),"Molten"==N&&(ess={st:{x:.001,y:.001},c:{r:{o:200,e:56},g:{o:-128,e:256},b:{o:-256}},n:{noBlend:!0,s:0,d:20,c:.024,xp:1},l:[{op:.9}]}),"Ashen"==N&&(ess={l:[{c:{r:{o:256,e:256},g:{o:128,e:128}},op:1,n:{s:.004,d:64,c:.03,xp:4}},{c:{r:{o:-512,e:256},g:{o:-512},b:{o:-512}},op:1,n:{s:.004,d:256,c:.02,xp:1}}]}),"Draconic"==N&&(ess={st:{x:-.005,y:.025},c:{r:{o:200,e:56},g:{o:-56,e:200},b:{o:-256}},n:{noBlend:!0,s:.05,d:19,c:.019,xp:2},l:[{op:.9}]}),"Celestial"==N&&(ess={st:{x:.004,y:.002},c:{a:{o:224,e:64}},n:{s:.02,d:50,c:.032,xp:2},l:[{op:1}]}),"Night"==N&&(ess={c:{r:{o:64},g:{o:-128},b:{o:64}},l:[{st:{x:-.03},op:.4,n:{s:.03,d:256,c:.01,xp:1}},{st:{y:-.02},op:.5,n:{s:.02,d:256,c:.01,xp:1}},{st:{x:-.015},op:.6,n:{s:.015,d:256,c:.01,xp:1}}]}),"Forgotten"==N&&(ess={st:{x:.006,y:.006},c:{a:{o:-512}},n:{s:.06,d:256,c:.01,xp:1},l:[{op:1}]}),"Abyssal"==N&&(ess={c:{r:{o:32,e:-512},g:{e:-512},b:{o:96,e:-512}},l:[{st:{x:-.03},op:.8,n:{s:.03,d:32,c:.005,xp:1}},{st:{y:-.02},op:.6,n:{s:.02,d:32,c:.005,xp:1}},{st:{x:.015},op:.4,n:{s:.015,d:32,c:.005,xp:1}},{st:{y:.0125},op:.2,n:{s:.0125,d:32,c:.005,xp:1}}]}),"Evil"==N&&(ess={c:{r:{o:96,e:-512},g:{e:-512},b:{o:32,e:-512}},l:[{st:{x:.01},op:.2,n:{s:.01,d:60,c:.04,xp:1}},{st:{y:.011},op:.4,n:{s:.011,d:70,c:.03,xp:1}},{st:{x:-.012},op:.6,n:{s:.012,d:80,c:.02,xp:1}},{st:{y:-.013},op:.8,n:{s:.013,d:90,c:.01,xp:1}}]}),"Lost"==N&&(ess={c:{a:{e:-512}},l:[{st:{x:-.03},op:.5,n:{s:.03,d:200,c:.03,xp:1}},{st:{y:-.02},op:.5,n:{s:.02,d:200,c:.03,xp:1}},{st:{x:.015},op:.5,n:{s:.015,d:200,c:.03,xp:1}},{st:{y:.0125},op:.5,n:{s:.0125,d:200,c:.03,xp:1}}]}),window.onload=function(){init()};function gAD(){return{id:0,value:0,minValue:0,maxValue:1,target:1,duration:1,elapsed:0,direction:1,easing:lin,ease1:lin,ease2:lin,callback:null}}var animations=[];function animate(a){var b=a.value,c=a.target,d=a.duration,e=a.easing,f=a.callback;a.elapsed=0;var g=function(g){a.elapsed+=dt;var h=max(0,min(1,e(a.elapsed/d)));a.value=b+h*(c-b),a.elapsed>=d&&(animations.splice(g,1),f&&f())};animations.push(g)}function lin(a){return a}function eSin(a){return-(cos(PI*a)-1)/2}function rAL(a){a.direction=-a.direction,a.callback=function(){rAL(a)},0>a.direction?(a.easing=a.ease1,a.target=a.minValue):(a.easing=a.ease2,a.target=a.maxValue),animate(a)}function init(){sRO(),sS(),iD(),cEl(),rC(),lFI(),sR(),rAL(gvy),window.requestAnimationFrame(oAF)}functionsRO(){HB=!!document.body;var a=HB?document.body:document.all[1];wW=max(a.clientWidth,window.innerWidth),wH=max(a.clientHeight,window.innerHeight);var b=wW>wH,c=b?wH:wW;cS=c/PC,sV=-1,pI=0,cP.length=0}function cEl(){var a=HB?document.body:document.all[1];canvas=HB?document.createElement("canvas"):document.getElementById("canvas"),ctx=canvas.getContext("2d"),HB&&a.appendChild(canvas);var b=floor(cS*PC),c=document.createElement("style");c.innerText=`canvas { width: ${b}px; height: ${b}px; image-rendering: -moz-crisp-edges; image-rendering: -webkit-crisp-edges; image-rendering: pixelated; image-rendering: crisp-edges; }`,a.appendChild(c)}function rC(){if(HB){var a=floor((wW-cS*PC)/2),b=floor((wH-cS*PC)/2);canvas.style.position="absolute",canvas.style.left=a+"px",canvas.style.top=b+"px"}canvas.width=PC,canvas.height=PC}function gC(a,b){var c=PC*cS,d=floor((b-cS*PC)/2),e=floor(PC*(a-d)/c);return e}function iVC(a){return 0<=a&&a<PC}function gX(a){return gC(a.x,wW)}function gY(a){returngC(a.y,wH)}function pFE(a){if(iPt){var b=gX(a),c=gY(a);if(iVC(b)&&iVC(c)){var d=iEs?0:pB;if(iBx&&bxS){var e=gX(bxS),f=gY(bxS);if(iVC(e)&&iVC(f)){for(var g=b<e?b:e,h=c<f?c:f,i=b<e?e:b,j=c<f?f:c,k=g;k<=i;k++)for(var l=h;l<=j;l++)pP[k][l]=d;return}}pP[b][c]=d}}}function lFI(){document.addEventListener("keydown",a=>{var b=a.key;"Shift"===b&&(iEs=!0)," "===b&&(iBx=!0)},!1),document.addEventListener("keyup",a=>{var b=a.key,c=+b,d=a.ctrlKey;if(!isNaN(c))if(d)for(var e=0;e<PC;e++)for(var f=0;f<PC;f++)pP[e][f]=c;else" "!==b&&(pB=c);"p"===b||"P"===b?iPs=!iPs:"l"===b||"L"===b?lPP():"Shift"===b?iEs=!1:" "===b?(iBx=!1,bxS=null):void 0},!1),window.addEventListener("mousedown",a=>{iPt=!0,iBx&&null===bxS&&(bxS=a)}),window.addEventListener("mousemove",a=>pFE(a)),window.addEventListener("mouseup",a=>{pFE(a),iPt=!1,bxS=null})}function lPP(){for(var a=[],b=0;b<PC;b++){for(var c=0;c<PC;c++)a.push(pP[c][b]);b<PC-1&&a.push(",")}var d="["+a.join("")+"]";console.log(d),cGD(d)}function cGD(a){var b=HB?document.body:document.all[1],c=document.createElement("input");c.className="clipboard",b.appendChild(c),c.value=a,c.select(),document.execCommand("copy"),b.removeChild(c)}function oAF(a){dt=a-pvT,dt>MT?dt=MT:0>dt&&(dt=0),iPs&&(dt=0),sV=-1,pI=0,cP.length=0,wSE+=dt,sS(),sR();for(var b=animations.length,c=b-1;0<=c;c--)animations[c](c);pvT=a,window.requestAnimationFrame(oAF)}function sS(){s=0,t=0;var a=Uint32Array.from([0,1,s=t=2,3].map(function(a){return parseInt(H.substr(11*a+2,11),16)}));rm=function(){return t=a[3],a[3]=a[2],a[2]=a[1],a[1]=s=a[0],t^=t<<11,a[0]^=t^t>>>8^s>>>19,a[0]/4294967296}}function iD(){null===gvy&&(gvy=gAD(),gvy.value=gv,gvy.minValue=gv/2,gvy.maxValue=2*gv,gvy.duration=1750*(sp+2),gvy.ease1=eSin,gvy.ease2=eSin)}function sCl(){var a=P.slice();wS.length=0,wST=0;for(var b=0;b<cPC;b++){var c=gCP(),d=a[b],e=parseInt(d,16);c.r=255&e>>16,c.g=255&e>>8,c.b=255&e,pPt(c),c.weight=pow(gvy.value,5-b),wS.push(c.weight),wST+=c.weight,cP.push(c)}var f=wS[cPC-1],g=2e3*sp;wST-=cPC*f;for(var b=0;b<cPC;b++){var c=cP[b],h=wSE+.5*g*b/(cPC-1),j=cos(TAU*(h%g)/g);c.weight=f+j*wST}if(2===cPC)for(var k=cP[0],l=cP[1];;){var m=l.y-k.y,n=l.x-k.x,o=m/(n||1);if(-1.2<=o&&-.8>=o)pI=0,pPt(k),pPt(l);else break}}var imgData=null,uD=Array(4*PC*PC);function sR(){iFR&&(imgData=ctx.getImageData(0,0,PC,PC),cID(imgData.data),cE());var a=imgData.data;sCl(),L2&&(cID(uD),aE(uD)),dCPG(a),0<RFOP&&aP(a,RFOP),L2?aUD(a):aE(a),aP(a,1),ctx.putImageData(imgData,0,0),iFR=!1}function cID(a){for(var b=a.length,c=0;c<b;c++)a[c]=0==(c+1)%4?255:0}function cE(){for(varc=ess.l,e=ess.st||{},f=ess.n,h=ess.c,k={o:0,e:0},l=0;l<c.length;l++){var o=c[l],p=o.st||e,q=o.n||f,u=o.c||h,v=o.op,w=u.a||k,a=u.r||w,r=u.g||w,g=u.b||w,b=a.o||0,z=a.e||0,A=r.o||0,B=r.e||0,I=g.o||0,J=g.e||0,K={oX:0,oY:0,nOf:0,data:null,nObj:null,nDp:null,config:o,nC:q,stC:p},M=4*PC*PC;if(q){M=PC*PC,p&&(0<p.x&&(K.oX=1e8),0<p.y&&(K.oY=1e8));var O=q.d;K.nObj=cN(q.c,q.xp),K.nDp=[];for(var d=0;d<O;d++){var Q;if(d<.5*O)Q=2*d/O;else{var R=d-.5*O;Q=1-2*R/O}K.nDp.push({r:b+rm()*z,g:A+rm()*B,b:I+rm()*J,a:v*Q})}}if(K.data=Array(M),q)for(var m=0;m<M;m++){var S=floor(m/PC),y=m-S*PC;K.data[m]=K.nObj.get(y,S)}else for(var m=0;m<M;m+=4)K.data[m+0]=rm()*(b+rm()*z),K.data[m+1]=rm()*(A+rm()*B),K.data[m+2]=rm()*(I+rm()*J);eL.push(K)}}function aE(a){for(var b=a.length,c=eL.length,e=0;e<c;e++){var f=eL[e],g=f.data,h=f.nObj,l=f.config,m=f.stC,n=m.x||0,o=m.y||0;if(f.oX-=dt*n,f.oY-=dt*o,h){var p=f.nC,q=f.nDp,r=p.d||2,d=p.s||0;f.nOf+=dt*d;var u=f.nOf;0>u?u=r+u%r:u>=r&&(u%=r);for(var v=0;v<b;v+=4){var w=floor(v/4),k=floor(w/PC),z=floor(w-k*PC)+f.oX;k+=f.oY;var x=h.get(z,k),A=r*x+u,B=ceil(A),I=floor(A),J=q[B%r],K=q[I%r],M=p.noBlend?1:1-(A-I),O=p.noBlend?0:1-M,Q=K.a,R=J.a;a[v]+=M*K.r*Q+O*J.r*R,a[v+1]+=M*K.g*Q+O*J.g*R,a[v+2]+=M*K.b*Q+O*J.b*R}}else{var S=f.oX,T=f.oY,U=l.op||1,W=l.sc||0,X=1-W,Z=floor(S),$=floor(T),_=ceil(S),aa=ceil(T),ba=4*Z,ca=4*PC*$,da=4*_,ea=4*PC*aa,fa=1-(S-Z),ga=1-(T-$),ha=1-fa,ia=1-ga,ja=fa*ga,ka=fa*ia,la=ha*ga,ma=ha*ia,na=ba+ca;0>na?na=b+na%b:na>=b&&(na%=b);var oa=ba+ea;0>oa?oa=b+oa%b:oa>=b&&(oa%=b);var pa=da+ca;0>pa?pa=b+pa%b:pa>=b&&(pa%=b);var qa=da+ea;0>qa?qa=b+qa%b:qa>=b&&(qa%=b);for(var v=0;v<b;v+=4){var ra=(v+na)%b,sa=(v+oa)%b,ta=(v+pa)%b,ua=(v+qa)%b,va=(X+W*rm())*U,wa=(X+W*rm())*U,xa=(X+W*rm())*U;a[v]+=va*(ja*g[ra]+ka*g[sa]+la*g[ta]+ma*g[ua]),a[v+1]+=wa*(ja*g[ra+1]+ka*g[sa+1]+la*g[ta+1]+ma*g[ua+1]),a[v+2]+=xa*(ja*g[ra+2]+ka*g[sa+2]+la*g[ta+2]+ma*g[ua+2])}}}}function aUD(a){for(var b=a.length,c=1-pxS,d=0;d<b;d+=4){var e=d,f=d+1,g=d+2;a[e]+=c*uD[e],a[f]+=c*uD[f],a[g]+=c*uD[g]}}function aP(a,c){for(var d=a.length,e=0;e<d;e+=4){var f=floor(e/4),h=floor(f/PC),i=floor(f-h*PC),j=+pP[i][h];if(j){var l=e,m=e+1,n=e+2,o=a[l],q=a[m],g=a[n],b=c*j/9,r=1-b;a[l]=r*o+b*(255-o),a[m]=r*q+b*(255-q),a[n]=r*g+b*(255-g)}}}function dCPG(a){for(var b=0,c=0;b<PC;){for(c=0;c<PC;)sGCFP(a,cP,b,c),c++;b++}}function gCP(){return{x:0,y:0,r:0,g:0,b:0,weight:1,distance:0}}function pPt(a){var b=plC[pI++];pI>=plC.length&&(pI=0);var c=-.125+.25*rm(),d=-.125+.25*rm();a.x=(b.x+c)*PC,a.y=(b.y+d)*PC}function sGCFP(a,b,d,e){sFCCP(b,d,e);for(var f=[],g=b.length,h=0;h<g;h+=2)h==g-1?f.push(b[h]):f.push(sC(b[h],b[h+1]));if(1===f.length){flipX&&(d=PC-d-1),flipY&&(e=PC-e-1);var j=4*d,k=4*(e*PC),l=k+j,m=f[0],c=l,n=l+1,o=l+2;if(L2){var p=pxS;0<+pP[d][e]&&(p=0);var q=1-p;a[c]=q*m.r+p*a[c],a[n]=q*m.g+p*a[n],a[o]=q*m.b+p*a[o]}else a[c]=m.r,a[n]=m.g,a[o]=m.b}else sGCFP(a,f,d,e)}function sFCCP(a,b,c){var d=a.length;if(L2){var e=b,f=c;flipX&&(e=PC-b-1),flipY&&(f=PC-c-1);var g=4*e,h=4*(f*PC),j=h+g,k=3,l=3,m=3,n=uD[j]-127.5,o=uD[j+1]-127.5,p=uD[j+2]-127.5;150>C?(n=abs(n)*n*DLO,o=abs(o)*o*DLO,p=abs(p)*p*DLO):850>C?(n=DMD*cos(TS*n),o=DMD*cos(TS*o),p=DMD*cos(TS*p)):(k=1+floor(abs((n+127.5)/DHI)),l=1+floor(abs((o+127.5)/DHI)),m=1+floor(abs((p+127.5)/DHI)),n=0,o=0,p=0);for(var q=0;q<d;q++){var r=a[q],u=r.x,v=r.y;r.distance=gDE(b,c,u,v,3),r.rd=gDE(b,c,u,v,k)+n,r.gd=gDE(b,c,u,v,l)+o,r.bd=gDE(b,c,u,v,m)+p}}else for(var r,q=0;q<d;q++)r=a[q],r.distance=gDE(b,c,r.x,r.y,3);a.sort(sM)}function gDE(a,b,c,d,e){return pow(c-a,e)+pow(d-b,e)}function sC(a,b){var c=gCP(),d=a.r,e=a.g,f=a.b,g=b.r,h=b.g,i=b.b,j=a.weight,k=b.weight,l=g-d,m=h-e,n=i-f;if(L2){var o=a.rd*j,p=b.rd*k,q=a.gd*j,r=b.gd*k,u=a.bd*j,v=b.bd*k;c.x=(a.x+b.x)/2,c.y=(a.y+b.y)/2,c.r=p/(o+p)*l+d,c.g=r/(q+r)*m+e,c.b=v/(u+v)*n+f,c.weight=(j+k)/2}else{var w=a.distance*j,x=b.distance*k,y=x/(w+x);c.x=(a.x+b.x)/2,c.y=(a.y+b.y)/2,c.r=y*l+d,c.g=y*m+e,c.b=y*n+f,c.weight=(j+k)/2}return c}function cN(a,b){a=a||1,b=b||1;for(var c=[],d=function(a,b,c){return b*a[0]+c*a[1]},e=sqrt(3),f=[[1,1,0],[-1,1,0],[1,-1,0],[-1,-1,0],[1,0,1],[-1,0,1],[1,0,-1],[-1,0,-1],[0,1,1],[0,-1,1],[0,1,-1],[0,-1,-1]],g=[],h=0;256>h;h++)g[h]=0|256*rm();for(var h=0;512>h;h++)c[h]=g[255&h];return{get:function(g,h){g*=a,h*=a;var k,l,m,n,o,p=(e-1)/2*(g+h),q=0|g+p,i=0|h+p,j=(3-e)/6,r=j*(q+i),u=g-(q-r),v=h-(i-r);u>v?(n=1,o=0):(n=0,o=1);var w=u-n+j,z=v-o+j,A=u-1+2*j,B=v-1+2*j,I=255&q,J=255&i,K=c[I+c[J]]%12,M=c[I+n+c[J+o]]%12,O=c[I+1+c[J+1]]%12,Q=.5-u*u-v*v;0>Q?k=0:(Q*=Q,k=Q*Q*d(f[K],u,v));var R=.5-w*w-z*z;0>R?l=0:(R*=R,l=R*R*d(f[M],w,z));var S=.5-A*A-B*B;0>S?m=0:(S*=S,m=S*S*d(f[O],A,B));var T=(70*(k+l+m)+1)/2;return 1!==b&&(T=pow(T,b)),T}}}';
1234567891011121314151617181920212223242526// SPDX-License-Identifier: Unlicensepragma solidity ^0.8.4;import '@openzeppelin/contracts/access/Ownable.sol';import './TRColors.sol';interface ITRRolls {struct RelicInfo {string element;string palette;string essence;uint256 colorCount;string style;string speed;string gravity;string display;string relicType;string glyphType;uint256 runeflux;uint256 corruption;uint256 grailId;uint256[] grailGlyph;}
1234567891011121314151617181920212223242526/// SPDX-License-Identifier: MITpragma solidity ^0.8.4;import './TRKeys.sol';/// @notice The Reliquary Color Paletteslibrary TRColors {function get(string memory palette)publicpurereturns (uint256[] memory, uint256){uint256[] memory colorInts = new uint256[](12);uint256 colorIntCount = 0;if (TRUtils.compare(palette, TRKeys.NAT_PAL_JUNGLE)) {colorInts[0] = uint256(3299866);colorInts[1] = uint256(1256965);colorInts[2] = uint256(2375731);colorInts[3] = uint256(67585);colorInts[4] = uint256(16749568);colorInts[5] = uint256(16776295);colorInts[6] = uint256(16748230);colorInts[7] = uint256(16749568);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: Unlicensepragma solidity ^0.8.4;import './TRUtils.sol';/// @notice The Reliquary Constantslibrary TRKeys {struct RuneCore {uint256 tokenId;uint8 level;uint32 mana;bool isDivinityQuestLoot;bool isSecretDiscovered;uint8 secretsDiscovered;uint256 runeCode;string runeHash;string transmutation;address credit;uint256[] glyph;uint24[] colors;address metadataAddress;string hiddenLeyLines;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: Unlicensepragma solidity ^0.8.4;/// @notice The Reliquary Utility Methodslibrary TRUtils {function random(string memory input) public pure returns (uint256) {return uint256(keccak256(abi.encodePacked(input)));}function getColorCode(uint256 color) public pure returns (string memory) {bytes16 hexChars = '0123456789abcdef';uint256 r1 = (color >> uint256(20)) & uint256(15);uint256 r2 = (color >> uint256(16)) & uint256(15);uint256 g1 = (color >> uint256(12)) & uint256(15);uint256 g2 = (color >> uint256(8)) & uint256(15);uint256 b1 = (color >> uint256(4)) & uint256(15);uint256 b2 = color & uint256(15);bytes memory code = new bytes(6);code[0] = hexChars[r1];code[1] = hexChars[r2];code[2] = hexChars[g1];code[3] = hexChars[g2];code[4] = hexChars[b1];code[5] = hexChars[b2];
1234567891011121314151617181920212223{"optimizer": {"enabled": true,"runs": 200},"outputSelection": {"*": {"*": ["evm.bytecode","evm.deployedBytecode","devdoc","userdoc","metadata","abi"]}},"libraries": {"contracts/TRUtils.sol": {"TRUtils": "0xfc29bbb9d6e92605291cca1d5fc24870a50b0780"}}}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"DivinityQuestProgressionMismatch","type":"error"},{"inputs":[],"name":"GrailsAreUnalterable","type":"error"},{"inputs":[],"name":"IncorrectElementalWeakness","type":"error"},{"inputs":[],"name":"IncorrectInnerDemonElement","type":"error"},{"inputs":[],"name":"IncorrectWhispers","type":"error"},{"inputs":[{"internalType":"uint256","name":"_size","type":"uint256"},{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_end","type":"uint256"}],"name":"InvalidCodeAtRange","type":"error"},{"inputs":[],"name":"InvalidCustomization","type":"error"},{"inputs":[],"name":"InvalidElement","type":"error"},{"inputs":[],"name":"InvalidTokenId","type":"error"},{"inputs":[],"name":"MetadataNumberTooHigh","type":"error"},{"inputs":[],"name":"MetadataNumberTooLow","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"MissingInscription","type":"error"},{"inputs":[],"name":"MissingMetadata","type":"error"},{"inputs":[],"name":"NoAdvancedSpellcastingContracts","type":"error"},{"inputs":[],"name":"NoAetherRemainingUseMintInstead","type":"error"},{"inputs":[],"name":"NoSecretsLeftToReveal","type":"error"},{"inputs":[],"name":"NotApprovedCreatorOrOwner","type":"error"},{"inputs":[],"name":"NotEnoughAether","type":"error"},{"inputs":[],"name":"NotEnoughMana","type":"error"},{"inputs":[],"name":"NotEntrustedOrInYourPossession","type":"error"},{"inputs":[],"name":"NotMetadataApprovedOrOwner","type":"error"},{"inputs":[],"name":"OnlyBurnsVibes","type":"error"},{"inputs":[],"name":"OutOfCurios","type":"error"},{"inputs":[],"name":"OutOfRelics","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"RelicAlreadyAtMaxLevel","type":"error"},{"inputs":[],"name":"RelicAlreadyWellStudied","type":"error"},{"inputs":[],"name":"ReliquaryAlreadySealed","type":"error"},{"inputs":[],"name":"ReliquaryNotDiscovered","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"UnableToCarrySoManyAtOnce","type":"error"},{"inputs":[],"name":"WriteError","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"RelicUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"adventurers","outputs":[{"internalType":"uint256","name":"currentChamber","type":"uint256"},{"internalType":"uint256","name":"aether","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"creator","type":"address"}],"name":"authorizeCreator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateVibesDiscount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"attackElement","type":"string"}],"name":"challengeElementalGuardians","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"innerDemonElement","type":"string"},{"internalType":"string","name":"attackElement","type":"string"}],"name":"challengeInnerDemon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"clearMetadataNumber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint32","name":"manaCost","type":"uint32"}],"name":"consumeMana","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256[]","name":"glyph","type":"uint256[]"},{"internalType":"uint256","name":"burnVibeId","type":"uint256"}],"name":"createGlyph","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"id","type":"address"}],"name":"detectDemons","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"element","type":"string"}],"name":"detectElementalWeakness","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"previousHash","type":"string"}],"name":"detectElementals","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getColorByIndex","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getColorCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getElement","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getGrailId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getLevel","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getMana","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getMetadataAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getRuneCode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getRuneCore","outputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint8","name":"level","type":"uint8"},{"internalType":"uint32","name":"mana","type":"uint32"},{"internalType":"bool","name":"isDivinityQuestLoot","type":"bool"},{"internalType":"bool","name":"isSecretDiscovered","type":"bool"},{"internalType":"uint8","name":"secretsDiscovered","type":"uint8"},{"internalType":"uint256","name":"runeCode","type":"uint256"},{"internalType":"string","name":"runeHash","type":"string"},{"internalType":"string","name":"transmutation","type":"string"},{"internalType":"address","name":"credit","type":"address"},{"internalType":"uint256[]","name":"glyph","type":"uint256[]"},{"internalType":"uint24[]","name":"colors","type":"uint24[]"},{"internalType":"address","name":"metadataAddress","type":"address"},{"internalType":"string","name":"hiddenLeyLines","type":"string"}],"internalType":"struct TRKeys.RuneCore","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getRuneHash","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint24[]","name":"colors","type":"uint24[]"},{"internalType":"uint256","name":"burnVibeId","type":"uint256"}],"name":"imagineColors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"inscription","type":"string"}],"name":"inscribeRunicSeal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"metadataAddressList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"metadataOverrides","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintCount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintDivineCurio","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintCount","type":"uint256"}],"name":"mintWithVibesDiscount","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"relics","outputs":[{"internalType":"uint8","name":"level","type":"uint8"},{"internalType":"uint32","name":"mana","type":"uint32"},{"internalType":"bool","name":"isDivinityQuestLoot","type":"bool"},{"internalType":"bool","name":"isSecretDiscovered","type":"bool"},{"internalType":"address","name":"authorizedCreator","type":"address"},{"internalType":"address","name":"glyph","type":"address"},{"internalType":"string","name":"transmutation","type":"string"},{"internalType":"bytes32","name":"runeHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"seekDivineKnowledge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setMetadataAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"metadataNumber","type":"uint256"}],"name":"setMetadataNumber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenScript","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"element","type":"string"},{"internalType":"uint256","name":"burnVibeId","type":"uint256"}],"name":"transmuteElement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"upgradeRelic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"vibesAetherChanneled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"whispering","type":"string"}],"name":"whisperRunicSeal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAether","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604080518082018252600d81526c7468652072656c69717561727960981b60208083019182528351808501909452600684526552454c49435360d01b90840152815191929183918391620000699160029162000100565b5080516200007f90600390602084019062000100565b50506001600055506200009233620000ae565b50506001600b55600c805461ffff1916610101179055620001e3565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010e90620001a6565b90600052602060002090601f0160209004810192826200013257600085556200017d565b82601f106200014d57805160ff19168380011785556200017d565b828001600101855582156200017d579182015b828111156200017d57825182559160200191906001019062000160565b506200018b9291506200018f565b5090565b5b808211156200018b576000815560010162000190565b600181811c90821680620001bb57607f821691505b60208210811415620001dd57634e487b7160e01b600052602260045260246000fd5b50919050565b61594b80620001f36000396000f3fe60806040526004361061033e5760003560e01c8063744e94aa116101ae578063b496da8b116100eb578063ea7606121161008f578063f4f2d1411161006c578063f4f2d14114610a67578063f528d5b714610a94578063fa6b116414610ab4578063fc337bb114610ad457005b8063ea76061214610a07578063efb4e00814610a27578063f2fde38b14610a4757005b8063c87b56dd116100c8578063c87b56dd14610976578063e17b25af14610996578063e4fe2413146109b6578063e985e9c5146109be57005b8063b496da8b14610902578063b548332d14610936578063b88d4fde1461095657005b80638da5cb5b11610152578063a0712d681161012f578063a0712d681461088f578063a22cb465146108a2578063aa2773f6146108c2578063af3dbfdb146108e257005b80638da5cb5b1461081357806395d89b4114610831578063994ee5ae1461084657005b8063848909751161018b578063848909751461077c578063851bf5421461079c57806385877ecd146107cc57806386481d40146107e157005b8063744e94aa1461070757806383cdf59e1461073c5780638429ffb01461075c57005b8063201ffc121161027c5780635379522f116102205780636352211e116101fd5780636352211e1461069f5780636fac2411146106bf57806370a08231146106d2578063715018a6146106f257005b80635379522f146106325780635755669a1461065257806361c6833d1461067257005b8063394c19e211610259578063394c19e2146105b25780633a7d22bc146105d257806342842e0e146105f25780634376d1011461061257005b8063201ffc121461055257806323b872dd146105725780632b15505e1461059257005b80630924e345116102e357806311eea9c5116102c057806311eea9c5146104b6578063150b7a02146104d657806318160ddd1461050f5780631fc5727f1461053257005b80630924e34514610456578063095ea7b3146104765780630f14ef561461049657005b8063052384561161031c57806305238456146103bc57806306fdde03146103dc57806307a34b16146103fe578063081812fc1461041e57005b806287c2001461034757806301ffc9a7146103675780630396d7cd1461039c57005b3661034557005b005b34801561035357600080fd5b50610345610362366004614eb5565b610ae9565b34801561037357600080fd5b50610387610382366004614d6f565b610b35565b60405190151581526020015b60405180910390f35b3480156103a857600080fd5b506103456103b7366004614e61565b610b87565b3480156103c857600080fd5b506103456103d7366004615150565b610d01565b3480156103e857600080fd5b506103f1610dcd565b604051610393919061544b565b34801561040a57600080fd5b50610345610419366004614f64565b610e5f565b34801561042a57600080fd5b5061043e610439366004614e61565b610e74565b6040516001600160a01b039091168152602001610393565b34801561046257600080fd5b506103f1610471366004614b9d565b610eb8565b34801561048257600080fd5b50610345610491366004614d28565b610f78565b3480156104a257600080fd5b506103f16104b1366004614e61565b611006565b3480156104c257600080fd5b506103456104d1366004614da7565b61101c565b3480156104e257600080fd5b506104f66104f1366004614c7f565b61115c565b6040516001600160e01b03199091168152602001610393565b34801561051b57600080fd5b506105246112ff565b604051908152602001610393565b34801561053e57600080fd5b5061034561054d366004614da7565b61130d565b34801561055e57600080fd5b506103f161056d366004614e61565b61146c565b34801561057e57600080fd5b5061034561058d366004614c3f565b6114ad565b34801561059e57600080fd5b506103f16105ad366004614da7565b6114b8565b3480156105be57600080fd5b506103456105cd366004614e91565b6114da565b3480156105de57600080fd5b506103f16105ed366004614e61565b61153f565b3480156105fe57600080fd5b5061034561060d366004614c3f565b611580565b34801561061e57600080fd5b5061052461062d366004614e61565b61159b565b34801561063e57600080fd5b506103f161064d36600461512f565b611660565b34801561065e57600080fd5b5061034561066d366004614e61565b6116f7565b34801561067e57600080fd5b5061052461068d366004614e61565b600a6020526000908152604090205481565b3480156106ab57600080fd5b5061043e6106ba366004614e61565b61172e565b6103456106cd366004614e61565b611740565b3480156106de57600080fd5b506105246106ed366004614b9d565b611963565b3480156106fe57600080fd5b506103456119b1565b34801561071357600080fd5b50610727610722366004614e61565b6119e7565b60405163ffffffff9091168152602001610393565b34801561074857600080fd5b50610345610757366004614e0b565b611ab2565b34801561076857600080fd5b50610345610777366004614e61565b611c82565b34801561078857600080fd5b5061043e610797366004614e61565b611dd1565b3480156107a857600080fd5b506103876107b7366004614e61565b60116020526000908152604090205460ff1681565b3480156107d857600080fd5b50610524611dfb565b3480156107ed57600080fd5b506108016107fc366004614e61565b611e81565b60405160ff9091168152602001610393565b34801561081f57600080fd5b506008546001600160a01b031661043e565b34801561083d57600080fd5b506103f1611e9e565b34801561085257600080fd5b5061087a610861366004614b9d565b6010602052600090815260409020805460019091015482565b60408051928352602083019190915201610393565b61034561089d366004614e61565b611ead565b3480156108ae57600080fd5b506103456108bd366004614cfb565b611fdd565b3480156108ce57600080fd5b506103456108dd366004614da7565b612073565b3480156108ee57600080fd5b506105246108fd366004614e61565b612111565b34801561090e57600080fd5b5061092261091d366004614e61565b6121a1565b6040516103939897969594939291906155e9565b34801561094257600080fd5b506103f1610951366004614da7565b61228e565b34801561096257600080fd5b50610345610971366004614c7f565b612824565b34801561098257600080fd5b506103f1610991366004614e61565b612875565b3480156109a257600080fd5b506103456109b1366004614b9d565b6128b6565b610345612932565b3480156109ca57600080fd5b506103876109d9366004614c07565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b348015610a1357600080fd5b5061043e610a22366004614e61565b612a23565b348015610a3357600080fd5b50610345610a423660046150e2565b612aa8565b348015610a5357600080fd5b50610345610a62366004614b9d565b612abc565b348015610a7357600080fd5b50610a87610a82366004614e61565b612b57565b60405161039391906155b4565b348015610aa057600080fd5b50610524610aaf366004614e61565b612e7a565b348015610ac057600080fd5b50610345610acf36600461512f565b612eba565b348015610ae057600080fd5b50610345612f35565b610af38184612fd0565b610afd83836130d3565b6040518381527f1d7dd0a2cbf0f220f58a5423e209b142181f14f4cb78ec896268af4f22f876299060200160405180910390a1505050565b60006001600160e01b031982166380ac58cd60e01b1480610b6657506001600160e01b03198216635b5e139f60e01b145b80610b8157506301ffc9a760e01b6001600160e01b03198316145b92915050565b80610b91816131c5565b610bae5760405163055d621960e01b815260040160405180910390fd5b6000610bb983612a23565b90506000816001600160a01b03166374cbaa976040518163ffffffff1660e01b815260040160206040518083038186803b158015610bf657600080fd5b505afa158015610c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2e919061517c565b90506000610c3b85611e81565b90508160ff168160ff1610610c6357604051633ab816ed60e01b815260040160405180910390fd5b610c6e856096610d01565b6000858152600f602052604081208054909190610c8d9060ff16615855565b825460ff9182166101009390930a83810292021916179091556000868152600f602052604090819020805460ff1916909217909155517f1d7dd0a2cbf0f220f58a5423e209b142181f14f4cb78ec896268af4f22f8762990610cf29087815260200190565b60405180910390a15050505050565b81610d0b816131c5565b610d285760405163055d621960e01b815260040160405180910390fd5b6000610d33846119e7565b90508263ffffffff168163ffffffff161015610d6257604051636971a8f960e01b815260040160405180910390fd5b610d6c838261579d565b6000948552600f60209081526040808720805464ffffffff00191661010063ffffffff95909516949094029390931790925560049052909320805467ffffffffffffffff60a01b1916600160a01b426001600160401b031602179055505050565b606060028054610ddc90615805565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0890615805565b8015610e555780601f10610e2a57610100808354040283529160200191610e55565b820191906000526020600020905b815481529060010190602001808311610e3857829003601f168201915b5050505050905090565b610e698184612fd0565b610afd838333613213565b6000610e7f82613339565b610e9c576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6060610ec26148c6565b63054c56388152610edb6001600160a01b038416613372565b60e08201528051610eeb90612a23565b6001600160a01b03166101808201819052604051632df373ab60e01b8152632df373ab90610f1d9084906004016155b4565b60006040518083038186803b158015610f3557600080fd5b505afa158015610f49573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f719190810190614dd9565b9392505050565b6000610f838261172e565b9050806001600160a01b0316836001600160a01b03161415610fb85760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610fd85750610fd681336109d9565b155b15610ff6576040516367d9dca160e11b815260040160405180910390fd5b6110018383836133c6565b505050565b6060610b8160036110168461159b565b90613422565b600c54604060ff9091161115611045576040516330db714560e21b815260040160405180910390fd5b600c5462010000900460ff1661106e57604051639eec531f60e01b815260040160405180910390fd5b33600090815260106020526040812054801561109d57604051632628972360e01b815260040160405180910390fd5b604051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078090633a96fdd7906110d7908690600d9060040161548c565b60206040518083038186803b1580156110ef57600080fd5b505af4158015611103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111279190614d53565b611144576040516321b7638960e21b815260040160405180910390fd5b50503360009081526010602052604090206001905550565b600c5460009062010000900460ff1661118857604051639eec531f60e01b815260040160405180910390fd5b33736c7c97caff156473f6c9836522ae6e1d6448abe7148015906111c057503373f3fcd0f025c21f087dbeb754516d2ad8279140fc14155b156111de57604051633c5573c960e21b815260040160405180910390fd5b600060608060606000868060200190518101906111fb9190614ff4565b8251939850919650945092501561121a576112168585613603565b5060015b8251156112305761122c85848c613213565b5060015b8151156112455761124185836130d3565b5060015b8061126357604051635a4521b960e01b815260040160405180910390fd5b6000858152600f60205260409020805460649190600190611290908490610100900463ffffffff166156e3565b92506101000a81548163ffffffff021916908363ffffffff1602179055507f1d7dd0a2cbf0f220f58a5423e209b142181f14f4cb78ec896268af4f22f87629856040516112df91815260200190565b60405180910390a150630a85bd0160e11b9450505050505b949350505050565b600154600054036000190190565b600c54604060ff9091161115611336576040516330db714560e21b815260040160405180910390fd5b3360009081526010602052604090205460019080821461136957604051632628972360e01b815260040160405180910390fd5b600061137f611379600143615786565b40613372565b9050600061138c826114b8565b905060006113998261228e565b604051633a96fdd760e01b815290915073fc29bbb9d6e92605291cca1d5fc24870a50b078090633a96fdd7906113d59084908a9060040161545e565b60206040518083038186803b1580156113ed57600080fd5b505af4158015611401573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114259190614d53565b6114425760405163995a375760e01b815260040160405180910390fd5b600260106000335b6001600160a01b03168152602081019190915260400160002055505050505050565b6060600061147983612b57565b61018081015160405163e13daa0d60e01b81529192506001600160a01b03169063e13daa0d90610f1d9084906004016155b4565b611001838383613c4d565b60606114c26148c6565b63054c563880825260e08201849052610eeb90612a23565b816114e4816131c5565b6115015760405163055d621960e01b815260040160405180910390fd5b506000918252600f602052604090912080546001600160a01b03909216600160381b02670100000000000000600160d81b0319909216919091179055565b6060600061154c83612b57565b610180810151604051632df373ab60e01b81529192506001600160a01b031690632df373ab90610f1d9084906004016155b4565b61100183838360405180602001604052806000815250612824565b6000818152600f602052604081206004015481905b806115e9576115be8261583a565b9150600f60006115cd8661583a565b95508581526020019081526020016000206004015490506115b0565b60006115f6600384615767565b90506020600082611608600384615786565b6116129190615786565b9050600062ffffff611625836008615767565b86901c16905080628000008110611647576116408982615786565b9050611654565b61165189826156cb565b90505b98975050505050505050565b6060600061166d84612b57565b6101808101516040516301ea9d4560e61b81529192506001600160a01b031690637aa75140906116a390849087906004016155c7565b60006040518083038186803b1580156116bb57600080fd5b505afa1580156116cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112f79190810190614dd9565b611700816131c5565b61171d5760405163306c20fb60e01b815260040160405180910390fd5b6000908152600a6020526040812055565b600061173982613e6b565b5192915050565b6002600b54141561176c5760405162461bcd60e51b81526004016117639061557d565b60405180910390fd5b6002600b55600c5462010000900460ff1661179a57604051639eec531f60e01b815260040160405180910390fd5b3233146117ba5760405163f7798d3360e01b815260040160405180910390fd5b80600a8111156117dd57604051634bdda98760e11b815260040160405180910390fd5b600c54829060009060ff166117f06112ff565b6117fb9060016156cb565b6118059190615786565b905061041761181483836156cb565b111561183357604051632e57ee4960e11b815260040160405180910390fd5b600061185b736c7c97caff156473f6c9836522ae6e1d6448abe76701aa535d3d0c0000613f92565b9050600061188473f3fcd0f025c21f087dbeb754516d2ad8279140fc66b1a2bc2ec50000613f92565b336000908152601060205260408120600101549192509082906118a89085906156cb565b6118b291906156cb565b9050806118d257604051630ffe347760e21b815260040160405180910390fd5b60006118e688670214e8348c4f0000615767565b9050818110611904576118f98282615786565b905060009150611915565b61190e8183615786565b9150600090505b803410156119365760405163531cc80760e01b815260040160405180910390fd5b33600090815260106020526040902060010182905561195488614117565b50506001600b55505050505050565b60006001600160a01b03821661198c576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b031633146119db5760405162461bcd60e51b815260040161176390615548565b6119e5600061414c565b565b600081815260046020526040812054600160a01b90046001600160401b031680611a2a5750506000908152600f6020526040902054610100900463ffffffff1690565b6000611a3584611e81565b9050600060028260ff1610611a4b576096611a4e565b60645b90506000611a5c8442615786565b905060006301e13380611a7563ffffffff851684615767565b611a7f9190615730565b6000888152600f6020526040902054909150611aa7908290610100900463ffffffff166156e3565b979650505050505050565b600c54604060ff9091161115611adb576040516330db714560e21b815260040160405180910390fd5b33600090815260106020526040902054600290808214611b0e57604051632628972360e01b815260040160405180910390fd5b6000611b1933610eb8565b604051633a96fdd760e01b815290915073fc29bbb9d6e92605291cca1d5fc24870a50b078090633a96fdd790611b55908490899060040161545e565b60206040518083038186803b158015611b6d57600080fd5b505af4158015611b81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba59190614d53565b611bc25760405163602bc0ff60e11b815260040160405180910390fd5b6000611bcd8261228e565b604051633a96fdd760e01b815290915073fc29bbb9d6e92605291cca1d5fc24870a50b078090633a96fdd790611c09908490899060040161545e565b60206040518083038186803b158015611c2157600080fd5b505af4158015611c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c599190614d53565b611c765760405163995a375760e01b815260040160405180910390fd5b6003601060003361144a565b80611c8c816131c5565b611ca95760405163055d621960e01b815260040160405180910390fd5b600c54608061010090910460ff161115611cd657604051637327b95360e01b815260040160405180910390fd5b6000828152600f6020526040902054600160301b900460ff1615611d0c5760405162ff8b6560e11b815260040160405180910390fd5b6000828152600f60205260409020805466ff0000000000001916600160301b1780825560329190600190611d4d90849063ffffffff610100909104166156e3565b825463ffffffff91821661010093840a9081029202191617909155600c805460ff9290049190911691506001611d8283615855565b825460ff91821661010093840a9081029083021990911617909255600c54608091900490911611159050611dcd57611db982611006565b805161100191600e91602090910190614957565b5050565b60098181548110611de157600080fd5b6000918252602090912001546001600160a01b0316905081565b600080611e24736c7c97caff156473f6c9836522ae6e1d6448abe76701aa535d3d0c000061419e565b90506000611e4d73f3fcd0f025c21f087dbeb754516d2ad8279140fc66b1a2bc2ec5000061419e565b336000908152601060205260409020600101549091508190611e709084906156cb565b611e7a91906156cb565b9250505090565b6000818152600f6020526040812054610b819060ff16600161570b565b606060038054610ddc90615805565b6002600b541415611ed05760405162461bcd60e51b81526004016117639061557d565b6002600b55600c5462010000900460ff16611efe57604051639eec531f60e01b815260040160405180910390fd5b323314611f1e5760405163f7798d3360e01b815260040160405180910390fd5b80600a811115611f4157604051634bdda98760e11b815260040160405180910390fd5b600c54829060009060ff16611f546112ff565b611f5f9060016156cb565b611f699190615786565b9050610417611f7883836156cb565b1115611f9757604051632e57ee4960e11b815260040160405180910390fd5b611fa984670214e8348c4f0000615767565b341015611fc95760405163531cc80760e01b815260040160405180910390fd5b611fd284614117565b50506001600b555050565b6001600160a01b0382163314156120075760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b0316331461209d5760405162461bcd60e51b815260040161176390615548565b80516120bc57604051637100025160e01b815260040160405180910390fd5b600d80546120c990615805565b1590506120e95760405163267ae94d60e21b815260040160405180910390fd5b80516120fc90600d906020840190614957565b5050600c805462ff0000191662010000179055565b60008061211d83612b57565b61018081015160405163278381d960e01b81529192506001600160a01b03169063278381d9906121519084906004016155b4565b60206040518083038186803b15801561216957600080fd5b505afa15801561217d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f719190614e79565b600f6020526000908152604090208054600182015460028301805460ff80851695610100860463ffffffff1695650100000000008104831695600160301b820490931694600160381b9091046001600160a01b039081169493169261220590615805565b80601f016020809104026020016040519081016040528092919081815260200182805461223190615805565b801561227e5780601f106122535761010080835404028352916020019161227e565b820191906000526020600020905b81548152906001019060200180831161226157829003601f168201915b5050505050908060040154905088565b60408051808201825260068152654e617475726560d01b60208201529051633a96fdd760e01b815260609173fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd7916122e49186919060040161545e565b60206040518083038186803b1580156122fc57600080fd5b505af4158015612310573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123349190614d53565b156123595750506040805180820190915260048152634669726560e01b602082015290565b6040805180820182526004808252634669726560e01b60208301529151633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078092633a96fdd7926123a89287920161545e565b60206040518083038186803b1580156123c057600080fd5b505af41580156123d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f89190614d53565b1561241e5750506040805180820190915260058152642bb0ba32b960d91b602082015290565b60408051808201825260058152642bb0ba32b960d91b60208201529051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd79161246f91869160040161545e565b60206040518083038186803b15801561248757600080fd5b505af415801561249b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124bf9190614d53565b156124e457505060408051808201909152600481526315da5b9960e21b602082015290565b60408051808201825260048082526315da5b9960e21b60208301529151633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078092633a96fdd7926125339287920161545e565b60206040518083038186803b15801561254b57600080fd5b505af415801561255f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125839190614d53565b156125a957505060408051808201909152600581526408ac2e4e8d60db1b602082015290565b604080518082018252600581526408ac2e4e8d60db1b60208201529051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd7916125fa91869160040161545e565b60206040518083038186803b15801561261257600080fd5b505af4158015612626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264a9190614d53565b156126715750506040805180820190915260068152654e617475726560d01b602082015290565b6040805180820182526006815265417263616e6560d01b60208201529051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd7916126c391869160040161545e565b60206040518083038186803b1580156126db57600080fd5b505af41580156126ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127139190614d53565b1561273a575050604080518082019091526006815265536861646f7760d01b602082015290565b6040805180820182526006815265536861646f7760d01b60208201529051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd79161278c91869160040161545e565b60206040518083038186803b1580156127a457600080fd5b505af41580156127b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dc9190614d53565b15612802575050604080518082019091526005815264131a59da1d60da1b602082015290565b5050604080518082019091526006815265417263616e6560d01b602082015290565b61282f848484613c4d565b6001600160a01b0383163b15158015612851575061284f84848484614300565b155b1561286f576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6060600061288283612b57565b61018081015160405163f533450160e01b81529192506001600160a01b03169063f533450190610f1d9084906004016155b4565b6008546001600160a01b031633146128e05760405162461bcd60e51b815260040161176390615548565b600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319166001600160a01b0392909216919091179055565b6002600b5414156129555760405162461bcd60e51b81526004016117639061557d565b6002600b55600c54604060ff9091161115612983576040516330db714560e21b815260040160405180910390fd5b3233146129a35760405163f7798d3360e01b815260040160405180910390fd5b336000908152601060205260409020546003908082146129d657604051632628972360e01b815260040160405180910390fd5b67011c37937e0800003410156129ff5760405163531cc80760e01b815260040160405180910390fd5b33600090815260106020526040902060049055612a1a6143f4565b50506001600b55565b60095460009080612a475760405163de4294fb60e01b815260040160405180910390fd5b6000838152600a60205260409020548015612a60578091505b6009612a6d600184615786565b81548110612a8b57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316949350505050565b612ab28184612fd0565b610afd8383613603565b6008546001600160a01b03163314612ae65760405162461bcd60e51b815260040161176390615548565b6001600160a01b038116612b4b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611763565b612b548161414c565b50565b612b5f6148c6565b816001811080612b755750612b726112ff565b81115b15612b93576040516307ed98ed60e31b815260040160405180910390fd5b612b9b6148c6565b838152612ba784611e81565b60ff166020820152612bb8846119e7565b63ffffffff166040820152612bcc8461159b565b60c0820152612bda84611006565b60e0820152612be884612a23565b6001600160a01b03166101808201526000848152600f6020818152604083205460ff65010000000000820481161515606087015293889052919052600160301b9004811615156080830152600c5461010090041660a0820152600e8054612c4e90615805565b80601f0160208091040260200160405190810160405280929190818152602001828054612c7a90615805565b8015612cc75780601f10612c9c57610100808354040283529160200191612cc7565b820191906000526020600020905b815481529060010190602001808311612caa57829003601f168201915b50505050506101a08201526000848152600f602052604090206002018054612cee90615805565b80601f0160208091040260200160405190810160405280929190818152602001828054612d1a90615805565b8015612d675780601f10612d3c57610100808354040283529160200191612d67565b820191906000526020600020905b815481529060010190602001808311612d4a57829003601f168201915b50505050506101008201526000848152600f602090815260409182902060030180548351818402810184019094528084529091830182828015612df357602002820191906000526020600020906000905b82829054906101000a900462ffffff1662ffffff1681526020019060030190602082600201049283019260010382029150808411612db85790505b50505050506101608201526000848152600f60205260409020600101546001600160a01b031615612e71576000848152600f60205260408120600101548190612e44906001600160a01b03166144b9565b806020019051810190612e579190614bb9565b6001600160a01b0390911661012085015261014084015250505b91505b50919050565b600080612e8683612b57565b6101808101516040516374dc81d760e01b81529192506001600160a01b0316906374dc81d7906121519084906004016155b4565b60095481612edb5760405163d16e0ad760e01b815260040160405180910390fd5b80821115612efc5760405163a0889e3b60e01b815260040160405180910390fd5b612f05836131c5565b612f225760405163306c20fb60e01b815260040160405180910390fd5b506000918252600a602052604090912055565b6008546001600160a01b03163314612f5f5760405162461bcd60e51b815260040161176390615548565b6000612f736008546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114612fbd576040519150601f19603f3d011682016040523d82523d6000602084013e612fc2565b606091505b5050905080612b5457600080fd5b6000611e62831015612ff75750736c7c97caff156473f6c9836522ae6e1d6448abe761300e565b5073f3fcd0f025c21f087dbeb754516d2ad8279140fc5b6001600160a01b0381166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101869052606401600060405180830381600087803b15801561306c57600080fd5b505af1158015613080573d6000803e3d6000fd5b5050506000838152600f602052604090208054606492506001906130b0908490610100900463ffffffff166156e3565b92506101000a81548163ffffffff021916908363ffffffff160217905550505050565b816130dd816131c5565b15801561311157506000818152600f6020526040902054600160381b90046001600160a01b0316336001600160a01b031614155b8015613131575033736c7c97caff156473f6c9836522ae6e1d6448abe714155b801561315157503373f3fcd0f025c21f087dbeb754516d2ad8279140fc14155b1561316f576040516361404cd160e01b815260040160405180910390fd5b82600061317b82612111565b1461319957604051635c9f475f60e01b815260040160405180910390fd5b6000848152600f6020908152604090912084516131be926003909201918601906149db565b5050505050565b6000806131d18361172e565b9050336001600160a01b038216148061320357506131ee83610e74565b6001600160a01b0316336001600160a01b0316145b80610f715750610f7181336109d9565b8261321d816131c5565b15801561325157506000818152600f6020526040902054600160381b90046001600160a01b0316336001600160a01b031614155b8015613271575033736c7c97caff156473f6c9836522ae6e1d6448abe714155b801561329157503373f3fcd0f025c21f087dbeb754516d2ad8279140fc14155b156132af576040516361404cd160e01b815260040160405180910390fd5b8360006132bb82612111565b146132d957604051635c9f475f60e01b815260040160405180910390fd5b61330383856040516020016132ef929190615427565b6040516020818303038152906040526144c9565b6000958652600f602052604090952060010180546001600160a01b0319166001600160a01b039096169590951790945550505050565b60008160011115801561334d575060005482105b8015610b81575050600090815260046020526040902054600160e01b900460ff161590565b6060816133995750506040805180820190915260048152630307830360e41b602082015290565b8160005b81156133bc57806133ad8161583a565b915050600882901c915061339d565b6112f78482613422565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60606000613431836002615767565b61343c9060026156cb565b6001600160401b0381111561346157634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561348b576020820181803683370190505b509050600360fc1b816000815181106134b457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106134f157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000613515846002615767565b6135209060016156cb565b90505b60018111156135b4576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061356257634e487b7160e01b600052603260045260246000fd5b1a60f81b82828151811061358657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c936135ad816157ee565b9050613523565b508315610f715760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401611763565b8161360d816131c5565b15801561364157506000818152600f6020526040902054600160381b90046001600160a01b0316336001600160a01b031614155b8015613661575033736c7c97caff156473f6c9836522ae6e1d6448abe714155b801561368157503373f3fcd0f025c21f087dbeb754516d2ad8279140fc14155b1561369f576040516361404cd160e01b815260040160405180910390fd5b8260006136ab82612111565b146136c957604051635c9f475f60e01b815260040160405180910390fd5b60408051808201825260068152654e617475726560d01b60208201529051633a96fdd760e01b8152849173fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd79161371e9185919060040161545e565b60206040518083038186803b15801561373657600080fd5b505af415801561374a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376e9190614d53565b8061381557506040805180820182526005815264131a59da1d60da1b60208201529051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd7916137c591859160040161545e565b60206040518083038186803b1580156137dd57600080fd5b505af41580156137f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138159190614d53565b806138bc575060408051808201825260058152642bb0ba32b960d91b60208201529051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd79161386c91859160040161545e565b60206040518083038186803b15801561388457600080fd5b505af4158015613898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138bc9190614d53565b806139635750604080518082018252600581526408ac2e4e8d60db1b60208201529051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd79161391391859160040161545e565b60206040518083038186803b15801561392b57600080fd5b505af415801561393f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139639190614d53565b80613a08575060408051808201825260048082526315da5b9960e21b60208301529151633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078092633a96fdd7926139b89286920161545e565b60206040518083038186803b1580156139d057600080fd5b505af41580156139e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a089190614d53565b80613ab057506040805180820182526006815265417263616e6560d01b60208201529051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd791613a6091859160040161545e565b60206040518083038186803b158015613a7857600080fd5b505af4158015613a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab09190614d53565b80613b5857506040805180820182526006815265536861646f7760d01b60208201529051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd791613b0891859160040161545e565b60206040518083038186803b158015613b2057600080fd5b505af4158015613b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b589190614d53565b80613bfd57506040805180820182526004808252634669726560e01b60208301529151633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078092633a96fdd792613bad9286920161545e565b60206040518083038186803b158015613bc557600080fd5b505af4158015613bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bfd9190614d53565b15613c0757613c20565b604051630dee7a0b60e11b815260040160405180910390fd5b6000858152600f602090815260409091208551613c4592600290920191870190614957565b505050505050565b6000613c5882613e6b565b80519091506000906001600160a01b0316336001600160a01b03161480613c8657508151613c8690336109d9565b80613ca1575033613c9684610e74565b6001600160a01b0316145b905080613cc157604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b031614613cf65760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038416613d1d57604051633a954ecd60e21b815260040160405180910390fd5b613d2a8585856001614528565b613d3a60008484600001516133c6565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b429092169190910217909255908601808352912054909116613e2457600054811015613e2457825160008281526004602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131be565b60408051606081018252600080825260208201819052918101919091528180600111158015613e9b575060005481105b15613f7957600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16151591810182905290613f775780516001600160a01b031615613f0e579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215613f72579392505050565b613f0e565b505b604051636f96cda160e11b815260040160405180910390fd5b600082816001600160a01b0382166370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015613fe557600080fd5b505afa158015613ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061401d9190614e79565b90506000805b8281101561410d5760006001600160a01b038516632f745c59336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024810185905260440160206040518083038186803b15801561408357600080fd5b505afa158015614097573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140bb9190614e79565b60008181526011602052604090205490915060ff166140fa576000818152601160205260409020805460ff191660011790556140f787846156cb565b92505b50806141058161583a565b915050614023565b5095945050505050565b6141213382614540565b600061412b6112ff565b90506141368161455a565b6000918252600f60205260409091206004015550565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600082816001600160a01b0382166370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b1580156141f157600080fd5b505afa158015614205573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142299190614e79565b90506000805b8281101561410d5760006001600160a01b038516632f745c59336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024810185905260440160206040518083038186803b15801561428f57600080fd5b505afa1580156142a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142c79190614e79565b60008181526011602052604090205490915060ff166142ed576142ea87846156cb565b92505b50806142f88161583a565b91505061422f565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906143359033908990889088906004016153f4565b602060405180830381600087803b15801561434f57600080fd5b505af192505050801561437f575060408051601f3d908101601f1916820190925261437c91810190614d8b565b60015b6143da573d8080156143ad576040519150601f19603f3d011682016040523d82523d6000602084013e6143b2565b606091505b5080516143d2576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506112f7565b6143ff336001614540565b60006144096112ff565b90506144148161455a565b6000828152600f602052604090206004810191909155805460329190600190614449908490610100900463ffffffff166156e3565b825463ffffffff9182166101009390930a9283029190920219909116179055506000818152600f60205260408120805465ff0000000000191665010000000000179055600c805460ff169161449d83615855565b91906101000a81548160ff021916908360ff1602179055505050565b6060610b818260016000196145af565b6000806144f4836040516020016144e091906153cf565b604051602081830303815290604052614660565b90508051602082016000f091506001600160a01b038216612e745760405163046a55db60e11b815260040160405180910390fd5b6001600160a01b0384161561286f5761286f8261468c565b611dcd8282604051806020016040528060008152506146e1565b600080614568600143615786565b6145739060ff615875565b61457e9060016156cb565b9050600061458c8285615875565b905060008161459b8443615786565b6145a591906156cb565b4095945050505050565b6060833b806145ce575050604080516020810190915260008152610f71565b808411156145ec575050604080516020810190915260008152610f71565b8383101561461e5760405163162544fd60e11b8152600481018290526024810185905260448101849052606401611763565b83830384820360008282106146335782614635565b815b60408051603f8301601f19168101909152818152955090508087602087018a3c505050509392505050565b606081518260405160200161467692919061537e565b6040516020818303038152906040529050919050565b6000614697826119e7565b905063ffffffff811615611dcd576146b0600282615744565b6000838152600f60205260409020805463ffffffff929092166101000264ffffffff00199092169190911790555050565b61100183838360016000546001600160a01b03851661471257604051622e076360e81b815260040160405180910390fd5b836147305760405163b562e8dd60e01b815260040160405180910390fd5b61473d6000868387614528565b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b4290921691909102179055808085018380156147ee57506001600160a01b0387163b15155b15614877575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461483f6000888480600101955088614300565b61485c576040516368d2bf6b60e11b815260040160405180910390fd5b808214156147f457826000541461487257600080fd5b6148bd565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480821415614878575b506000556131be565b604051806101c0016040528060008152602001600060ff168152602001600063ffffffff168152602001600015158152602001600015158152602001600060ff16815260200160008152602001606081526020016060815260200160006001600160a01b03168152602001606081526020016060815260200160006001600160a01b03168152602001606081525090565b82805461496390615805565b90600052602060002090601f01602090048101928261498557600085556149cb565b82601f1061499e57805160ff19168380011785556149cb565b828001600101855582156149cb579182015b828111156149cb5782518255916020019190600101906149b0565b506149d7929150614a7e565b5090565b82805482825590600052602060002090600901600a900481019282156149cb5791602002820160005b83821115614a4657835183826101000a81548162ffffff021916908362ffffff1602179055509260200192600301602081600201049283019260010302614a04565b8015614a755782816101000a81549062ffffff0219169055600301602081600201049283019260010302614a46565b50506149d79291505b5b808211156149d75760008155600101614a7f565b6000614aa6614aa1846156a4565b615651565b9050828152838383011115614aba57600080fd5b828260208301376000602084830101529392505050565b600082601f830112614ae1578081fd5b81516020614af1614aa183615681565b80838252828201915082860187848660051b8901011115614b10578586fd5b855b85811015614b2e57815184529284019290840190600101614b12565b5090979650505050505050565b600082601f830112614b4b578081fd5b610f7183833560208501614a93565b600082601f830112614b6a578081fd5b8151614b78614aa1826156a4565b818152846020838601011115614b8c578283fd5b6112f78260208301602087016157c2565b600060208284031215614bae578081fd5b8135610f71816158cb565b60008060408385031215614bcb578081fd5b8251614bd6816158cb565b60208401519092506001600160401b03811115614bf1578182fd5b614bfd85828601614ad1565b9150509250929050565b60008060408385031215614c19578182fd5b8235614c24816158cb565b91506020830135614c34816158cb565b809150509250929050565b600080600060608486031215614c53578081fd5b8335614c5e816158cb565b92506020840135614c6e816158cb565b929592945050506040919091013590565b60008060008060808587031215614c94578182fd5b8435614c9f816158cb565b93506020850135614caf816158cb565b92506040850135915060608501356001600160401b03811115614cd0578182fd5b8501601f81018713614ce0578182fd5b614cef87823560208401614a93565b91505092959194509250565b60008060408385031215614d0d578182fd5b8235614d18816158cb565b91506020830135614c34816158e0565b60008060408385031215614d3a578182fd5b8235614d45816158cb565b946020939093013593505050565b600060208284031215614d64578081fd5b8151610f71816158e0565b600060208284031215614d80578081fd5b8135610f71816158ee565b600060208284031215614d9c578081fd5b8151610f71816158ee565b600060208284031215614db8578081fd5b81356001600160401b03811115614dcd578182fd5b6112f784828501614b3b565b600060208284031215614dea578081fd5b81516001600160401b03811115614dff578182fd5b6112f784828501614b5a565b60008060408385031215614e1d578182fd5b82356001600160401b0380821115614e33578384fd5b614e3f86838701614b3b565b93506020850135915080821115614e54578283fd5b50614bfd85828601614b3b565b600060208284031215614e72578081fd5b5035919050565b600060208284031215614e8a578081fd5b5051919050565b60008060408385031215614ea3578182fd5b823591506020830135614c34816158cb565b600080600060608486031215614ec9578081fd5b833592506020808501356001600160401b03811115614ee6578283fd5b8501601f81018713614ef6578283fd5b8035614f04614aa182615681565b8082825284820191508484018a868560051b8701011115614f23578687fd5b8694505b83851015614f4e578035614f3a81615904565b835260019490940193918501918501614f27565b5096999698505050506040949094013593505050565b600080600060608486031215614f78578081fd5b833592506020808501356001600160401b03811115614f95578283fd5b8501601f81018713614fa5578283fd5b8035614fb3614aa182615681565b8082825284820191508484018a868560051b8701011115614fd2578687fd5b8694505b83851015614f4e578035835260019490940193918501918501614fd6565b60008060008060808587031215615009578182fd5b845193506020808601516001600160401b0380821115615027578485fd5b61503389838a01614b5a565b95506040880151915080821115615048578485fd5b61505489838a01614ad1565b94506060880151915080821115615069578384fd5b508601601f8101881361507a578283fd5b8051615088614aa182615681565b8082825284820191508484018b868560051b87010111156150a7578687fd5b8694505b838510156150d25780516150be81615904565b8352600194909401939185019185016150ab565b50979a9699509497505050505050565b6000806000606084860312156150f6578081fd5b8335925060208401356001600160401b03811115615112578182fd5b61511e86828701614b3b565b925050604084013590509250925092565b60008060408385031215615141578182fd5b50508035926020909101359150565b60008060408385031215615162578182fd5b82359150602083013563ffffffff81168114614c34578182fd5b60006020828403121561518d578081fd5b815160ff81168114610f71578182fd5b6000815180845260208085019450808401835b838110156151d157815162ffffff16875295820195908201906001016151b0565b509495945050505050565b6000815180845260208085019450808401835b838110156151d1578151875295820195908201906001016151ef565b600081518084526152238160208601602086016157c2565b601f01601f19169290920160200192915050565b60006101c0825184526020830151615254602086018260ff169052565b50604083015161526c604086018263ffffffff169052565b506060830151615280606086018215159052565b506080830151615294608086018215159052565b5060a08301516152a960a086018260ff169052565b5060c083015160c085015260e08301518160e08601526152cb8286018261520b565b91505061010080840151858303828701526152e6838261520b565b9250505061012080840151615305828701826001600160a01b03169052565b5050610140808401518583038287015261531f83826151dc565b92505050610160808401518583038287015261533b838261519d565b925050506101808084015161535a828701826001600160a01b03169052565b50506101a08084015185830382870152615374838261520b565b9695505050505050565b606360f81b815260e083901b6001600160e01b03191660018201526880600e6000396000f360b81b600582015281516000906153c181600e8501602087016157c2565b91909101600e019392505050565b600080825282516153e78160018501602087016157c2565b9190910160010192915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906153749083018461520b565b6001600160a01b03831681526040602082018190526000906112f7908301846151dc565b602081526000610f71602083018461520b565b604081526000615471604083018561520b565b8281036020840152615483818561520b565b95945050505050565b60408152600061549f604083018561520b565b60208382038185015282855484600182811c9150808316806154c257607f831692505b8583108114156154e057634e487b7160e01b88526022600452602488fd5b8287526020870196508080156154fd576001811461550e57615538565b60ff19851688528688019550615538565b60008b815260209020895b858110156155325781548a820152908401908801615519565b89019650505b50939a9950505050505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602081526000610f716020830184615237565b6040815260006155da6040830185615237565b90508260208301529392505050565b60ff8916815263ffffffff88166020820152861515604082015285151560608201526001600160a01b038581166080830152841660a082015261010060c0820181905260009061563b8382018661520b565b9150508260e08301529998505050505050505050565b604051601f8201601f191681016001600160401b0381118282101715615679576156796158b5565b604052919050565b60006001600160401b0382111561569a5761569a6158b5565b5060051b60200190565b60006001600160401b038211156156bd576156bd6158b5565b50601f01601f191660200190565b600082198211156156de576156de615889565b500190565b600063ffffffff80831681851680830382111561570257615702615889565b01949350505050565b600060ff821660ff84168060ff0382111561572857615728615889565b019392505050565b60008261573f5761573f61589f565b500490565b600063ffffffff8084168061575b5761575b61589f565b92169190910492915050565b600081600019048311821515161561578157615781615889565b500290565b60008282101561579857615798615889565b500390565b600063ffffffff838116908316818110156157ba576157ba615889565b039392505050565b60005b838110156157dd5781810151838201526020016157c5565b8381111561286f5750506000910152565b6000816157fd576157fd615889565b506000190190565b600181811c9082168061581957607f821691505b60208210811415612e7457634e487b7160e01b600052602260045260246000fd5b600060001982141561584e5761584e615889565b5060010190565b600060ff821660ff81141561586c5761586c615889565b60010192915050565b6000826158845761588461589f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612b5457600080fd5b8015158114612b5457600080fd5b6001600160e01b031981168114612b5457600080fd5b62ffffff81168114612b5457600080fdfea264697066735822122007731cc5e3b305251a4f1e3247be1ef32867de7db4f3285177f22145cba69ad164736f6c63430008040033
Deployed Bytecode
0x60806040526004361061033e5760003560e01c8063744e94aa116101ae578063b496da8b116100eb578063ea7606121161008f578063f4f2d1411161006c578063f4f2d14114610a67578063f528d5b714610a94578063fa6b116414610ab4578063fc337bb114610ad457005b8063ea76061214610a07578063efb4e00814610a27578063f2fde38b14610a4757005b8063c87b56dd116100c8578063c87b56dd14610976578063e17b25af14610996578063e4fe2413146109b6578063e985e9c5146109be57005b8063b496da8b14610902578063b548332d14610936578063b88d4fde1461095657005b80638da5cb5b11610152578063a0712d681161012f578063a0712d681461088f578063a22cb465146108a2578063aa2773f6146108c2578063af3dbfdb146108e257005b80638da5cb5b1461081357806395d89b4114610831578063994ee5ae1461084657005b8063848909751161018b578063848909751461077c578063851bf5421461079c57806385877ecd146107cc57806386481d40146107e157005b8063744e94aa1461070757806383cdf59e1461073c5780638429ffb01461075c57005b8063201ffc121161027c5780635379522f116102205780636352211e116101fd5780636352211e1461069f5780636fac2411146106bf57806370a08231146106d2578063715018a6146106f257005b80635379522f146106325780635755669a1461065257806361c6833d1461067257005b8063394c19e211610259578063394c19e2146105b25780633a7d22bc146105d257806342842e0e146105f25780634376d1011461061257005b8063201ffc121461055257806323b872dd146105725780632b15505e1461059257005b80630924e345116102e357806311eea9c5116102c057806311eea9c5146104b6578063150b7a02146104d657806318160ddd1461050f5780631fc5727f1461053257005b80630924e34514610456578063095ea7b3146104765780630f14ef561461049657005b8063052384561161031c57806305238456146103bc57806306fdde03146103dc57806307a34b16146103fe578063081812fc1461041e57005b806287c2001461034757806301ffc9a7146103675780630396d7cd1461039c57005b3661034557005b005b34801561035357600080fd5b50610345610362366004614eb5565b610ae9565b34801561037357600080fd5b50610387610382366004614d6f565b610b35565b60405190151581526020015b60405180910390f35b3480156103a857600080fd5b506103456103b7366004614e61565b610b87565b3480156103c857600080fd5b506103456103d7366004615150565b610d01565b3480156103e857600080fd5b506103f1610dcd565b604051610393919061544b565b34801561040a57600080fd5b50610345610419366004614f64565b610e5f565b34801561042a57600080fd5b5061043e610439366004614e61565b610e74565b6040516001600160a01b039091168152602001610393565b34801561046257600080fd5b506103f1610471366004614b9d565b610eb8565b34801561048257600080fd5b50610345610491366004614d28565b610f78565b3480156104a257600080fd5b506103f16104b1366004614e61565b611006565b3480156104c257600080fd5b506103456104d1366004614da7565b61101c565b3480156104e257600080fd5b506104f66104f1366004614c7f565b61115c565b6040516001600160e01b03199091168152602001610393565b34801561051b57600080fd5b506105246112ff565b604051908152602001610393565b34801561053e57600080fd5b5061034561054d366004614da7565b61130d565b34801561055e57600080fd5b506103f161056d366004614e61565b61146c565b34801561057e57600080fd5b5061034561058d366004614c3f565b6114ad565b34801561059e57600080fd5b506103f16105ad366004614da7565b6114b8565b3480156105be57600080fd5b506103456105cd366004614e91565b6114da565b3480156105de57600080fd5b506103f16105ed366004614e61565b61153f565b3480156105fe57600080fd5b5061034561060d366004614c3f565b611580565b34801561061e57600080fd5b5061052461062d366004614e61565b61159b565b34801561063e57600080fd5b506103f161064d36600461512f565b611660565b34801561065e57600080fd5b5061034561066d366004614e61565b6116f7565b34801561067e57600080fd5b5061052461068d366004614e61565b600a6020526000908152604090205481565b3480156106ab57600080fd5b5061043e6106ba366004614e61565b61172e565b6103456106cd366004614e61565b611740565b3480156106de57600080fd5b506105246106ed366004614b9d565b611963565b3480156106fe57600080fd5b506103456119b1565b34801561071357600080fd5b50610727610722366004614e61565b6119e7565b60405163ffffffff9091168152602001610393565b34801561074857600080fd5b50610345610757366004614e0b565b611ab2565b34801561076857600080fd5b50610345610777366004614e61565b611c82565b34801561078857600080fd5b5061043e610797366004614e61565b611dd1565b3480156107a857600080fd5b506103876107b7366004614e61565b60116020526000908152604090205460ff1681565b3480156107d857600080fd5b50610524611dfb565b3480156107ed57600080fd5b506108016107fc366004614e61565b611e81565b60405160ff9091168152602001610393565b34801561081f57600080fd5b506008546001600160a01b031661043e565b34801561083d57600080fd5b506103f1611e9e565b34801561085257600080fd5b5061087a610861366004614b9d565b6010602052600090815260409020805460019091015482565b60408051928352602083019190915201610393565b61034561089d366004614e61565b611ead565b3480156108ae57600080fd5b506103456108bd366004614cfb565b611fdd565b3480156108ce57600080fd5b506103456108dd366004614da7565b612073565b3480156108ee57600080fd5b506105246108fd366004614e61565b612111565b34801561090e57600080fd5b5061092261091d366004614e61565b6121a1565b6040516103939897969594939291906155e9565b34801561094257600080fd5b506103f1610951366004614da7565b61228e565b34801561096257600080fd5b50610345610971366004614c7f565b612824565b34801561098257600080fd5b506103f1610991366004614e61565b612875565b3480156109a257600080fd5b506103456109b1366004614b9d565b6128b6565b610345612932565b3480156109ca57600080fd5b506103876109d9366004614c07565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b348015610a1357600080fd5b5061043e610a22366004614e61565b612a23565b348015610a3357600080fd5b50610345610a423660046150e2565b612aa8565b348015610a5357600080fd5b50610345610a62366004614b9d565b612abc565b348015610a7357600080fd5b50610a87610a82366004614e61565b612b57565b60405161039391906155b4565b348015610aa057600080fd5b50610524610aaf366004614e61565b612e7a565b348015610ac057600080fd5b50610345610acf36600461512f565b612eba565b348015610ae057600080fd5b50610345612f35565b610af38184612fd0565b610afd83836130d3565b6040518381527f1d7dd0a2cbf0f220f58a5423e209b142181f14f4cb78ec896268af4f22f876299060200160405180910390a1505050565b60006001600160e01b031982166380ac58cd60e01b1480610b6657506001600160e01b03198216635b5e139f60e01b145b80610b8157506301ffc9a760e01b6001600160e01b03198316145b92915050565b80610b91816131c5565b610bae5760405163055d621960e01b815260040160405180910390fd5b6000610bb983612a23565b90506000816001600160a01b03166374cbaa976040518163ffffffff1660e01b815260040160206040518083038186803b158015610bf657600080fd5b505afa158015610c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2e919061517c565b90506000610c3b85611e81565b90508160ff168160ff1610610c6357604051633ab816ed60e01b815260040160405180910390fd5b610c6e856096610d01565b6000858152600f602052604081208054909190610c8d9060ff16615855565b825460ff9182166101009390930a83810292021916179091556000868152600f602052604090819020805460ff1916909217909155517f1d7dd0a2cbf0f220f58a5423e209b142181f14f4cb78ec896268af4f22f8762990610cf29087815260200190565b60405180910390a15050505050565b81610d0b816131c5565b610d285760405163055d621960e01b815260040160405180910390fd5b6000610d33846119e7565b90508263ffffffff168163ffffffff161015610d6257604051636971a8f960e01b815260040160405180910390fd5b610d6c838261579d565b6000948552600f60209081526040808720805464ffffffff00191661010063ffffffff95909516949094029390931790925560049052909320805467ffffffffffffffff60a01b1916600160a01b426001600160401b031602179055505050565b606060028054610ddc90615805565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0890615805565b8015610e555780601f10610e2a57610100808354040283529160200191610e55565b820191906000526020600020905b815481529060010190602001808311610e3857829003601f168201915b5050505050905090565b610e698184612fd0565b610afd838333613213565b6000610e7f82613339565b610e9c576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6060610ec26148c6565b63054c56388152610edb6001600160a01b038416613372565b60e08201528051610eeb90612a23565b6001600160a01b03166101808201819052604051632df373ab60e01b8152632df373ab90610f1d9084906004016155b4565b60006040518083038186803b158015610f3557600080fd5b505afa158015610f49573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f719190810190614dd9565b9392505050565b6000610f838261172e565b9050806001600160a01b0316836001600160a01b03161415610fb85760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610fd85750610fd681336109d9565b155b15610ff6576040516367d9dca160e11b815260040160405180910390fd5b6110018383836133c6565b505050565b6060610b8160036110168461159b565b90613422565b600c54604060ff9091161115611045576040516330db714560e21b815260040160405180910390fd5b600c5462010000900460ff1661106e57604051639eec531f60e01b815260040160405180910390fd5b33600090815260106020526040812054801561109d57604051632628972360e01b815260040160405180910390fd5b604051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078090633a96fdd7906110d7908690600d9060040161548c565b60206040518083038186803b1580156110ef57600080fd5b505af4158015611103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111279190614d53565b611144576040516321b7638960e21b815260040160405180910390fd5b50503360009081526010602052604090206001905550565b600c5460009062010000900460ff1661118857604051639eec531f60e01b815260040160405180910390fd5b33736c7c97caff156473f6c9836522ae6e1d6448abe7148015906111c057503373f3fcd0f025c21f087dbeb754516d2ad8279140fc14155b156111de57604051633c5573c960e21b815260040160405180910390fd5b600060608060606000868060200190518101906111fb9190614ff4565b8251939850919650945092501561121a576112168585613603565b5060015b8251156112305761122c85848c613213565b5060015b8151156112455761124185836130d3565b5060015b8061126357604051635a4521b960e01b815260040160405180910390fd5b6000858152600f60205260409020805460649190600190611290908490610100900463ffffffff166156e3565b92506101000a81548163ffffffff021916908363ffffffff1602179055507f1d7dd0a2cbf0f220f58a5423e209b142181f14f4cb78ec896268af4f22f87629856040516112df91815260200190565b60405180910390a150630a85bd0160e11b9450505050505b949350505050565b600154600054036000190190565b600c54604060ff9091161115611336576040516330db714560e21b815260040160405180910390fd5b3360009081526010602052604090205460019080821461136957604051632628972360e01b815260040160405180910390fd5b600061137f611379600143615786565b40613372565b9050600061138c826114b8565b905060006113998261228e565b604051633a96fdd760e01b815290915073fc29bbb9d6e92605291cca1d5fc24870a50b078090633a96fdd7906113d59084908a9060040161545e565b60206040518083038186803b1580156113ed57600080fd5b505af4158015611401573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114259190614d53565b6114425760405163995a375760e01b815260040160405180910390fd5b600260106000335b6001600160a01b03168152602081019190915260400160002055505050505050565b6060600061147983612b57565b61018081015160405163e13daa0d60e01b81529192506001600160a01b03169063e13daa0d90610f1d9084906004016155b4565b611001838383613c4d565b60606114c26148c6565b63054c563880825260e08201849052610eeb90612a23565b816114e4816131c5565b6115015760405163055d621960e01b815260040160405180910390fd5b506000918252600f602052604090912080546001600160a01b03909216600160381b02670100000000000000600160d81b0319909216919091179055565b6060600061154c83612b57565b610180810151604051632df373ab60e01b81529192506001600160a01b031690632df373ab90610f1d9084906004016155b4565b61100183838360405180602001604052806000815250612824565b6000818152600f602052604081206004015481905b806115e9576115be8261583a565b9150600f60006115cd8661583a565b95508581526020019081526020016000206004015490506115b0565b60006115f6600384615767565b90506020600082611608600384615786565b6116129190615786565b9050600062ffffff611625836008615767565b86901c16905080628000008110611647576116408982615786565b9050611654565b61165189826156cb565b90505b98975050505050505050565b6060600061166d84612b57565b6101808101516040516301ea9d4560e61b81529192506001600160a01b031690637aa75140906116a390849087906004016155c7565b60006040518083038186803b1580156116bb57600080fd5b505afa1580156116cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112f79190810190614dd9565b611700816131c5565b61171d5760405163306c20fb60e01b815260040160405180910390fd5b6000908152600a6020526040812055565b600061173982613e6b565b5192915050565b6002600b54141561176c5760405162461bcd60e51b81526004016117639061557d565b60405180910390fd5b6002600b55600c5462010000900460ff1661179a57604051639eec531f60e01b815260040160405180910390fd5b3233146117ba5760405163f7798d3360e01b815260040160405180910390fd5b80600a8111156117dd57604051634bdda98760e11b815260040160405180910390fd5b600c54829060009060ff166117f06112ff565b6117fb9060016156cb565b6118059190615786565b905061041761181483836156cb565b111561183357604051632e57ee4960e11b815260040160405180910390fd5b600061185b736c7c97caff156473f6c9836522ae6e1d6448abe76701aa535d3d0c0000613f92565b9050600061188473f3fcd0f025c21f087dbeb754516d2ad8279140fc66b1a2bc2ec50000613f92565b336000908152601060205260408120600101549192509082906118a89085906156cb565b6118b291906156cb565b9050806118d257604051630ffe347760e21b815260040160405180910390fd5b60006118e688670214e8348c4f0000615767565b9050818110611904576118f98282615786565b905060009150611915565b61190e8183615786565b9150600090505b803410156119365760405163531cc80760e01b815260040160405180910390fd5b33600090815260106020526040902060010182905561195488614117565b50506001600b55505050505050565b60006001600160a01b03821661198c576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b031633146119db5760405162461bcd60e51b815260040161176390615548565b6119e5600061414c565b565b600081815260046020526040812054600160a01b90046001600160401b031680611a2a5750506000908152600f6020526040902054610100900463ffffffff1690565b6000611a3584611e81565b9050600060028260ff1610611a4b576096611a4e565b60645b90506000611a5c8442615786565b905060006301e13380611a7563ffffffff851684615767565b611a7f9190615730565b6000888152600f6020526040902054909150611aa7908290610100900463ffffffff166156e3565b979650505050505050565b600c54604060ff9091161115611adb576040516330db714560e21b815260040160405180910390fd5b33600090815260106020526040902054600290808214611b0e57604051632628972360e01b815260040160405180910390fd5b6000611b1933610eb8565b604051633a96fdd760e01b815290915073fc29bbb9d6e92605291cca1d5fc24870a50b078090633a96fdd790611b55908490899060040161545e565b60206040518083038186803b158015611b6d57600080fd5b505af4158015611b81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba59190614d53565b611bc25760405163602bc0ff60e11b815260040160405180910390fd5b6000611bcd8261228e565b604051633a96fdd760e01b815290915073fc29bbb9d6e92605291cca1d5fc24870a50b078090633a96fdd790611c09908490899060040161545e565b60206040518083038186803b158015611c2157600080fd5b505af4158015611c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c599190614d53565b611c765760405163995a375760e01b815260040160405180910390fd5b6003601060003361144a565b80611c8c816131c5565b611ca95760405163055d621960e01b815260040160405180910390fd5b600c54608061010090910460ff161115611cd657604051637327b95360e01b815260040160405180910390fd5b6000828152600f6020526040902054600160301b900460ff1615611d0c5760405162ff8b6560e11b815260040160405180910390fd5b6000828152600f60205260409020805466ff0000000000001916600160301b1780825560329190600190611d4d90849063ffffffff610100909104166156e3565b825463ffffffff91821661010093840a9081029202191617909155600c805460ff9290049190911691506001611d8283615855565b825460ff91821661010093840a9081029083021990911617909255600c54608091900490911611159050611dcd57611db982611006565b805161100191600e91602090910190614957565b5050565b60098181548110611de157600080fd5b6000918252602090912001546001600160a01b0316905081565b600080611e24736c7c97caff156473f6c9836522ae6e1d6448abe76701aa535d3d0c000061419e565b90506000611e4d73f3fcd0f025c21f087dbeb754516d2ad8279140fc66b1a2bc2ec5000061419e565b336000908152601060205260409020600101549091508190611e709084906156cb565b611e7a91906156cb565b9250505090565b6000818152600f6020526040812054610b819060ff16600161570b565b606060038054610ddc90615805565b6002600b541415611ed05760405162461bcd60e51b81526004016117639061557d565b6002600b55600c5462010000900460ff16611efe57604051639eec531f60e01b815260040160405180910390fd5b323314611f1e5760405163f7798d3360e01b815260040160405180910390fd5b80600a811115611f4157604051634bdda98760e11b815260040160405180910390fd5b600c54829060009060ff16611f546112ff565b611f5f9060016156cb565b611f699190615786565b9050610417611f7883836156cb565b1115611f9757604051632e57ee4960e11b815260040160405180910390fd5b611fa984670214e8348c4f0000615767565b341015611fc95760405163531cc80760e01b815260040160405180910390fd5b611fd284614117565b50506001600b555050565b6001600160a01b0382163314156120075760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b0316331461209d5760405162461bcd60e51b815260040161176390615548565b80516120bc57604051637100025160e01b815260040160405180910390fd5b600d80546120c990615805565b1590506120e95760405163267ae94d60e21b815260040160405180910390fd5b80516120fc90600d906020840190614957565b5050600c805462ff0000191662010000179055565b60008061211d83612b57565b61018081015160405163278381d960e01b81529192506001600160a01b03169063278381d9906121519084906004016155b4565b60206040518083038186803b15801561216957600080fd5b505afa15801561217d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f719190614e79565b600f6020526000908152604090208054600182015460028301805460ff80851695610100860463ffffffff1695650100000000008104831695600160301b820490931694600160381b9091046001600160a01b039081169493169261220590615805565b80601f016020809104026020016040519081016040528092919081815260200182805461223190615805565b801561227e5780601f106122535761010080835404028352916020019161227e565b820191906000526020600020905b81548152906001019060200180831161226157829003601f168201915b5050505050908060040154905088565b60408051808201825260068152654e617475726560d01b60208201529051633a96fdd760e01b815260609173fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd7916122e49186919060040161545e565b60206040518083038186803b1580156122fc57600080fd5b505af4158015612310573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123349190614d53565b156123595750506040805180820190915260048152634669726560e01b602082015290565b6040805180820182526004808252634669726560e01b60208301529151633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078092633a96fdd7926123a89287920161545e565b60206040518083038186803b1580156123c057600080fd5b505af41580156123d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f89190614d53565b1561241e5750506040805180820190915260058152642bb0ba32b960d91b602082015290565b60408051808201825260058152642bb0ba32b960d91b60208201529051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd79161246f91869160040161545e565b60206040518083038186803b15801561248757600080fd5b505af415801561249b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124bf9190614d53565b156124e457505060408051808201909152600481526315da5b9960e21b602082015290565b60408051808201825260048082526315da5b9960e21b60208301529151633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078092633a96fdd7926125339287920161545e565b60206040518083038186803b15801561254b57600080fd5b505af415801561255f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125839190614d53565b156125a957505060408051808201909152600581526408ac2e4e8d60db1b602082015290565b604080518082018252600581526408ac2e4e8d60db1b60208201529051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd7916125fa91869160040161545e565b60206040518083038186803b15801561261257600080fd5b505af4158015612626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264a9190614d53565b156126715750506040805180820190915260068152654e617475726560d01b602082015290565b6040805180820182526006815265417263616e6560d01b60208201529051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd7916126c391869160040161545e565b60206040518083038186803b1580156126db57600080fd5b505af41580156126ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127139190614d53565b1561273a575050604080518082019091526006815265536861646f7760d01b602082015290565b6040805180820182526006815265536861646f7760d01b60208201529051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd79161278c91869160040161545e565b60206040518083038186803b1580156127a457600080fd5b505af41580156127b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dc9190614d53565b15612802575050604080518082019091526005815264131a59da1d60da1b602082015290565b5050604080518082019091526006815265417263616e6560d01b602082015290565b61282f848484613c4d565b6001600160a01b0383163b15158015612851575061284f84848484614300565b155b1561286f576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6060600061288283612b57565b61018081015160405163f533450160e01b81529192506001600160a01b03169063f533450190610f1d9084906004016155b4565b6008546001600160a01b031633146128e05760405162461bcd60e51b815260040161176390615548565b600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319166001600160a01b0392909216919091179055565b6002600b5414156129555760405162461bcd60e51b81526004016117639061557d565b6002600b55600c54604060ff9091161115612983576040516330db714560e21b815260040160405180910390fd5b3233146129a35760405163f7798d3360e01b815260040160405180910390fd5b336000908152601060205260409020546003908082146129d657604051632628972360e01b815260040160405180910390fd5b67011c37937e0800003410156129ff5760405163531cc80760e01b815260040160405180910390fd5b33600090815260106020526040902060049055612a1a6143f4565b50506001600b55565b60095460009080612a475760405163de4294fb60e01b815260040160405180910390fd5b6000838152600a60205260409020548015612a60578091505b6009612a6d600184615786565b81548110612a8b57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316949350505050565b612ab28184612fd0565b610afd8383613603565b6008546001600160a01b03163314612ae65760405162461bcd60e51b815260040161176390615548565b6001600160a01b038116612b4b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611763565b612b548161414c565b50565b612b5f6148c6565b816001811080612b755750612b726112ff565b81115b15612b93576040516307ed98ed60e31b815260040160405180910390fd5b612b9b6148c6565b838152612ba784611e81565b60ff166020820152612bb8846119e7565b63ffffffff166040820152612bcc8461159b565b60c0820152612bda84611006565b60e0820152612be884612a23565b6001600160a01b03166101808201526000848152600f6020818152604083205460ff65010000000000820481161515606087015293889052919052600160301b9004811615156080830152600c5461010090041660a0820152600e8054612c4e90615805565b80601f0160208091040260200160405190810160405280929190818152602001828054612c7a90615805565b8015612cc75780601f10612c9c57610100808354040283529160200191612cc7565b820191906000526020600020905b815481529060010190602001808311612caa57829003601f168201915b50505050506101a08201526000848152600f602052604090206002018054612cee90615805565b80601f0160208091040260200160405190810160405280929190818152602001828054612d1a90615805565b8015612d675780601f10612d3c57610100808354040283529160200191612d67565b820191906000526020600020905b815481529060010190602001808311612d4a57829003601f168201915b50505050506101008201526000848152600f602090815260409182902060030180548351818402810184019094528084529091830182828015612df357602002820191906000526020600020906000905b82829054906101000a900462ffffff1662ffffff1681526020019060030190602082600201049283019260010382029150808411612db85790505b50505050506101608201526000848152600f60205260409020600101546001600160a01b031615612e71576000848152600f60205260408120600101548190612e44906001600160a01b03166144b9565b806020019051810190612e579190614bb9565b6001600160a01b0390911661012085015261014084015250505b91505b50919050565b600080612e8683612b57565b6101808101516040516374dc81d760e01b81529192506001600160a01b0316906374dc81d7906121519084906004016155b4565b60095481612edb5760405163d16e0ad760e01b815260040160405180910390fd5b80821115612efc5760405163a0889e3b60e01b815260040160405180910390fd5b612f05836131c5565b612f225760405163306c20fb60e01b815260040160405180910390fd5b506000918252600a602052604090912055565b6008546001600160a01b03163314612f5f5760405162461bcd60e51b815260040161176390615548565b6000612f736008546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114612fbd576040519150601f19603f3d011682016040523d82523d6000602084013e612fc2565b606091505b5050905080612b5457600080fd5b6000611e62831015612ff75750736c7c97caff156473f6c9836522ae6e1d6448abe761300e565b5073f3fcd0f025c21f087dbeb754516d2ad8279140fc5b6001600160a01b0381166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101869052606401600060405180830381600087803b15801561306c57600080fd5b505af1158015613080573d6000803e3d6000fd5b5050506000838152600f602052604090208054606492506001906130b0908490610100900463ffffffff166156e3565b92506101000a81548163ffffffff021916908363ffffffff160217905550505050565b816130dd816131c5565b15801561311157506000818152600f6020526040902054600160381b90046001600160a01b0316336001600160a01b031614155b8015613131575033736c7c97caff156473f6c9836522ae6e1d6448abe714155b801561315157503373f3fcd0f025c21f087dbeb754516d2ad8279140fc14155b1561316f576040516361404cd160e01b815260040160405180910390fd5b82600061317b82612111565b1461319957604051635c9f475f60e01b815260040160405180910390fd5b6000848152600f6020908152604090912084516131be926003909201918601906149db565b5050505050565b6000806131d18361172e565b9050336001600160a01b038216148061320357506131ee83610e74565b6001600160a01b0316336001600160a01b0316145b80610f715750610f7181336109d9565b8261321d816131c5565b15801561325157506000818152600f6020526040902054600160381b90046001600160a01b0316336001600160a01b031614155b8015613271575033736c7c97caff156473f6c9836522ae6e1d6448abe714155b801561329157503373f3fcd0f025c21f087dbeb754516d2ad8279140fc14155b156132af576040516361404cd160e01b815260040160405180910390fd5b8360006132bb82612111565b146132d957604051635c9f475f60e01b815260040160405180910390fd5b61330383856040516020016132ef929190615427565b6040516020818303038152906040526144c9565b6000958652600f602052604090952060010180546001600160a01b0319166001600160a01b039096169590951790945550505050565b60008160011115801561334d575060005482105b8015610b81575050600090815260046020526040902054600160e01b900460ff161590565b6060816133995750506040805180820190915260048152630307830360e41b602082015290565b8160005b81156133bc57806133ad8161583a565b915050600882901c915061339d565b6112f78482613422565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60606000613431836002615767565b61343c9060026156cb565b6001600160401b0381111561346157634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561348b576020820181803683370190505b509050600360fc1b816000815181106134b457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106134f157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000613515846002615767565b6135209060016156cb565b90505b60018111156135b4576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061356257634e487b7160e01b600052603260045260246000fd5b1a60f81b82828151811061358657634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c936135ad816157ee565b9050613523565b508315610f715760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401611763565b8161360d816131c5565b15801561364157506000818152600f6020526040902054600160381b90046001600160a01b0316336001600160a01b031614155b8015613661575033736c7c97caff156473f6c9836522ae6e1d6448abe714155b801561368157503373f3fcd0f025c21f087dbeb754516d2ad8279140fc14155b1561369f576040516361404cd160e01b815260040160405180910390fd5b8260006136ab82612111565b146136c957604051635c9f475f60e01b815260040160405180910390fd5b60408051808201825260068152654e617475726560d01b60208201529051633a96fdd760e01b8152849173fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd79161371e9185919060040161545e565b60206040518083038186803b15801561373657600080fd5b505af415801561374a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376e9190614d53565b8061381557506040805180820182526005815264131a59da1d60da1b60208201529051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd7916137c591859160040161545e565b60206040518083038186803b1580156137dd57600080fd5b505af41580156137f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138159190614d53565b806138bc575060408051808201825260058152642bb0ba32b960d91b60208201529051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd79161386c91859160040161545e565b60206040518083038186803b15801561388457600080fd5b505af4158015613898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138bc9190614d53565b806139635750604080518082018252600581526408ac2e4e8d60db1b60208201529051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd79161391391859160040161545e565b60206040518083038186803b15801561392b57600080fd5b505af415801561393f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139639190614d53565b80613a08575060408051808201825260048082526315da5b9960e21b60208301529151633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078092633a96fdd7926139b89286920161545e565b60206040518083038186803b1580156139d057600080fd5b505af41580156139e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a089190614d53565b80613ab057506040805180820182526006815265417263616e6560d01b60208201529051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd791613a6091859160040161545e565b60206040518083038186803b158015613a7857600080fd5b505af4158015613a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab09190614d53565b80613b5857506040805180820182526006815265536861646f7760d01b60208201529051633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078091633a96fdd791613b0891859160040161545e565b60206040518083038186803b158015613b2057600080fd5b505af4158015613b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b589190614d53565b80613bfd57506040805180820182526004808252634669726560e01b60208301529151633a96fdd760e01b815273fc29bbb9d6e92605291cca1d5fc24870a50b078092633a96fdd792613bad9286920161545e565b60206040518083038186803b158015613bc557600080fd5b505af4158015613bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bfd9190614d53565b15613c0757613c20565b604051630dee7a0b60e11b815260040160405180910390fd5b6000858152600f602090815260409091208551613c4592600290920191870190614957565b505050505050565b6000613c5882613e6b565b80519091506000906001600160a01b0316336001600160a01b03161480613c8657508151613c8690336109d9565b80613ca1575033613c9684610e74565b6001600160a01b0316145b905080613cc157604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b031614613cf65760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038416613d1d57604051633a954ecd60e21b815260040160405180910390fd5b613d2a8585856001614528565b613d3a60008484600001516133c6565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b429092169190910217909255908601808352912054909116613e2457600054811015613e2457825160008281526004602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131be565b60408051606081018252600080825260208201819052918101919091528180600111158015613e9b575060005481105b15613f7957600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16151591810182905290613f775780516001600160a01b031615613f0e579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215613f72579392505050565b613f0e565b505b604051636f96cda160e11b815260040160405180910390fd5b600082816001600160a01b0382166370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015613fe557600080fd5b505afa158015613ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061401d9190614e79565b90506000805b8281101561410d5760006001600160a01b038516632f745c59336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024810185905260440160206040518083038186803b15801561408357600080fd5b505afa158015614097573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140bb9190614e79565b60008181526011602052604090205490915060ff166140fa576000818152601160205260409020805460ff191660011790556140f787846156cb565b92505b50806141058161583a565b915050614023565b5095945050505050565b6141213382614540565b600061412b6112ff565b90506141368161455a565b6000918252600f60205260409091206004015550565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600082816001600160a01b0382166370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b1580156141f157600080fd5b505afa158015614205573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142299190614e79565b90506000805b8281101561410d5760006001600160a01b038516632f745c59336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024810185905260440160206040518083038186803b15801561428f57600080fd5b505afa1580156142a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142c79190614e79565b60008181526011602052604090205490915060ff166142ed576142ea87846156cb565b92505b50806142f88161583a565b91505061422f565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906143359033908990889088906004016153f4565b602060405180830381600087803b15801561434f57600080fd5b505af192505050801561437f575060408051601f3d908101601f1916820190925261437c91810190614d8b565b60015b6143da573d8080156143ad576040519150601f19603f3d011682016040523d82523d6000602084013e6143b2565b606091505b5080516143d2576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506112f7565b6143ff336001614540565b60006144096112ff565b90506144148161455a565b6000828152600f602052604090206004810191909155805460329190600190614449908490610100900463ffffffff166156e3565b825463ffffffff9182166101009390930a9283029190920219909116179055506000818152600f60205260408120805465ff0000000000191665010000000000179055600c805460ff169161449d83615855565b91906101000a81548160ff021916908360ff1602179055505050565b6060610b818260016000196145af565b6000806144f4836040516020016144e091906153cf565b604051602081830303815290604052614660565b90508051602082016000f091506001600160a01b038216612e745760405163046a55db60e11b815260040160405180910390fd5b6001600160a01b0384161561286f5761286f8261468c565b611dcd8282604051806020016040528060008152506146e1565b600080614568600143615786565b6145739060ff615875565b61457e9060016156cb565b9050600061458c8285615875565b905060008161459b8443615786565b6145a591906156cb565b4095945050505050565b6060833b806145ce575050604080516020810190915260008152610f71565b808411156145ec575050604080516020810190915260008152610f71565b8383101561461e5760405163162544fd60e11b8152600481018290526024810185905260448101849052606401611763565b83830384820360008282106146335782614635565b815b60408051603f8301601f19168101909152818152955090508087602087018a3c505050509392505050565b606081518260405160200161467692919061537e565b6040516020818303038152906040529050919050565b6000614697826119e7565b905063ffffffff811615611dcd576146b0600282615744565b6000838152600f60205260409020805463ffffffff929092166101000264ffffffff00199092169190911790555050565b61100183838360016000546001600160a01b03851661471257604051622e076360e81b815260040160405180910390fd5b836147305760405163b562e8dd60e01b815260040160405180910390fd5b61473d6000868387614528565b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b4290921691909102179055808085018380156147ee57506001600160a01b0387163b15155b15614877575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461483f6000888480600101955088614300565b61485c576040516368d2bf6b60e11b815260040160405180910390fd5b808214156147f457826000541461487257600080fd5b6148bd565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480821415614878575b506000556131be565b604051806101c0016040528060008152602001600060ff168152602001600063ffffffff168152602001600015158152602001600015158152602001600060ff16815260200160008152602001606081526020016060815260200160006001600160a01b03168152602001606081526020016060815260200160006001600160a01b03168152602001606081525090565b82805461496390615805565b90600052602060002090601f01602090048101928261498557600085556149cb565b82601f1061499e57805160ff19168380011785556149cb565b828001600101855582156149cb579182015b828111156149cb5782518255916020019190600101906149b0565b506149d7929150614a7e565b5090565b82805482825590600052602060002090600901600a900481019282156149cb5791602002820160005b83821115614a4657835183826101000a81548162ffffff021916908362ffffff1602179055509260200192600301602081600201049283019260010302614a04565b8015614a755782816101000a81549062ffffff0219169055600301602081600201049283019260010302614a46565b50506149d79291505b5b808211156149d75760008155600101614a7f565b6000614aa6614aa1846156a4565b615651565b9050828152838383011115614aba57600080fd5b828260208301376000602084830101529392505050565b600082601f830112614ae1578081fd5b81516020614af1614aa183615681565b80838252828201915082860187848660051b8901011115614b10578586fd5b855b85811015614b2e57815184529284019290840190600101614b12565b5090979650505050505050565b600082601f830112614b4b578081fd5b610f7183833560208501614a93565b600082601f830112614b6a578081fd5b8151614b78614aa1826156a4565b818152846020838601011115614b8c578283fd5b6112f78260208301602087016157c2565b600060208284031215614bae578081fd5b8135610f71816158cb565b60008060408385031215614bcb578081fd5b8251614bd6816158cb565b60208401519092506001600160401b03811115614bf1578182fd5b614bfd85828601614ad1565b9150509250929050565b60008060408385031215614c19578182fd5b8235614c24816158cb565b91506020830135614c34816158cb565b809150509250929050565b600080600060608486031215614c53578081fd5b8335614c5e816158cb565b92506020840135614c6e816158cb565b929592945050506040919091013590565b60008060008060808587031215614c94578182fd5b8435614c9f816158cb565b93506020850135614caf816158cb565b92506040850135915060608501356001600160401b03811115614cd0578182fd5b8501601f81018713614ce0578182fd5b614cef87823560208401614a93565b91505092959194509250565b60008060408385031215614d0d578182fd5b8235614d18816158cb565b91506020830135614c34816158e0565b60008060408385031215614d3a578182fd5b8235614d45816158cb565b946020939093013593505050565b600060208284031215614d64578081fd5b8151610f71816158e0565b600060208284031215614d80578081fd5b8135610f71816158ee565b600060208284031215614d9c578081fd5b8151610f71816158ee565b600060208284031215614db8578081fd5b81356001600160401b03811115614dcd578182fd5b6112f784828501614b3b565b600060208284031215614dea578081fd5b81516001600160401b03811115614dff578182fd5b6112f784828501614b5a565b60008060408385031215614e1d578182fd5b82356001600160401b0380821115614e33578384fd5b614e3f86838701614b3b565b93506020850135915080821115614e54578283fd5b50614bfd85828601614b3b565b600060208284031215614e72578081fd5b5035919050565b600060208284031215614e8a578081fd5b5051919050565b60008060408385031215614ea3578182fd5b823591506020830135614c34816158cb565b600080600060608486031215614ec9578081fd5b833592506020808501356001600160401b03811115614ee6578283fd5b8501601f81018713614ef6578283fd5b8035614f04614aa182615681565b8082825284820191508484018a868560051b8701011115614f23578687fd5b8694505b83851015614f4e578035614f3a81615904565b835260019490940193918501918501614f27565b5096999698505050506040949094013593505050565b600080600060608486031215614f78578081fd5b833592506020808501356001600160401b03811115614f95578283fd5b8501601f81018713614fa5578283fd5b8035614fb3614aa182615681565b8082825284820191508484018a868560051b8701011115614fd2578687fd5b8694505b83851015614f4e578035835260019490940193918501918501614fd6565b60008060008060808587031215615009578182fd5b845193506020808601516001600160401b0380821115615027578485fd5b61503389838a01614b5a565b95506040880151915080821115615048578485fd5b61505489838a01614ad1565b94506060880151915080821115615069578384fd5b508601601f8101881361507a578283fd5b8051615088614aa182615681565b8082825284820191508484018b868560051b87010111156150a7578687fd5b8694505b838510156150d25780516150be81615904565b8352600194909401939185019185016150ab565b50979a9699509497505050505050565b6000806000606084860312156150f6578081fd5b8335925060208401356001600160401b03811115615112578182fd5b61511e86828701614b3b565b925050604084013590509250925092565b60008060408385031215615141578182fd5b50508035926020909101359150565b60008060408385031215615162578182fd5b82359150602083013563ffffffff81168114614c34578182fd5b60006020828403121561518d578081fd5b815160ff81168114610f71578182fd5b6000815180845260208085019450808401835b838110156151d157815162ffffff16875295820195908201906001016151b0565b509495945050505050565b6000815180845260208085019450808401835b838110156151d1578151875295820195908201906001016151ef565b600081518084526152238160208601602086016157c2565b601f01601f19169290920160200192915050565b60006101c0825184526020830151615254602086018260ff169052565b50604083015161526c604086018263ffffffff169052565b506060830151615280606086018215159052565b506080830151615294608086018215159052565b5060a08301516152a960a086018260ff169052565b5060c083015160c085015260e08301518160e08601526152cb8286018261520b565b91505061010080840151858303828701526152e6838261520b565b9250505061012080840151615305828701826001600160a01b03169052565b5050610140808401518583038287015261531f83826151dc565b92505050610160808401518583038287015261533b838261519d565b925050506101808084015161535a828701826001600160a01b03169052565b50506101a08084015185830382870152615374838261520b565b9695505050505050565b606360f81b815260e083901b6001600160e01b03191660018201526880600e6000396000f360b81b600582015281516000906153c181600e8501602087016157c2565b91909101600e019392505050565b600080825282516153e78160018501602087016157c2565b9190910160010192915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906153749083018461520b565b6001600160a01b03831681526040602082018190526000906112f7908301846151dc565b602081526000610f71602083018461520b565b604081526000615471604083018561520b565b8281036020840152615483818561520b565b95945050505050565b60408152600061549f604083018561520b565b60208382038185015282855484600182811c9150808316806154c257607f831692505b8583108114156154e057634e487b7160e01b88526022600452602488fd5b8287526020870196508080156154fd576001811461550e57615538565b60ff19851688528688019550615538565b60008b815260209020895b858110156155325781548a820152908401908801615519565b89019650505b50939a9950505050505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602081526000610f716020830184615237565b6040815260006155da6040830185615237565b90508260208301529392505050565b60ff8916815263ffffffff88166020820152861515604082015285151560608201526001600160a01b038581166080830152841660a082015261010060c0820181905260009061563b8382018661520b565b9150508260e08301529998505050505050505050565b604051601f8201601f191681016001600160401b0381118282101715615679576156796158b5565b604052919050565b60006001600160401b0382111561569a5761569a6158b5565b5060051b60200190565b60006001600160401b038211156156bd576156bd6158b5565b50601f01601f191660200190565b600082198211156156de576156de615889565b500190565b600063ffffffff80831681851680830382111561570257615702615889565b01949350505050565b600060ff821660ff84168060ff0382111561572857615728615889565b019392505050565b60008261573f5761573f61589f565b500490565b600063ffffffff8084168061575b5761575b61589f565b92169190910492915050565b600081600019048311821515161561578157615781615889565b500290565b60008282101561579857615798615889565b500390565b600063ffffffff838116908316818110156157ba576157ba615889565b039392505050565b60005b838110156157dd5781810151838201526020016157c5565b8381111561286f5750506000910152565b6000816157fd576157fd615889565b506000190190565b600181811c9082168061581957607f821691505b60208210811415612e7457634e487b7160e01b600052602260045260246000fd5b600060001982141561584e5761584e615889565b5060010190565b600060ff821660ff81141561586c5761586c615889565b60010192915050565b6000826158845761588461589f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612b5457600080fd5b8015158114612b5457600080fd5b6001600160e01b031981168114612b5457600080fd5b62ffffff81168114612b5457600080fdfea264697066735822122007731cc5e3b305251a4f1e3247be1ef32867de7db4f3285177f22145cba69ad164736f6c63430008040033
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.