0 txs
83 calls
constructor
constructor()
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
checkIsAdmin
viewfunction checkIsAdmin(address user) view returns (bool)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getBurnNonceStatus
viewfunction getBurnNonceStatus(address controller, uint256 nonce) view returns (bool)
getController
viewfunction getController(address asset, address smartcoin) view returns (address)
getControllerCount
viewfunction getControllerCount(address smartcoin) view returns (uint256)
getControllerInfo
viewfunction getControllerInfo(address controller) view returns (tuple)
getMintNonceStatus
viewfunction getMintNonceStatus(address controller, uint256 nonce) view returns (bool)
getRewardsModule
viewfunction getRewardsModule() view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRouter
viewfunction getRouter() view returns (address)
getTreasury
viewfunction getTreasury() view returns (address)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isSigner
viewfunction isSigner(address signer) view returns (bool)
OWNER_ROLE
viewfunction OWNER_ROLE() view returns (bytes32)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
applyReward
nonpayablefunction applyReward(address to, uint256 amount) returns (uint256)
burnFee
nonpayablefunction burnFee(address from, uint256 amount)
changeSmartcoinOwner
nonpayablefunction changeSmartcoinOwner(address smartcoin, address newOwner)
createERC20Controller
nonpayablefunction createERC20Controller(address smartcoin, address asset)
createExternalController
nonpayablefunction createExternalController(address smartcoin, address asset)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _owner, address _signer, address _treasury, uint256 defaultOffset)
issueRefundFromTreasury
nonpayablefunction issueRefundFromTreasury(address asset, address to, uint256 amt)
mintSmartcoin_direct
nonpayablefunction mintSmartcoin_direct(address smartcoin, address to, uint256 amt)
removeController
nonpayablefunction removeController(address controller)
removeSmartcoinController_direct
nonpayablefunction removeSmartcoinController_direct(address smartcoin, address controller)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setBurnNonce
nonpayablefunction setBurnNonce(uint256 _nonce)
setDefaultOffset
nonpayablefunction setDefaultOffset(uint256 offset)
setMintNonce
nonpayablefunction setMintNonce(uint256 _nonce)
setOffsetOnExternalAssetController
nonpayablefunction setOffsetOnExternalAssetController(address controller, uint256 offset)
setRewardModule
nonpayablefunction setRewardModule(address rewardModule)
setRouter
nonpayablefunction setRouter(address routerAddr)
setSigner
nonpayablefunction setSigner(address signer, bool status)
setTreasury
nonpayablefunction setTreasury(address treasuryAddr)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
BurnNonceChanged
event BurnNonceChanged(address controller, uint256 nonce, bool status)
ControllerCreated
event ControllerCreated(address controller, address asset, address smartcoin, uint8 controlType)
ControllerDeleted
event ControllerDeleted(address controller, address asset, address smartcoin, uint8 controlType)
DefaultOffsetChanged
event DefaultOffsetChanged(uint256 offset)
DirectMint
event DirectMint(address smartcoin, address to, uint256 amount)
Initialized
event Initialized(uint64 version)
MintNonceChanged
event MintNonceChanged(address controller, uint256 nonce, bool status)
RefundIssued
event RefundIssued(address asset, address to, uint256 amount)
RewardsModuleChange
event RewardsModuleChange(address rewardModule)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
RouterChange
event RouterChange(address routerAddr)
SignerChanged
event SignerChanged(address signer, bool status)
TreasuryChange
event TreasuryChange(address treasuryAddr)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
ControllerDoesNotExist
error ControllerDoesNotExist()
ControllerExists
error ControllerExists(address controller)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FactoryIsNotSmartcoinOwner
error FactoryIsNotSmartcoinOwner()
FailedCall
error FailedCall()
InvalidController
error InvalidController()
InvalidInitialization
error InvalidInitialization()
NonceIsUsed
error NonceIsUsed()
NotInitializing
error NotInitializing()
RemoveControllersFirst
error RemoveControllersFirst(uint256 amountOfControllers)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60a080604052346100e857306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c166100d9576002600160401b03196001600160401b03821601610073575b6040516146e590816100ed823960805181818161171e01526117ee0152f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610054565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a714611f145750806303c3772814611e89578063084ae45714611d735780630c86269f14611c9b57806317d1a96414611c76578063248a9ca314611c575780632f2ff15d14611c2557806331cb610514611b9157806336568abe14611b4c5780633b19e84a14611b1f57806349e1c177146119bc5780634f1ef2861461177257806352d1902d1461170b57806356e28b1b146116b45780635ac430e41461163f578063649d5432146115bc5780636b409b4c1461152957806375b238fc146115015780637df73e27146114a95780637f449b291461142d5780639054aa7f1461131657806391d14854146112c0578063a217fddf146112a4578063ad3cb1cc14611248578063b0f479a114611218578063b6168f4514610f90578063b8fbbfeb14610e93578063c0d7865514610e19578063ca46d77714610db7578063cf756fdf14610ac5578063d0ee31cd146107e1578063d547741f146107a6578063d953689d14610745578063e58378bb1461071d578063f0f44260146106a6578063f538031e14610652578063f6a74ed71461039a578063f6da80851461032f578063f8f189c0146102735763fd498a13146101d6575f80fd5b34610270576040366003190112610270576101ef611f67565b6001600160a01b038116156102615760ff60406102138361020e612175565b612193565b0151161561025257604060209260ff92600861022d61222b565b019060018060a01b03165f528452815f20602435825284522054166040519015158152f35b6385e1605f60e01b8252600482fd5b63d92e233d60e01b8252600482fd5b80fd5b50346102705760403660031901126102705761028d611f67565b61029561226f565b600461029f61222b565b0160018060a01b0382165f52602052600260ff600160405f20015460a01c16036103205781906001600160a01b0316803b1561031d578180916024604051809481936312ec17f760e31b8352833560048401525af18015610312576103015750f35b8161030b91611ffd565b6102705780f35b6040513d84823e3d90fd5b50fd5b6336abb4df60e11b8252600482fd5b503461027057604036600319011261027057610349611f67565b6001600160a01b0381161561026157600461036261222b565b6001600160a01b0383165f9081529101602052604090206001015460a01c60ff161561025257604060209260ff92600761022d61222b565b5034610270576020366003190112610270576103b4611f67565b6103bc61226f565b6001600160a01b0381168015610643576103d461222b565b906103e18361020e612175565b602081018051919490916001600160a01b0316801561063457604051638da5cb5b60e01b8152602081600481855afa9081156106295788916105fa575b50306001600160a01b03909116036105eb57604086019061044260ff83511661203b565b60038110156105d757156105c85783516001600160a01b039081165f90815260068801602090815260408083208b5185168452825280832080546001600160a01b0319169055875190931682526005890190522080545f198101919082116105b457558790803b156105b0578180916044604051809481936306e045d360e31b83528b60048401528160248401525af180156103125761059b575b5050833b1561059757604051632f2770db60e01b815287908181600481838a5af180156103125761057c575b50509451915194516004957f33a67e0efc31ff811db0874f37a8637743de38e37cd64d8bda5fce65e834771a936001600160a01b03908116939261056492909116906105579060ff1661203b565b90604051948594856121f8565b0390a15f520160205280600160405f20828155015580f35b8161058a9195949395611ffd565b610597579091865f610509565b8680fd5b816105a591611ffd565b61059757865f6104dd565b5080fd5b634e487b7160e01b8a52601160045260248afd5b6385e1605f60e01b8852600488fd5b634e487b7160e01b89526021600452602489fd5b636d0bfe3360e11b8752600487fd5b61061c915060203d602011610622575b6106148183611ffd565b810190612156565b5f61041e565b503d61060a565b6040513d8a823e3d90fd5b6385e1605f60e01b8752600487fd5b63d92e233d60e01b8352600483fd5b5034610270576020366003190112610270576060610679610671611f67565b61020e612175565b6040805182516001600160a01b039081168252602080850151909116908201529181015160ff1690820152f35b5034610270576020366003190112610270576106c0611f67565b6106c86122cb565b6001600160a01b031680156102615760207f1ac54af2084ba0e4b86b7bc54b978ce7dd4ca046d3dec89d7c8963873820c0bb9161070361222b565b80546001600160a01b03191682179055604051908152a180f35b503461027057806003193601126102705760206040515f805160206146108339815191528152f35b5034610270576020366003190112610270576040610761611f67565b915f8051602061467083398151915281525f80516020614650833981519152602052209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b5034610270576040366003190112610270576107dd6004356107c6611f7d565b906107d86107d38261204a565b612327565b612588565b5080f35b5034610270576040366003190112610270576107fb611f67565b610803611f7d565b61080b61226f565b6001600160a01b0382168015610ab6576001600160a01b038216908115610aa757604051610cde8082019082821067ffffffffffffffff831117610a935760609183916126ae833930815284602082015285604082015203019086f08015610a88576001600160a01b03169161087f61222b565b5f8381526006820160208181526040808420868552909152909120549192916001600160a01b031680610a765750604051638da5cb5b60e01b8152602081600481885afa908115610a6b578991610a4c575b50306001600160a01b0390911603610a3d5790600592916040516108f481611fcd565b8281526020808201878152600160408085018281526001600160a01b038c81165f81815260048c018852848120985189549084166001600160a01b0319918216178a5596519886018054945160ff60a01b60a09190911b16999093166001600160a81b0319909416939093179790971790558a815295845280862096865295835285852080549092169093179055868352949093019093529091208054918201918210610a2957558490803b156105b0578180916044604051809481936306e045d360e31b8352886004840152600160248401525af1801561031257610a10575b5050610a0a60017f213ded03e6f74b8640decd7ac11b529c701b62f0612f2cb69e1c0f1883dfbe7194604051948594856121f8565b0390a180f35b81610a1a91611ffd565b610a2557835f6109d5565b8380fd5b634e487b7160e01b87526011600452602487fd5b636d0bfe3360e11b8852600488fd5b610a65915060203d602011610622576106148183611ffd565b5f6108d1565b6040513d8b823e3d90fd5b63266c5ed560e01b8952600452602488fd5b6040513d87823e3d90fd5b634e487b7160e01b88526041600452602488fd5b63d92e233d60e01b8552600485fd5b63d92e233d60e01b8452600484fd5b503461027057608036600319011261027057610adf611f67565b610ae7611f7d565b6044356001600160a01b038116929190839003610a25575f80516020614690833981519152549260ff8460401c16159367ffffffffffffffff811680159081610daf575b6001149081610da5575b159081610d9c575b50610d8d5767ffffffffffffffff1981166001175f805160206146908339815191525584610d61575b506001600160a01b03831615610aa7576001600160a01b03821615610aa7578015610aa75790610bf59291610b99612624565b610ba1612624565b610ba961222b565b6001600160a01b039092165f9081526009830160205260409020805460ff1916600117905581546001600160a01b031916178155606435600390910155610bef8161236d565b5061242b565b505f8051602061467083398151915282525f805160206146508339815191526020525f8051602061461083398151915260016040842001545f8051602061467083398151915284525f805160206146508339815191526020528160016040862001555f805160206146708339815191527fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff8580a45f8051602061461083398151915282525f805160206146508339815191526020525f8051602061461083398151915260016040842001548184525f80516020614650833981519152602052816001604086200155817fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff8580a4610d095780f35b68ff0000000000000000195f8051602061469083398151915254165f80516020614690833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b68ffffffffffffffffff191668010000000000000001175f80516020614690833981519152555f610b66565b63f92ee8a960e01b8652600486fd5b9050155f610b3d565b303b159150610b35565b869150610b2b565b503461027057602036600319011261027057610dd1611f67565b906001600160a01b03821615610e0a57506005610dec61222b565b019060018060a01b03165f52602052602060405f2054604051908152f35b63d92e233d60e01b8152600490fd5b503461027057602036600319011261027057610e33611f67565b610e3b6122cb565b6001600160a01b031680156102615760207f6de3ba15b1b1636d23a8c4717d891960d978488169730a76eff0bbf7379e46a3916002610e7861222b565b0180546001600160a01b03191682179055604051908152a180f35b503461027057602036600319011261027057600435610ec360ff6040610ebb3361020e612175565b01511661203b565b6003811015610f7c5715610252576007610edb61222b565b0160018060a01b0333165f5260205260405f2081835260205260ff604083205416610f6d5760607f7a6fdad150519843edd4c094099e487e92edf903341ffd44b39caaa6a5a9df46916007610f2e61222b565b0160018060a01b0333165f5260205260405f2081855260205260408420600160ff1982541617905560405190338252602082015260016040820152a180f35b6319c5590b60e21b8252600482fd5b634e487b7160e01b83526021600452602483fd5b503461027057604036600319011261027057610faa611f67565b610fb2611f7d565b610fba61226f565b6001600160a01b0382168015610ab6576001600160a01b038216908115610aa7576003610fe561222b565b015460405190611284908183019183831067ffffffffffffffff8411176112045791839160809361338c8439308252856020830152866040830152606082015203019086f08015610a88576001600160a01b03169161104261222b565b5f8381526006820160208181526040808420868552909152909120549192916001600160a01b031680610a765750604051638da5cb5b60e01b8152602081600481885afa908115610a6b5789916111e5575b50306001600160a01b0390911603610a3d5790600592916040516110b781611fcd565b8281526020808201878152600260408085019182526001600160a01b038b81165f81815260048b018752838120975188546001600160a01b031990811691851691909117895595516001988901805496516001600160a81b0319909716919094161760a09590951b60ff60a01b16949094179091558a835295845280822096825295835285812080549092169094179055868352949093019093529091208054918201918210610a2957558490803b156105b0578180916044604051809481936306e045d360e31b8352886004840152600160248401525af18015610312576111d0575b5050610a0a60027f213ded03e6f74b8640decd7ac11b529c701b62f0612f2cb69e1c0f1883dfbe7194604051948594856121f8565b816111da91611ffd565b610a2557835f61119b565b6111fe915060203d602011610622576106148183611ffd565b5f611094565b634e487b7160e01b89526041600452602489fd5b503461027057806003193601126102705760206001600160a01b03600261123d61222b565b015416604051908152f35b5034610270578060031936011261027057604080516112678282611ffd565b6005815260208101640352e302e360dc1b81528251938492602084525180928160208601528585015e828201840152601f01601f19168101030190f35b5034610270578060031936011261027057602090604051908152f35b50346102705760403660031901126102705760406112dc611f7d565b9160043581525f80516020614650833981519152602052209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b503461027057604036600319011261027057611330611f67565b90611339611f7d565b916113426122cb565b6001600160a01b0316600561135561222b565b01815f5260205260405f20548061141b5750604051638da5cb5b60e01b8152602081600481855afa9081156114105783916113f1575b50306001600160a01b03909116036113e2578192813b156113de5760405163f2fde38b60e01b81526001600160a01b0390911660048201529082908290602490829084905af18015610312576103015750f35b5050fd5b636d0bfe3360e11b8252600482fd5b61140a915060203d602011610622576106148183611ffd565b5f61138b565b6040513d85823e3d90fd5b633e3b028b60e11b8352600452602482fd5b50346102705760403660031901126102705780611448611f67565b611450611f7d565b906114596122cb565b6001600160a01b031690813b156113de576040516306e045d360e31b81526001600160a01b039091166004820152602481018390529082908290604490829084905af18015610312576103015750f35b5034610270576020366003190112610270576114c3611f67565b906001600160a01b03821615610e0a575060096114de61222b565b019060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b503461027057806003193601126102705760206040515f805160206146708339815191528152f35b50346102705760203660031901126102705760043561155160ff6040610ebb3361020e612175565b6003811015610f7c571561025257600861156961222b565b0160018060a01b0333165f5260205260405f2081835260205260ff604083205416610f6d5760607ff243ab086d8035cfff846af59001c073e3e190cb4c08954fc55f79565815e9d4916008610f2e61222b565b5034610270576020366003190112610270576115d6611f67565b6115de6122cb565b6001600160a01b031680156102615760207f99f99a4c1116645635525e3145b847bd9bdd95999a725ae3b8129a7d245b1f4491600161161b61222b565b0180546001600160a01b0319166001600160a01b038316179055604051908152a180f35b503461027057604036600319011261027057611659611f67565b9061166d60ff6040610ebb3361020e612175565b60038110156116a0571561169157602061168960243584612068565b604051908152f35b6385e1605f60e01b8152600490fd5b634e487b7160e01b82526021600452602482fd5b5034610270576020366003190112610270577fd632e5a429c46948e7091fa75f22fadda17d9dd3bd84f1232a78a65f913928e260206004356116f46122cb565b8060036116ff61222b565b0155604051908152a180f35b50346102705780600319360112610270577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036117635760206040515f805160206146308339815191528152f35b63703e46dd60e11b8152600490fd5b50604036600319011261027057611787611f67565b6024359067ffffffffffffffff82116119b857366023830112156119b857816004013590836117b58361201f565b936117c36040519586611ffd565b838552602085019336602482840101116119b857806024602093018637850101526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016308114908115611996575b50611987576118266122cb565b6040516352d1902d60e01b81526001600160a01b0382169390602081600481885afa869181611953575b5061186957634c9c8ce360e01b86526004859052602486fd5b93845f805160206146308339815191528796036119415750823b1561192f575f8051602061463083398151915280546001600160a01b031916821790558491907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a2805115611914576107dd9382915190845af43d1561190c573d916118f08361201f565b926118fe6040519485611ffd565b83523d85602085013e61264f565b60609161264f565b50505050346119205780f35b63b398979f60e01b8152600490fd5b634c9c8ce360e01b8552600452602484fd5b632a87526960e21b8652600452602485fd5b9091506020813d60201161197f575b8161196f60209383611ffd565b810103126105975751905f611850565b3d9150611962565b63703e46dd60e11b8452600484fd5b5f80516020614630833981519152546001600160a01b0316141590505f611819565b8280fd5b5034610270576119cb36611f93565b916119d46122cb565b836001600160a01b038216803b156105b0576040516306e045d360e31b815230600482015260016024820152828160448183865af1908115611410578391611b0a575b5050803b156105b0576040516340c10f1960e01b81526001600160a01b038516600482015260248101869052828160448183865af1908115611410578391611af5575b5050803b156105b0578180916044604051809481936306e045d360e31b83523060048401528160248401525af1801561031257611ae0575b5050604080516001600160a01b0392831681529290911660208301528101919091527f6510254c8dd022eafdac236bfe8cef653e25fe3933e9bb9b4be07dfd8f48c662908060608101610a0a565b81611aea91611ffd565b610a2557835f611a92565b81611aff91611ffd565b6105b057815f611a5a565b81611b1491611ffd565b6105b057815f611a17565b503461027057806003193601126102705760206001600160a01b03611b4261222b565b5416604051908152f35b503461027057604036600319011261027057611b66611f7d565b336001600160a01b03821603611b82576107dd90600435612588565b63334bd91960e11b8252600482fd5b503461027057604036600319011261027057611bab611f67565b602435908115158092036119b857611bc161226f565b6001600160a01b0316908115610643577f70f1a3dba165402559aaa92407aa69ed152f584fde0bc213bcf1c47acef771b6916040916009611c0061222b565b01825f52602052825f2060ff1981541660ff831617905582519182526020820152a180f35b5034610270576040366003190112610270576107dd600435611c45611f7d565b90611c526107d38261204a565b6124e4565b503461027057602036600319011261027057602061168960043561204a565b503461027057806003193601126102705760206001600160a01b03600161123d61222b565b5034611d4c576040366003190112611d4c57611cb5611f67565b611cc860ff6040610ebb3361020e612175565b6003811015611d5f5715611d50576001600160a01b036001611ce861222b565b015416803b15611d4c57604051630c86269f60e01b81526001600160a01b0392909216600483015260248035908301525f908290604490829084905af18015611d4157611d33575080f35b611d3f91505f90611ffd565b005b6040513d5f823e3d90fd5b5f80fd5b6385e1605f60e01b5f5260045ffd5b634e487b7160e01b5f52602160045260245ffd5b34611d4c57611d8136611f93565b91611d9560ff6040610ebb3361020e612175565b6003811015611d5f5715611d5057826020836001600160a01b03611db761222b565b546040516323b872dd60e01b815291166001600160a01b03908116600483015291821660248201526044810193909352829060649082905f9087165af18015611d4157611e4d575b50604080516001600160a01b0392831681529290911660208301528101919091527f97ded04b4dd3dab6c02011a161d44b56a32fc8dac48ee2a011bc2beed61b16e09080606081015b0390a1005b6020813d602011611e81575b81611e6660209383611ffd565b81010312611d4c57518015158103611d4c5750611e48611dff565b3d9150611e59565b34611d4c576040366003190112611d4c57611ea2611f67565b611eaa611f7d565b6001600160a01b03811615611f05576001600160a01b03821615611f05576006611ed261222b565b6001600160a01b039283165f90815291016020908152604080832094841683529381529083902054925192909116825290f35b63d92e233d60e01b5f5260045ffd5b34611d4c576020366003190112611d4c576004359063ffffffff60e01b8216809203611d4c57602091637965db0b60e01b8114908115611f56575b5015158152f35b6301ffc9a760e01b14905083611f4f565b600435906001600160a01b0382168203611d4c57565b602435906001600160a01b0382168203611d4c57565b6060906003190112611d4c576004356001600160a01b0381168103611d4c57906024356001600160a01b0381168103611d4c579060443590565b6060810190811067ffffffffffffffff821117611fe957604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff821117611fe957604052565b67ffffffffffffffff8111611fe957601f01601f191660200190565b60ff166003811015611d5f5790565b5f525f80516020614650833981519152602052600160405f20015490565b6001600160a01b03600161207a61222b565b01541691604051629032ff60e51b8152602081600481875afa8015611d415782915f91612121575b501061211a576040516307420a4160e01b81526001600160a01b03929092166004830152602482015290602090829060449082905f905af1908115611d41575f916120eb575090565b90506020813d602011612112575b8161210660209383611ffd565b81010312611d4c575190565b3d91506120f9565b5050505f90565b9150506020813d60201161214e575b8161213d60209383611ffd565b81010312611d4c578190515f6120a2565b3d9150612130565b90816020910312611d4c57516001600160a01b0381168103611d4c5790565b6040519061218282611fcd565b5f6040838281528260208201520152565b506001600160a01b03811615611f055760046121ad61222b565b019060018060a01b03165f5260205260405f2060ff6001604051926121d184611fcd565b818060a01b038154168452015460018060a01b038116602084015260a01c16604082015290565b6001600160a01b03918216815291811660208301529091166040820152608081019291906003821015611d5f5760600152565b604051602081017fc5f7dbe9c609aff4cf6a711ed84a656c56f52423fb9f9c7f5fe763d5902e968e815260208252612264604083611ffd565b9051902060ff191690565b335f9081527fb16e88c42fd4e48df2dd6a2eabd6bc9aec654ec170056b470819f8892cc6431c602052604090205460ff16156122a757565b63e2517d3f60e01b5f52336004525f8051602061467083398151915260245260445ffd5b335f9081527fc32d4dc01d07c436ad8a6f9a20eadd61263c71fe16f6b5956005ba3b341f51dd602052604090205460ff161561230357565b63e2517d3f60e01b5f52336004525f8051602061461083398151915260245260445ffd5b5f8181525f805160206146508339815191526020908152604080832033845290915290205460ff16156123575750565b63e2517d3f60e01b5f523360045260245260445ffd5b6001600160a01b0381165f9081527fc32d4dc01d07c436ad8a6f9a20eadd61263c71fe16f6b5956005ba3b341f51dd602052604090205460ff16612426576001600160a01b03165f8181527fc32d4dc01d07c436ad8a6f9a20eadd61263c71fe16f6b5956005ba3b341f51dd60205260408120805460ff191660011790553391905f80516020614610833981519152907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b505f90565b6001600160a01b0381165f9081527fb16e88c42fd4e48df2dd6a2eabd6bc9aec654ec170056b470819f8892cc6431c602052604090205460ff16612426576001600160a01b03165f8181527fb16e88c42fd4e48df2dd6a2eabd6bc9aec654ec170056b470819f8892cc6431c60205260408120805460ff191660011790553391905f80516020614670833981519152907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b5f8181525f80516020614650833981519152602090815260408083206001600160a01b038616845290915290205460ff16612582575f8181525f80516020614650833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50505f90565b5f8181525f80516020614650833981519152602090815260408083206001600160a01b038616845290915290205460ff1615612582575f8181525f80516020614650833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b60ff5f805160206146908339815191525460401c161561264057565b631afcd79f60e31b5f5260045ffd5b90612673575080511561266457805190602001fd5b63d6bda27560e01b5f5260045ffd5b815115806126a4575b612684575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561267c56fe60803460af57601f610cde38819003918201601f19168301916001600160401b0383118484101760b35780849260609460405283398101031260af5760428160c7565b6056604060506020850160c7565b930160c7565b60028054600180546001600160a01b03199081166001600160a01b03968716179091555f8054909116958516959095179094556001600160a81b0319909316911617600160a01b179055604051610c0390816100db8239f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b038216820360af5756fe6080806040526004361015610012575f80fd5b5f905f3560e01c9081630c99375d14610adc57508063206aec1114610ab557806328de6652146107315780632f2770db146106ae57806338d52e0f146106855780634a0aee29146106675780634d658f32146104675780636406c10c146104185780639cf39d13146103f2578063b0a6aa8e14610154578063c45a01551461012b5763e21c40c0146100a2575f80fd5b34610128576020366003190112610128576040816060928280516100c581610b2b565b828152826020820152015260043581526005602052206040516100e781610b2b565b60018060a01b0382541691828252604060ff600260018401549360208601948552015416920191151582526040519283525160208301525115156040820152f35b80fd5b50346101285780600319360112610128576001546040516001600160a01b039091168152602090f35b50346101285760a03660031901126101285760ff60025460a01c16156103e35760015460405163b0f479a160e01b81526001600160a01b0390911690602081600481855afa9081156103815783916103b4575b506001600160a01b031633036103a5576101c76101c2610b88565b610b9e565b8160843591803b156103a15781809160246040518094819363b8fbbfeb60e01b83528860048401525af180156103405761038c575b5060015460209061024c906001600160a01b0316610218610b88565b6040516316b10c3960e21b81526001600160a01b039091166004820152606435602482015293849283919082906044820190565b03925af190811561038157839161034f575b5082546001600160a01b031683610273610b88565b60243592803b1561034b576040516340c10f1960e01b81526001600160a01b039290921660048301526024820184905282908290604490829084905af1801561034057610327575b50507f6d1528f7969d78eeb6f300efedbb90714664fdc8490dd4d6f99a39e6f433902b6102e6610b88565b6002548654604080516044358152602081019690965285019590955260608401959095526001600160a01b0393841694841693169180608081015b0390a480f35b8161033191610b47565b61033c57835f6102bb565b8380fd5b6040513d84823e3d90fd5b8280fd5b90506020813d602011610379575b8161036a60209383610b47565b8101031261034b57515f61025e565b3d915061035d565b6040513d85823e3d90fd5b8161039691610b47565b6103a157815f6101fc565b5080fd5b636edaef2f60e11b8252600482fd5b6103d6915060203d6020116103dc575b6103ce8183610b47565b810190610b69565b5f6101a7565b503d6103c4565b63e657976d60e01b8152600490fd5b5034610128578060031936011261012857602060ff60025460a01c166040519015158152f35b5034610128576020366003190112610128576040606091600435815260056020522060018060a01b038154169060ff600260018301549201541690604051928352602083015215156040820152f35b50346101285760203660031901126101285760043560ff60025460a01c16156106585760015460405163b0f479a160e01b815290602090829060049082906001600160a01b03165afa908115610381578391610639575b506001600160a01b031633036103a557808252600560205260ff60026040842001541661062757808252600560205260408220546001600160a01b03161561061557808252600560205260018060a01b036040832054169080835260056020526001604084200154818452600560205260026040852001600160ff1982541617905582845260046020526040842060ff1981541690556003545f1981019081116106015760035560015460025485916001600160a01b039081169116813b1561034b57829160648392604051948593849263084ae45760e01b845260048401528a60248401528860448401525af18015610340576105ec575b50507fd5bb5d9768fa32e40cd937d634a0edbc159aed9647532ec28d28995d51d26e4f9160409182519182526020820152a280f35b816105f691610b47565b61033c57835f6105b7565b634e487b7160e01b85526011600452602485fd5b63871b2a8360e01b8252600452602490fd5b637c7ecac960e11b8252600452602490fd5b610652915060203d6020116103dc576103ce8183610b47565b5f6104be565b63e657976d60e01b8252600482fd5b50346101285780600319360112610128576020600354604051908152f35b50346101285780600319360112610128576002546040516001600160a01b039091168152602090f35b50346101285780600319360112610128576001546001600160a01b031633819003610723576003546107145760ff60a01b19600254166002557fd9bb52349cd37587339a33b2dc1d125156694fde0a8784c4a36cc6445ece86ff6020604051428152a280f35b6383d5752360e01b8252600482fd5b6282b42960e81b8252600482fd5b5034610a4c5760a0366003190112610a4c5760405160a0810181811067ffffffffffffffff821117610aa157604052610768610b15565b81526020810190602435825260408101906044358252606081019060643582526080810191608435835260ff60025460a01c1615610a925760015460405163b0f479a160e01b815290602090829060049082906001600160a01b03165afa908115610a41575f91610a73575b506001600160a01b03163303610a645781516107f8906001600160a01b0316610b9e565b815184516040519091600291906001600160a01b031661081782610b2b565b81526020810192835260408101925f845286515f52600560205260405f209160018060a01b039051166bffffffffffffffffffffffff60a01b835416178255516001820155019051151560ff8019835416911617905560018060a01b038251165f52600460205260405f20600160ff1982541617905560035460018101809111610a505760035560018060a01b03600154168351813b15610a4c575f91602483926040519485938492631ad026d360e21b845260048401525af18015610a4157610a2c575b506001548251825188926001600160a01b03908116921690823b1561033c57604051630c86269f60e01b81526001600160a01b0392909216600483015260248201529082908290604490829084905af1801561034057610a17575b508054835187516001600160a01b039283169290911690823b1561033c57604051632770a7eb60e21b81526001600160a01b0392909216600483015260248201529082908290604490829084905af18015610340576109fe575b50509051600254935186549551925193516040805192835260208301949094529281019390935260608301919091526001600160a01b03938416939283169216907f63b896c06e4d3a7f6896fc1064669ec22879847468078582bcd8eb2d17428221908060808101610321565b81610a0891610b47565b610a1357855f610991565b8580fd5b81610a2191610b47565b610a1357855f610937565b610a399196505f90610b47565b5f945f6108dc565b6040513d5f823e3d90fd5b5f80fd5b634e487b7160e01b5f52601160045260245ffd5b636edaef2f60e11b5f5260045ffd5b610a8c915060203d6020116103dc576103ce8183610b47565b5f6107d4565b63e657976d60e01b5f5260045ffd5b634e487b7160e01b5f52604160045260245ffd5b34610a4c575f366003190112610a4c575f546040516001600160a01b039091168152602090f35b34610a4c576020366003190112610a4c576020906001600160a01b03610b00610b15565b165f526004825260ff60405f20541615158152f35b600435906001600160a01b0382168203610a4c57565b6060810190811067ffffffffffffffff821117610aa157604052565b90601f8019910116810190811067ffffffffffffffff821117610aa157604052565b90816020910312610a4c57516001600160a01b0381168103610a4c5790565b6004356001600160a01b0381168103610a4c5790565b6001600160a01b03165f9081526004602052604090205460ff16610bbe57565b63201b43dd60e21b5f5260045ffdfea2646970667358221220f07d09b848dcb2ded5ccee68e7982de6551d079591510c0831abe49afd7d03f664736f6c634300081a003360803460bc57601f61128438819003918201601f19168301916001600160401b0383118484101760c05780849260809460405283398101031260bc5760428160d4565b90604d6020820160d4565b916060605a6040840160d4565b92015160028054600180546001600160a01b03199081166001600160a01b03968716179091555f8054909116968516969096179095556001600160a81b03199094169190921617600160a01b1790915560045560405161119c90816100e88239f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b038216820360bc5756fe6080806040526004361015610012575f80fd5b5f905f3560e01c908163167bddb214610ed057508063206aec1114610ea957806322f3e2d414610e8457806328de665214610b675780632f2770db14610af257806338d52e0f14610ac9578063424e657514610a665780634a0aee2914610a485780635646731014610a095780636406c10c146109af5780636effc30c146108545780639760bfb8146107ec578063a438b0e5146107ce578063b0a6aa8e1461057d578063b69b22d8146104c6578063bc8199fb1461048d578063c45a015514610464578063c83e02dc146101905763e21c40c0146100ef575f80fd5b3461018d57602036600319011261018d57604081608092606083516101138161106a565b82815282602082015282858201520152600435815260076020522060405161013a8161106a565b60018060a01b0382541691828252600181015460208301908152606060ff600360028501549460408701958652015416930192151583526040519384525160208401525160408301525115156060820152f35b80fd5b503461018d5761019f366110a8565b9060ff60025460a01c16156104555760015460405163b0f479a160e01b815290602090829060049082906001600160a01b03165afa90811561044a57849161041b575b506001600160a01b0316330361040c57808352600860205261020f8160ff60046040872001541615611132565b808352600860205260408320546102329082906001600160a01b0316151561114c565b808352600860205260408320906040519261024c8461103a565b82546001600160a01b03908116808652600180860154602080890191825260028801546040808b019182526003808b015460608d015260049a8b015460ff1615156080909c019b909b52888c526008808452818d20909b01889055888c52998252898b208901805460ff191685179055848b5260068252898b208b90559254835199516316b10c3960e21b81529889018590526024890199909952929791969093909291839160449183918c91165af18015610401576103ce575b508554815187916001600160a01b0316803b156103ca576040516340c10f1960e01b81526001600160a01b0389166004820152602481019290925282908290604490829084905af180156103bf576103a0575b5050907f7ce1e04c3ed6fb22d47cddd0b12dad44fc24827b6c1dfed16467741409202351936080939251905190604051938452602084015260408301526060820152a280f35b816103ae9195949395611086565b6103bb579091855f61035a565b8580fd5b6040513d84823e3d90fd5b8280fd5b6020813d6020116103f9575b816103e760209383611086565b810103126103f55751610307565b8680fd5b3d91506103da565b6040513d89823e3d90fd5b636edaef2f60e11b8352600483fd5b61043d915060203d602011610443575b6104358183611086565b8101906110be565b5f6101e2565b503d61042b565b6040513d86823e3d90fd5b63e657976d60e01b8352600483fd5b503461018d578060031936011261018d576001546040516001600160a01b039091168152602090f35b503461018d57602036600319011261018d576020906040906001600160a01b036104b5611024565b168152600683522054604051908152f35b503461018d57602036600319011261018d5760408160a092608083516104eb8161103a565b8281528260208201528285820152826060820152015260043581526008602052206040516105188161103a565b600180841b038254169182825260018101546020830190815260028201549060408401918252608060ff600460038601549560608801968752015416940193151584526040519485525160208501525160408401525160608301525115156080820152f35b503461018d5760a036600319011261018d5760ff60025460a01c16156107bf5760015460405163b0f479a160e01b815290602090829060049082906001600160a01b03165afa9081156103bf5782916107a0575b506001600160a01b03163303610791576105f16105ec6110dd565b6110f3565b6105f96110dd565b602435606435906040519261060d8461103a565b6001600160a01b0390811684526020808501838152604080870186815260608801898152608089018a8152608435808c526008909652928a209851895496166001600160a01b031990961695909517885591516001880155905160028701559151600386015590516004909401805460ff191694151560ff1694909417909355600454420180421161077d576001600160a01b036106a96110dd565b1685526006602052604085205560015484906001600160a01b0316803b156107795781809160246040518094819363b8fbbfeb60e01b83528a60048401525af180156103bf57610760575b50507f809da256c1f3b9410c95a6c9b0ee2e82327346a58c6633f0747371fdd701f3bc61071f6110dd565b6002548654604080516044358152602081019690965285019590955260608401959095526001600160a01b0393841694841693169180608081015b0390a480f35b8161076a91611086565b61077557835f6106f4565b8380fd5b5080fd5b634e487b7160e01b85526011600452602485fd5b636edaef2f60e11b8152600490fd5b6107b9915060203d602011610443576104358183611086565b5f6105d1565b63e657976d60e01b8152600490fd5b503461018d578060031936011261018d576020600454604051908152f35b503461018d57602036600319011261018d57600154600435906001600160a01b03163303610846576020817fe6eba8d47400e3de3ed388c527b3338f6ccdd961e7aad52f43b93532be724f1392600455604051908152a180f35b6282b42960e81b8252600482fd5b503461018d57610863366110a8565b9060ff60025460a01c16156104555760015460405163b0f479a160e01b815290602090829060049082906001600160a01b03165afa90811561044a578491610990575b506001600160a01b0316330361040c5780835260076020526108d38160ff60036040872001541615611132565b808352600760205260408320546108f69082906001600160a01b0316151561114c565b808352600760205260018060a01b0360408420541691818452600760205260036040852001600160ff19825416179055818452600760205280600160408620015582845260056020526040842060ff1981541690556003545f19810190811161077d57916040917f81d19f1865aadad03bde317f77b3035d72986c17bd1a0a8baa36e0ef0e3fba299360035582519182526020820152a280f35b6109a9915060203d602011610443576104358183611086565b5f6108a6565b503461018d57602036600319011261018d576040608091600435815260076020522060018060a01b038154169060018101549060ff6003600283015492015416916040519384526020840152604083015215156060820152f35b503461018d57602036600319011261018d5760209060ff906040906001600160a01b03610a34611024565b168152600584522054166040519015158152f35b503461018d578060031936011261018d576020600354604051908152f35b503461018d57602036600319011261018d57604060a0916004358152600860205220600180831b0381541690600181015490600281015460ff60046003840154930154169260405194855260208501526040840152606083015215156080820152f35b503461018d578060031936011261018d576002546040516001600160a01b039091168152602090f35b503461018d578060031936011261018d576001546001600160a01b03163381900361084657600354610b585760ff60a01b19600254166002557fd9bb52349cd37587339a33b2dc1d125156694fde0a8784c4a36cc6445ece86ff6020604051428152a280f35b6383d5752360e01b8252600482fd5b5034610e2f5760a0366003190112610e2f57604051610b858161103a565b610b8d611024565b81526020810190602435825260408101906044358252606081019060643582526080810191608435835260ff60025460a01c1615610e755760015460405163b0f479a160e01b815290602090829060049082906001600160a01b03165afa908115610e24575f91610e56575b506001600160a01b03163303610e47578151610c1d906001600160a01b03166110f3565b81518451604051610ca89290916003916001600160a01b0316610c3f8461106a565b83525f60208085018281526040808701948552606087018481528b5185526007909352909220945185546001600160a01b039091166001600160a01b03199091161785559051600185015590516002840155519101805460ff191691151560ff16919091179055565b60018060a01b038251165f52600560205260405f20600160ff1982541617905560035460018101809111610e3357600355600154825182516001600160a01b039283169290911690823b15610e2f57604051630c86269f60e01b81526001600160a01b039290921660048301526024820152905f908290604490829084905af18015610e2457610e0f575b5085548251865188926001600160a01b03908116921690823b1561077557604051632770a7eb60e21b81526001600160a01b0392909216600483015260248201529082908290604490829084905af180156103bf57610dfa575b50509051600254935186549551925193516040805192835260208301949094529281019390935260608301919091526001600160a01b03938416939283169216907f63b896c06e4d3a7f6896fc1064669ec22879847468078582bcd8eb2d1742822190806080810161075a565b81610e0491611086565b6103bb57855f610d8d565b610e1c9196505f90611086565b5f945f610d33565b6040513d5f823e3d90fd5b5f80fd5b634e487b7160e01b5f52601160045260245ffd5b636edaef2f60e11b5f5260045ffd5b610e6f915060203d602011610443576104358183611086565b5f610bf9565b63e657976d60e01b5f5260045ffd5b34610e2f575f366003190112610e2f57602060ff60025460a01c166040519015158152f35b34610e2f575f366003190112610e2f575f546040516001600160a01b039091168152602090f35b34610e2f576040366003190112610e2f57610ee9611024565b9060ff60025460a01c1615610e755760015463b0f479a160e01b8252602090829060049082906001600160a01b03165afa908115610e24575f91611005575b506001600160a01b03163303610e47576001600160a01b03165f8181526005602052604090205460ff16610ff657805f52600660205260405f205415610fe757805f52600660205260405f2054421115610fd857805f5260066020525f60408120556024355f5260086020525f60046040822082815582600182015582600282015582600382015501557f85944d3b82dd3afd8398919210a1e0052d5e2f9a0df695d37440c40eadc0f6965f80a2005b633ce33ddb60e01b5f5260045ffd5b637152b7f360e11b5f5260045ffd5b637595461560e01b5f5260045ffd5b61101e915060203d602011610443576104358183611086565b82610f28565b600435906001600160a01b0382168203610e2f57565b60a0810190811067ffffffffffffffff82111761105657604052565b634e487b7160e01b5f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761105657604052565b90601f8019910116810190811067ffffffffffffffff82111761105657604052565b6040906003190112610e2f576004359060243590565b90816020910312610e2f57516001600160a01b0381168103610e2f5790565b6004356001600160a01b0381168103610e2f5790565b6001600160a01b03165f81815260066020526040902054611123575f52600560205260ff60405f205416610ff657565b63773fc5c160e11b5f5260045ffd5b1561113a5750565b637c7ecac960e11b5f5260045260245ffd5b156111545750565b63871b2a8360e01b5f5260045260245ffdfea264697066735822122054aff0bbbd24482561fe5a48845b7b438c94f709589274bbde2d71134bf1f00c64736f6c634300081a0033b19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220072baa17b63b73fda9eacaa9004b3abb7e591e303433440a14fc921a7b5b196b64736f6c634300081a0033