7 txs
15 calls
constructor
constructor(address defaultAdmin_, address operator_, address upgrader_, address tradingPoolImplementation_, address[5] defaultTradingPoolRoles_, uint256 nativeGasAmount_, address nativeGasRecipient_, uint16 swapFee_, address swapFeeRecipient_, uint16 profitFee_, address profitFeeRecipient_, uint256[20] btcTradingTime_, uint256[20] ethTradingTime_, uint256[20] bnbTradingTime_, uint256[3] baseDepositAmount_, uint256[3] maxTotalDepositAmount_)
functions
baseDepositAmount
viewfunction baseDepositAmount(address) view returns (uint256)
BNB
viewfunction BNB() view returns (address)
BTCB
viewfunction BTCB() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
defaultTradingPoolAdmin
viewfunction defaultTradingPoolAdmin() view returns (address)
defaultTradingPoolOperator
viewfunction defaultTradingPoolOperator() view returns (address)
ETH
viewfunction ETH() view returns (address)
getAllDefaultTradingPoolExecutors
viewfunction getAllDefaultTradingPoolExecutors() view returns (address[])
getAllTotalDepositAmount
viewfunction getAllTotalDepositAmount(address depositToken_) view returns (uint256[], uint256[])
getAllTradingPoolAddresses
viewfunction getAllTradingPoolAddresses(address depositToken_, uint256 tradingTime_) view returns (address[])
getAllTradingTime
viewfunction getAllTradingTime(address depositToken_) view returns (uint256[])
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getRoleMembers
viewfunction getRoleMembers(bytes32 role) view returns (address[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
maxTotalDepositAmount
viewfunction maxTotalDepositAmount(address) view returns (uint256)
nativeGasAmount
viewfunction nativeGasAmount() view returns (uint256)
nativeGasRecipient
viewfunction nativeGasRecipient() view returns (address)
OPERATOR_ROLE
viewfunction OPERATOR_ROLE() view returns (bytes32)
paused
viewfunction paused() view returns (bool)
profitFee
viewfunction profitFee() view returns (uint16)
profitFeeRecipient
viewfunction profitFeeRecipient() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
swapFee
viewfunction swapFee() view returns (uint16)
swapFeeRecipient
viewfunction swapFeeRecipient() view returns (address)
totalDepositAmount
viewfunction totalDepositAmount(address, uint256) view returns (uint256)
tradingPoolDepositAmount
viewfunction tradingPoolDepositAmount(address) view returns (uint256)
tradingPoolImplementation
viewfunction tradingPoolImplementation() view returns (address)
UPGRADER_ROLE
viewfunction UPGRADER_ROLE() view returns (bytes32)
WBNB
viewfunction WBNB() view returns (address)
createTradingPool
payablefunction createTradingPool(address depositToken_, uint256 depositAmount_, uint256 tradingTime_, uint256 volatility_) payable returns (address tradingPoolAddress)
deleteTradingPool
nonpayablefunction deleteTradingPool(uint256 tradingTime_, address depositToken_)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
pause
nonpayablefunction pause()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
restartTradingPool
nonpayablefunction restartTradingPool(uint256 tradingTime_, address depositToken_, uint256 depositAmount_)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setBaseDepositAmount
nonpayablefunction setBaseDepositAmount(address depositToken_, uint256 baseDepositAmount_)
setDefaultTradingPoolRoles
nonpayablefunction setDefaultTradingPoolRoles(address defaultTradingPoolAdmin_, address defaultTradingPoolOperator_, address[] defaultTradingPoolExecutors_)
setMaxTotalDepositAmount
nonpayablefunction setMaxTotalDepositAmount(address depositToken_, uint256 maxTotalDepositAmount_)
setNativeGas
nonpayablefunction setNativeGas(uint256 nativeGasAmount_, address nativeGasRecipient_)
setProfitFee
nonpayablefunction setProfitFee(uint16 profitFee_, address profitFeeRecipient_)
setSwapFee
nonpayablefunction setSwapFee(uint16 swapFee_, address swapFeeRecipient_)
setTradingPoolImplementation
nonpayablefunction setTradingPoolImplementation(address tradingPoolImplementation_)
setTradingTime
nonpayablefunction setTradingTime(address depositToken_, uint256[] tradingTime_)
unpause
nonpayablefunction unpause()
events
BaseDepositAmountSet
event BaseDepositAmountSet(address depositToken, uint256 baseDepositAmount)
DefaultTradingPoolRolesSet
event DefaultTradingPoolRolesSet(address defaultTradingPoolAdmin, address defaultTradingPoolOperator, address[] defaultTradingPoolExecutors)
MaxTotalDepositAmountSet
event MaxTotalDepositAmountSet(address depositToken, uint256 maxTotalDepositAmount)
NativeGasSet
event NativeGasSet(uint256 nativeGasAmount, address nativeGasRecipient)
Paused
event Paused(address account)
ProfitFeeSet
event ProfitFeeSet(uint16 profitFee, address profitFeeRecipient)
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)
SwapFeeSet
event SwapFeeSet(uint16 swapFee, address swapFeeRecipient)
TradingPoolCreated
event TradingPoolCreated(address tradingPoolOwner, address tradingPoolAddress, address depositToken, uint256 depositAmount, uint256 tradingTime, uint256 volatility, uint16 swapFee)
TradingPoolDeleted
event TradingPoolDeleted(address tradingPoolAddress, uint256 tradingTime, address depositToken, uint256 depositAmount)
TradingPoolImplementationSet
event TradingPoolImplementationSet(address tradingPoolImplementation)
TradingPoolRestarted
event TradingPoolRestarted(address tradingPoolAddress, uint256 tradingTime, address depositToken, uint256 depositAmount)
TradingTimeSet
event TradingTimeSet(address depositToken, uint256[] tradingTime)
Unpaused
event Unpaused(address account)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
FailedDeployment
error FailedDeployment()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InsufficientNativeGasAmount
error InsufficientNativeGasAmount()
InvalidDepositAmount
error InvalidDepositAmount()
InvalidDepositToken
error InvalidDepositToken()
InvalidMaxTotalDepositAmount
error InvalidMaxTotalDepositAmount()
InvalidTradingPoolAddress
error InvalidTradingPoolAddress()
InvalidTradingTime
error InvalidTradingTime()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
creation bytecode
0x6080604052346105e05761376280380380610019816105e4565b9283398101610a20828203126105e0576100328261061d565b9061003f6020840161061d565b9161004c6040850161061d565b6100586060860161061d565b9183609f870112156105e05761006e60a06105e4565b906101208701828682116105e0579088959493929160808701905b8282106105b957878a818080808e818e8e8e8e8e519161014086016100ad9061061d565b946100bb6101608801610631565b946100c9610180890161061d565b98808080806100db6101a08e01610631565b9c6101c0016100e99061061d565b9e6101e001906100f891610640565b9e610460019061010791610640565b9e6106e0019061011691610640565b9e610960019061012591610685565b9f6109c0019061013491610685565b9d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055610162856106ed565b9461021d95610577575b5061017681610763565b610528575b50610185816107e3565b6104d9575b5060028054610100600160a81b03191660089290921b610100600160a81b03169190911790558051600380546001600160a01b03199081166001600160a01b039384161790915560208301516004805490921690831617905560408201516101f29116610863565b50606081015161020a906001600160a01b0316610863565b50608001516001600160a01b0316610863565b506007556008805461ffff60a01b60a093841b81166001600160a01b039586166001600160b01b03199384161717909255600980549590931b909116948316931692909217929092179055600a8054929091166001600160a01b03199092169190911790555f5b601481106104855750505f5b601481106104315750505f5b601481106103ea578351737130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c5f818152600c60209081527fa95af2a2f82f3d8ec72a3ea67e4a88a9255c1c0c13a06876758324400fc5a05d9390935582870151732170ed0880ac9a755fd29b2688956bd959f933f88083527ff7695b429f8c98e606e8520311f5f1ed7514942fe8b11d0cd36d3fea52bf3a3a919091556040888101518380527f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116e8558751938352600d85527f2bea9421072f5d1d0f7fe49b242507556b4778e640f47fcd5999cce4d0f782e993909355928601519281527fdcabf2e90f6504eb284a8cbe6a3e90af348d849693c5ff3b3212b0286c61544892909255848101519180527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee9190915551612d6f90816109338239f35b5f8052600b60205260019061042a7fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f7661042383866106c8565b51906108d6565b500161029c565b732170ed0880ac9a755fd29b2688956bd959f933f85f52600b60205260019061047e7fa0fa3cb5c8065a227bf75967d94d6f8e1fd7c292abcf39b4b02cdf0b6d41f5a661042383866106c8565b5001610290565b737130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c5f52600b6020526001906104d27f7033852e59181368731337839ac46c77c35e329ff9558c4585b667d816425c1161042383866106c8565b5001610284565b5f5160206136c25f395f51905f525f526001602052610521906001600160a01b03167fc1e9f81cd57f65f175ba2a325b8703682933a6ee2fee8d5f5a769f1a1e7b863f6108d6565b508e61018a565b5f5160206136e25f395f51905f525f526001602052610570906001600160a01b03167f31c1e66639f421f1853aeefe8ad6b62a3b96f3287efe23106923cd924aa025c26108d6565b508f61017b565b5f805260016020526105b2906001600160a01b03167fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb496108d6565b505f61016c565b8192939495969750602091906105cf839261061d565b815201910189969594939291610089565b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761060957604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036105e057565b519061ffff821682036105e057565b9080601f830112156105e0576106576102806105e4565b91829061028081019283116105e057905b8282106106755750505090565b8151815260209182019101610668565b9080601f830112156105e05761069b60606105e4565b918290606081019283116105e057905b8282106106b85750505090565b81518152602091820191016106ab565b9060148110156106d95760051b0190565b634e487b7160e01b5f52603260045260245ffd5b6001600160a01b0381165f9081525f5160206137425f395f51905f52602052604090205460ff1661075e576001600160a01b03165f8181525f5160206137425f395f51905f5260205260408120805460ff191660011790553391905f5160206136a25f395f51905f528180a4600190565b505f90565b6001600160a01b0381165f9081525f5160206137025f395f51905f52602052604090205460ff1661075e576001600160a01b03165f8181525f5160206137025f395f51905f5260205260408120805460ff191660011790553391905f5160206136e25f395f51905f52905f5160206136a25f395f51905f529080a4600190565b6001600160a01b0381165f9081525f5160206137225f395f51905f52602052604090205460ff1661075e576001600160a01b03165f8181525f5160206137225f395f51905f5260205260408120805460ff191660011790553391905f5160206136c25f395f51905f52905f5160206136a25f395f51905f529080a4600190565b805f52600660205260405f2054155f1461075e57600554680100000000000000008110156106095760018101806005558110156106d9577f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0018190556005545f9182526006602052604090912055600190565b6001810190825f528160205260405f2054155f1461092b5780546801000000000000000081101561060957600181018083558110156106d9578390825f5260205f20015554915f5260205260405f2055600190565b5050505f9056fe608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c90816301ffc9a71461223e5750806307cbe42a14611b2657806309e1def714611aec57806319725b6314611a9a5780631e2060541461194457806322d40074146118e157806323a8a34514611869578063248a9ca3146118185780632f2ff15d1461178057806336568abe146116f75780633f4ba83a1461163a57806349d0b846146114835780634a1f600e146113845780634bffbcbd146111e25780634e8fe8591461119057806354857a4d1461112d57806354cf2aeb146110ea578063562fd1961461101e5780635833ba4614610fcc57806358f7f6d21461080b5780635c975abb14610f8b5780635e5ada3514610f395780636aaaa25114610e14578063722bc16314610d6d578063782f98f914610d185780638322fff214610ccb5780638456cb5914610c345780638dd9500214610be75780639010d07c14610b7757806390b9e07b14610a6a578063915e515b14610a2e57806391d14854146109b957806393d1e49d146108b4578063987039b114610845578063a217fddf1461080b578063a3246ad3146107aa578063ca15c87314610762578063ce162f42146106aa578063cf8074be14610658578063d547741f146105f3578063e507ccb714610590578063e9c9f44f14610543578063ec1302e31461038d578063f5b541a614610334578063f72c0d8b146102db578063f90766a6146102985763f9c6b3b50361000f57346102955760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557604060209173ffffffffffffffffffffffffffffffffffffffff61027a61232d565b168152600e8352818120602435825283522054604051908152f35b80fd5b503461029557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557602061ffff60095460a01c16604051908152f35b503461029557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102955760206040517f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e38152f35b503461029557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102955760206040517f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9298152f35b50346102955760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557600435906103c9612350565b6103d16125e9565b6103d961261d565b73ffffffffffffffffffffffffffffffffffffffff811692838352600f6020526040832081845260205261041f6040842033906001915f520160205260405f2054151590565b1561051b577fabb50a204c2dc4c8a3dda998f174e434db6d2d23efcdc7e6fdee1e15bb01c99f929333855260106020526040852054818652600e6020526040862083875260205261047560408720918254612573565b90558452600f602052604084208185526020526104953360408620612c09565b5033845260106020526104e3604085205460405193849333859094939273ffffffffffffffffffffffffffffffffffffffff9060609382608085019816845260208401521660408201520152565b0390a1338152601060205280604081205560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005580f35b6004837f8f9daf2d000000000000000000000000000000000000000000000000000000008152fd5b503461029557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610295576020604051737130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c8152f35b50346102955760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557604060209173ffffffffffffffffffffffffffffffffffffffff6105e261232d565b168152601083522054604051908152f35b50346102955760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557610654600435610631612350565b9061064f61064a825f525f602052600160405f20015490565b61283c565b6128a2565b5080f35b503461029557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557602073ffffffffffffffffffffffffffffffffffffffff600a5416604051908152f35b50346102955760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610295577f24c0cb561118232aa1a845ca4db04bed0ccef6f215f0e81fc5d2deb91905eca4604060043573ffffffffffffffffffffffffffffffffffffffff61071d612350565b61072561274c565b8260075516807fffffffffffffffffffffffff0000000000000000000000000000000000000000600854161760085582519182526020820152a180f35b50346102955760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102955760406020916004358152600183522054604051908152f35b50346102955760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610295576107f36040610807926004358152600160205220612a2d565b604051918291602083526020830190612373565b0390f35b503461029557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557602090604051908152f35b50346102955760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610295576107f360406108079273ffffffffffffffffffffffffffffffffffffffff61089b61232d565b168152600f602052818120602435825260205220612a2d565b5034610295577fcb9df602920903df0c7e06908e5dd6d8071de094b4a7c351399f8ed4bac8417c61ffff73ffffffffffffffffffffffffffffffffffffffff6109b36108ff36612420565b929061090961274c565b7fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff75ffff00000000000000000000000000000000000000006009549260a01b16911617928360095516807fffffffffffffffffffffffff0000000000000000000000000000000000000000600a541617600a5560405193849360a01c168390929173ffffffffffffffffffffffffffffffffffffffff60209161ffff604085019616845216910152565b0390a180f35b50346102955760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102955773ffffffffffffffffffffffffffffffffffffffff6040610a08612350565b926004358152806020522091165f52602052602060ff60405f2054166040519015158152f35b503461029557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610295576020600754604051908152f35b50346102955760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557610aa261232d565b9060243591610aaf61274c565b73ffffffffffffffffffffffffffffffffffffffff8116808352600c602052610adc60408420548561247c565b610b4f578293817f506cf9d158a2844a7e76aba09fcefd05a30ebc66c58d93c2cfde49c79547e43d9452600d60205260408520558352600d6020526040832054906109b3604051928392836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b6004837f0ac07c0a000000000000000000000000000000000000000000000000000000008152fd5b50346102955760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102955773ffffffffffffffffffffffffffffffffffffffff610bd7602092600435815260018452604060243591206128e7565b90549060031b1c16604051908152f35b503461029557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557602060405173bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8152f35b503461029557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557610c6b6127d4565b610c736125e9565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060025416176002557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a180f35b503461029557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610295576020604051732170ed0880ac9a755fd29b2688956bd959f933f88152f35b503461029557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557602073ffffffffffffffffffffffffffffffffffffffff60025460081c16604051908152f35b50346102955760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610295577fc907f66f6e13546ab3b7e524a8b1fce1c43d0693ebdf66711348195948a73b51610dc661232d565b610dce61274c565b73ffffffffffffffffffffffffffffffffffffffff16808352600c60208181526040808620602435905583865291815281852054825193845290830152819081016109b3565b50346102955760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102955773ffffffffffffffffffffffffffffffffffffffff610e6161232d565b1690818152600b602052610e7760408220612a2d565b90828152600b602052604081205490610e8f826125bd565b93610e9d60405195866124ed565b8285527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610eca846125bd565b01366020870137815b838110610f0457610ef685610807886040519384936040855260408501906123ed565b9083820360208501526123ed565b600190828452600e60205260408420610f1d82886125d5565b5185526020526040842054610f3282896125d5565b5201610ed3565b503461029557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557602073ffffffffffffffffffffffffffffffffffffffff60095416604051908152f35b503461029557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557602060ff600254166040519015158152f35b503461029557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557602073ffffffffffffffffffffffffffffffffffffffff60085416604051908152f35b50346102955760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610295577fb998cdb566b9b44992c48bdd53f565865c71fed4a8b46e711ec379d8d81c51e1602061107961232d565b61108161274c565b7fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff006002549260081b169116178060025573ffffffffffffffffffffffffffffffffffffffff6040519160081c168152a180f35b503461029557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557602061ffff60085460a01c16604051908152f35b50346102955760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557604060209173ffffffffffffffffffffffffffffffffffffffff61117f61232d565b168152600c83522054604051908152f35b503461029557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b50346102955760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102955761121a61232d565b611222612350565b60443567ffffffffffffffff81116113805773ffffffffffffffffffffffffffffffffffffffff91611259839236906004016123bc565b93909461126461274c565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006003541617600355167fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455825b81811061133f57837fc8e20826b522c88516021bfe2e2803bb25620c9f06a3029a8dd9fe6928e2f99d73ffffffffffffffffffffffffffffffffffffffff6003541673ffffffffffffffffffffffffffffffffffffffff60045416906109b36113216129e3565b60405193849384526020840152606060408401526060830190612373565b61134a818385612580565b359073ffffffffffffffffffffffffffffffffffffffff821680920361137c576113756001926128fc565b50016112ba565b8480fd5b8380fd5b5034610295577fa7787b06f33ff203e3bda45dc5eaffa2800abddae170774f240f088fe6b14bb961ffff73ffffffffffffffffffffffffffffffffffffffff6109b36113cf36612420565b92906113d961274c565b7fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff75ffff00000000000000000000000000000000000000006008549260a01b16911617928360085516807fffffffffffffffffffffffff0000000000000000000000000000000000000000600954161760095560405193849360a01c168390929173ffffffffffffffffffffffffffffffffffffffff60209161ffff604085019616845216910152565b50346102955760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557600435906114bf612350565b604435926114cb6125e9565b6114d361261d565b73ffffffffffffffffffffffffffffffffffffffff821693848452600f602052604084208285526020526115196040852033906001915f520160205260405f2054151590565b15611612578484957f92fc36f2377247c6d1e23efbbfaada76c02476fda9afb1063822b93a4a45b93a9552600e60205260408620838752602052611577826115726040892054338a52601060205260408a205490612573565b6124b3565b908652600e6020526040862083875260205260408620553385526010602052604085205533845260106020526115e8604085205460405193849333859094939273ffffffffffffffffffffffffffffffffffffffff9060609382608085019816845260208401521660408201520152565b0390a160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005580f35b6004847f8f9daf2d000000000000000000000000000000000000000000000000000000008152fd5b503461029557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610295576116716127d4565b60025460ff8116156116cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166002557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a180f35b6004827f8dfc202b000000000000000000000000000000000000000000000000000000008152fd5b50346102955760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102955761172f612350565b3373ffffffffffffffffffffffffffffffffffffffff82160361175857610654906004356128a2565b6004827f6697b232000000000000000000000000000000000000000000000000000000008152fd5b50346102955760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610295576004356117bb612350565b6117d361064a835f525f602052600160405f20015490565b6117dd8183612a75565b6117e5578280f35b611811918352600160205273ffffffffffffffffffffffffffffffffffffffff6040842091169061298b565b505f808280f35b50346102955760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102955760206118616004355f525f602052600160405f20015490565b604051908152f35b50346102955760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610295576118cd60406108079273ffffffffffffffffffffffffffffffffffffffff6118bf61232d565b168152600b60205220612a2d565b6040519182916020835260208301906123ed565b50346102955760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557604060209173ffffffffffffffffffffffffffffffffffffffff61193361232d565b168152600d83522054604051908152f35b50346102955760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102955761197c61232d565b60243567ffffffffffffffff8111611a96576119b173ffffffffffffffffffffffffffffffffffffffff9136906004016123bc565b9190926119bc61274c565b1691828452600b602052836040812080548260018301905b828110611a675750505055835b828110611a3c57847faebe1857238082d59d313a57c44f041ec1e0acd011980017778b8d5dda948cd885808352600b602052611a1f60408420612a2d565b906109b360405192839283526040602084015260408301906123ed565b600190848652600b602052611a6060408720611a59838787612580565b359061298b565b50016119e1565b839450611a788160019394956128e7565b90549060031b1c8952826020528860408120550190879392916119d4565b8280fd5b503461029557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029557602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b503461029557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610295576108076107f36129e3565b5060807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261211a57611b5961232d565b9060243573ffffffffffffffffffffffffffffffffffffffff60443593611b7e6125e9565b611b8661261d565b1692737130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c84141580612220575b80612217575b6121f057835f52600b602052611bd38160405f206001915f520160205260405f2054151590565b156121c857835f52600c602052611bee60405f20548361247c565b6121a057835f52600e60205260405f20815f52602052611c128260405f20546124b3565b845f52600d60205260405f2054106121a057835f52600e60205260405f20815f5260205260405f20611c458382546124b3565b9055831592831561216e57611c5c600754846124b3565b3410612146575b6e5af43d82803e903d91602b57fd5bf37fffffffffffffffffffffffffffffffffff000000000000000000000000000000600254763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260901c16175f5260701b1617602052603760095ff073ffffffffffffffffffffffffffffffffffffffff811694851561211e57865f52600f60205260405f20845f52602052611d068660405f2061298b565b50855f5260106020528460405f205573ffffffffffffffffffffffffffffffffffffffff60035416611d366129e3565b73ffffffffffffffffffffffffffffffffffffffff600454169061ffff60085460a01c16926009549273ffffffffffffffffffffffffffffffffffffffff600a54168b3b1561211a5761ffff5f95611dcb9760405198899788977f5780157000000000000000000000000000000000000000000000000000000000895260048901526101806024890152610184880190612373565b94604487015233606487015230608487015260a486015273ffffffffffffffffffffffffffffffffffffffff811660c486015260a01c1660e48401526101048301528b61012483015289610144830152886101648301520381838b5af1801561210f576120fa575b501561203957611e6573ffffffffffffffffffffffffffffffffffffffff60085416611e5f8634612573565b90612694565b73bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c3b1561202a576040517fd0e30db000000000000000000000000000000000000000000000000000000000815282816004818873bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c5af1801561202e5790859291612010575b506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9190911660048201526024810191909152906020826044818473bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c5af190811561200457509260e092602096927f9ed8a61caad16996867c8c3d1e65ce7349c707519007b8ef344628c66c77eac695611fd7575b505b61ffff60085460a01c169160405193338552878986015260408501526060840152608083015260643560a083015260c0820152a160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055604051908152f35b611ff690883d8a11611ffd575b611fee81836124ed565b81019061255b565b505f611f75565b503d611fe4565b604051903d90823e3d90fd5b838092935061201e916124ed565b61202a5783905f611ed2565b5080fd5b6040513d85823e3d90fd5b5061205d73ffffffffffffffffffffffffffffffffffffffff600854163490612694565b604051907f23b872dd000000000000000000000000000000000000000000000000000000008252336004830152846024830152836044830152602082606481848a5af190811561200457509260e092602096927f9ed8a61caad16996867c8c3d1e65ce7349c707519007b8ef344628c66c77eac6956120dd575b50611f77565b6120f390883d8a11611ffd57611fee81836124ed565b505f6120d7565b6121079193505f906124ed565b5f915f611e33565b6040513d5f823e3d90fd5b5f80fd5b7fb06ebf3d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7ff8610a08000000000000000000000000000000000000000000000000000000005f5260045ffd5b600754341015611c63577ff8610a08000000000000000000000000000000000000000000000000000000005f5260045ffd5b7ffe9ba5cd000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fad5ce359000000000000000000000000000000000000000000000000000000005f5260045ffd5b7ede0807000000000000000000000000000000000000000000000000000000005f5260045ffd5b50831515611bac565b50732170ed0880ac9a755fd29b2688956bd959f933f8841415611ba6565b3461211a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261211a57600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361211a57817f5a05180f00000000000000000000000000000000000000000000000000000000602093149081156122d0575b5015158152f35b7f7965db0b00000000000000000000000000000000000000000000000000000000811491508115612303575b50836122c9565b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836122fc565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361211a57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361211a57565b90602080835192838152019201905f5b8181106123905750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612383565b9181601f8401121561211a5782359167ffffffffffffffff831161211a576020808501948460051b01011161211a57565b90602080835192838152019201905f5b81811061240a5750505090565b82518452602093840193909201916001016123fd565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604091011261211a5760043561ffff8116810361211a579060243573ffffffffffffffffffffffffffffffffffffffff8116810361211a5790565b8115612486570690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b919082018092116124c057565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761252e57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b9081602091031261211a5751801515810361211a5790565b919082039182116124c057565b91908110156125905760051b0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b67ffffffffffffffff811161252e5760051b60200190565b80518210156125905760209160051b010190565b60ff600254166125f557565b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00541461266c5760027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b81471061271c57604051906020820182811067ffffffffffffffff82111761252e575f9373ffffffffffffffffffffffffffffffffffffffff859493858095819560405252165af1156126e357565b3d156126f4576040513d5f823e3d90fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b50477fcf479181000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b335f9081527fee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319f602052604090205460ff161561278457565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92960245260445ffd5b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161561280c57565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004525f60245260445ffd5b805f525f60205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f5260205260ff60405f205416156128735750565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f523360045260245260445ffd5b6128ac8282612b41565b91826128b757505090565b6128e3915f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f20911690612c09565b5090565b8054821015612590575f5260205f2001905f90565b805f52600660205260405f2054155f14612986576005546801000000000000000081101561252e5761296f61293a82600185940160055560056128e7565b81939154907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060031b92831b921b19161790565b9055600554905f52600660205260405f2055600190565b505f90565b5f8281526001820160205260409020546129dd578054906801000000000000000082101561252e57826129c861293a8460018096018555846128e7565b90558054925f520160205260405f2055600190565b50505f90565b60405190600554808352826020810160055f5260205f20925f5b818110612a14575050612a12925003836124ed565b565b84548352600194850194879450602090930192016129fd565b90604051918281549182825260208201905f5260205f20925f5b818110612a5c575050612a12925003836124ed565b8454835260019485019487945060209093019201612a47565b805f525f60205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f205416155f146129dd57805f525f60205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b805f525f60205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260ff60405f2054165f146129dd57805f525f60205260405f2073ffffffffffffffffffffffffffffffffffffffff83165f5260205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b906001820191815f528260205260405f20548015155f14612d5a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116124c0578254907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116124c057818103612d25575b50505080548015612cf8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190612cbb82826128e7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82549160031b1b19169055555f526020525f6040812055600190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b612d45612d3561293a93866128e7565b90549060031b1c928392866128e7565b90555f528360205260405f20555f8080612c83565b505050505f9056fea164736f6c634300081e000a2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e397667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929ee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319fcc1f69e0eef30e6cab9eba078dfde64e8255bf01f21b8122b031b67f051e2292ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb50000000000000000000000001df5e16a3ce47d1be491313fc779d93b810c4d1b0000000000000000000000001df5e16a3ce47d1be491313fc779d93b810c4d1b0000000000000000000000001df5e16a3ce47d1be491313fc779d93b810c4d1b0000000000000000000000006017e69bcc57bb557e178eb495b24b08c7b211a30000000000000000000000001df5e16a3ce47d1be491313fc779d93b810c4d1b0000000000000000000000001df5e16a3ce47d1be491313fc779d93b810c4d1b000000000000000000000000ee7dc464644d3ce4db6e419163d26cc3b34b951b0000000000000000000000001d25a8219c27492e937dfb90ee247bc72dd79e8800000000000000000000000073f240cd70062cecae09e776b786e39cf582fa86000000000000000000000000000000000000000000000000000001d1a94a2000000000000000000000000000ee7dc464644d3ce4db6e419163d26cc3b34b951b000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000a119a575d217acf38dd62e0ee2fcc55ccd4f8740000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000c8e738a9c6ba935eb6d2054002bde2fa6d5ba071000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001300000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000250000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003100000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000037000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000150000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001b000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000027000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002d0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003300000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000039000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000017000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001d0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000029000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002f000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000350000000000000000000000000000000000000000000000000000000000000038000000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000012a05f200000000000000000000000000000000000000000000000000000000174876e800000000000000000000000000000000000000000000000000000000746a5288000000000000000000000000000000000000000000000000000006379da05b6000000000000000000000000000000000000000000000000000009fdf42f6e4800000000000000000000000000000000000000000000000000002d84e69f2f48000