Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,226 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 9249672 | 1778 days ago | IN | 0 ETH | 0.0006056 | ||||
Revive | 8959615 | 1830 days ago | IN | 0.09076977 ETH | 0.00003409 | ||||
Conjure Wizard | 8927218 | 1836 days ago | IN | 0.07 ETH | 0.00012473 | ||||
Conjure Wizard | 8927218 | 1836 days ago | IN | 0.07 ETH | 0.00012473 | ||||
Conjure Wizard | 8927218 | 1836 days ago | IN | 0.07 ETH | 0.00012473 | ||||
Conjure Wizard | 8927218 | 1836 days ago | IN | 0.07 ETH | 0.00012473 | ||||
Conjure Wizard | 8927218 | 1836 days ago | IN | 0.07 ETH | 0.00012473 | ||||
Conjure Wizard | 8927218 | 1836 days ago | IN | 0.07 ETH | 0.00012473 | ||||
Conjure Wizard | 8927218 | 1836 days ago | IN | 0.07 ETH | 0.00012473 | ||||
Revive | 8925442 | 1836 days ago | IN | 0.215 ETH | 0.00021517 | ||||
Revive | 8925439 | 1836 days ago | IN | 0.073 ETH | 0.0001291 | ||||
Revive | 8925439 | 1836 days ago | IN | 0.072 ETH | 0.0001291 | ||||
Revive | 8925439 | 1836 days ago | IN | 0.061 ETH | 0.0001291 | ||||
Revive | 8925433 | 1836 days ago | IN | 0.05 ETH | 0.00008607 | ||||
Revive | 8925430 | 1836 days ago | IN | 0.045 ETH | 0.00004733 | ||||
Revive | 8925428 | 1836 days ago | IN | 0.043 ETH | 0.00004733 | ||||
Conjure Wizard | 8925412 | 1836 days ago | IN | 0.07 ETH | 0.0001784 | ||||
Conjure Wizard | 8925411 | 1836 days ago | IN | 0.07 ETH | 0.0001784 | ||||
Conjure Wizard | 8925411 | 1836 days ago | IN | 0.07 ETH | 0.0002009 | ||||
Revive | 8925368 | 1836 days ago | IN | 0.043 ETH | 0.0001291 | ||||
Revive | 8925329 | 1836 days ago | IN | 0.043 ETH | 0.00014201 | ||||
Conjure Wizard | 8925251 | 1836 days ago | IN | 0.07 ETH | 0.00133939 | ||||
Conjure Wizard | 8925147 | 1836 days ago | IN | 0.07 ETH | 0.00059469 | ||||
Conjure Wizard | 8924722 | 1836 days ago | IN | 0.07 ETH | 0.00040181 | ||||
Conjure Wizard | 8924487 | 1836 days ago | IN | 0.07 ETH | 0.00016072 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
9249672 | 1778 days ago | 687.20911238 ETH | ||||
8959615 | 1830 days ago | 0.04538488 ETH | ||||
8927218 | 1836 days ago | 0.035 ETH | ||||
8927218 | 1836 days ago | 0.035 ETH | ||||
8927218 | 1836 days ago | 0.035 ETH | ||||
8927218 | 1836 days ago | 0.035 ETH | ||||
8927218 | 1836 days ago | 0.035 ETH | ||||
8927218 | 1836 days ago | 0.035 ETH | ||||
8927218 | 1836 days ago | 0.035 ETH | ||||
8926336 | 1836 days ago | 0.035 ETH | ||||
8926336 | 1836 days ago | 0.07 ETH | ||||
8925442 | 1836 days ago | 0.1075 ETH | ||||
8925439 | 1836 days ago | 0.0365 ETH | ||||
8925439 | 1836 days ago | 0.036 ETH | ||||
8925439 | 1836 days ago | 0.0305 ETH | ||||
8925433 | 1836 days ago | 0.025 ETH | ||||
8925430 | 1836 days ago | 0.0225 ETH | ||||
8925428 | 1836 days ago | 0.0215 ETH | ||||
8925412 | 1836 days ago | 0.035 ETH | ||||
8925411 | 1836 days ago | 0.035 ETH | ||||
8925411 | 1836 days ago | 0.035 ETH | ||||
8925368 | 1836 days ago | 0.0215 ETH | ||||
8925329 | 1836 days ago | 0.0215 ETH | ||||
8925251 | 1836 days ago | 0.035 ETH | ||||
8925228 | 1836 days ago | 0.035 ETH |
Loading...
Loading
Contract Name:
InauguralGateKeeper
Compiler Version
v0.5.8+commit.23d335f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-10-17 */ pragma solidity >=0.5.6 <0.6.0; /// @title Shared constants used throughout the Cheeze Wizards contracts contract WizardConstants { // Wizards normally have their affinity set when they are first created, // but for example Exclusive Wizards can be created with no set affinity. // In this case the affinity can be set by the owner. uint8 internal constant ELEMENT_NOTSET = 0; //000 // A neutral Wizard has no particular strength or weakness with specific // elements. uint8 internal constant ELEMENT_NEUTRAL = 1; //001 // The fire, water and wind elements are used both to reflect an affinity // of Elemental Wizards for a specific element, and as the moves a // Wizard can make during a duel. // Note that if these values change then `moveMask` and `moveDelta` in // ThreeAffinityDuelResolver would need to be updated accordingly. uint8 internal constant ELEMENT_FIRE = 2; //010 uint8 internal constant ELEMENT_WATER = 3; //011 uint8 internal constant ELEMENT_WIND = 4; //100 uint8 internal constant MAX_ELEMENT = ELEMENT_WIND; } /** * @title IERC165 * @dev https://eips.ethereum.org/EIPS/eip-165 */ interface IERC165 { /** * @notice Query if a contract implements an interface * @param interfaceId The interface identifier, as specified in ERC-165 * @dev Interface identification is specified in ERC-165. This function * uses less than 30,000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @title ERC721 Non-Fungible Token Standard basic interface * @dev see https://eips.ethereum.org/EIPS/eip-721 */ contract IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) public view returns (uint256 balance); function ownerOf(uint256 tokenId) public view returns (address owner); function approve(address to, uint256 tokenId) public; function getApproved(uint256 tokenId) public view returns (address operator); function setApprovalForAll(address operator, bool _approved) public; function isApprovedForAll(address owner, address operator) public view returns (bool); function transferFrom(address from, address to, uint256 tokenId) public; function safeTransferFrom(address from, address to, uint256 tokenId) public; function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public; } contract WizardGuildInterfaceId { bytes4 internal constant _INTERFACE_ID_WIZARDGUILD = 0x41d4d437; } /// @title The public interface of the Wizard Guild /// @notice The methods listed in this interface (including the inherited ERC-721 interface), /// make up the public interface of the Wizard Guild contract. Any contracts that wish /// to make use of Cheeze Wizard NFTs (such as Cheeze Wizards Tournaments!) should use /// these methods to ensure they are working correctly with the base NFTs. contract WizardGuildInterface is IERC721, WizardGuildInterfaceId { /// @notice Returns the information associated with the given Wizard /// owner - The address that owns this Wizard /// innatePower - The innate power level of this Wizard, set when minted and entirely /// immutable /// affinity - The Elemental Affinity of this Wizard. For most Wizards, this is set /// when they are minted, but some exclusive Wizards are minted with an affinity /// of 0 (ELEMENT_NOTSET). A Wizard with an NOTSET affinity should NOT be able /// to participate in Tournaments. Once the affinity of a Wizard is set to a non-zero /// value, it can never be changed again. /// metadata - A 256-bit hash of the Wizard's metadata, which is stored off chain. This /// contract doesn't specify format of this hash, nor the off-chain storage mechanism /// but, let's be honest, it's probably an IPFS SHA-256 hash. /// /// NOTE: Series zero Wizards have one of four Affinities: Neutral (1), Fire (2), Water (3) /// or Air (4, sometimes called "Wind" in the code). Future Wizard Series may have /// additional Affinities, and clients of this API should be prepared for that /// eventuality. function getWizard(uint256 id) external view returns (address owner, uint88 innatePower, uint8 affinity, bytes32 metadata); /// @notice Sets the affinity for a Wizard that doesn't already have its elemental affinity chosen. /// Only usable for Exclusive Wizards (all non-Exclusives must have their affinity chosen when /// conjured.) Even Exclusives can't change their affinity once it's been chosen. /// /// NOTE: This function can only be called by the series minter, and (therefore) only while the /// series is open. A Wizard that has no affinity when a series is closed will NEVER have an Affinity. /// BTW- This implies that a minter is responsible for either never minting ELEMENT_NOTSET /// Wizards, or having some public mechanism for a Wizard owner to set the Affinity after minting. /// @param wizardId The id of the wizard /// @param newAffinity The new affinity of the wizard function setAffinity(uint256 wizardId, uint8 newAffinity) external; /// @notice A function to be called that conjures a whole bunch of Wizards at once! You know how /// there's "a pride of lions", "a murder of crows", and "a parliament of owls"? Well, with this /// here function you can conjure yourself "a stench of Cheeze Wizards"! /// /// Unsurprisingly, this method can only be called by the registered minter for a Series. /// @param powers the power level of each wizard /// @param affinities the Elements of the wizards to create /// @param owner the address that will own the newly created Wizards function mintWizards( uint88[] calldata powers, uint8[] calldata affinities, address owner ) external returns (uint256[] memory wizardIds); /// @notice A function to be called that conjures a series of Wizards in the reserved ID range. /// @param wizardIds the ID values to use for each Wizard, must be in the reserved range of the current Series /// @param affinities the Elements of the wizards to create /// @param powers the power level of each wizard /// @param owner the address that will own the newly created Wizards function mintReservedWizards( uint256[] calldata wizardIds, uint88[] calldata powers, uint8[] calldata affinities, address owner ) external; /// @notice Sets the metadata values for a list of Wizards. The metadata for a Wizard can only be set once, /// can only be set by the COO or Minter, and can only be set while the Series is still open. Once /// a Series is closed, the metadata is locked forever! /// @param wizardIds the ID values of the Wizards to apply metadata changes to. /// @param metadata the raw metadata values for each Wizard. This contract does not define how metadata /// should be interpreted, but it is likely to be a 256-bit hash of a complete metadata package /// accessible via IPFS or similar. function setMetadata(uint256[] calldata wizardIds, bytes32[] calldata metadata) external; /// @notice Returns true if the given "spender" address is allowed to manipulate the given token /// (either because it is the owner of that token, has been given approval to manage that token) function isApprovedOrOwner(address spender, uint256 tokenId) external view returns (bool); /// @notice Verifies that a given signature represents authority to control the given Wizard ID, /// reverting otherwise. It handles three cases: /// - The simplest case: The signature was signed with the private key associated with /// an external address that is the owner of this Wizard. /// - The signature was generated with the private key associated with an external address /// that is "approved" for working with this Wizard ID. (See the Wizard Guild and/or /// the ERC-721 spec for more information on "approval".) /// - The owner or approval address (as in cases one or two) is a smart contract /// that conforms to ERC-1654, and accepts the given signature as being valid /// using its own internal logic. /// /// NOTE: This function DOES NOT accept a signature created by an address that was given "operator /// status" (as granted by ERC-721's setApprovalForAll() functionality). Doing so is /// considered an extreme edge case that can be worked around where necessary. /// @param wizardId The Wizard ID whose control is in question /// @param hash The message hash we are authenticating against /// @param sig the signature data; can be longer than 65 bytes for ERC-1654 function verifySignature(uint256 wizardId, bytes32 hash, bytes calldata sig) external view; /// @notice Convenience function that verifies signatures for two wizards using equivalent logic to /// verifySignature(). Included to save on cross-contract calls in the common case where we /// are verifying the signatures of two Wizards who wish to enter into a Duel. /// @param wizardId1 The first Wizard ID whose control is in question /// @param wizardId2 The second Wizard ID whose control is in question /// @param hash1 The message hash we are authenticating against for the first Wizard /// @param hash2 The message hash we are authenticating against for the first Wizard /// @param sig1 the signature data corresponding to the first Wizard; can be longer than 65 bytes for ERC-1654 /// @param sig2 the signature data corresponding to the second Wizard; can be longer than 65 bytes for ERC-1654 function verifySignatures( uint256 wizardId1, uint256 wizardId2, bytes32 hash1, bytes32 hash2, bytes calldata sig1, bytes calldata sig2) external view; } /// @title ERC165Interface /// @dev https://eips.ethereum.org/EIPS/eip-165 interface ERC165Interface { /// @notice Query if a contract implements an interface /// @param interfaceId The interface identifier, as specified in ERC-165 /// @dev Interface identification is specified in ERC-165. This function /// uses less than 30,000 gas. function supportsInterface(bytes4 interfaceId) external view returns (bool); } // This is kind of a hacky way to expose this constant, but it's the best that Solidity offers! contract TournamentInterfaceId { bytes4 internal constant _INTERFACE_ID_TOURNAMENT = 0xbd059098; } /// @title Tournament interface, known to GateKeeper contract TournamentInterface is TournamentInterfaceId, ERC165Interface { // function enter(uint256 tokenId, uint96 power, uint8 affinity) external payable; function revive(uint256 wizardId) external payable; function enterWizards(uint256[] calldata wizardIds, uint88[] calldata powers) external payable; // Returns true if the Tournament is currently running and active. function isActive() external view returns (bool); function powerScale() external view returns (uint256); function destroy() external; } /// @title Contract that manages addresses and access modifiers for certain operations. /// @author Dapper Labs Inc. (https://www.dapperlabs.com) contract AccessControl { /// @dev The address of the master administrator account that has the power to /// update itself and all of the other administrator addresses. /// The CEO account is not expected to be used regularly, and is intended to /// be stored offline (i.e. a hardware device kept in a safe). address public ceoAddress; /// @dev The address of the "day-to-day" operator of various privileged /// functions inside the smart contract. Although the CEO has the power /// to replace the COO, the CEO address doesn't actually have the power /// to do "COO-only" operations. This is to discourage the regular use /// of the CEO account. address public cooAddress; /// @dev The address that is allowed to move money around. Kept separate from /// the COO because the COO address typically lives on an internet-connected /// computer. address payable public cfoAddress; // Events to indicate when access control role addresses are updated. event CEOTransferred(address previousCeo, address newCeo); event COOTransferred(address previousCoo, address newCoo); event CFOTransferred(address previousCfo, address newCfo); /// @dev The AccessControl constructor sets the `ceoAddress` to the sender account. Also /// initializes the COO and CFO to the passed values (CFO is optional and can be address(0)). /// @param newCooAddress The initial COO address to set /// @param newCfoAddress The initial CFO to set (optional) constructor(address newCooAddress, address payable newCfoAddress) public { _setCeo(msg.sender); setCoo(newCooAddress); if (newCfoAddress != address(0)) { setCfo(newCfoAddress); } } /// @notice Access modifier for CEO-only functionality modifier onlyCEO() { require(msg.sender == ceoAddress, "Only CEO"); _; } /// @notice Access modifier for COO-only functionality modifier onlyCOO() { require(msg.sender == cooAddress, "Only COO"); _; } /// @notice Access modifier for CFO-only functionality modifier onlyCFO() { require(msg.sender == cfoAddress, "Only CFO"); _; } function checkControlAddress(address newController) internal view { require(newController != address(0) && newController != ceoAddress, "Invalid CEO address"); } /// @notice Assigns a new address to act as the CEO. Only available to the current CEO. /// @param newCeo The address of the new CEO function setCeo(address newCeo) external onlyCEO { checkControlAddress(newCeo); _setCeo(newCeo); } /// @dev An internal utility function that updates the CEO variable and emits the /// transfer event. Used from both the public setCeo function and the constructor. function _setCeo(address newCeo) private { emit CEOTransferred(ceoAddress, newCeo); ceoAddress = newCeo; } /// @notice Assigns a new address to act as the COO. Only available to the current CEO. /// @param newCoo The address of the new COO function setCoo(address newCoo) public onlyCEO { checkControlAddress(newCoo); emit COOTransferred(cooAddress, newCoo); cooAddress = newCoo; } /// @notice Assigns a new address to act as the CFO. Only available to the current CEO. /// @param newCfo The address of the new CFO function setCfo(address payable newCfo) public onlyCEO { checkControlAddress(newCfo); emit CFOTransferred(cfoAddress, newCfo); cfoAddress = newCfo; } } /// @title WizardPresaleInterface /// @notice This interface represents the single method that the final tournament and master Wizard contracts /// will use to import the presale wizards when those contracts have been finalized a released on /// mainnet. Once all presale Wizards have been absorbed, this temporary pre-sale contract can be /// destroyed. contract WizardPresaleInterface { // See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md on how // to calculate this bytes4 public constant _INTERFACE_ID_WIZARDPRESALE = 0x4df71efb; /// @notice This function is used to bring a presale Wizard into the final contracts. It can /// ONLY be called by the official gatekeeper contract (as set by the Owner of the presale /// contract). It does a number of things: /// 1. Check that the presale Wizard exists, and has not already been absorbed /// 2. Transfer the Eth used to create the presale Wizard to the caller /// 3. Mark the Wizard as having been absorbed, reclaiming the storage used by the presale info /// 4. Return the Wizard information (its owner, minting price, and elemental alignment) /// @param id the id of the presale Wizard to be absorbed function absorbWizard(uint256 id) external returns (address owner, uint256 power, uint8 affinity); /// @notice A convenience function that allows multiple Wizards to be moved to the final contracts /// simultaneously, works the same as the previous function, but in a batch. /// @param ids An array of ids indicating which presale Wizards are to be absorbed function absorbWizardMulti(uint256[] calldata ids) external returns (address[] memory owners, uint256[] memory powers, uint8[] memory affinities); function powerToCost(uint256 power) public pure returns (uint256 cost); function costToPower(uint256 cost) public pure returns (uint256 power); } /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ contract IERC721Receiver { /** * @notice Handle the receipt of an NFT * @dev The ERC721 smart contract calls this function on the recipient * after a `safeTransfer`. This function MUST return the function selector, * otherwise the caller will revert the transaction. The selector to be * returned can be obtained as `this.onERC721Received.selector`. This * function MAY throw to revert and reject the transfer. * Note: the ERC721 contract address is always the message sender. * @param operator The address which called `safeTransferFrom` function * @param from The address which previously owned the token * @param tokenId The NFT identifier which is being transferred * @param data Additional data with no specified format * @return bytes4 `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` */ function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data) public returns (bytes4); } /// Utility library of inline functions on address payables. /// Modified from original by OpenZeppelin. contract Address { /// @notice Returns whether the target address is a contract. /// @dev This function will return false if invoked during the constructor of a contract, /// as the code is not actually created until after the constructor finishes. /// @param account address of the account to check /// @return whether the target address is a contract function isContract(address account) internal view returns (bool) { uint256 size; // XXX Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address. // See https://ethereum.stackexchange.com/a/14016/36603 // for more details about how this works. // TODO Check this again before the Serenity release, because all addresses will be // contracts then. // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } // solium-disable-line security/no-inline-assembly return size > 0; } } /// @title The Inaugural Cheeze Wizards Gate Keeper contract /// @notice The GateKeeper is responsible for determining which Wizards are allowed to enter into /// a Tournament. This particular GateKeeper is designed to manage the first, official /// Cheeze Wizards Tournament! It's much more complicated than a typical GateKeeper /// implementation because it needs to juggle two additional issues that most GateKeepers /// don't need to deal with: Importing Wizards from the Presale contract and minting tokens /// to represent newly conjured Wizards. contract InauguralGateKeeper is AccessControl, WizardConstants, Address, WizardGuildInterfaceId, TournamentInterfaceId { // The Tournament contract. TournamentInterface public tournament; // The Wizard guild contract. // TODO: Replace with the address of the contract once it's deployed. WizardGuildInterface public constant WIZARD_GUILD = WizardGuildInterface(address(0x0d8c864DA1985525e0af0acBEEF6562881827bd5)); // The Wizard presale contract. WizardPresaleInterface public constant WIZARD_PRESALE = WizardPresaleInterface(address(0)); /// @dev The ratio between the cost of a Wizard (in wei) and the power of the Wizard. /// power = cost / MAX_POWER_SCALE /// cost = power * MAX_POWER_SCALE uint256 internal constant MAX_POWER_SCALE = 1000; uint256 internal tournamentPowerScale; function getTournamentPowerScale() external view returns (uint256) { return tournamentPowerScale; } /// @dev The constant conversion factor used for elementalWizardIncrement uint256 private constant TENTH_BASIS_POINTS = 100000; // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector` bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; // We pack these values together to save storage costs (and since they are all access together) struct WizardCosts { /// @dev The cost of Neutral Wizards (in wei). uint96 neutralWizardCost; /// @dev The cost of the _next_ Elemental Wizard (in wei); increases with each Elemental Wizard /// sold, at the rate defined in `elementalWizardIncrement` uint96 elementalWizardCost; /// @dev The increment ratio in cost between sequential Elemental Wizards, multiplied by 100k for /// greater granularity (TENTH_BASIS_POINTS) uint32 elementalWizardIncrement; } WizardCosts public wizardCosts; /// @param setCooAddress The initial COO address. /// @param setCfoAddress The initial CFO address. /// @param setNeutralWizardCost The cost of the Neutral Wizards, in wei. /// @param setElementalWizardCost The starting cost of the Elemental Wizards, in wei. /// @param setElementalWizardIncrement The rate at which the Elemental Wizards cost increases. constructor( address setCooAddress, address payable setCfoAddress, uint256 setNeutralWizardCost, uint256 setElementalWizardCost, uint256 setElementalWizardIncrement) public AccessControl(setCooAddress, setCfoAddress) { wizardCosts = WizardCosts ({ neutralWizardCost: uint96(setNeutralWizardCost), elementalWizardCost: uint96(setElementalWizardCost), elementalWizardIncrement: uint32(setElementalWizardIncrement) }); } modifier onlyWizardController(uint256 wizardId) { require(WIZARD_GUILD.isApprovedOrOwner(msg.sender, wizardId), "Must be Wizard controller"); _; } /// @dev The presale contract will be sending Ether directly to this contract, /// so we need it to have a payable fallback. function() external payable { require(msg.sender == address(WIZARD_PRESALE) || msg.sender == address(tournament), "Don't send funds to GateKeeper"); } /// @notice Registers the address of the Tournament with the GateKeeper. This can't be passed /// into the constructor, because the Tournament itself needs a reference to the GateKeeper /// in its constructor! /// /// NOTE: Technically, most of the functions below should have some kind of modifier /// that ensures that the Tournament is set before they are called, but that /// just adds gas. In practice, multiple draft Gatekeeper contracts may be /// deployed, so what matters is that we call this function before sharing /// the address of this contract publicly. No need to enforce that on chain, /// with its associated gas costs! function registerTournament(address setTournament) external onlyCOO { require(address(tournament) == address(0), "Tournament already registered"); tournament = TournamentInterface(setTournament); require( (setTournament != address(0)) && tournament.supportsInterface(_INTERFACE_ID_TOURNAMENT), "Invalid Tournament"); tournamentPowerScale = tournament.powerScale(); require(tournamentPowerScale <= MAX_POWER_SCALE, "Power scale too high"); } /// @notice This is it folks, the main event! The way for the world to get new Wizards! Does /// pretty much what it says on the box; let's you conjure a new Wizard with a specified /// elemental affinity. The call must include enough Ether to cover the cost of the new /// Wizard, and any excess is refunded. The power of the Wizard is derived from /// the cost. YOU CAN NOT PAY EXTRA TO RAISE INITIAL POWER LATER. Returns the ID /// of the newly conjured Wizard. /// /// While you cannot increase power later, you can conjure some more Wizards! /// @param affinity The elemental affinity you want for the Wizard. Valid elements are /// defined in `WizardConstants`, see the constants with names starting `ELEMENT_`. /// ELEMENT_NOTSET is not valid for regular Wizards (unlike Exclusive Wizards). function conjureWizard(uint8 affinity) external payable returns (uint256) { uint8[] memory affinities = new uint8[](1); affinities[0] = affinity; uint256[] memory wizardIds = conjureWizardMulti(affinities); return wizardIds[0]; } /// @notice A convenience function that allows you to conjure a whole bunch of Wizards at once! You know how /// there's "a pride of lions", "a murder of crows", and "a parliament of owls"? Well, with this /// here function you can conjure yourself "a stench of Cheeze Wizards"! /// @dev This function is careful to bundle all of the external calls (_transferRefund() and onERC721Received()) /// at the end of the function to limit the risk of reentrancy attacks. /// @param affinities The elemental affinities of the Wizards, can mix and match any valid types. /// Valid elements are defined in `WizardConstants`, see the constants with names starting /// `ELEMENT_`. ELEMENT_NOTSET is not valid for regular Wizards (unlike Exclusive Wizards). function conjureWizardMulti(uint8[] memory affinities) public payable returns (uint256[] memory wizardIds) { (uint256 totalCost, uint256 contribution, uint88[] memory powers) = _computeWizardPowers(affinities); require(msg.value >= totalCost, "Insufficient funds"); // Mint the requested Wizards in the guild contract, assigning ownership to the sender wizardIds = WIZARD_GUILD.mintWizards(powers, affinities, msg.sender); // Enter the new Wizards into the Tournament tournament.enterWizards.value(contribution)(wizardIds, powers); // Ensure the Wizards are being assigned to an ERC-721 aware address (either an external address, // or a smart contract that implements onERC721Received()). We must call onERC721Received() for // each token minted because it's allowed for an ERC-721 receiving contract to reject the // transfer based on the properties of the token. if (isContract(msg.sender)) { for (uint256 i = 0; i < wizardIds.length; i++) { bytes4 transferAccepted = IERC721Receiver(msg.sender).onERC721Received(msg.sender, address(0), wizardIds[i], ""); require(transferAccepted == _ERC721_RECEIVED, "Contract owner didn't accept ERC721 transfer"); } } // NOTE: _transferRefund() is only safe if msg.value >= totalCost. See the require() near the // beginning of the function to feel better about this fact. _transferRefund(totalCost); } /// @notice Allows for the creation of Exclusive Wizards. This can only be done by the COO, who still has /// to pay for the power imbued in these Wizards! Reverts if the owner address is a smart contract /// that is not ERC-721 aware. /// @param wizardIds An array of IDs of the Wizards being conjured. /// @param powers The power levels of the Wizards, corresponding 1:1 to Wizard IDs. /// @param affinities The elemental affinities of the Wizards, corresponding 1:1 to Wizard IDs. /// Valid elements are defined in `WizardConstants`, see the constants with /// names starting `ELEMENT_`. ELEMENT_NOTSET is valid for Exclusive Wizards, /// unlike regular Wizards. /// @param owner The recipient address of the newly conjured Cheeze Wizards. function conjureExclusiveMulti( uint256[] calldata wizardIds, uint256[] calldata powers, uint8[] calldata affinities, address owner ) external payable onlyCOO { // Ensure the arrays are all of the same length require(wizardIds.length == powers.length && powers.length == affinities.length, "Inconsistent parameter lengths"); uint256 totalCost = 0; uint256 contribution = 0; uint88[] memory localPowers = new uint88[](powers.length); for (uint256 i = 0; i < powers.length; i++) { require(affinities[i] <= MAX_ELEMENT, "Invalid affinity"); require(powers[i] < (1 << 88), "Invalid power level"); localPowers[i] = uint88(powers[i]); uint256 wizardCost = powerToCost(localPowers[i]); totalCost += wizardCost; contribution += _potContribution(localPowers[i]); } require(msg.value >= totalCost, "Insufficient funds"); // Mint the requested Wizards via the guild contract WIZARD_GUILD.mintReservedWizards(wizardIds, localPowers, affinities, owner); // Enter the new Wizards into the Tournament tournament.enterWizards.value(contribution)(wizardIds, localPowers); // Ensure the Wizards are being assigned to an ERC-721 aware address (either an external address, // or a smart contract that implements onERC721Received()). We must call onERC721Received for // each token minted because it's allowed for an ERC-721 receiving contract to reject the // transfer based on the properties of the token. if (isContract(owner)) { for (uint256 i = 0; i < wizardIds.length; i++) { bytes4 transferAccepted = IERC721Receiver(owner).onERC721Received(msg.sender, address(0), wizardIds[i], ""); require(transferAccepted == _ERC721_RECEIVED, "Contract owner didn't accept ERC721 transfer"); } } // NOTE: _transferRefund() is only safe if msg.value >= totalCost. See the require() near the // middle of the function to feel better about this fact. _transferRefund(totalCost); } /// @notice Computes the powers, total cost, and prize pot contribution for an array of new Wizards /// based on the provided affinities. This also checks that the affinity values are valid /// for the Tournament, and updates the elementalWizardCost storage variable as relevant. function _computeWizardPowers(uint8[] memory affinities) internal returns(uint256 totalCost, uint256 contribution, uint88[] memory powers) { // Cache the Wizard costs in order to reduce the gas costs from reads and writes to storage. uint256 neutralWizardCost = wizardCosts.neutralWizardCost; uint256 elementalWizardCost = wizardCosts.elementalWizardCost; uint256 elementalWizardIncrement = wizardCosts.elementalWizardIncrement; totalCost = 0; contribution = 0; powers = new uint88[](affinities.length); for (uint256 i = 0; i < affinities.length; i++) { uint8 affinity = affinities[i]; uint256 wizardCost; require(affinity > ELEMENT_NOTSET && affinity <= MAX_ELEMENT, "Invalid affinity"); // Determine the price of the Wizard if (affinity == ELEMENT_NEUTRAL) { wizardCost = neutralWizardCost; } else { wizardCost = elementalWizardCost; // Update the cost of the next Elemental Wizard // NOTE: This math can't overflow because the total Ether supply in wei is well less than // 2^128. Multiplying a valid cost in wei by some number <100k // cannot possibly overflow 256 bits. As cost is calculated // ourselves (rather than user provided) we know it must // be in the valid range. elementalWizardCost += (elementalWizardCost * elementalWizardIncrement) / TENTH_BASIS_POINTS; } powers[i] = costToPower(wizardCost); // IMPORTANT! Mathematically, you'd think we could just compute the pot contribution at the // end of the loop, but this risks rounding differences between // conjuring Wizards individually compared to conjuring them as a stench. contribution += _potContribution(powers[i]); totalCost += wizardCost; } // Update the cached elemental cost to storage. Conveniently this costs very little if // the value isn't actually changed. wizardCosts.elementalWizardCost = uint96(elementalWizardCost); } /// @notice Absorbs a number of presale Wizards into the final NFT contract, while also entering them into /// the Tournament. Can handle any number of Wizards in a batch BUT THEY MUST ALL HAVE THE SAME OWNER. /// Callable by anyone. /// @param wizardIds The IDs of the presale Wizards; note that all Wizards MUST have the same owner. function absorbPresaleWizards(uint256[] calldata wizardIds) external { // Bulk fetch the Wizards from the presale contract. Note that this will also delete those Wizards from the // presale contract, and will also transfer the funds used to purchase those Wizards to this contract. // Obviously, a failed require() statement later in this function will undo that transfer and those deletes. ( address[] memory owners, uint256[] memory powers, uint8[] memory affinities ) = WIZARD_PRESALE.absorbWizardMulti(wizardIds); uint256 contribution = 0; address theOwner = owners[0]; uint88[] memory localPowers = new uint88[](powers.length); for (uint256 i = 0; i < powers.length; i++) { require(owners[i] == theOwner, "All Wizards must have same owner"); localPowers[i] = uint88(powers[i]); contribution += _potContribution(localPowers[i]); } // Mint the requested Wizards in the guild contract WIZARD_GUILD.mintReservedWizards(wizardIds, localPowers, affinities, theOwner); // Enter the new Wizards into the Tournament tournament.enterWizards.value(contribution)(wizardIds, localPowers); } /// @notice Revive a tired Wizard so they can duel again. The caller must own /// the Wizard. /// @param wizardId The ID of the Wizard to revive. function revive(uint256 wizardId) external payable onlyWizardController(wizardId) { // We don't need to do any validation here, we can let the Tournament decide // if the pot contribution amount derived from msg.value represents a valid // power level to use for reviving this Wizard. uint88 purchasedPower = costToPower(msg.value); uint256 potContributionValue = _potContribution(purchasedPower); tournament.revive.value(potContributionValue)(wizardId); } /// @notice Sets the affinity for a Wizard that doesn't already have its elemental affinity chosen. /// As a rule this is only ever expected to apply to Exclusive Wizards, as regular wizards /// have their affinity set when they are conjured. function setAffinity(uint256 wizardId, uint8 newAffinity) external onlyWizardController(wizardId) { require(newAffinity > ELEMENT_NOTSET && newAffinity <= MAX_ELEMENT, "Must choose a valid affinity"); // The guild will enforce the Wizard doesn't already have an affinity set. WIZARD_GUILD.setAffinity(wizardId, newAffinity); } /// @notice Determine the power of a Wizard based on their price. /// @param cost The price of the Wizard in wei. /// @return The power of the Wizard (cast to uint88). function costToPower(uint256 cost) public pure returns (uint88 power) { return uint88(cost / MAX_POWER_SCALE); } /// @param power The power of the Wizard. /// @return The cost of the Wizard in wei. function powerToCost(uint88 power) public pure returns (uint256 cost) { return power * MAX_POWER_SCALE; } /// @notice Computes the number of wei required to be sent to the Tournament /// in order to match a given power level. /// @param wizardPower The power level /// @return The prize pot contribution necessary to match the given power function _potContribution(uint88 wizardPower) internal view returns (uint256) { return wizardPower * tournamentPowerScale; } /// @notice Allows the CFO to withdraw funds from this contract. function withdraw() external onlyCFO { // All of the pot contributions go directly into the Tournament contract, so // we can safely withdraw everything, with no hold-backs. msg.sender.transfer(address(this).balance); } /// @notice Allows the COO to destroy this contract if it's not needed anymore. /// @notice Can't be destoryed if the Tournament still exists. function destroy() external onlyCOO { require(address(this).balance == 0, "Drain the funds first"); require(address(tournament) == address(0), "Destroy Tournament first"); selfdestruct(msg.sender); } /// @notice Allow the COO to destroy the Tournament contract. function destroyTournament() external onlyCOO { if (address(tournament) != address(0)) { require(tournament.isActive() == false, "Tournament active"); tournament.destroy(); tournament = TournamentInterface(0); } } /// @notice Utility function that refunds any overpayment to the sender; smart /// enough to only send the excess if the amount we are returning is more than the /// cost of sending it! /// @dev Warning! This does not check for underflows (msg.value < actualPrice) - so /// be sure to call this with correct values! /// @param actualPrice The actual price owed for the conjured Wizards. function _transferRefund(uint256 actualPrice) private { uint256 refund = msg.value - actualPrice; // Make sure the amount we're trying to refund is less than the actual cost of sending it! // See https://github.com/ethereum/wiki/wiki/Subtleties for magic values costs. We can // safely ignore the 25000 additional gas cost for new accounts, as msg.sender is // guaranteed to exist at this point! if (refund > (tx.gasprice * (9000+700))) { msg.sender.transfer(refund); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"cfoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ceoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"wizardIds","type":"uint256[]"},{"name":"powers","type":"uint256[]"},{"name":"affinities","type":"uint8[]"},{"name":"owner","type":"address"}],"name":"conjureExclusiveMulti","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"tournament","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"power","type":"uint88"}],"name":"powerToCost","outputs":[{"name":"cost","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"newCfo","type":"address"}],"name":"setCfo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"WIZARD_PRESALE","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"affinity","type":"uint8"}],"name":"conjureWizard","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"destroy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newCeo","type":"address"}],"name":"setCeo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"wizardId","type":"uint256"}],"name":"revive","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"wizardId","type":"uint256"},{"name":"newAffinity","type":"uint8"}],"name":"setAffinity","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"setTournament","type":"address"}],"name":"registerTournament","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newCoo","type":"address"}],"name":"setCoo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTournamentPowerScale","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cooAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"wizardCosts","outputs":[{"name":"neutralWizardCost","type":"uint96"},{"name":"elementalWizardCost","type":"uint96"},{"name":"elementalWizardIncrement","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"destroyTournament","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"WIZARD_GUILD","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"affinities","type":"uint8[]"}],"name":"conjureWizardMulti","outputs":[{"name":"wizardIds","type":"uint256[]"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"cost","type":"uint256"}],"name":"costToPower","outputs":[{"name":"power","type":"uint88"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"wizardIds","type":"uint256[]"}],"name":"absorbPresaleWizards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"setCooAddress","type":"address"},{"name":"setCfoAddress","type":"address"},{"name":"setNeutralWizardCost","type":"uint256"},{"name":"setElementalWizardCost","type":"uint256"},{"name":"setElementalWizardIncrement","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"previousCeo","type":"address"},{"indexed":false,"name":"newCeo","type":"address"}],"name":"CEOTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"previousCoo","type":"address"},{"indexed":false,"name":"newCoo","type":"address"}],"name":"COOTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"previousCfo","type":"address"},{"indexed":false,"name":"newCfo","type":"address"}],"name":"CFOTransferred","type":"event"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405160a0806200299f833981018060405260a08110156200003357600080fd5b50805160208083015160408401516060850151608090950151939491939092859085906200006790339062000135811b901c565b62000078826200019f60201b60201c565b6001600160a01b03811615620000995762000099816200029460201b60201c565b5050604080516060810182526001600160601b03948516808252939094166020850181905263ffffffff929092169301839052600580546001600160601b031916909217600160601b600160c01b0319166c0100000000000000000000000090910217600160c01b63ffffffff0219167801000000000000000000000000000000000000000000000000909202919091179055506200041f9050565b600054604080516001600160a01b039283168152918316602083015280517f9d05f170f1d545b1aa21c4a4f79f17ff737f5f020ea1b333d88f29f0bbfa9fc69281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146200021957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4f6e6c792043454f000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6200022a816200038960201b60201c565b600154604080516001600160a01b039283168152918316602083015280517f1cd3afc04e6ae479d2b9f74533351b52218c5b2ae4f847f681a5eac514fe11849281900390910190a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146200030e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4f6e6c792043454f000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6200031f816200038960201b60201c565b600254604080516001600160a01b039283168152918316602083015280517fe1033d3cc535efc343c53636bdc05c52a44d9e70b089d4ad6e974379f2c651d69281900390910190a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811615801590620003b057506000546001600160a01b03828116911614155b6200041c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642043454f206164647265737300000000000000000000000000604482015290519081900360640190fd5b50565b612570806200042f6000396000f3fe6080604052600436106101405760003560e01c80638baecc21116100b6578063b83a0c441161006f578063b83a0c4414610509578063b95dbeb61461054e578063c9eb068b14610563578063ce6991fd14610578578063e5a604bf14610669578063f4038ec7146106af57610140565b80638baecc211461042957806398d7a414146104465780639934d7c3146104795780639986a0c6146104ac578063a60a9159146104df578063b047fb50146104f457610140565b80632d46ed56116101085780632d46ed56146103645780633ccfd60b1461039757806352a71ac9146103ac578063573f322f146103c157806383197ef0146103e157806388975198146103f657610140565b80630519ce79146101ad5780630a0f8168146101de5780630cff2fd0146101f35780631e0197e21461030a5780632b81860b1461031f575b33158061015757506003546001600160a01b031633145b6101ab5760408051600160e51b62461bcd02815260206004820152601e60248201527f446f6e27742073656e642066756e647320746f20476174654b65657065720000604482015290519081900360640190fd5b005b3480156101b957600080fd5b506101c261072a565b604080516001600160a01b039092168252519081900360200190f35b3480156101ea57600080fd5b506101c2610739565b6101ab6004803603608081101561020957600080fd5b810190602081018135600160201b81111561022357600080fd5b82018360208201111561023557600080fd5b803590602001918460208302840111600160201b8311171561025657600080fd5b919390929091602081019035600160201b81111561027357600080fd5b82018360208201111561028557600080fd5b803590602001918460208302840111600160201b831117156102a657600080fd5b919390929091602081019035600160201b8111156102c357600080fd5b8201836020820111156102d557600080fd5b803590602001918460208302840111600160201b831117156102f657600080fd5b9193509150356001600160a01b0316610748565b34801561031657600080fd5b506101c2610d5b565b34801561032b57600080fd5b506103526004803603602081101561034257600080fd5b50356001600160581b0316610d6a565b60408051918252519081900360200190f35b34801561037057600080fd5b506101ab6004803603602081101561038757600080fd5b50356001600160a01b0316610d7d565b3480156103a357600080fd5b506101ab610e40565b3480156103b857600080fd5b506101c2610ec0565b610352600480360360208110156103d757600080fd5b503560ff16610ec5565b3480156103ed57600080fd5b506101ab610f38565b34801561040257600080fd5b506101ab6004803603602081101561041957600080fd5b50356001600160a01b0316611043565b6101ab6004803603602081101561043f57600080fd5b50356110a5565b34801561045257600080fd5b506101ab6004803603604081101561046957600080fd5b508035906020013560ff1661120e565b34801561048557600080fd5b506101ab6004803603602081101561049c57600080fd5b50356001600160a01b03166113d2565b3480156104b857600080fd5b506101ab600480360360208110156104cf57600080fd5b50356001600160a01b031661165b565b3480156104eb57600080fd5b5061035261171e565b34801561050057600080fd5b506101c2611724565b34801561051557600080fd5b5061051e611733565b604080516001600160601b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b34801561055a57600080fd5b506101ab61175d565b34801561056f57600080fd5b506101c2611908565b6106196004803603602081101561058e57600080fd5b810190602081018135600160201b8111156105a857600080fd5b8201836020820111156105ba57600080fd5b803590602001918460208302840111600160201b831117156105db57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611920945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561065557818101518382015260200161063d565b505050509050019250505060405180910390f35b34801561067557600080fd5b506106936004803603602081101561068c57600080fd5b5035611d3f565b604080516001600160581b039092168252519081900360200190f35b3480156106bb57600080fd5b506101ab600480360360208110156106d257600080fd5b810190602081018135600160201b8111156106ec57600080fd5b8201836020820111156106fe57600080fd5b803590602001918460208302840111600160201b8311171561071f57600080fd5b509092509050611d47565b6002546001600160a01b031681565b6000546001600160a01b031681565b6001546001600160a01b031633146107985760408051600160e51b62461bcd0281526020600482015260086024820152600160c01b674f6e6c7920434f4f02604482015290519081900360640190fd5b85841480156107a657508382145b6107fa5760408051600160e51b62461bcd02815260206004820152601e60248201527f496e636f6e73697374656e7420706172616d65746572206c656e677468730000604482015290519081900360640190fd5b604080518581526020808702820101909152600090819060609087801561082b578160200160208202803883390190505b50905060005b8781101561099a57600487878381811061084757fe5b9050602002013560ff1660ff1611156108a05760408051600160e51b62461bcd0281526020600482015260106024820152600160801b6f496e76616c696420616666696e69747902604482015290519081900360640190fd5b600160581b8989838181106108b157fe5b905060200201351061090d5760408051600160e51b62461bcd02815260206004820152601360248201527f496e76616c696420706f776572206c6576656c00000000000000000000000000604482015290519081900360640190fd5b88888281811061091957fe5b9050602002013582828151811061092c57fe5b60200260200101906001600160581b031690816001600160581b031681525050600061096a83838151811061095d57fe5b6020026020010151610d6a565b9050808501945061098d83838151811061098057fe5b602002602001015161223a565b9093019250600101610831565b50823410156109eb5760408051600160e51b62461bcd0281526020600482015260126024820152600160701b71496e73756666696369656e742066756e647302604482015290519081900360640190fd5b730d8c864da1985525e0af0acbeef6562881827bd56001600160a01b0316639d1580238b8b848a8a8a6040518763ffffffff1660e01b815260040180806020018060200180602001856001600160a01b03166001600160a01b0316815260200184810384528a8a828181526020019250602002808284376000838201819052601f909101601f191690920186810385528a5181528a51602091820193828d0193509102908190849084905b83811015610aae578181015183820152602001610a96565b505050509050018481038252878782818152602001925060200280828437600081840152601f19601f8201169050808301925050509950505050505050505050600060405180830381600087803b158015610b0857600080fd5b505af1158015610b1c573d6000803e3d6000fd5b505060035460408051600160e01b63b9d95abb02815260048101918252604481018e90526001600160a01b03909216935063b9d95abb925085918e918e91879190819060248101906064018660208702808284376000838201819052601f909101601f1916909201858103845286518152865160209182019382890193509102908190849084905b83811015610bbc578181015183820152602001610ba4565b50505050905001955050505050506000604051808303818588803b158015610be357600080fd5b505af1158015610bf7573d6000803e3d6000fd5b5050505050610c058461224d565b15610d465760005b89811015610d44576000856001600160a01b031663150b7a023360008f8f87818110610c3557fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b0316815260200182815260200180602001828103825260008152602001602001945050505050602060405180830381600087803b158015610cb857600080fd5b505af1158015610ccc573d6000803e3d6000fd5b505050506040513d6020811015610ce257600080fd5b505190506001600160e01b03198116600160e11b630a85bd010214610d3b57604051600160e51b62461bcd02815260040180806020018281038252602c815260200180612519602c913960400191505060405180910390fd5b50600101610c0d565b505b610d4f83612253565b50505050505050505050565b6003546001600160a01b031681565b6001600160581b0381166103e802919050565b6000546001600160a01b03163314610dcd5760408051600160e51b62461bcd0281526020600482015260086024820152600160c01b674f6e6c792043454f02604482015290519081900360640190fd5b610dd681612296565b600254604080516001600160a01b039283168152918316602083015280517fe1033d3cc535efc343c53636bdc05c52a44d9e70b089d4ad6e974379f2c651d69281900390910190a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314610e905760408051600160e51b62461bcd0281526020600482015260086024820152600160c01b674f6e6c792043464f02604482015290519081900360640190fd5b6040513390303180156108fc02916000818181858888f19350505050158015610ebd573d6000803e3d6000fd5b50565b600081565b60408051600180825281830190925260009160609190602080830190803883390190505090508281600081518110610ef957fe5b602002602001019060ff16908160ff16815250506060610f1882611920565b905080600081518110610f2757fe5b602002602001015192505050919050565b6001546001600160a01b03163314610f885760408051600160e51b62461bcd0281526020600482015260086024820152600160c01b674f6e6c7920434f4f02604482015290519081900360640190fd5b303115610fdf5760408051600160e51b62461bcd02815260206004820152601560248201527f447261696e207468652066756e64732066697273740000000000000000000000604482015290519081900360640190fd5b6003546001600160a01b0316156110405760408051600160e51b62461bcd02815260206004820152601860248201527f44657374726f7920546f75726e616d656e742066697273740000000000000000604482015290519081900360640190fd5b33ff5b6000546001600160a01b031633146110935760408051600160e51b62461bcd0281526020600482015260086024820152600160c01b674f6e6c792043454f02604482015290519081900360640190fd5b61109c81612296565b610ebd81612310565b60408051600160e01b63430c20810281523360048201526024810183905290518291730d8c864da1985525e0af0acbeef6562881827bd59163430c208191604480820192602092909190829003018186803b15801561110357600080fd5b505afa158015611117573d6000803e3d6000fd5b505050506040513d602081101561112d57600080fd5b50516111835760408051600160e51b62461bcd02815260206004820152601960248201527f4d7573742062652057697a61726420636f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b600061118e34611d3f565b9050600061119b8261223a565b60035460408051600160e01b638baecc210281526004810188905290519293506001600160a01b0390911691638baecc21918491602480830192600092919082900301818588803b1580156111ef57600080fd5b505af1158015611203573d6000803e3d6000fd5b505050505050505050565b60408051600160e01b63430c20810281523360048201526024810184905290518391730d8c864da1985525e0af0acbeef6562881827bd59163430c208191604480820192602092909190829003018186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d602081101561129657600080fd5b50516112ec5760408051600160e51b62461bcd02815260206004820152601960248201527f4d7573742062652057697a61726420636f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b60ff8216158015906113025750600460ff831611155b6113565760408051600160e51b62461bcd02815260206004820152601c60248201527f4d7573742063686f6f736520612076616c696420616666696e69747900000000604482015290519081900360640190fd5b60408051600160e21b632635e9050281526004810185905260ff841660248201529051730d8c864da1985525e0af0acbeef6562881827bd5916398d7a41491604480830192600092919082900301818387803b1580156113b557600080fd5b505af11580156113c9573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b031633146114225760408051600160e51b62461bcd0281526020600482015260086024820152600160c01b674f6e6c7920434f4f02604482015290519081900360640190fd5b6003546001600160a01b0316156114835760408051600160e51b62461bcd02815260206004820152601d60248201527f546f75726e616d656e7420616c72656164792072656769737465726564000000604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0383169081179091551580159061152f575060035460408051600160e01b6301ffc9a7028152600160e31b6317a0b21302600482015290516001600160a01b03909216916301ffc9a791602480820192602092909190829003018186803b15801561150257600080fd5b505afa158015611516573d6000803e3d6000fd5b505050506040513d602081101561152c57600080fd5b50515b6115835760408051600160e51b62461bcd02815260206004820152601260248201527f496e76616c696420546f75726e616d656e740000000000000000000000000000604482015290519081900360640190fd5b600360009054906101000a90046001600160a01b03166001600160a01b031663ad81e4d66040518163ffffffff1660e01b815260040160206040518083038186803b1580156115d157600080fd5b505afa1580156115e5573d6000803e3d6000fd5b505050506040513d60208110156115fb57600080fd5b505160048190556103e81015610ebd5760408051600160e51b62461bcd02815260206004820152601460248201527f506f776572207363616c6520746f6f2068696768000000000000000000000000604482015290519081900360640190fd5b6000546001600160a01b031633146116ab5760408051600160e51b62461bcd0281526020600482015260086024820152600160c01b674f6e6c792043454f02604482015290519081900360640190fd5b6116b481612296565b600154604080516001600160a01b039283168152918316602083015280517f1cd3afc04e6ae479d2b9f74533351b52218c5b2ae4f847f681a5eac514fe11849281900390910190a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b60045490565b6001546001600160a01b031681565b6005546001600160601b0380821691600160601b810490911690600160c01b900463ffffffff1683565b6001546001600160a01b031633146117ad5760408051600160e51b62461bcd0281526020600482015260086024820152600160c01b674f6e6c7920434f4f02604482015290519081900360640190fd5b6003546001600160a01b03161561190657600360009054906101000a90046001600160a01b03166001600160a01b03166322f3e2d46040518163ffffffff1660e01b815260040160206040518083038186803b15801561180c57600080fd5b505afa158015611820573d6000803e3d6000fd5b505050506040513d602081101561183657600080fd5b50511561188d5760408051600160e51b62461bcd02815260206004820152601160248201527f546f75726e616d656e7420616374697665000000000000000000000000000000604482015290519081900360640190fd5b600360009054906101000a90046001600160a01b03166001600160a01b03166383197ef06040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156118dd57600080fd5b505af11580156118f1573d6000803e3d6000fd5b5050600380546001600160a01b031916905550505b565b730d8c864da1985525e0af0acbeef6562881827bd581565b606060008060606119308561237a565b925092509250823410156119865760408051600160e51b62461bcd0281526020600482015260126024820152600160701b71496e73756666696369656e742066756e647302604482015290519081900360640190fd5b604051600160e21b63157f6fbb0281523360448201819052606060048301908152835160648401528351730d8c864da1985525e0af0acbeef6562881827bd5936355fdbeec9386938b9391929091829160248101916084909101906020808901910280838360005b83811015611a065781810151838201526020016119ee565b50505050905001838103825285818151815260200191508051906020019060200280838360005b83811015611a45578181015183820152602001611a2d565b5050505090500195505050505050600060405180830381600087803b158015611a6d57600080fd5b505af1158015611a81573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611aaa57600080fd5b810190808051600160201b811115611ac157600080fd5b82016020810184811115611ad457600080fd5b81518560208202830111600160201b82111715611af057600080fd5b505060035460408051600160e01b63b9d95abb02815260048101918252835160448201528351939a506001600160a01b03909216955063b9d95abb94508793508992879282916024820191606401906020808801910280838360005b83811015611b64578181015183820152602001611b4c565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015611ba3578181015183820152602001611b8b565b505050509050019450505050506000604051808303818588803b158015611bc957600080fd5b505af1158015611bdd573d6000803e3d6000fd5b5050505050611beb3361224d565b15611d2e5760005b8451811015611d2c576000336001600160a01b031663150b7a02336000898681518110611c1c57fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b0316815260200182815260200180602001828103825260008152602001602001945050505050602060405180830381600087803b158015611ca057600080fd5b505af1158015611cb4573d6000803e3d6000fd5b505050506040513d6020811015611cca57600080fd5b505190506001600160e01b03198116600160e11b630a85bd010214611d2357604051600160e51b62461bcd02815260040180806020018281038252602c815260200180612519602c913960400191505060405180910390fd5b50600101611bf3565b505b611d3783612253565b505050919050565b6103e8900490565b606080606060006001600160a01b031663476c4a5e86866040518363ffffffff1660e01b815260040180806020018281038252848482818152602001925060200280828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015611dc257600080fd5b505af1158015611dd6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526060811015611dff57600080fd5b810190808051600160201b811115611e1657600080fd5b82016020810184811115611e2957600080fd5b81518560208202830111600160201b82111715611e4557600080fd5b50509291906020018051600160201b811115611e6057600080fd5b82016020810184811115611e7357600080fd5b81518560208202830111600160201b82111715611e8f57600080fd5b50509291906020018051600160201b811115611eaa57600080fd5b82016020810184811115611ebd57600080fd5b81518560208202830111600160201b82111715611ed957600080fd5b50509291905050509250925092506000809050600084600081518110611efb57fe5b6020026020010151905060608451604051908082528060200260200182016040528015611f32578160200160208202803883390190505b50905060005b855181101561201857826001600160a01b0316878281518110611f5757fe5b60200260200101516001600160a01b031614611fbd5760408051600160e51b62461bcd02815260206004820181905260248201527f416c6c2057697a61726473206d75737420686176652073616d65206f776e6572604482015290519081900360640190fd5b858181518110611fc957fe5b6020026020010151828281518110611fdd57fe5b60200260200101906001600160581b031690816001600160581b03168152505061200c82828151811061098057fe5b90930192600101611f38565b50604051600160e01b639d1580230281526001600160a01b038316606482015260806004820190815260848201899052730d8c864da1985525e0af0acbeef6562881827bd591639d158023918b918b9186918a91899181906024810190604481019060a4018960208a02808284376000838201819052601f909101601f19169092018681038552895181528951602091820193828c0193509102908190849084905b838110156120d25781810151838201526020016120ba565b50505050905001848103825286818151815260200191508051906020019060200280838360005b838110156121115781810151838201526020016120f9565b5050505090500198505050505050505050600060405180830381600087803b15801561213c57600080fd5b505af1158015612150573d6000803e3d6000fd5b505060035460408051600160e01b63b9d95abb02815260048101918252604481018c90526001600160a01b03909216935063b9d95abb925086918c918c91879190819060248101906064018660208702808284376000838201819052601f909101601f1916909201858103845286518152865160209182019382890193509102908190849084905b838110156121f05781810151838201526020016121d8565b50505050905001955050505050506000604051808303818588803b15801561221757600080fd5b505af115801561222b573d6000803e3d6000fd5b50505050505050505050505050565b6004546001600160581b03821602919050565b3b151590565b348190036125e43a0281111561229257604051339082156108fc029083906000818181858888f19350505050158015612290573d6000803e3d6000fd5b505b5050565b6001600160a01b038116158015906122bc57506000546001600160a01b03828116911614155b610ebd5760408051600160e51b62461bcd02815260206004820152601360248201527f496e76616c69642043454f206164647265737300000000000000000000000000604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f9d05f170f1d545b1aa21c4a4f79f17ff737f5f020ea1b333d88f29f0bbfa9fc69281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b600554815160408051828152602080840282010190915260009283926060926001600160601b0380841693600160601b810490911692600160c01b90910463ffffffff16919080156123d6578160200160208202803883390190505b50935060005b87518110156124d65760008882815181106123f357fe5b6020026020010151905060008060ff168260ff161180156124185750600460ff831611155b6124625760408051600160e51b62461bcd0281526020600482015260106024820152600160801b6f496e76616c696420616666696e69747902604482015290519081900360640190fd5b60ff821660011415612475575084612482565b50620186a0838502048401935b61248b81611d3f565b87848151811061249757fe5b60200260200101906001600160581b031690816001600160581b0316815250506124c687848151811061098057fe5b98019790960195506001016123dc565b5050600580546001600160601b03909216600160601b0277ffffffffffffffffffffffff0000000000000000000000001990921691909117905550919390925056fe436f6e7472616374206f776e6572206469646e27742061636365707420455243373231207472616e73666572a165627a7a72305820ba3368783d58445cfa9dcff4274ab528423d2cd8e2b2937dc1ade7150f362dc90029000000000000000000000000d880d895ce716afc1e5e21cb901b5093701842e4000000000000000000000000c09f4f0eae0b92ec1e3d93baeac46d8a5391483b00000000000000000000000000000000000000000000000000f8b0a10e470000000000000000000000000000000000000000000000000000105e7bea83b0908e0000000000000000000000000000000000000000000000000000000000000082
Deployed Bytecode
0x6080604052600436106101405760003560e01c80638baecc21116100b6578063b83a0c441161006f578063b83a0c4414610509578063b95dbeb61461054e578063c9eb068b14610563578063ce6991fd14610578578063e5a604bf14610669578063f4038ec7146106af57610140565b80638baecc211461042957806398d7a414146104465780639934d7c3146104795780639986a0c6146104ac578063a60a9159146104df578063b047fb50146104f457610140565b80632d46ed56116101085780632d46ed56146103645780633ccfd60b1461039757806352a71ac9146103ac578063573f322f146103c157806383197ef0146103e157806388975198146103f657610140565b80630519ce79146101ad5780630a0f8168146101de5780630cff2fd0146101f35780631e0197e21461030a5780632b81860b1461031f575b33158061015757506003546001600160a01b031633145b6101ab5760408051600160e51b62461bcd02815260206004820152601e60248201527f446f6e27742073656e642066756e647320746f20476174654b65657065720000604482015290519081900360640190fd5b005b3480156101b957600080fd5b506101c261072a565b604080516001600160a01b039092168252519081900360200190f35b3480156101ea57600080fd5b506101c2610739565b6101ab6004803603608081101561020957600080fd5b810190602081018135600160201b81111561022357600080fd5b82018360208201111561023557600080fd5b803590602001918460208302840111600160201b8311171561025657600080fd5b919390929091602081019035600160201b81111561027357600080fd5b82018360208201111561028557600080fd5b803590602001918460208302840111600160201b831117156102a657600080fd5b919390929091602081019035600160201b8111156102c357600080fd5b8201836020820111156102d557600080fd5b803590602001918460208302840111600160201b831117156102f657600080fd5b9193509150356001600160a01b0316610748565b34801561031657600080fd5b506101c2610d5b565b34801561032b57600080fd5b506103526004803603602081101561034257600080fd5b50356001600160581b0316610d6a565b60408051918252519081900360200190f35b34801561037057600080fd5b506101ab6004803603602081101561038757600080fd5b50356001600160a01b0316610d7d565b3480156103a357600080fd5b506101ab610e40565b3480156103b857600080fd5b506101c2610ec0565b610352600480360360208110156103d757600080fd5b503560ff16610ec5565b3480156103ed57600080fd5b506101ab610f38565b34801561040257600080fd5b506101ab6004803603602081101561041957600080fd5b50356001600160a01b0316611043565b6101ab6004803603602081101561043f57600080fd5b50356110a5565b34801561045257600080fd5b506101ab6004803603604081101561046957600080fd5b508035906020013560ff1661120e565b34801561048557600080fd5b506101ab6004803603602081101561049c57600080fd5b50356001600160a01b03166113d2565b3480156104b857600080fd5b506101ab600480360360208110156104cf57600080fd5b50356001600160a01b031661165b565b3480156104eb57600080fd5b5061035261171e565b34801561050057600080fd5b506101c2611724565b34801561051557600080fd5b5061051e611733565b604080516001600160601b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b34801561055a57600080fd5b506101ab61175d565b34801561056f57600080fd5b506101c2611908565b6106196004803603602081101561058e57600080fd5b810190602081018135600160201b8111156105a857600080fd5b8201836020820111156105ba57600080fd5b803590602001918460208302840111600160201b831117156105db57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611920945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561065557818101518382015260200161063d565b505050509050019250505060405180910390f35b34801561067557600080fd5b506106936004803603602081101561068c57600080fd5b5035611d3f565b604080516001600160581b039092168252519081900360200190f35b3480156106bb57600080fd5b506101ab600480360360208110156106d257600080fd5b810190602081018135600160201b8111156106ec57600080fd5b8201836020820111156106fe57600080fd5b803590602001918460208302840111600160201b8311171561071f57600080fd5b509092509050611d47565b6002546001600160a01b031681565b6000546001600160a01b031681565b6001546001600160a01b031633146107985760408051600160e51b62461bcd0281526020600482015260086024820152600160c01b674f6e6c7920434f4f02604482015290519081900360640190fd5b85841480156107a657508382145b6107fa5760408051600160e51b62461bcd02815260206004820152601e60248201527f496e636f6e73697374656e7420706172616d65746572206c656e677468730000604482015290519081900360640190fd5b604080518581526020808702820101909152600090819060609087801561082b578160200160208202803883390190505b50905060005b8781101561099a57600487878381811061084757fe5b9050602002013560ff1660ff1611156108a05760408051600160e51b62461bcd0281526020600482015260106024820152600160801b6f496e76616c696420616666696e69747902604482015290519081900360640190fd5b600160581b8989838181106108b157fe5b905060200201351061090d5760408051600160e51b62461bcd02815260206004820152601360248201527f496e76616c696420706f776572206c6576656c00000000000000000000000000604482015290519081900360640190fd5b88888281811061091957fe5b9050602002013582828151811061092c57fe5b60200260200101906001600160581b031690816001600160581b031681525050600061096a83838151811061095d57fe5b6020026020010151610d6a565b9050808501945061098d83838151811061098057fe5b602002602001015161223a565b9093019250600101610831565b50823410156109eb5760408051600160e51b62461bcd0281526020600482015260126024820152600160701b71496e73756666696369656e742066756e647302604482015290519081900360640190fd5b730d8c864da1985525e0af0acbeef6562881827bd56001600160a01b0316639d1580238b8b848a8a8a6040518763ffffffff1660e01b815260040180806020018060200180602001856001600160a01b03166001600160a01b0316815260200184810384528a8a828181526020019250602002808284376000838201819052601f909101601f191690920186810385528a5181528a51602091820193828d0193509102908190849084905b83811015610aae578181015183820152602001610a96565b505050509050018481038252878782818152602001925060200280828437600081840152601f19601f8201169050808301925050509950505050505050505050600060405180830381600087803b158015610b0857600080fd5b505af1158015610b1c573d6000803e3d6000fd5b505060035460408051600160e01b63b9d95abb02815260048101918252604481018e90526001600160a01b03909216935063b9d95abb925085918e918e91879190819060248101906064018660208702808284376000838201819052601f909101601f1916909201858103845286518152865160209182019382890193509102908190849084905b83811015610bbc578181015183820152602001610ba4565b50505050905001955050505050506000604051808303818588803b158015610be357600080fd5b505af1158015610bf7573d6000803e3d6000fd5b5050505050610c058461224d565b15610d465760005b89811015610d44576000856001600160a01b031663150b7a023360008f8f87818110610c3557fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b0316815260200182815260200180602001828103825260008152602001602001945050505050602060405180830381600087803b158015610cb857600080fd5b505af1158015610ccc573d6000803e3d6000fd5b505050506040513d6020811015610ce257600080fd5b505190506001600160e01b03198116600160e11b630a85bd010214610d3b57604051600160e51b62461bcd02815260040180806020018281038252602c815260200180612519602c913960400191505060405180910390fd5b50600101610c0d565b505b610d4f83612253565b50505050505050505050565b6003546001600160a01b031681565b6001600160581b0381166103e802919050565b6000546001600160a01b03163314610dcd5760408051600160e51b62461bcd0281526020600482015260086024820152600160c01b674f6e6c792043454f02604482015290519081900360640190fd5b610dd681612296565b600254604080516001600160a01b039283168152918316602083015280517fe1033d3cc535efc343c53636bdc05c52a44d9e70b089d4ad6e974379f2c651d69281900390910190a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314610e905760408051600160e51b62461bcd0281526020600482015260086024820152600160c01b674f6e6c792043464f02604482015290519081900360640190fd5b6040513390303180156108fc02916000818181858888f19350505050158015610ebd573d6000803e3d6000fd5b50565b600081565b60408051600180825281830190925260009160609190602080830190803883390190505090508281600081518110610ef957fe5b602002602001019060ff16908160ff16815250506060610f1882611920565b905080600081518110610f2757fe5b602002602001015192505050919050565b6001546001600160a01b03163314610f885760408051600160e51b62461bcd0281526020600482015260086024820152600160c01b674f6e6c7920434f4f02604482015290519081900360640190fd5b303115610fdf5760408051600160e51b62461bcd02815260206004820152601560248201527f447261696e207468652066756e64732066697273740000000000000000000000604482015290519081900360640190fd5b6003546001600160a01b0316156110405760408051600160e51b62461bcd02815260206004820152601860248201527f44657374726f7920546f75726e616d656e742066697273740000000000000000604482015290519081900360640190fd5b33ff5b6000546001600160a01b031633146110935760408051600160e51b62461bcd0281526020600482015260086024820152600160c01b674f6e6c792043454f02604482015290519081900360640190fd5b61109c81612296565b610ebd81612310565b60408051600160e01b63430c20810281523360048201526024810183905290518291730d8c864da1985525e0af0acbeef6562881827bd59163430c208191604480820192602092909190829003018186803b15801561110357600080fd5b505afa158015611117573d6000803e3d6000fd5b505050506040513d602081101561112d57600080fd5b50516111835760408051600160e51b62461bcd02815260206004820152601960248201527f4d7573742062652057697a61726420636f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b600061118e34611d3f565b9050600061119b8261223a565b60035460408051600160e01b638baecc210281526004810188905290519293506001600160a01b0390911691638baecc21918491602480830192600092919082900301818588803b1580156111ef57600080fd5b505af1158015611203573d6000803e3d6000fd5b505050505050505050565b60408051600160e01b63430c20810281523360048201526024810184905290518391730d8c864da1985525e0af0acbeef6562881827bd59163430c208191604480820192602092909190829003018186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d602081101561129657600080fd5b50516112ec5760408051600160e51b62461bcd02815260206004820152601960248201527f4d7573742062652057697a61726420636f6e74726f6c6c657200000000000000604482015290519081900360640190fd5b60ff8216158015906113025750600460ff831611155b6113565760408051600160e51b62461bcd02815260206004820152601c60248201527f4d7573742063686f6f736520612076616c696420616666696e69747900000000604482015290519081900360640190fd5b60408051600160e21b632635e9050281526004810185905260ff841660248201529051730d8c864da1985525e0af0acbeef6562881827bd5916398d7a41491604480830192600092919082900301818387803b1580156113b557600080fd5b505af11580156113c9573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b031633146114225760408051600160e51b62461bcd0281526020600482015260086024820152600160c01b674f6e6c7920434f4f02604482015290519081900360640190fd5b6003546001600160a01b0316156114835760408051600160e51b62461bcd02815260206004820152601d60248201527f546f75726e616d656e7420616c72656164792072656769737465726564000000604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0383169081179091551580159061152f575060035460408051600160e01b6301ffc9a7028152600160e31b6317a0b21302600482015290516001600160a01b03909216916301ffc9a791602480820192602092909190829003018186803b15801561150257600080fd5b505afa158015611516573d6000803e3d6000fd5b505050506040513d602081101561152c57600080fd5b50515b6115835760408051600160e51b62461bcd02815260206004820152601260248201527f496e76616c696420546f75726e616d656e740000000000000000000000000000604482015290519081900360640190fd5b600360009054906101000a90046001600160a01b03166001600160a01b031663ad81e4d66040518163ffffffff1660e01b815260040160206040518083038186803b1580156115d157600080fd5b505afa1580156115e5573d6000803e3d6000fd5b505050506040513d60208110156115fb57600080fd5b505160048190556103e81015610ebd5760408051600160e51b62461bcd02815260206004820152601460248201527f506f776572207363616c6520746f6f2068696768000000000000000000000000604482015290519081900360640190fd5b6000546001600160a01b031633146116ab5760408051600160e51b62461bcd0281526020600482015260086024820152600160c01b674f6e6c792043454f02604482015290519081900360640190fd5b6116b481612296565b600154604080516001600160a01b039283168152918316602083015280517f1cd3afc04e6ae479d2b9f74533351b52218c5b2ae4f847f681a5eac514fe11849281900390910190a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b60045490565b6001546001600160a01b031681565b6005546001600160601b0380821691600160601b810490911690600160c01b900463ffffffff1683565b6001546001600160a01b031633146117ad5760408051600160e51b62461bcd0281526020600482015260086024820152600160c01b674f6e6c7920434f4f02604482015290519081900360640190fd5b6003546001600160a01b03161561190657600360009054906101000a90046001600160a01b03166001600160a01b03166322f3e2d46040518163ffffffff1660e01b815260040160206040518083038186803b15801561180c57600080fd5b505afa158015611820573d6000803e3d6000fd5b505050506040513d602081101561183657600080fd5b50511561188d5760408051600160e51b62461bcd02815260206004820152601160248201527f546f75726e616d656e7420616374697665000000000000000000000000000000604482015290519081900360640190fd5b600360009054906101000a90046001600160a01b03166001600160a01b03166383197ef06040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156118dd57600080fd5b505af11580156118f1573d6000803e3d6000fd5b5050600380546001600160a01b031916905550505b565b730d8c864da1985525e0af0acbeef6562881827bd581565b606060008060606119308561237a565b925092509250823410156119865760408051600160e51b62461bcd0281526020600482015260126024820152600160701b71496e73756666696369656e742066756e647302604482015290519081900360640190fd5b604051600160e21b63157f6fbb0281523360448201819052606060048301908152835160648401528351730d8c864da1985525e0af0acbeef6562881827bd5936355fdbeec9386938b9391929091829160248101916084909101906020808901910280838360005b83811015611a065781810151838201526020016119ee565b50505050905001838103825285818151815260200191508051906020019060200280838360005b83811015611a45578181015183820152602001611a2d565b5050505090500195505050505050600060405180830381600087803b158015611a6d57600080fd5b505af1158015611a81573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611aaa57600080fd5b810190808051600160201b811115611ac157600080fd5b82016020810184811115611ad457600080fd5b81518560208202830111600160201b82111715611af057600080fd5b505060035460408051600160e01b63b9d95abb02815260048101918252835160448201528351939a506001600160a01b03909216955063b9d95abb94508793508992879282916024820191606401906020808801910280838360005b83811015611b64578181015183820152602001611b4c565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015611ba3578181015183820152602001611b8b565b505050509050019450505050506000604051808303818588803b158015611bc957600080fd5b505af1158015611bdd573d6000803e3d6000fd5b5050505050611beb3361224d565b15611d2e5760005b8451811015611d2c576000336001600160a01b031663150b7a02336000898681518110611c1c57fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b0316815260200182815260200180602001828103825260008152602001602001945050505050602060405180830381600087803b158015611ca057600080fd5b505af1158015611cb4573d6000803e3d6000fd5b505050506040513d6020811015611cca57600080fd5b505190506001600160e01b03198116600160e11b630a85bd010214611d2357604051600160e51b62461bcd02815260040180806020018281038252602c815260200180612519602c913960400191505060405180910390fd5b50600101611bf3565b505b611d3783612253565b505050919050565b6103e8900490565b606080606060006001600160a01b031663476c4a5e86866040518363ffffffff1660e01b815260040180806020018281038252848482818152602001925060200280828437600081840152601f19601f8201169050808301925050509350505050600060405180830381600087803b158015611dc257600080fd5b505af1158015611dd6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526060811015611dff57600080fd5b810190808051600160201b811115611e1657600080fd5b82016020810184811115611e2957600080fd5b81518560208202830111600160201b82111715611e4557600080fd5b50509291906020018051600160201b811115611e6057600080fd5b82016020810184811115611e7357600080fd5b81518560208202830111600160201b82111715611e8f57600080fd5b50509291906020018051600160201b811115611eaa57600080fd5b82016020810184811115611ebd57600080fd5b81518560208202830111600160201b82111715611ed957600080fd5b50509291905050509250925092506000809050600084600081518110611efb57fe5b6020026020010151905060608451604051908082528060200260200182016040528015611f32578160200160208202803883390190505b50905060005b855181101561201857826001600160a01b0316878281518110611f5757fe5b60200260200101516001600160a01b031614611fbd5760408051600160e51b62461bcd02815260206004820181905260248201527f416c6c2057697a61726473206d75737420686176652073616d65206f776e6572604482015290519081900360640190fd5b858181518110611fc957fe5b6020026020010151828281518110611fdd57fe5b60200260200101906001600160581b031690816001600160581b03168152505061200c82828151811061098057fe5b90930192600101611f38565b50604051600160e01b639d1580230281526001600160a01b038316606482015260806004820190815260848201899052730d8c864da1985525e0af0acbeef6562881827bd591639d158023918b918b9186918a91899181906024810190604481019060a4018960208a02808284376000838201819052601f909101601f19169092018681038552895181528951602091820193828c0193509102908190849084905b838110156120d25781810151838201526020016120ba565b50505050905001848103825286818151815260200191508051906020019060200280838360005b838110156121115781810151838201526020016120f9565b5050505090500198505050505050505050600060405180830381600087803b15801561213c57600080fd5b505af1158015612150573d6000803e3d6000fd5b505060035460408051600160e01b63b9d95abb02815260048101918252604481018c90526001600160a01b03909216935063b9d95abb925086918c918c91879190819060248101906064018660208702808284376000838201819052601f909101601f1916909201858103845286518152865160209182019382890193509102908190849084905b838110156121f05781810151838201526020016121d8565b50505050905001955050505050506000604051808303818588803b15801561221757600080fd5b505af115801561222b573d6000803e3d6000fd5b50505050505050505050505050565b6004546001600160581b03821602919050565b3b151590565b348190036125e43a0281111561229257604051339082156108fc029083906000818181858888f19350505050158015612290573d6000803e3d6000fd5b505b5050565b6001600160a01b038116158015906122bc57506000546001600160a01b03828116911614155b610ebd5760408051600160e51b62461bcd02815260206004820152601360248201527f496e76616c69642043454f206164647265737300000000000000000000000000604482015290519081900360640190fd5b600054604080516001600160a01b039283168152918316602083015280517f9d05f170f1d545b1aa21c4a4f79f17ff737f5f020ea1b333d88f29f0bbfa9fc69281900390910190a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b600554815160408051828152602080840282010190915260009283926060926001600160601b0380841693600160601b810490911692600160c01b90910463ffffffff16919080156123d6578160200160208202803883390190505b50935060005b87518110156124d65760008882815181106123f357fe5b6020026020010151905060008060ff168260ff161180156124185750600460ff831611155b6124625760408051600160e51b62461bcd0281526020600482015260106024820152600160801b6f496e76616c696420616666696e69747902604482015290519081900360640190fd5b60ff821660011415612475575084612482565b50620186a0838502048401935b61248b81611d3f565b87848151811061249757fe5b60200260200101906001600160581b031690816001600160581b0316815250506124c687848151811061098057fe5b98019790960195506001016123dc565b5050600580546001600160601b03909216600160601b0277ffffffffffffffffffffffff0000000000000000000000001990921691909117905550919390925056fe436f6e7472616374206f776e6572206469646e27742061636365707420455243373231207472616e73666572a165627a7a72305820ba3368783d58445cfa9dcff4274ab528423d2cd8e2b2937dc1ade7150f362dc90029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d880d895ce716afc1e5e21cb901b5093701842e4000000000000000000000000c09f4f0eae0b92ec1e3d93baeac46d8a5391483b00000000000000000000000000000000000000000000000000f8b0a10e470000000000000000000000000000000000000000000000000000105e7bea83b0908e0000000000000000000000000000000000000000000000000000000000000082
-----Decoded View---------------
Arg [0] : setCooAddress (address): 0xD880d895Ce716AfC1E5e21cb901b5093701842e4
Arg [1] : setCfoAddress (address): 0xc09F4f0eAE0B92ec1e3D93BAeac46D8a5391483B
Arg [2] : setNeutralWizardCost (uint256): 70000000000000000
Arg [3] : setElementalWizardCost (uint256): 1179516399579598990
Arg [4] : setElementalWizardIncrement (uint256): 130
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000d880d895ce716afc1e5e21cb901b5093701842e4
Arg [1] : 000000000000000000000000c09f4f0eae0b92ec1e3d93baeac46d8a5391483b
Arg [2] : 00000000000000000000000000000000000000000000000000f8b0a10e470000
Arg [3] : 000000000000000000000000000000000000000000000000105e7bea83b0908e
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000082
Deployed Bytecode Sourcemap
21045:20160:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24392:10;:37;;:74;;-1:-1:-1;24455:10:0;;-1:-1:-1;;;;;24455:10:0;24433;:33;24392:74;24384:117;;;;;-1:-1:-1;;;;;24384:117:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21045:20160;13236:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13236:33:0;;;:::i;:::-;;;;-1:-1:-1;;;;;13236:33:0;;;;;;;;;;;;;;12618:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12618:25:0;;;:::i;30294:2261::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;30294:2261:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;30294:2261:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30294:2261:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30294:2261:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;30294:2261:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30294:2261:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30294:2261:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;30294:2261:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30294:2261:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30294:2261:0;;-1:-1:-1;30294:2261:0;-1:-1:-1;30294:2261:0;-1:-1:-1;;;;;30294:2261:0;;:::i;21204:37::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21204:37:0;;;:::i;38606:119::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38606:119:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38606:119:0;-1:-1:-1;;;;;38606:119:0;;:::i;:::-;;;;;;;;;;;;;;;;15842:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15842:181:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15842:181:0;-1:-1:-1;;;;;15842:181:0;;:::i;39210:251::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39210:251:0;;;:::i;21531:90::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21531:90:0;;;:::i;26740:276::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26740:276:0;;;;:::i;39624:233::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39624:233:0;;;:::i;14929:121::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14929:121:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14929:121:0;-1:-1:-1;;;;;14929:121:0;;:::i;37027:517::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37027:517:0;;:::i;37826:360::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37826:360:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37826:360:0;;;;;;;;;:::i;25299:518::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25299:518:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25299:518:0;-1:-1:-1;;;;;25299:518:0;;:::i;15518:173::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15518:173:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15518:173:0;-1:-1:-1;;;;;15518:173:0;;:::i;21912:113::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21912:113:0;;;:::i;13008:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13008:25:0;;;:::i;23064:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23064:30:0;;;:::i;:::-;;;;-1:-1:-1;;;;;23064:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39932:275;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39932:275:0;;;:::i;21360:125::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21360:125:0;;;:::i;27847:1576::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27847:1576:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;27847:1576:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;27847:1576:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27847:1576:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;27847:1576:0;;-1:-1:-1;27847:1576:0;;-1:-1:-1;;;;;27847:1576:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27847:1576:0;;;;;;;;;;;;;;;;;38377:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38377:126:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38377:126:0;;:::i;:::-;;;;-1:-1:-1;;;;;38377:126:0;;;;;;;;;;;;;;35549:1301;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35549:1301:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;35549:1301:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;35549:1301:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;35549:1301:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;35549:1301:0;;-1:-1:-1;35549:1301:0;-1:-1:-1;35549:1301:0;:::i;13236:33::-;;;-1:-1:-1;;;;;13236:33:0;;:::o;12618:25::-;;;-1:-1:-1;;;;;12618:25:0;;:::o;30294:2261::-;14389:10;;-1:-1:-1;;;;;14389:10:0;14375;:24;14367:45;;;;;-1:-1:-1;;;;;14367:45:0;;;;;;;;;;;;-1:-1:-1;;;;;14367:45:0;;;;;;;;;;;;;;;30584:33;;;:71;;;;-1:-1:-1;30621:34:0;;;30584:71;30576:114;;;;;-1:-1:-1;;;;;30576:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30800:27;;;;;;;;;;;;;;;;30703:17;;;;30770:27;;30813:6;30800:27;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;30800:27:0;-1:-1:-1;30770:57:0;-1:-1:-1;30845:9:0;30840:413;30860:17;;;30840:413;;;1048:1;30907:10;;30918:1;30907:13;;;;;;;;;;;;;;;:28;;;;30899:57;;;;;-1:-1:-1;;;;;30899:57:0;;;;;;;;;;;;-1:-1:-1;;;;;30899:57:0;;;;;;;;;;;;;;;-1:-1:-1;;;30981:6:0;;30988:1;30981:9;;;;;;;;;;;;;:21;30973:53;;;;;-1:-1:-1;;;;;30973:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31065:6;;31072:1;31065:9;;;;;;;;;;;;;31041:11;31053:1;31041:14;;;;;;;;;;;;;:34;-1:-1:-1;;;;;31041:34:0;;;-1:-1:-1;;;;;31041:34:0;;;;;31090:18;31111:27;31123:11;31135:1;31123:14;;;;;;;;;;;;;;31111:11;:27::i;:::-;31090:48;;31168:10;31155:23;;;;31209:32;31226:11;31238:1;31226:14;;;;;;;;;;;;;;31209:16;:32::i;:::-;31193:48;;;;-1:-1:-1;30879:3:0;;30840:413;;;;31286:9;31273;:22;;31265:53;;;;;-1:-1:-1;;;;;31265:53:0;;;;;;;;;;;;-1:-1:-1;;;;;31265:53:0;;;;;;;;;;;;;;;21441:42;-1:-1:-1;;;;;31393:32:0;;31426:9;;31437:11;31450:10;;31462:5;31393:75;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31393:75:0;-1:-1:-1;;;;;31393:75:0;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;;;137:4;117:14;;;-1:-1;;113:30;157:16;;;31393:75:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31393:75:0;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;31393:75:0;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;31393:75:0;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31393:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;31535:10:0;;:67;;;-1:-1:-1;;;;;31535:67:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31535:10:0;;;;-1:-1:-1;31535:23:0;;-1:-1:-1;31565:12:0;;31579:9;;;;31590:11;;31535:67;;;;;;;;;31579:9;31535:67;;;;31579:9;31535:67;1:33:-1;99:1;81:16;;;74:27;;;137:4;117:14;;;-1:-1;;113:30;157:16;;;31535:67:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31535:67:0;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;31535:67:0;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31535:67:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31535:67:0;;;;;31987:17;31998:5;31987:10;:17::i;:::-;31983:350;;;32026:9;32021:301;32041:20;;;32021:301;;;32087:23;32129:5;-1:-1:-1;;;;;32113:39:0;;32153:10;32173:1;32177:9;;32187:1;32177:12;;;;;;;;;;;;;32113:81;;;;;;;;;;;;;-1:-1:-1;;;;;32113:81:0;-1:-1:-1;;;;;32113:81:0;;;;;;-1:-1:-1;;;;;32113:81:0;-1:-1:-1;;;;;32113:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32113:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32113:81:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32113:81:0;;-1:-1:-1;;;;;;;32221:36:0;;-1:-1:-1;;;;;32221:36:0;32213:93;;;;-1:-1:-1;;;;;32213:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32063:3:0;;32021:301;;;;31983:350;32521:26;32537:9;32521:15;:26::i;:::-;14423:1;;;30294:2261;;;;;;;:::o;21204:37::-;;;-1:-1:-1;;;;;21204:37:0;;:::o;38606:119::-;-1:-1:-1;;;;;38694:23:0;;21855:4;38694:23;38606:119;;;:::o;15842:181::-;14226:10;;-1:-1:-1;;;;;14226:10:0;14212;:24;14204:45;;;;;-1:-1:-1;;;;;14204:45:0;;;;;;;;;;;;-1:-1:-1;;;;;14204:45:0;;;;;;;;;;;;;;;15908:27;15928:6;15908:19;:27::i;:::-;15966:10;;15951:34;;;-1:-1:-1;;;;;15966:10:0;;;15951:34;;;;;;;;;;;;;;;;;;;;;15996:10;:19;;-1:-1:-1;;;;;;15996:19:0;-1:-1:-1;;;;;15996:19:0;;;;;;;;;;15842:181::o;39210:251::-;14552:10;;-1:-1:-1;;;;;14552:10:0;14538;:24;14530:45;;;;;-1:-1:-1;;;;;14530:45:0;;;;;;;;;;;;-1:-1:-1;;;;;14530:45:0;;;;;;;;;;;;;;;39411:42;;:10;;39439:4;39431:21;39411:42;;;;;;;;;39431:21;39411:10;:42;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39411:42:0;39210:251::o;21531:90::-;21618:1;21531:90;:::o;26740:276::-;26853:14;;;26865:1;26853:14;;;;;;;;;26805:7;;26825:25;;26853:14;;;;;;;105:10:-1;26853:14:0;88:34:-1;136:17;;-1:-1;26853:14:0;26825:42;;26896:8;26880:10;26891:1;26880:13;;;;;;;;;;;;;:24;;;;;;;;;;;26917:26;26946:30;26965:10;26946:18;:30::i;:::-;26917:59;;26996:9;27006:1;26996:12;;;;;;;;;;;;;;26989:19;;;;26740:276;;;:::o;39624:233::-;14389:10;;-1:-1:-1;;;;;14389:10:0;14375;:24;14367:45;;;;;-1:-1:-1;;;;;14367:45:0;;;;;;;;;;;;-1:-1:-1;;;;;14367:45:0;;;;;;;;;;;;;;;39687:4;39679:21;:26;39671:60;;;;;-1:-1:-1;;;;;39671:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39758:10;;-1:-1:-1;;;;;39758:10:0;39750:33;39742:70;;;;;-1:-1:-1;;;;;39742:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39838:10;39825:24;14929:121;14226:10;;-1:-1:-1;;;;;14226:10:0;14212;:24;14204:45;;;;;-1:-1:-1;;;;;14204:45:0;;;;;;;;;;;;-1:-1:-1;;;;;14204:45:0;;;;;;;;;;;;;;;14989:27;15009:6;14989:19;:27::i;:::-;15027:15;15035:6;15027:7;:15::i;37027:517::-;24095:52;;;-1:-1:-1;;;;;24095:52:0;;24126:10;24095:52;;;;;;;;;;;;37099:8;;21441:42;;24095:30;;:52;;;;;;;;;;;;;;;21441:42;24095:52;;;5:2:-1;;;;30:1;27;20:12;5:2;24095:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24095:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24095:52:0;24087:90;;;;;-1:-1:-1;;;;;24087:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37348:21;37372:22;37384:9;37372:11;:22::i;:::-;37348:46;;37405:28;37436:32;37453:14;37436:16;:32::i;:::-;37481:10;;:55;;;-1:-1:-1;;;;;37481:55:0;;;;;;;;;;37405:63;;-1:-1:-1;;;;;;37481:10:0;;;;:17;;37405:63;;37481:55;;;;;:10;;:55;;;;;;;37405:63;37481:10;:55;;;5:2:-1;;;;30:1;27;20:12;5:2;37481:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37481:55:0;;;;;24188:1;;37027:517;;:::o;37826:360::-;24095:52;;;-1:-1:-1;;;;;24095:52:0;;24126:10;24095:52;;;;;;;;;;;;37914:8;;21441:42;;24095:30;;:52;;;;;;;;;;;;;;;21441:42;24095:52;;;5:2:-1;;;;30:1;27;20:12;5:2;24095:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24095:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24095:52:0;24087:90;;;;;-1:-1:-1;;;;;24087:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37943:28;;;;;;;:58;;-1:-1:-1;1048:1:0;37975:26;;;;;37943:58;37935:99;;;;;-1:-1:-1;;;;;37935:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;38131:47;;;-1:-1:-1;;;;;38131:47:0;;;;;;;;;;;;;;;;;21441:42;;38131:24;;:47;;;;;-1:-1:-1;;38131:47:0;;;;;;;-1:-1:-1;21441:42:0;38131:47;;;5:2:-1;;;;30:1;27;20:12;5:2;38131:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38131:47:0;;;;37826:360;;;:::o;25299:518::-;14389:10;;-1:-1:-1;;;;;14389:10:0;14375;:24;14367:45;;;;;-1:-1:-1;;;;;14367:45:0;;;;;;;;;;;;-1:-1:-1;;;;;14367:45:0;;;;;;;;;;;;;;;25394:10;;-1:-1:-1;;;;;25394:10:0;25386:33;25378:75;;;;;-1:-1:-1;;;;;25378:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25464:10;:47;;-1:-1:-1;;;;;;25464:47:0;-1:-1:-1;;;;;25464:47:0;;;;;;;;25545:27;;;;25544:100;;-1:-1:-1;25590:10:0;;:54;;;-1:-1:-1;;;;;25590:54:0;;-1:-1:-1;;;;;25590:54:0;;;;;;-1:-1:-1;;;;;25590:10:0;;;;:28;;:54;;;;;;;;;;;;;;;:10;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;25590:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25590:54:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25590:54:0;25544:100;25522:145;;;;;-1:-1:-1;;;;;25522:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25703:10;;;;;;;;;-1:-1:-1;;;;;25703:10:0;-1:-1:-1;;;;;25703:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25703:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25703:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25703:23:0;25680:20;:46;;;21855:4;-1:-1:-1;25745:39:0;25737:72;;;;;-1:-1:-1;;;;;25737:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;15518:173;14226:10;;-1:-1:-1;;;;;14226:10:0;14212;:24;14204:45;;;;;-1:-1:-1;;;;;14204:45:0;;;;;;;;;;;;-1:-1:-1;;;;;14204:45:0;;;;;;;;;;;;;;;15576:27;15596:6;15576:19;:27::i;:::-;15634:10;;15619:34;;;-1:-1:-1;;;;;15634:10:0;;;15619:34;;;;;;;;;;;;;;;;;;;;;15664:10;:19;;-1:-1:-1;;;;;;15664:19:0;-1:-1:-1;;;;;15664:19:0;;;;;;;;;;15518:173::o;21912:113::-;21997:20;;21912:113;:::o;13008:25::-;;;-1:-1:-1;;;;;13008:25:0;;:::o;23064:30::-;;;-1:-1:-1;;;;;23064:30:0;;;;-1:-1:-1;;;23064:30:0;;;;;;-1:-1:-1;;;23064:30:0;;;;;:::o;39932:275::-;14389:10;;-1:-1:-1;;;;;14389:10:0;14375;:24;14367:45;;;;;-1:-1:-1;;;;;14367:45:0;;;;;;;;;;;;-1:-1:-1;;;;;14367:45:0;;;;;;;;;;;;;;;40001:10;;-1:-1:-1;;;;;40001:10:0;39993:33;39989:211;;40051:10;;;;;;;;;-1:-1:-1;;;;;40051:10:0;-1:-1:-1;;;;;40051:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40051:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40051:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40051:21:0;:30;40043:60;;;;;-1:-1:-1;;;;;40043:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40118:10;;;;;;;;;-1:-1:-1;;;;;40118:10:0;-1:-1:-1;;;;;40118:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40118:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;40153:10:0;:35;;-1:-1:-1;;;;;;40153:35:0;;;-1:-1:-1;;39989:211:0;39932:275::o;21360:125::-;21441:42;21360:125;:::o;27847:1576::-;27939:26;27984:17;28003:20;28025:22;28051:32;28072:10;28051:20;:32::i;:::-;27983:100;;;;;;28117:9;28104;:22;;28096:53;;;;;-1:-1:-1;;;;;28096:53:0;;;;;;;;;;;;-1:-1:-1;;;;;28096:53:0;;;;;;;;;;;;;;;28270:56;;-1:-1:-1;;;;;28270:56:0;;28315:10;28270:56;;;;;;;;;;;;;;;;;;;;;21441:42;;28270:24;;28295:6;;28303:10;;28315;;28270:56;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28270:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28270:56:0;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28270:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28270:56:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;28270:56:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;28270:56:0;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;-1:-1;;28393:10:0;;:62;;;-1:-1:-1;;;;;28393:62:0;;;;;;;;;;;;;;;;28270:56;;-1:-1:-1;;;;;;28393:10:0;;;;-1:-1:-1;28393:23:0;;-1:-1:-1;28423:12:0;;-1:-1:-1;28270:56:0;;28448:6;;28393:62;;;;;;;;;;;;;;;;;;:10;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28393:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28393:62:0;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28393:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28393:62:0;;;;;28842:22;28853:10;28842;:22::i;:::-;28838:360;;;28886:9;28881:306;28905:9;:16;28901:1;:20;28881:306;;;28947:23;28989:10;-1:-1:-1;;;;;28973:44:0;;29018:10;29038:1;29042:9;29052:1;29042:12;;;;;;;;;;;;;;28973:86;;;;;;;;;;;;;-1:-1:-1;;;;;28973:86:0;-1:-1:-1;;;;;28973:86:0;;;;;;-1:-1:-1;;;;;28973:86:0;-1:-1:-1;;;;;28973:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28973:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28973:86:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28973:86:0;;-1:-1:-1;;;;;;;29086:36:0;;-1:-1:-1;;;;;29086:36:0;29078:93;;;;-1:-1:-1;;;;;29078:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28923:3:0;;28881:306;;;;28838:360;29389:26;29405:9;29389:15;:26::i;:::-;27847:1576;;;;;;:::o;38377:126::-;21855:4;38472:22;;;38377:126::o;35549:1301::-;35991:23;36030;36069:25;21618:1;-1:-1:-1;;;;;36108:32:0;;36141:9;;36108:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;36108:43:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36108:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36108:43:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;36108:43:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;36108:43:0;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;36108:43:0;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;36108:43:0;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;0:373;;36108:43:0;;;;;;35976:175;;;;;;36164:20;36187:1;36164:24;;36199:16;36218:6;36225:1;36218:9;;;;;;;;;;;;;;36199:28;;36238:27;36281:6;:13;36268:27;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;36268:27:0;-1:-1:-1;36238:57:0;-1:-1:-1;36313:9:0;36308:249;36332:6;:13;36328:1;:17;36308:249;;;36388:8;-1:-1:-1;;;;;36375:21:0;:6;36382:1;36375:9;;;;;;;;;;;;;;-1:-1:-1;;;;;36375:21:0;;36367:66;;;;;-1:-1:-1;;;;;36367:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36472:6;36479:1;36472:9;;;;;;;;;;;;;;36448:11;36460:1;36448:14;;;;;;;;;;;;;:34;-1:-1:-1;;;;;36448:34:0;;;-1:-1:-1;;;;;36448:34:0;;;;;36513:32;36530:11;36542:1;36530:14;;;;;;;36513:32;36497:48;;;;36347:3;;36308:249;;;-1:-1:-1;36630:78:0;;-1:-1:-1;;;;;36630:78:0;;-1:-1:-1;;;;;36630:78:0;;;;;;;;;;;;;;;;;;;21441:42;;36630:32;;36663:9;;;;36674:11;;36687:10;;36699:8;;36630:78;;;;;;;;;;;;36663:9;36630:78;;;;36663:9;36630:78;1:33:-1;99:1;81:16;;;74:27;;;137:4;117:14;;;-1:-1;;113:30;157:16;;;36630:78:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36630:78:0;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36630:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36630:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36630:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;36775:10:0;;:67;;;-1:-1:-1;;;;;36775:67:0;;;;;;;;;;;;;;-1:-1:-1;;;;;36775:10:0;;;;-1:-1:-1;36775:23:0;;-1:-1:-1;36805:12:0;;36819:9;;;;36830:11;;36775:67;;;;;;;;;36819:9;36775:67;;;;36819:9;36775:67;1:33:-1;99:1;81:16;;;74:27;;;137:4;117:14;;;-1:-1;;113:30;157:16;;;36775:67:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36775:67:0;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36775:67:0;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36775:67:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36775:67:0;;;;;35549:1301;;;;;;;;:::o;38994:138::-;39104:20;;-1:-1:-1;;;;;39090:34:0;;;38994:138;;;:::o;19758:678::-;20330:20;20420:8;;;19758:678::o;40647:555::-;40729:9;:23;;;41129:8;41114:11;:24;41104:35;;41100:95;;;41156:27;;:10;;:27;;;;;41176:6;;41156:27;;;;41176:6;41156:10;:27;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41156:27:0;41100:95;40647:555;;:::o;14603:175::-;-1:-1:-1;;;;;14688:27:0;;;;;;:58;;-1:-1:-1;14736:10:0;;-1:-1:-1;;;;;14719:27:0;;;14736:10;;14719:27;;14688:58;14680:90;;;;;-1:-1:-1;;;;;14680:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;15238:129;15310:10;;15295:34;;;-1:-1:-1;;;;;15310:10:0;;;15295:34;;;;;;;;;;;;;;;;;;;;;15340:10;:19;;-1:-1:-1;;;;;;15340:19:0;-1:-1:-1;;;;;15340:19:0;;;;;;;;;;15238:129::o;32874:2296::-;33172:11;:29;33441:17;;33428:31;;;;;;;;;;;;;;;;32961:17;;;;33002:22;;-1:-1:-1;;;;;33172:29:0;;;;-1:-1:-1;;;33242:31:0;;;;;;-1:-1:-1;;;33319:36:0;;;;;;33428:31;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;33428:31:0;-1:-1:-1;33419:40:0;-1:-1:-1;33477:9:0;33472:1475;33496:10;:17;33492:1;:21;33472:1475;;;33535:14;33552:10;33563:1;33552:13;;;;;;;;;;;;;;33535:30;;33580:18;398:1;33623:25;;:8;:25;;;:52;;;;-1:-1:-1;1048:1:0;33652:23;;;;;33623:52;33615:81;;;;;-1:-1:-1;;;;;33615:81:0;;;;;;;;;;;;-1:-1:-1;;;;;33615:81:0;;;;;;;;;;;;;;;33767:27;;;550:1;33767:27;33763:754;;;-1:-1:-1;33828:17:0;33763:754;;;-1:-1:-1;22158:6:0;34433:46;;;34432:69;34409:92;;;33763:754;34545:23;34557:10;34545:11;:23::i;:::-;34533:6;34540:1;34533:9;;;;;;;;;;;;;:35;-1:-1:-1;;;;;34533:35:0;;;-1:-1:-1;;;;;34533:35:0;;;;;34870:27;34887:6;34894:1;34887:9;;;;;;;34870:27;34912:23;;;34854:43;;;;-1:-1:-1;33515:3:0;;33472:1475;;;-1:-1:-1;;35101:11:0;:61;;-1:-1:-1;;;;;35101:61:0;;;-1:-1:-1;;;35101:61:0;-1:-1:-1;;35101:61:0;;;;;;;;;-1:-1:-1;32874:2296:0;;;;-1:-1:-1;32874:2296:0:o
Swarm Source
bzzr://ba3368783d58445cfa9dcff4274ab528423d2cd8e2b2937dc1ade7150f362dc9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.