0 txs
0 calls
constructor
constructor()
functions
authorityAddress
viewfunction authorityAddress() view returns (address)
baseToken
viewfunction baseToken() view returns (address)
externalSourceCreated
viewfunction externalSourceCreated(address) view returns (bool)
getAuthorityAddress
viewfunction getAuthorityAddress() view returns (address)
getBaseToken
viewfunction getBaseToken() view returns (address)
getPlatformWallet
viewfunction getPlatformWallet() view returns (address)
isWhiteListed
viewfunction isWhiteListed(address) view returns (bool)
owner
viewfunction owner() view returns (address)
platformWallet
viewfunction platformWallet() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
userExternalSourceContracts
viewfunction userExternalSourceContracts(address, uint256) view returns (address)
userExternalSourceCount
viewfunction userExternalSourceCount(address) view returns (uint256)
createExternalSource
nonpayablefunction createExternalSource(address caller, uint256 numberOfOracles, uint256 totalReward, uint256 fixedFee, address creator, uint256 endTime, uint256 numberOfOptions, string externalSourceURI) returns (address)
initialize
nonpayablefunction initialize(address platform, address base, address authority, address platformOwner)
renounceOwnership
nonpayablefunction renounceOwnership()
setAuthorityAddress
nonpayablefunction setAuthorityAddress(address newAuthorityAddress)
setPlatformWallet
nonpayablefunction setPlatformWallet(address newPlatformWallet)
setWhiteListAddress
nonpayablefunction setWhiteListAddress(address whiteListedAddress)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateExistingAuthorityAddress
nonpayablefunction updateExistingAuthorityAddress(address externalSourceContract, address newAuthorityAddress)
updateExistingPlatformWallet
nonpayablefunction updateExistingPlatformWallet(address externalSourceContract, address newPlatformWallet)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AddressIsWhitelisted
event AddressIsWhitelisted(address indexed whiteListedAddress)
AuthorityAddressUpdated
event AuthorityAddressUpdated(address indexed previousAuthorityAddress, address indexed newAuthorityAddress)
BaseTokenIsUpdated
event BaseTokenIsUpdated(address indexed previousBaseToken, address indexed newBaseToken)
ExistingAuthorityAddressUpdated
event ExistingAuthorityAddressUpdated(address indexed externalSourceContract, address indexed authorityAddress)
ExistingPlatformWalletUpdated
event ExistingPlatformWalletUpdated(address indexed externalSourceContract, address indexed platfromWallet)
ExternalSourceCreated
event ExternalSourceCreated(address contractAddress, address creator, address baseToken, address authority, uint256 userExternalSourceId)
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PlatformWalletIsUpdated
event PlatformWalletIsUpdated(address indexed previousPlatformWallet, address indexed newPlatformWallet)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressIsAlreadyWhiteListed
error AddressIsAlreadyWhiteListed()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExistingAndNewAuthorityAddressCantBeSame
error ExistingAndNewAuthorityAddressCantBeSame()
ExistingAndNewPlatFormWalletCantBeSame
error ExistingAndNewPlatFormWalletCantBeSame()
ExternalSourceAddressNotFound
error ExternalSourceAddressNotFound()
ExternalSourceEndTimeCantBeInPast
error ExternalSourceEndTimeCantBeInPast()
FailedCall
error FailedCall()
InvalidAddress
error InvalidAddress()
InvalidAuthorityAddress
error InvalidAuthorityAddress()
InvalidBaseToken
error InvalidBaseToken()
InvalidExternalSourceContractAddress
error InvalidExternalSourceContractAddress()
InvalidInitialization
error InvalidInitialization()
InvalidPlatformOwner
error InvalidPlatformOwner()
InvalidPlatformWallet
error InvalidPlatformWallet()
NotInitializing
error NotInitializing()
NotWhiteListed
error NotWhiteListed()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a080604052346100c257306080525f516020614a7b5f395f51905f525460ff8160401c166100b3576002600160401b03196001600160401b03821601610060575b6040516149b490816100c7823960805181818161146201526115540152f35b6001600160401b0319166001600160401b039081175f516020614a7b5f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610041565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301c81b8214611a035750806327bbea3a146118e95780632f75adbb146118645780633c695d4e146118135780634f1ef286146114da57806352d1902d1461141d5780635a99452a14610e545780635e159c5314610d0f5780636f9170f614610ca7578063715018a614610bcb5780637597ac4e14610b685780638831e9cf14610a495780638da5cb5b146109d857806398acd7a6146107e7578063ad3cb1cc14610955578063bf0780db14610838578063c55dae63146107e7578063d76a09f414610795578063e47a9d4614610743578063ea36212d146105a3578063f2fde38b1461055d578063f8c8765e1461016f5763fa2af9da1461011b575f80fd5b3461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b80fd5b503461016c5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c576101a7611a67565b6024359073ffffffffffffffffffffffffffffffffffffffff8216809203610559576044359073ffffffffffffffffffffffffffffffffffffffff8216809203610555576064359273ffffffffffffffffffffffffffffffffffffffff841691828503610551577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549460ff8660401c16159567ffffffffffffffff811680159081610549575b600114908161053f575b159081610536575b5061050e5773ffffffffffffffffffffffffffffffffffffffff9291818860017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006102e49516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556104b9575b506102d7611cfa565b6102df611cfa565b611ba1565b6102ec611cfa565b169182156104915781156104695783156104415715610419577fffffffffffffffffffffffff00000000000000000000000000000000000000008554161784557fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002556103855780f35b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b6004857f4e5c250c000000000000000000000000000000000000000000000000000000008152fd5b6004867f22203f59000000000000000000000000000000000000000000000000000000008152fd5b6004867f0e442a4a000000000000000000000000000000000000000000000000000000008152fd5b6004867f87ac4dbf000000000000000000000000000000000000000000000000000000008152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00555f6102ce565b6004887ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b9050155f610260565b303b159150610258565b88915061024e565b8580fd5b8380fd5b8280fd5b503461016c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c576105a0610598611a67565b6102df611c8e565b80f35b503461016c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c576105db611a67565b73ffffffffffffffffffffffffffffffffffffffff6105f8611a8a565b91610601611c8e565b1690811561071b57818352600660205260ff604084205416156106f35773ffffffffffffffffffffffffffffffffffffffff169081156106cb57803b1561055957826040517fada4ef30000000000000000000000000000000000000000000000000000000008152836004820152818160248183875af180156106c0576106ab575b50807fae03c08a3f7078bbdc6986e7f8f7fda4a75c215f0adda92c192919c27e9f92e291a380f35b816106b591611aad565b61055957825f610683565b6040513d84823e3d90fd5b6004837f87ac4dbf000000000000000000000000000000000000000000000000000000008152fd5b6004837f4ebaf16c000000000000000000000000000000000000000000000000000000008152fd5b6004837f63061a7d000000000000000000000000000000000000000000000000000000008152fd5b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c5773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b503461016c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c5773ffffffffffffffffffffffffffffffffffffffff610885611a67565b61088d611c8e565b16801561092d5760025473ffffffffffffffffffffffffffffffffffffffff81168281146109055790827fffffffffffffffffffffffff0000000000000000000000000000000000000000927f741ee0e619c436098dff0f2be43023c24aef6c4c3134ca5db37746bb1088d0df8680a3161760025580f35b6004847f4e7ec357000000000000000000000000000000000000000000000000000000008152fd5b6004827f22203f59000000000000000000000000000000000000000000000000000000008152fd5b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57506109d4604051610996604082611aad565b600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190611b5e565b0390f35b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b503461016c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57610a81611a67565b610a89611c8e565b60015473ffffffffffffffffffffffffffffffffffffffff8116918215610b405773ffffffffffffffffffffffffffffffffffffffff1691828114610b185790827fffffffffffffffffffffffff0000000000000000000000000000000000000000927fafdafba178415f38a81e9ce31168ffa3ce22045e659b3dbb40405bf2ac3e70788680a3161760015580f35b6004847fc9518849000000000000000000000000000000000000000000000000000000008152fd5b6004847f87ac4dbf000000000000000000000000000000000000000000000000000000008152fd5b503461016c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57604060209173ffffffffffffffffffffffffffffffffffffffff610bba611a67565b168152600483522054604051908152f35b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57610c02611c8e565b8073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461016c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c5760ff604060209273ffffffffffffffffffffffffffffffffffffffff610cfb611a67565b168152600584522054166040519015158152f35b503461016c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57610d47611a67565b73ffffffffffffffffffffffffffffffffffffffff610d64611a8a565b91610d6d611c8e565b1690811561071b57818352600660205260ff604084205416156106f35773ffffffffffffffffffffffffffffffffffffffff16908115610e2c57803b1561055957826040517fccfc4569000000000000000000000000000000000000000000000000000000008152836004820152818160248183875af180156106c057610e17575b50807f1f2a1174c083e293cecbc3d063657f97b3d3fd1d84d1b6484d6cba850b6e671e91a380f35b81610e2191611aad565b61055957825f610def565b6004837f22203f59000000000000000000000000000000000000000000000000000000008152fd5b503461130e576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261130e57610e8d611a67565b6024359060443590606435926084359273ffffffffffffffffffffffffffffffffffffffff841680940361130e5760e4359160a43567ffffffffffffffff841161130e573660238501121561130e5783600401359467ffffffffffffffff861161130e57366024878701011161130e5773ffffffffffffffffffffffffffffffffffffffff1696875f52600560205260ff60405f205416156113f557814210156113cd5782156113a057808401928385116113735760405196610140880188811067ffffffffffffffff82111761134657604052818852602088019186048252604088019283526060880194855260808801958652610fa860a089019742895260c08a0195865260e08a019260c43584526024369201611b28565b9061010089019182526101208901948a865273ffffffffffffffffffffffffffffffffffffffff6001541673ffffffffffffffffffffffffffffffffffffffff5f54169073ffffffffffffffffffffffffffffffffffffffff6002541660405192612b94918285019185831067ffffffffffffffff841117611346576080948694611deb86398352602083015260408201523060608201520301905ff080156113035760205f73ffffffffffffffffffffffffffffffffffffffff8082541693169e8f8b5160405191858301937f23b872dd000000000000000000000000000000000000000000000000000000008552602484015260448301526064820152606481526110b6608482611aad565b519082855af115611303575f513d61133d5750803b155b61131257508b3b1561130e575f9860209860049873ffffffffffffffffffffffffffffffffffffffff9761116f976040519e8f9d8e9d8e7f72c11e5800000000000000000000000000000000000000000000000000000000815201525160248d01525160448c01525160648b01525160848a01525160a48901525160c48801525160e48701525161010486015251610140610124860152610164850190611b5e565b915116610144830152038183875af18015611303576112ee575b508083526004602052604083205481845260036020526040842081855260205260408420837fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905581845260046020526040842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112c1579173ffffffffffffffffffffffffffffffffffffffff6020967f752d00d3b78df66f94f1fad78cc7def44501c6e0958ad529d7a3a8bacae499e49593600160a096019055868152600688526040812060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055541673ffffffffffffffffffffffffffffffffffffffff60025416906040519387855288850152604084015260608301526080820152a1604051908152f35b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6112fb9193505f90611aad565b5f915f611189565b6040513d5f823e3d90fd5b5f80fd5b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600114156110cd565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f97285e1e000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f6a9a57a5000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461130e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261130e5773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036114b25760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261130e5761150c611a67565b60243567ffffffffffffffff811161130e573660238201121561130e5761153d903690602481600401359101611b28565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168030149081156117d1575b506114b25761158c611c8e565b73ffffffffffffffffffffffffffffffffffffffff8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f918161179d575b5061160c57837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8592036117725750813b1561174757807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115611716575f8083602061170c95519101845af43d1561170e573d916116f083611aee565b926116fe6040519485611aad565b83523d5f602085013e611d51565b005b606091611d51565b50503461171f57005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d6020116117c9575b816117b960209383611aad565b8101031261130e575190856115db565b3d91506117ac565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614158361157f565b3461130e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261130e57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b3461130e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261130e5773ffffffffffffffffffffffffffffffffffffffff6118b0611a67565b165f52600360205260405f206024355f52602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b3461130e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261130e5773ffffffffffffffffffffffffffffffffffffffff611935611a67565b61193d611c8e565b1680156119db57805f52600560205260ff60405f2054166119b357805f52600560205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557fbab1f6838b9b47fb5b0f43adc0884a82b6dd08960fa4bc3d8aab43372fd4c2125f80a2005b7f0e539de4000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fe6c4247b000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461130e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261130e5760209073ffffffffffffffffffffffffffffffffffffffff611a52611a67565b165f526006825260ff60405f20541615158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361130e57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361130e57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761134657604052565b67ffffffffffffffff811161134657601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192611b3482611aee565b91611b426040519384611aad565b82948184528183011161130e578281602093845f960137010152565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff168015611c625773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303611cce57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615611d2957565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90611d8e5750805115611d6657805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611de1575b611d9f575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15611d9756fe60a03461018457601f612b9438819003918201601f19168301916001600160401b0383118484101761018857808492608094604052833981010312610184576100478161019c565b602082015190916001600160a01b03821691908282036101845761006d6040820161019c565b906001600160a01b03906100839060600161019c565b16938415610171575f80546001600160a01b031981168717825560405196916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36001600160a01b03169283156101625715610153576001600160a01b03169182156101445760018060a01b0319600154161760015560805260018060a01b031960025416176002556129e390816101b1823960805181818161066f0152818161077a0152818161108e0152611c410152f35b6322203f5960e01b5f5260045ffd5b630722152560e11b5f5260045ffd5b6387ac4dbf60e01b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101845756fe6080806040526004361015610012575f80fd5b5f3560e01c90816309eef43e146120a8575080631973f02814611da05780631af19dd31461127557806356069c0a14611d65578063590e1ae314611b72578063715018a614611ad857806372c11e581461134057806373b2e80e146112d85780637afbf480146112755780638a5fc0f9146112355780638da5cb5b146111e55780638e7ea5b21461117757806398c079381461113c5780639b46a16414610d505780639e4cbcda14610a26578063ada4ef301461090b578063b0d26168146108c3578063b88a802f146106d6578063bb169e3c14610693578063c55dae6314610625578063cacf7e8b146104dc578063ccfc4569146103c1578063d3cb29f61461035d578063d76a09f41461030c578063db0fff37146102d1578063e47a9d4614610280578063ea35e805146102405763f2fde38b14610150575f80fd5b3461023c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c5773ffffffffffffffffffffffffffffffffffffffff61019c61210c565b6101a4612961565b1680156102105773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b5f80fd5b3461023c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c576020610278612541565b604051908152f35b3461023c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b3461023c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c576020601054604051908152f35b3461023c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461023c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c576024356004355f52601560205260405f20805482101561023c576020916103b2916121ff565b90549060031b1c604051908152f35b3461023c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c5773ffffffffffffffffffffffffffffffffffffffff61040d61210c565b610415612961565b1680156104b45760025473ffffffffffffffffffffffffffffffffffffffff81169082821461048c57827fffffffffffffffffffffffff0000000000000000000000000000000000000000927f741ee0e619c436098dff0f2be43023c24aef6c4c3134ca5db37746bb1088d0df5f80a31617600255005b7f4e7ec357000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f22203f59000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461023c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c575f61012060405161051a8161212f565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201526060610100820152015261012061018061055f612292565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602073ffffffffffffffffffffffffffffffffffffffff6040519687958387528051848801528381015160408801526040810151606088015260608101516080880152608081015160a088015260a081015160c088015260c081015160e088015260e0810151610100880152610100810151610140838901528051948591826101608b0152018989015e5f88858901015201511661014085015201168101030190f35b3461023c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461023c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c57602060ff60025460a01c166040519015158152f35b3461023c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c5760ff60055416156108b5575b335f52601160205260ff60405f205416801561089d575b61087557610743610736612292565b60808101519051906123ee565b335f52601160205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f0000000000000000000000000000000000000000000000000000000000000000604051907f70a0823100000000000000000000000000000000000000000000000000000000825230600483015260208260248173ffffffffffffffffffffffffffffffffffffffff85165afa801561086a575f90610836575b6108089250838082109118028318903390612882565b6040519081527f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f724160203392a2005b506020823d602011610862575b816108506020938361214c565b8101031261023c5761080891516107f2565b3d9150610843565b6040513d5f823e3d90fd5b7ff8eb54de000000000000000000000000000000000000000000000000000000005f5260045ffd5b50335f52601360205260405f20546003541415610727565b6108bd612541565b50610710565b3461023c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c576004355f526014602052602060405f2054604051908152f35b3461023c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c5773ffffffffffffffffffffffffffffffffffffffff61095761210c565b61095f612961565b1680156109fe5760015473ffffffffffffffffffffffffffffffffffffffff8116908282146109d657827fffffffffffffffffffffffff0000000000000000000000000000000000000000927fafdafba178415f38a81e9ce31168ffa3ce22045e659b3dbb40405bf2ac3e70785f80a31617600155005b7fc9518849000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f87ac4dbf000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461023c57610a343661218d565b610a3c61280e565b610a44612292565b91600760105414610d2857428411801590610d1a575b610cf25773a7e97b3134654a18a7e743157cf8df0239eadd7a908351600454604051917fd494f49300000000000000000000000000000000000000000000000000000000835260048301526024820152602081604481865af490811561086a575f91610cd3575b50610cab576002546040517f5e68290e00000000000000000000000000000000000000000000000000000000815260048101879052336024820152929073ffffffffffffffffffffffffffffffffffffffff16602084604481855af490811561086a575f91610c76575b60209450610b68604051968795869485947f238a4d1e000000000000000000000000000000000000000000000000000000008652600486016124da565b03915af490811561086a575f91610c47575b5015610c1f5781600c556010549060018201809211610bf25760c09160105501519060405191825260208201527f1330a2b7f70d74408554b6e5d73c6aefa8d88e43a5cf2dde8220b95a7bb23e3560403092a25f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f8baa579f000000000000000000000000000000000000000000000000000000005f5260045ffd5b610c69915060203d602011610c6f575b610c61818361214c565b8101906123d6565b83610b7a565b503d610c57565b90506020843d602011610ca3575b81610c916020938361214c565b8101031261023c576020935190610b2b565b3d9150610c84565b7fc40b05a4000000000000000000000000000000000000000000000000000000005f5260045ffd5b610cec915060203d602011610c6f57610c61818361214c565b86610ac1565b7f38af65f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b5060c0830151841115610a5a565b7fc7eff8f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461023c57610d5e3661218d565b610d66612292565b91335f52601260205260ff60405f2054166111145783158015611107575b6110df5773ffffffffffffffffffffffffffffffffffffffff6101208401511633146110b7576004548351811015610cab571561106a575b6002546040517f5e68290e00000000000000000000000000000000000000000000000000000000815260048101869052336024820152919073a7e97b3134654a18a7e743157cf8df0239eadd7a9073ffffffffffffffffffffffffffffffffffffffff16602084604481855af490811561086a575f91611035575b60209450610e74604051968795869485947f238a4d1e000000000000000000000000000000000000000000000000000000008652600486016124da565b03915af490811561086a575f91611016575b5015610c1f5760c0810151421015610fee5760a001514210610fc657805f52601560205260405f20805468010000000000000000811015610f9957610ed0916001820181556121ff565b81549060031b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42831b921b1916179055335f52601260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055335f5260136020528060405f2055805f52601460205260405f20610f5b8154612425565b9055610f68600454612425565b6004556040519081527fd0e6c39f2e086dc49f1524b47725526a56945cd1ff661f37976f1725a1e5698660203392a2005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f7fa01202000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f7a19ed05000000000000000000000000000000000000000000000000000000005f5260045ffd5b61102f915060203d602011610c6f57610c61818361214c565b83610e86565b90506020843d602011611062575b816110506020938361214c565b8101031261023c576020935190610e37565b3d9150611043565b6110b273ffffffffffffffffffffffffffffffffffffffff600154166040850151907f0000000000000000000000000000000000000000000000000000000000000000612882565b610dbc565b7fb41cf6ac000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f2a719531000000000000000000000000000000000000000000000000000000005f5260045ffd5b5060e08301518411610d84565b7f7c9a1cf9000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461023c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c576020600454604051908152f35b3461023c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c5760ff60055416156111bd576020600354604051908152f35b7f49087aad000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461023c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461023c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c57602060ff600554166040519015158152f35b3461023c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c5773ffffffffffffffffffffffffffffffffffffffff6112c161210c565b165f526013602052602060405f2054604051908152f35b3461023c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c5773ffffffffffffffffffffffffffffffffffffffff61132461210c565b165f526011602052602060ff60405f2054166040519015158152f35b3461023c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c5760043567ffffffffffffffff811161023c576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261023c57604051906113bb8261212f565b8060040135825260208201906024810135825260408301604482013581526060840160648301358152608085016084840135815260a086019060a4850135825260c087019260c4860135845260e088019460e4870135865261010487013567ffffffffffffffff811161023c5787013660238201121561023c5760048101359767ffffffffffffffff8911610f99576040519861148060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018b61214c565b808a52366024848301011161023c576020815f928c83602461012498019101378b0101526101008b0198895201359773ffffffffffffffffffffffffffffffffffffffff8916890361023c576101208a019889527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549960ff8b60401c16159a67ffffffffffffffff811680159081611ad0575b6001149081611ac6575b159081611abd575b50611a95578b60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055611a40575b50611582612961565b805115611a18578251156119f0578451156119c857835185519084518201809211610bf257106119a0575160065551600755516008555160095551600a5551600b5551600c5551600d555180519067ffffffffffffffff8211610f99576115ea600e54612241565b601f811161193d575b50602090601f83116001146118855773ffffffffffffffffffffffffffffffffffffffff9392915f918361187a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c191617600e555b51167fffffffffffffffffffffffff0000000000000000000000000000000000000000600f541617600f55604051602081526006546020820152600754604082015260085460608201526009546080820152600a5460a0820152600b5460c0820152600c5460e0820152600d546101008201526101406101208201525f600e546116de81612241565b90816101608501526001811690815f1461183957506001146117db575b5090807fa1efd1b667df697d19290a823bba3ab996cce9710e835134dad8f91ababe6b779273ffffffffffffffffffffffffffffffffffffffff600f54166101408301520390a161174857005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b600e5f9081527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd939250905b80821061181e5750909150810161018001816116fb565b83548383016101800152600190930192602090910190611807565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166101808086019190915291151560051b840190910191508290506116fb565b015190508580611622565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0831691600e5f52815f20925f5b818110611925575091600193918573ffffffffffffffffffffffffffffffffffffffff979694106118ee575b505050811b01600e55611655565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558580806118e0565b929360206001819287860151815501950193016118b4565b600e5f527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd601f840160051c81019160208510611996575b601f0160051c01905b81811061198b57506115f3565b5f815560010161197e565b9091508190611975565b7f1f675fdb000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f3a561fc1000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f3d85076c000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f1d9faab9000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558b611579565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158d611526565b303b15915061151e565b8d9150611514565b3461023c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c57611b0e612961565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461023c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c57611ba861280e565b611bb0612292565b6002549060ff8260a01c16611d3d5773ffffffffffffffffffffffffffffffffffffffff610120820151163303610875576007601054148015611d1557611ce1575b600454611cb957740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff606093161760025501611c658151337f0000000000000000000000000000000000000000000000000000000000000000612882565b5160405190815233907f39bed68a008a68cbf907d7ff6bc3629912af6516cb837cfa3f871ad9f2b8a94460203092a35f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b7fadfe6616000000000000000000000000000000000000000000000000000000005f5260045ffd5b60c0810151421015611bf2577fc492f0e7000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f8b6922ea000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fa85e6f1a000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461023c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c576020600354604051908152f35b3461023c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c57611dd6612292565b8051600454604051917fd494f4930000000000000000000000000000000000000000000000000000000083526004830152602482015260208160448173a7e97b3134654a18a7e743157cf8df0239eadd7a5af490811561086a575f91612089575b50158061207c575b61205457805160028101809111610bf25760011c905f9060019260e08201935b8451811161204c57805f5260146020528160405f20541015611e8957611e8490612425565b611e5f565b5050905060015b158061203f575b61201757905f611ea7825161246a565b5f9160019260045415915b85518511611f26578261087557845f52601460205260405f2054918183115f14611ef757505094611eef60019480611ee9866124b9565b52612425565b939095611eb2565b949080979214611f0b575b611eef90612425565b93611f1e8186611ee9611eef94886124c6565b949050611f02565b8684836001811115611ffe577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905f925f5b828110611f8157505050506040926080611f7592935b01516123ee565b82519182526020820152f35b611f8b81836124c6565b51805f52601560205260405f20547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111610bf257611fd890825f52601560205260405f206121ff565b90549060031b1c858110611ff1575b5050600101611f58565b9095509350600188611fe7565b506040926080612010611f75936124b9565b5193611f6e565b7f7f8617a2000000000000000000000000000000000000000000000000000000005f5260045ffd5b5060c08101514210611e97565b505090611e90565b7f907c5f19000000000000000000000000000000000000000000000000000000005f5260045ffd5b5060076010541415611e3f565b6120a2915060203d602011610c6f57610c61818361214c565b82611e37565b3461023c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023c5760209073ffffffffffffffffffffffffffffffffffffffff6120f761210c565b165f526012825260ff60405f20541615158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361023c57565b610140810190811067ffffffffffffffff821117610f9957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610f9957604052565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261023c576004359160243567ffffffffffffffff811161023c578260238201121561023c5780600401359267ffffffffffffffff841161023c576024848301011161023c576024019190565b8054821015612214575f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b90600182811c92168015612288575b602083101461225b57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691612250565b6040519061229f8261212f565b816006548152600754602082015260085460408201526009546060820152600a546080820152600b5460a0820152600c5460c0820152600d5460e08201526040515f81600e54916122ef83612241565b8083529260018116908115612399575060011461233a575b6123139250038261214c565b61010082015261012073ffffffffffffffffffffffffffffffffffffffff600f5416910152565b50600e5f90815290917fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd5b81831061237d57505090602061231392820101612307565b6020919350806001915483858801015201910190918392612365565b602092506123139491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101612307565b9081602091031261023c5751801515810361023c5790565b81156123f8570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610bf25760010190565b67ffffffffffffffff8111610f995760051b60200190565b9061247482612452565b612481604051918261214c565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06124af8294612452565b0190602036910137565b8051156122145760200190565b80518210156122145760209160051b010190565b9293806080957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09473ffffffffffffffffffffffffffffffffffffffff601f95168752602087015260606040870152816060870152868601375f8582860101520116010190565b612549612292565b908151600454604051917fd494f4930000000000000000000000000000000000000000000000000000000083526004830152602482015260208160448173a7e97b3134654a18a7e743157cf8df0239eadd7a5af490811561086a575f916127ef575b5015806127e2575b61205457815160028101809111610bf25760e08301925f9291600190811c905b855181116127d957805f5260146020528160405f205410156125fd576125f890612425565b6125d3565b505090915060015b1590816127cb575b5061201757905f61261e825161246a565b5f9160019260045415915b85518511612697578261087557845f52601460205260405f2054918183115f146126685750509461266060019480611ee9866124b9565b939095612629565b94908097921461267c575b61266090612425565b9361268f8186611ee961266094886124c6565b949050612673565b94509192505060018111156127b8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905f925f5b82811061273b57505050506003555b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060055416176005556006556003546040518181527f56482e870a733859b0a577d9a75f12c17bd7754ab7b2723301bfc952988b3c7960203392a290565b61274581836124c6565b51805f52601560205260405f20547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111610bf25761279290825f52601560205260405f206121ff565b90549060031b1c8581106127ab575b50506001016126cc565b909550935060015f6127a1565b506127c2906124b9565b516003556126db565b60c09150015142105f61260d565b50509091612605565b50600760105414156125b3565b612808915060203d602011610c6f57610c61818361214c565b5f6125ab565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c61285a5760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b916020915f916040519073ffffffffffffffffffffffffffffffffffffffff858301937fa9059cbb0000000000000000000000000000000000000000000000000000000085521660248301526044820152604481526128e260648261214c565b519082855af11561086a575f513d612958575073ffffffffffffffffffffffffffffffffffffffff81163b155b6129165750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6001141561290f565b73ffffffffffffffffffffffffffffffffffffffff5f5416330361298157565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffdfea2646970667358221220c078defb3c311bf18e254043f0126ee17cce3eb5e9aeced4466c3262fc7973c364736f6c634300081c0033a2646970667358221220795d69e32662b7ea1fd6ab32ea43c2b09d88a5eca951359acfd44d1fdac94e8a64736f6c634300081c0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00