0 txs
12 calls
constructor
constructor()
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
getBurnRequestForERC20Controller
viewfunction getBurnRequestForERC20Controller(address asset, address smartcoin, uint256 nonce) view returns (tuple)
getBurnRequestForExternalController
viewfunction getBurnRequestForExternalController(address asset, address smartcoin, uint256 nonce) view returns (tuple)
getController
viewfunction getController(address asset, address smartcoin) view returns (address controller)
getFactory
viewfunction getFactory() view returns (address factory)
getMintRequest
viewfunction getMintRequest(address asset, address smartcoin, uint256 nonce) view returns (tuple)
getNumberOfControllerTypes
viewfunction getNumberOfControllerTypes() view returns (uint256 types)
getRequestStatusBool
viewfunction getRequestStatusBool(address user, address asset, address smartcoin) view returns (bool)
getRequestStatusTimestamp
viewfunction getRequestStatusTimestamp(address user, address asset, address smartcoin) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getSigner
viewfunction getSigner(tuple data, uint8 v, bytes32 r, bytes32 s) view returns (address _signer)
getTypedDataHash
viewfunction getTypedDataHash(tuple data) view returns (bytes32 hash)
hashData
purefunction hashData(tuple data) pure returns (bytes32 hash)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
REQUEST_DATA_HASH
viewfunction REQUEST_DATA_HASH() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
burnSmartcoin
nonpayablefunction burnSmartcoin(tuple data, uint8 v, bytes32 r, bytes32 s)
cancelMintRequest
nonpayablefunction cancelMintRequest(address smartcoin, address asset, uint256 nonce)
completeBurnRequest
nonpayablefunction completeBurnRequest(address smartcoin, address asset, uint256 nonce, bytes32 receipt)
completeMintRequest
nonpayablefunction completeMintRequest(address smartcoin, address asset, uint256 nonce, bytes32 receipt)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address factory, uint256 controllerNumber, address _owner)
mintSmartcoin
nonpayablefunction mintSmartcoin(tuple data, uint8 v, bytes32 r, bytes32 s)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
BurnSmartCoin
event BurnSmartCoin(address indexed user, uint256 nonce, uint8 controlType, address asset, address smartcoin, address controller)
CancelMintRequest
event CancelMintRequest(address indexed user, uint256 nonce, bool isAdmin, address asset, address smartcoin, address controller)
CompleteBurnRequest
event CompleteBurnRequest(uint256 nonce, address asset, address smartcoin, address controller)
CompleteMintRequest
event CompleteMintRequest(uint256 nonce, address asset, address smartcoin, address controller)
EIP712DomainChanged
event EIP712DomainChanged()
Initialized
event Initialized(uint64 version)
MintSmartCoin
event MintSmartCoin(address indexed user, uint256 nonce, uint8 controlType, address asset, address smartcoin, address controller)
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)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ERROR
error ERROR()
Expired
error Expired()
FailedCall
error FailedCall()
InvalidBurnNonce
error InvalidBurnNonce()
InvalidChainId
error InvalidChainId()
InvalidInitialization
error InvalidInitialization()
InvalidMintNonce
error InvalidMintNonce()
InvalidReceipt
error InvalidReceipt()
InvalidRequestType
error InvalidRequestType()
InvalidSender
error InvalidSender()
InvalidSigner
error InvalidSigner()
NotAdmin
error NotAdmin()
NotInitializing
error NotInitializing()
NotValidController
error NotValidController(address controller)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
Unauthorized
error Unauthorized()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
WrongController
error WrongController()
ZeroAddress
error ZeroAddress()
creation bytecode
0x60a080604052346100e857306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c166100d9576002600160401b03196001600160401b03821601610073575b60405161377790816100ed823960805181818161140701526114d70152f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610054565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a714611fe05750806303c3772814611f1057806308bc061614611ef0578063216cdd6514611ebc578063248a9ca314611e9e5780632f2ff15d14611e6d57806336568abe14611e27578063374ffb1814611bf35780633be84408146119d65780633e34b6ca146119af57806343b41cbb146116fb5780634f1ef2861461145b57806352d1902d146113f457806377b3bb24146113a05780637f8d57c214611365578063817b875f1461131a57806384b0196e146111cc57806385c8e6761461119b57806388cc58e41461116e5780638cb556e414610da457806391d1485414610d4e578063a217fddf14610d32578063a719008a14610cf3578063ad3cb1cc14610ca6578063bdf7ed9514610c65578063c350a1b5146104d9578063d547741f1461049e578063e2badc3e146101cc5763fec6d89e1461015d575f80fd5b346101c9576101a03660031901126101c95761017836612130565b610144359160ff831683036101c95760206101b76101ae6101843561016435876101a96101a489612372565b613391565b61343e565b909291926134c0565b6040516001600160a01b039091168152f35b80fd5b50346101c9576101db36612300565b6101e3612f7f565b6001600160a01b036101f3612ada565b5460405162786ee560e31b81526001600160a01b0385811660048301528616602482015291169390602081604481885afa908115610493578691610455575b50600260ff6102418784612b1e565b16036104465760018060a01b031690856040519563424e657560e01b875284600488015260a087602481875afa9687156103915782976103fa575b5060209060246040518094819363d953689d60e01b83523360048401525af19081156103ef5787916103b5575b506001600160a01b0386169533871480156103ae575b156103a0578790843b1561039c57604051630b3deed960e11b81526001600160a01b0391909116600482015260248101869052818160448183895af1801561039157610370575b50506040805194855290151560208501526001600160a01b0394851690840152909216606082015260808101919091527f22c48a5caf81fbb54a9f5f947d7c4930e538784c4b3d276f737e816c517986939060a090a260015f805160206136e28339815191525580f35b8161037f91969594939661210e565b61038d57909192865f610306565b8680fd5b6040513d84823e3d90fd5b5080fd5b6282b42960e81b8852600488fd5b50816102bf565b90506020813d6020116103e7575b816103d06020938361210e565b8101031261038d576103e190612591565b5f6102a9565b3d91506103c3565b6040513d89823e3d90fd5b90965060a0813d60a01161043e575b8161041660a0938361210e565b8101031261039c5780610436608061042f60209461235e565b9201612591565b50969061027c565b3d9150610409565b63c6f3483b60e01b8652600486fd5b90506020813d60201161048b575b816104706020938361210e565b81010312610487576104819061235e565b5f610232565b8580fd5b3d9150610463565b6040513d88823e3d90fd5b50346101c95760403660031901126101c9576104d56004356104be612049565b906104d06104cb82612573565b612c82565b612ee3565b5080f35b50346101c95760603660031901126101c9576104f3612033565b6104fb61205f565b905f80516020613722833981519152549060ff8260401c16159167ffffffffffffffff811680159081610c5d575b6001149081610c53575b159081610c4a575b50610c3b5767ffffffffffffffff1981166001175f805160206137228339815191525582610c0f575b506001600160a01b03168015610c005761057c613413565b5f80516020613722833981519152549260ff8460401c16159367ffffffffffffffff811680159081610bf8575b6001149081610bee575b159081610be5575b50610bd65767ffffffffffffffff1981166001175f805160206137228339815191525584610baa575b5060409384516105f4868261210e565b601b81527f536d617274636f696e20436f6e74726f6c6c657220526f757465720000000000602082015285519061062b878361210e565b60018252603160f81b6020830152610641613413565b610649613413565b80519067ffffffffffffffff8211610b965781906106745f80516020613642833981519152546131dd565b601f8111610b1c575b50602090601f8311600114610aa0578a92610a95575b50508160011b915f199060031b1c1916175f80516020613642833981519152555b80519067ffffffffffffffff8211610a81576106dd5f80516020613682833981519152546131dd565b601f8111610a12575b50602090601f8311600114610991576107a894939291899183610986575b50508160011b915f199060031b1c1916175f80516020613682833981519152555b867fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10055867fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10155610932575b610778613413565b610780613413565b610788613413565b60015f805160206136e2833981519152556107a281612cc8565b50612d86565b505f8051602061370283398151915284525f805160206136c28339815191526020525f80516020613662833981519152600184862001545f8051602061370283398151915286525f805160206136c283398151915260205281600186882001555f805160206137028339815191527fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff8780a45f8051602061366283398151915284525f805160206136c28339815191526020525f80516020613662833981519152600184862001548186525f805160206136c28339815191526020528160018688200155817fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff8780a46108b9612ada565b906bffffffffffffffffffffffff60a01b82541617815560016024359101556108e0575080f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29160ff60401b195f8051602061372283398151915254165f80516020613722833981519152555160018152a180f35b60ff60401b195f8051602061372283398151915254165f80516020613722833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26020865160018152a1610770565b015190505f80610704565b5f8051602061368283398151915289528189209190601f1984168a5b8181106109fa57509160019391856107a898979694106109e2575b505050811b015f8051602061368283398151915255610725565b01515f1960f88460031b161c191690555f80806109c8565b929360206001819287860151815501950193016109ad565b5f8051602061368283398151915289527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f840160051c81019160208510610a77575b601f0160051c01905b818110610a6c57506106e6565b898155600101610a5f565b9091508190610a56565b634e487b7160e01b88526041600452602488fd5b015190505f80610693565b5f805160206136428339815191528b52818b209250601f1984168b5b818110610b045750908460019594939210610aec575b505050811b015f80516020613642833981519152556106b4565b01515f1960f88460031b161c191690555f8080610ad2565b92936020600181928786015181550195019301610abc565b5f805160206136428339815191528b529091507f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f840160051c81019160208510610b8c575b90601f859493920160051c01905b818110610b7e575061067d565b8b8155849350600101610b71565b9091508190610b63565b634e487b7160e01b89526041600452602489fd5b68ffffffffffffffffff191668010000000000000001175f80516020613722833981519152555f6105e4565b63f92ee8a960e01b8652600486fd5b9050155f6105bb565b303b1591506105b3565b8691506105a9565b63d92e233d60e01b8452600484fd5b68ffffffffffffffffff191668010000000000000001175f80516020613722833981519152555f610564565b63f92ee8a960e01b8552600485fd5b9050155f61053b565b303b159150610533565b849150610529565b50346101c9576060610c7f610c7936612300565b916129a2565b6040805182516001600160a01b031681526020808401519082015291810151151590820152f35b50346101c957806003193601126101c95750610cef604051610cc960408261210e565b60058152640352e302e360dc1b602082015260405191829160208352602083019061233a565b0390f35b50346101c95760603660031901126101c9576020610d28610d12612033565b610d1a612049565b610d2261205f565b91612866565b6040519015158152f35b50346101c957806003193601126101c957602090604051908152f35b50346101c95760403660031901126101c9576040610d6a612049565b9160043581525f805160206136c2833981519152602052209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b50346101c957610e2290610db7366122b1565b9291610dc1612f7f565b6001600160a01b03610dd1612ada565b5416936020840192610de28461259e565b9260206040870194610df38661259e565b60405162786ee560e31b81526001600160a01b03928316600482015291166024820152998a9081906044820190565b03818a5afa988915611163578899611120575b5090610e4d9291878a610e48368a6121d7565b612fb7565b610e5a61012084016125b2565b151560010361111157610e6d8487612b1e565b92610e778161259e565b9460608201359060e08301359660405190610e9182612089565b6001600160a01b03908116825260808581013560208401526040830185905260a0860135606084015282018990528a1690813b156110d65760408051635853554760e11b815282516001600160a01b0316600482015260208301516024820152908201516044820152606082015160648201526080909101516084820152908990829060a490829084905af18015611106579089916110ed575b5050600160ff871614610fd4575b505095610fbd91610f7e610f78610f727feddbda87333a68f0321c0bae236564943f44a8d23b3c5aa112e0a97475e69b9f98999a61259e565b9561259e565b9161259e565b6040805198895260ff90961660208901526001600160a01b039182169588019590955293841660608701528316608086015291169290819060a0820190565b0390a260015f805160206136e28339815191525580f35b6004906001600160a01b03610fe88761259e565b16926020610ff58661259e565b9260405194858092631d8cf42560e11b82525afa9081156110e257908a9291839161109d575b6040516323b872dd60e01b60208083019182526001600160a01b03958616602484015293909416604482015260648082019290925290815290935061106160848261210e565b519082855af1156104935786513d6110945750803b155b6110825780610f39565b635274afe760e01b8752600452602486fd5b60011415611078565b925050916020813d6020116110da575b816110ba6020938361210e565b810103126110d6579189916110d060209461235e565b9061101b565b8980fd5b3d91506110ad565b6040513d8c823e3d90fd5b816110f79161210e565b61110257875f610f2b565b8780fd5b6040513d8b823e3d90fd5b630ee2db0560e21b8552600485fd5b9098506020813d60201161115b575b8161113c6020938361210e565b810103126111025790611152610e4d939261235e565b98909192610e35565b3d915061112f565b6040513d8a823e3d90fd5b50346101c957806003193601126101c95760206001600160a01b03611191612ada565b5416604051908152f35b50346101c9576101403660031901126101c95760206111c46101a46111bf36612130565b612372565b604051908152f35b50346101c957806003193601126101c9577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005415806112f1575b156112b45761125890611217613215565b906112206132e4565b90602061126660405193611234838661210e565b8385525f368137604051968796600f60f81b885260e08589015260e088019061233a565b90868203604088015261233a565b904660608601523060808601528260a086015284820360c08601528080855193848152019401925b82811061129d57505050500390f35b83518552869550938101939281019260010161128e565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415611206565b50346101c957608061133461132e36612300565b9161271b565b60606040519160018060a01b0381511683526020810151602084015260408101516040840152015115156060820152f35b50346101c957806003193601126101c95760206040517f6383e5e65c7c55d54586846dde5007fceec33f9f81175eef90ef157c63fa4ff68152f35b50346101c95760a06113ba6113b436612300565b916125bf565b608060405191600180851b038151168352602081015160208401526040810151604084015260608101516060840152015115156080820152f35b50346101c957806003193601126101c9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316300361144c5760206040515f805160206136a28339815191528152f35b63703e46dd60e11b8152600490fd5b5060403660031901126101c957611470612033565b6024359067ffffffffffffffff82116116f757366023830112156116f7578160040135908361149e836122e4565b936114ac604051958661210e565b838552602085019336602482840101116116f757806024602093018637850101526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163081149081156116d5575b506116c6575f8051602061366283398151915284525f805160206136c283398151915260209081526040808620335f908152925290205460ff16156116a2576040516352d1902d60e01b81526001600160a01b0382169390602081600481885afa86918161166e575b5061158457634c9c8ce360e01b86526004859052602486fd5b93845f805160206136a283398151915287960361165c5750823b1561164a575f805160206136a283398151915280546001600160a01b031916821790558491907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a280511561162f576104d59382915190845af43d15611627573d9161160b836122e4565b92611619604051948561210e565b83523d85602085013e613534565b606091613534565b505050503461163b5780f35b63b398979f60e01b8152600490fd5b634c9c8ce360e01b8552600452602484fd5b632a87526960e21b8652600452602485fd5b9091506020813d60201161169a575b8161168a6020938361210e565b8101031261038d5751905f61156b565b3d915061167d565b63e2517d3f60e01b8452336004525f80516020613662833981519152602452604484fd5b63703e46dd60e11b8452600484fd5b5f805160206136a2833981519152546001600160a01b0316141590505f611502565b8280fd5b50346101c95761170a36612273565b92611713612f7f565b61171b612c26565b6001600160a01b0361172b612ada565b54169360405163d953689d60e01b81523360048201526020816024818a8a5af19081156103ef578791611975575b50156119665760405162786ee560e31b81526001600160a01b0385811660048301528316602482015294602086604481845afa9586156103ef578796611924575b506117a760ff9187612b1e565b1660018103611888575061187957846001600160a01b038516803b1561039c578180916024604051809481936326b2c79960e11b83528960048401525af1801561039157611860575b50507ff0d2863ff51dbcc2ed581c6808b88e2707657f192a0259477be08a36cba784a093611849915b604080519485526001600160a01b0395861660208601529085169084015290921660608201529081906080820190565b0390a160015f805160206136e28339815191525580f35b8161186a9161210e565b61187557845f6117f0565b8480fd5b63300262ab60e21b8552600485fd5b6002036119155785906001600160a01b03861690813b156116f7578291604483926040519485938492631bbff0c360e21b84528a600485015260248401525af1801561039157611900575b50507ff0d2863ff51dbcc2ed581c6808b88e2707657f192a0259477be08a36cba784a09361184991611819565b8161190a9161210e565b61187557845f6118d3565b631c9c433b60e01b8652600486fd5b9095506020813d60201161195e575b816119406020938361210e565b8101031261038d576117a761195660ff9261235e565b96915061179a565b3d9150611933565b637bfa4b9f60e01b8652600486fd5b90506020813d6020116119a7575b816119906020938361210e565b8101031261038d576119a190612591565b5f611759565b3d9150611983565b50346101c957806003193601126101c957602060016119cc612ada565b0154604051908152f35b50346101c957611a556119e8366122b1565b6119f494929394612f7f565b6001600160a01b03611a04612ada565b5416906020860192611a158461259e565b9560206040890197611a268961259e565b60405162786ee560e31b81526001600160a01b0392831660048201529116602482015296879081906044820190565b0381875afa958615611106578996611bac575b5090611a7b92918487610e48368c6121d7565b611a8861012086016125b2565b611b9d57611a969083612b1e565b91611aa08561259e565b948660e08201359660405190611ab582612089565b6001600160a01b0390811682526080848101356020840152606080860135604085015260a08601359084015282018990528416803b156116f7576040805163146f332960e11b815283516001600160a01b03166004820152602084015160248201529083015160448201526060830151606482015260809092015160848301528290829060a490829084905af1801561039157611b84575b5050907ffbbda9b633b4d4e44990f9035c119c07ae68bd93cb5bde81e625dcb75defbaa594610f7e610f78610f72610fbd9561259e565b81611b919194939461210e565b61038d5790865f611b4d565b630ee2db0560e21b8652600486fd5b92919095506020833d602011611beb575b81611bca6020938361210e565b81010312611be757611bde611a7b9361235e565b95909192611a68565b8880fd5b3d9150611bbd565b5034611d8657611c0236612273565b611c0d949394612f7f565b611c15612c26565b6001600160a01b03611c25612ada565b54169060405163d953689d60e01b81523360048201526020816024815f875af1908115611d7b575f91611ded575b5015611dde5760405162786ee560e31b81526001600160a01b0385811660048301528716602482015291602083604481845afa928315611d7b575f93611d99575b5060ff611ca360029285612b1e565b1603611d8a576001600160a01b03821690813b15611d86575f9160448392604051948593849263320f80b760e21b845289600485015260248401525af18015611d7b57611d41575b50604080519283526001600160a01b0393841660208401529483169482019490945292166060830152907f0ca6f7aac5a8df2223382511cf51cdff606573ae6de303a8abe2d43d57cf3632908060808101611849565b7f0ca6f7aac5a8df2223382511cf51cdff606573ae6de303a8abe2d43d57cf3632945090611d725f6118499361210e565b5f945090611ceb565b6040513d5f823e3d90fd5b5f80fd5b63c6f3483b60e01b5f5260045ffd5b9092506020813d602011611dd6575b81611db56020938361210e565b81010312611d865760ff611ca3611dcd60029361235e565b94925050611c94565b3d9150611da8565b637bfa4b9f60e01b5f5260045ffd5b90506020813d602011611e1f575b81611e086020938361210e565b81010312611d8657611e1990612591565b5f611c53565b3d9150611dfb565b34611d86576040366003190112611d8657611e40612049565b336001600160a01b03821603611e5e57611e5c90600435612ee3565b005b63334bd91960e11b5f5260045ffd5b34611d86576040366003190112611d8657611e5c600435611e8c612049565b90611e996104cb82612573565b612e3f565b34611d86576020366003190112611d865760206111c4600435612573565b34611d86576060366003190112611d865760206111c4611eda612033565b611ee2612049565b611eea61205f565b9161243c565b34611d8657610140366003190112611d865760206111c46111bf36612130565b34611d86576040366003190112611d8657611f806020611f2e612033565b611f36612049565b906001600160a01b03611f47612ada565b5460405162786ee560e31b81526001600160a01b0393841660048201529390921660248401529193849290911690829081906044820190565b03915afa8015611d7b575f90611fa6575b6040516001600160a01b039091168152602090f35b506020813d602011611fd8575b81611fc06020938361210e565b81010312611d8657611fd360209161235e565b611f91565b3d9150611fb3565b34611d86576020366003190112611d86576004359063ffffffff60e01b8216809203611d8657602091637965db0b60e01b8114908115612022575b5015158152f35b6301ffc9a760e01b1490508361201b565b600435906001600160a01b0382168203611d8657565b602435906001600160a01b0382168203611d8657565b604435906001600160a01b0382168203611d8657565b35906001600160a01b0382168203611d8657565b60a0810190811067ffffffffffffffff8211176120a557604052565b634e487b7160e01b5f52604160045260245ffd5b610140810190811067ffffffffffffffff8211176120a557604052565b6080810190811067ffffffffffffffff8211176120a557604052565b6060810190811067ffffffffffffffff8211176120a557604052565b90601f8019910116810190811067ffffffffffffffff8211176120a557604052565b610140906003190112611d86576040519061214a826120b9565b816004356001600160a01b0381168103611d865781526024356001600160a01b0381168103611d865760208201526044356001600160a01b0381168103611d865760408201526064356060820152608435608082015260a43560a082015260c43560c082015260e43560e08201526101043561010082015261012435908115158203611d86576101200152565b919082610140910312611d86576040516121f0816120b9565b61012081936121fe81612075565b835261220c60208201612075565b602084015261221d60408201612075565b6040840152606081013560608401526080810135608084015260a081013560a084015260c081013560c084015260e081013560e08401526101008101356101008401520135908115158203611d86576101200152565b6080906003190112611d86576004356001600160a01b0381168103611d8657906024356001600160a01b0381168103611d8657906044359060643590565b600319016101a08112611d865761014013611d86576004906101443560ff81168103611d86579061016435906101843590565b67ffffffffffffffff81116120a557601f01601f191660200190565b6060906003190112611d86576004356001600160a01b0381168103611d8657906024356001600160a01b0381168103611d86579060443590565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b51906001600160a01b0382168203611d8657565b60018060a01b038151169060018060a01b036020820151169060018060a01b03604082015116906060810151608082015160a083015160c08401519160e0850151936101206101008701519601511515966040519860208a019a7f6383e5e65c7c55d54586846dde5007fceec33f9f81175eef90ef157c63fa4ff68c5260408b015260608a0152608089015260a088015260c087015260e086015261010085015261012084015261014083015261016082015261016081526124366101808261210e565b51902090565b61248c929091906020906001600160a01b03612456612ada565b5460405162786ee560e31b81526001600160a01b0395861660048201529490921660248501529294921691849081906044820190565b0381845afa928315611d7b575f9361252e575b5060ff6124ae60029285612b1e565b160361251f5760405163bc8199fb60e01b81526001600160a01b0391821660048201529160209183916024918391165afa908115611d7b575f916124f0575090565b90506020813d602011612517575b8161250b6020938361210e565b81010312611d86575190565b3d91506124fe565b631c9c433b60e01b5f5260045ffd5b9092506020813d60201161256b575b8161254a6020938361210e565b81010312611d865760ff6124ae61256260029361235e565b9492505061249f565b3d915061253d565b5f525f805160206136c2833981519152602052600160405f20015490565b51908115158203611d8657565b356001600160a01b0381168103611d865790565b358015158103611d865790565b60206125fe93925f60806040516125d581612089565b828152848101839052604081018390526060810183905201526001600160a01b03612456612ada565b0381845afa928315611d7b575f936126d6575b5060ff61262060029285612b1e565b160361251f576040516316d3645b60e31b815260048101919091529060a090829060249082906001600160a01b03165afa908115611d7b575f91612662575090565b905060a0813d60a0116126ce575b8161267d60a0938361210e565b81010312611d86576126c660806040519261269784612089565b6126a08161235e565b845260208101516020850152604081015160408501526060810151606085015201612591565b608082015290565b3d9150612670565b9092506020813d602011612713575b816126f26020938361210e565b81010312611d865760ff61262061270a60029361235e565b94925050612611565b3d91506126e5565b602061275393925f6060604051612731816120d6565b8281528481018390526040810183905201526001600160a01b03612456612ada565b0381845afa928315611d7b575f93612821575b5060ff61277560029285612b1e565b160361251f57604051630388710360e61b8152600481019190915290608090829060249082906001600160a01b03165afa908115611d7b575f916127b7575090565b90506080813d608011612819575b816127d26080938361210e565b81010312611d86576128116060604051926127ec846120d6565b6127f58161235e565b8452602081015160208501526040810151604085015201612591565b606082015290565b3d91506127c5565b9092506020813d60201161285e575b8161283d6020938361210e565b81010312611d865760ff61277561285560029361235e565b94925050612766565b3d9150612830565b612880929091906020906001600160a01b03612456612ada565b0381845afa928315611d7b575f93612960575b506128a060ff9184612b1e565b166001810361291d5750604051630c99375d60e01b81526001600160a01b0391821660048201529160209183916024918391165afa908115611d7b575f916128e6575090565b90506020813d602011612915575b816129016020938361210e565b81010312611d865761291290612591565b90565b3d91506128f4565b60020361251f57604051630564673160e41b81526001600160a01b0391821660048201529160209183916024918391165afa908115611d7b575f916128e6575090565b9092506020813d60201161299a575b8161297c6020938361210e565b81010312611d86576128a061299260ff9261235e565b939150612893565b3d915061296f565b60206129d293925f604080516129b7816120f2565b82815284810183905201526001600160a01b03612456612ada565b0381845afa928315611d7b575f93612a95575b5060ff6129f460019285612b1e565b160361251f57604051630388710360e61b8152600481019190915290606090829060249082906001600160a01b03165afa908115611d7b575f91612a36575090565b90506060813d606011612a8d575b81612a516060938361210e565b81010312611d8657612a856040805192612a6a846120f2565b612a738161235e565b84526020810151602085015201612591565b604082015290565b3d9150612a44565b9092506020813d602011612ad2575b81612ab16020938361210e565b81010312611d865760ff6129f4612ac960019361235e565b949250506129e5565b3d9150612aa4565b604051602081017f4552366f14c529dede45e4fe0dd5e2d9821d8d51a10e075cfc33e473254899c4815260208252612b1360408361210e565b9051902060ff191690565b6001600160a01b0316908115612c1757604051637a9c018f60e11b81526004810183905290606090829060249082906001600160a01b03165afa908115611d7b575f91612ba8575b506040015160ff169081151580612b93575b15612b81575090565b6326da3be760e21b5f5260045260245ffd5b506001612b9e612ada565b0154821115612b78565b90506060813d606011612c0f575b81612bc36060938361210e565b81010312611d86576040805191612bd9836120f2565b612be28161235e565b8352612bf06020820161235e565b6020840152015160ff81168103611d8657604080830191909152612b66565b3d9150612bb6565b63d92e233d60e01b5f5260045ffd5b335f9081527fb16e88c42fd4e48df2dd6a2eabd6bc9aec654ec170056b470819f8892cc6431c602052604090205460ff1615612c5e57565b63e2517d3f60e01b5f52336004525f8051602061370283398151915260245260445ffd5b5f8181525f805160206136c28339815191526020908152604080832033845290915290205460ff1615612cb25750565b63e2517d3f60e01b5f523360045260245260445ffd5b6001600160a01b0381165f9081527fc32d4dc01d07c436ad8a6f9a20eadd61263c71fe16f6b5956005ba3b341f51dd602052604090205460ff16612d81576001600160a01b03165f8181527fc32d4dc01d07c436ad8a6f9a20eadd61263c71fe16f6b5956005ba3b341f51dd60205260408120805460ff191660011790553391905f80516020613662833981519152907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b505f90565b6001600160a01b0381165f9081527fb16e88c42fd4e48df2dd6a2eabd6bc9aec654ec170056b470819f8892cc6431c602052604090205460ff16612d81576001600160a01b03165f8181527fb16e88c42fd4e48df2dd6a2eabd6bc9aec654ec170056b470819f8892cc6431c60205260408120805460ff191660011790553391905f80516020613702833981519152907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b5f8181525f805160206136c2833981519152602090815260408083206001600160a01b038616845290915290205460ff16612edd575f8181525f805160206136c2833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50505f90565b5f8181525f805160206136c2833981519152602090815260408083206001600160a01b038616845290915290205460ff1615612edd575f8181525f805160206136c2833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b60025f805160206136e28339815191525414612fa85760025f805160206136e283398151915255565b633ee5aeb560e01b5f5260045ffd5b9293946101ae9195612fd89360018060a01b0316956101a96101a487612372565b604051637df73e2760e01b81526001600160a01b039091166004820152602081602481865afa908115611d7b575f916131a3575b50156131945780516001600160a01b031633036131855761010081015146036131765760c0810151421161316757610120810151156130d65760e0015160405163f6da808560e01b81526001600160a01b039390931660048401526024830152602090829060449082905afa908115611d7b575f9161309c575b5061308d57565b6327506b3960e01b5f5260045ffd5b90506020813d6020116130ce575b816130b76020938361210e565b81010312611d86576130c890612591565b5f613086565b3d91506130aa565b60e0015160405163fd498a1360e01b81526001600160a01b039390931660048401526024830152602090829060449082905afa908115611d7b575f9161312d575b5061311e57565b630f4966eb60e41b5f5260045ffd5b90506020813d60201161315f575b816131486020938361210e565b81010312611d865761315990612591565b5f613117565b3d915061313b565b630407b05b60e31b5f5260045ffd5b633d23e4d160e11b5f5260045ffd5b636edaef2f60e11b5f5260045ffd5b632057875960e21b5f5260045ffd5b90506020813d6020116131d5575b816131be6020938361210e565b81010312611d86576131cf90612591565b5f61300c565b3d91506131b1565b90600182811c9216801561320b575b60208310146131f757565b634e487b7160e01b5f52602260045260245ffd5b91607f16916131ec565b604051905f825f805160206136428339815191525491613234836131dd565b80835292600181169081156132c5575060011461325a575b6132589250038361210e565b565b505f805160206136428339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b8183106132a95750509060206132589282010161324c565b6020919350806001915483858901015201910190918492613291565b6020925061325894915060ff191682840152151560051b82010161324c565b604051905f825f805160206136828339815191525491613303836131dd565b80835292600181169081156132c55750600114613326576132589250038361210e565b505f805160206136828339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b8183106133755750509060206132589282010161324c565b602091935080600191548385890101520191019091849261335d565b60429061339c613592565b6133a46135fc565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a081526133f560c08261210e565b519020906040519161190160f01b8352600283015260228201522090565b60ff5f805160206137228339815191525460401c161561342f57565b631afcd79f60e31b5f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116134b5579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611d7b575f516001600160a01b038116156134ab57905f905f90565b505f906001905f90565b5050505f9160039190565b600481101561352057806134d2575050565b600181036134e95763f645eedf60e01b5f5260045ffd5b60028103613504575063fce698f760e01b5f5260045260245ffd5b60031461350e5750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b90613558575080511561354957805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580613589575b613569575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b15613561565b61359a613215565b80519081156135aa576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156135d75790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b6136046132e4565b8051908115613614576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156135d7579056fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102b19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214ea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220c3570d88b6272a7eac9b540e7976965c77b52692fb884ef790284af67b76b0e264736f6c634300081a0033