0 txs
1 call
constructor
constructor()
functions
AA_FAS_USDC_CV
viewfunction AA_FAS_USDC_CV() view returns (address)
allYieldSources
viewfunction allYieldSources(uint256) view returns (address token, address source, address vaultToken, uint256 maxCap, uint256 depositedAmount, uint8 vaultType)
BUY_GEM_SIG
viewfunction BUY_GEM_SIG() view returns (bytes4)
CLAIM_INSTANT_REQ_SIG
viewfunction CLAIM_INSTANT_REQ_SIG() view returns (bytes4)
CLAIM_REQ_SIG
viewfunction CLAIM_REQ_SIG() view returns (bytes4)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
DEPLOYER
viewfunction DEPLOYER() view returns (address)
DEPOSIT_4626_SIG
viewfunction DEPOSIT_4626_SIG() view returns (bytes4)
DEPOSIT_AA_SIG
viewfunction DEPOSIT_AA_SIG() view returns (bytes4)
epochNumber
viewfunction epochNumber() view returns (uint256)
epochPending
viewfunction epochPending(uint256) view returns (uint256)
FAS_USDC_CV
viewfunction FAS_USDC_CV() view returns (address)
getAllYieldSources
viewfunction getAllYieldSources() view returns (tuple[])
getCollateralsYieldSourceScaled
viewfunction getCollateralsYieldSourceScaled(address _source) view returns (uint256 assets)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getTotalCollateralsScaled
viewfunction getTotalCollateralsScaled() view returns (uint256 totCollaterals)
getUnlentBalanceScaled
viewfunction getUnlentBalanceScaled() view returns (uint256 totCollateralBal)
getYieldSource
viewfunction getYieldSource(address _source) view returns (tuple)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
HYPERNATIVE_PAUSER
viewfunction HYPERNATIVE_PAUSER() view returns (address)
isPausable
viewfunction isPausable() view returns (bool)
KEYRING_POLICY
viewfunction KEYRING_POLICY() view returns (uint256)
KEYRING_WHITELIST
viewfunction KEYRING_WHITELIST() view returns (address)
MANAGER_ROLE
viewfunction MANAGER_ROLE() view returns (bytes32)
owner
viewfunction owner() view returns (address)
par
viewfunction par() view returns (address)
paused
viewfunction paused() view returns (bool)
PAUSER_ROLE
viewfunction PAUSER_ROLE() view returns (bytes32)
REDEEM_4626_SIG
viewfunction REDEEM_4626_SIG() view returns (bytes4)
SELL_GEM_SIG
viewfunction SELL_GEM_SIG() view returns (bytes4)
sPar
viewfunction sPar() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
TL_MULTISIG
viewfunction TL_MULTISIG() view returns (address)
totReservedWithdrawals
viewfunction totReservedWithdrawals() view returns (uint256)
USDC_FEED_DECIMALS
viewfunction USDC_FEED_DECIMALS() view returns (uint8)
USDC_FEED
viewfunction USDC_FEED() view returns (address)
USDC
viewfunction USDC() view returns (address)
userWithdrawalsEpochs
viewfunction userWithdrawalsEpochs(address, uint256) view returns (uint256)
WITHDRAW_4626_SIG
viewfunction WITHDRAW_4626_SIG() view returns (bytes4)
WITHDRAW_AA_SIG
viewfunction WITHDRAW_AA_SIG() view returns (bytes4)
yieldSources
viewfunction yieldSources(address) view returns (address token, address source, address vaultToken, uint256 maxCap, uint256 depositedAmount, uint8 vaultType)
addYieldSource
nonpayablefunction addYieldSource(address _source, address _token, address _vaultToken, uint256 _maxCap, tuple[] _allowedMethods, uint8 _vaultType)
callWhitelistedMethods
nonpayablefunction callWhitelistedMethods(address[] _sources, bytes4[] _methods, bytes[] _args)
claimRedeemRequest
nonpayablefunction claimRedeemRequest(address _receiver, uint256 _epoch) returns (uint256)
depositFunds
nonpayablefunction depositFunds(address[] _sources, bytes4[] _methods, bytes[] _args)
depositYield
nonpayablefunction depositYield()
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address token, uint256 amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _admin, address _pauser, address _par, address _sPar, address[] _managers)
pause
nonpayablefunction pause()
redeemFunds
nonpayablefunction redeemFunds(address[] _sources, bytes4[] _methods, bytes[] _args, uint256 _epoch)
removeYieldSource
nonpayablefunction removeYieldSource(address _source)
renounceOwnership
nonpayablefunction renounceOwnership()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
requestRedeem
nonpayablefunction requestRedeem(address _receiver, uint256 _amount)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
stopEpoch
nonpayablefunction stopEpoch()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
events
Initialized
event Initialized(uint64 version)
NewEpoch
event NewEpoch(uint256 indexed epoch)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
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)
Unpaused
event Unpaused(address account)
YieldSourceAdded
event YieldSourceAdded(address indexed source, address indexed token)
YieldSourceCall
event YieldSourceCall(address indexed source, bytes4 indexed method, bytes args)
YieldSourceDeposit
event YieldSourceDeposit(address indexed source, address indexed token, uint256 amount)
YieldSourceRedeem
event YieldSourceRedeem(address indexed source, address indexed token, uint256 amount)
YieldSourceRemoved
event YieldSourceRemoved(address indexed source)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
InsufficientBalance
error InsufficientBalance()
Invalid
error Invalid()
InvalidInitialization
error InvalidInitialization()
MaxCap
error MaxCap()
NotAllowed
error NotAllowed()
NotInitializing
error NotInitializing()
NotReady
error NotReady()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ParamNotAllowed
error ParamNotAllowed()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedDecreaseAllowance
error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
YieldSourceInvalid
error YieldSourceInvalid()
YieldSourceNotEmpty
error YieldSourceNotEmpty()
creation bytecode
0x6080806040523460aa575f5160206157f85f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b60405161574990816100af8239f35b6001600160401b0319166001600160401b039081175f5160206157f85f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806301ffc9a7146103bf5780630fe6040a1461031a578063248a9ca3146103ba5780632c6aca64146103b55780632f2ff15d146103b057806331cd9065146103ab578063340ea280146103a657806336568abe146103a15780633f4ba83a1461039c5780634704689114610397578063495d32cb146103925780635b03fb6c1461038d5780635b223e52146103885780635c975abb146103835780635d32272f1461037e57806365b89f9f1461037957806366bcad7f1461037457806366c86fcb1461036f5780636bccefbd1461036a578063715018a61461036557806374b7a6a11461036057806376983f361461035b5780637a8d1c8f146103565780638456cb591461035157806389a302711461034c5780638d9e3017146103475780638da5cb5b14610342578063912171511461033d578063914001fb1461033857806391d148541461033357806395ccea671461032e57806396c1778a14610329578063a09a160114610324578063a201e4141461031f578063a217fddf1461031a578063b0349b0c14610315578063b69af17d14610310578063c1b8411a1461030b578063c213c73b14610306578063c406584a14610301578063c9445773146102fc578063cdb59982146102f7578063d0a9471c146102f2578063d547741f146102ed578063d5c976ea146102e8578063d5f1b5b7146102e3578063d7f531b5146102de578063db2dde20146102d9578063dc97da8d146102d4578063df08b372146102cf578063e1d4658b146102ca578063e63ab1e9146102c5578063ec87621c146102c0578063ef55bd2e146102bb578063f2fde38b146102b6578063f4145a83146102b1578063f7f26ed5146102ac578063f8453e7c146102a75763fdabbeb8146102a2575f80fd5b612214565b611f72565b611e1e565b611e01565b611dd4565b611d9a565b611d60565b611d26565b611cec565b611cd2565b611be0565b611bad565b611b7f565b611b45565b611b0b565b611aab565b611a71565b611a46565b611a18565b6117f3565b611515565b6114e7565b6114c0565b61142e565b61049d565b61138d565b61134c565b611312565b6112c9565b61124a565b611220565b61119d565b61111a565b6110ec565b6110be565b610f8b565b610f70565b610ed6565b610e9c565b610de0565b610d76565b610c3b565b610c0d565b610b71565b610b43565b610b02565b610aab565b610a1a565b6109ce565b6107c5565b6106ea565b61067c565b610662565b6105ab565b610544565b610509565b6104b7565b6103f2565b7fffffffff000000000000000000000000000000000000000000000000000000008116036103ee57565b5f80fd5b346103ee5760206003193601126103ee5760207fffffffff00000000000000000000000000000000000000000000000000000000600435610432816103c4565b167f7965db0b000000000000000000000000000000000000000000000000000000008114908115610469575b506040519015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150145f61045e565b5f9103126103ee57565b346103ee575f6003193601126103ee5760206040515f8152f35b346103ee5760206003193601126103ee5760206105016004355f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b604051908152f35b346103ee575f6003193601126103ee576020600654604051908152f35b73ffffffffffffffffffffffffffffffffffffffff8116036103ee57565b346103ee5760406003193601126103ee576105a960243560043561056782610526565b6105a461059f825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b6140b5565b61432d565b005b346103ee575f6003193601126103ee576105c361402d565b6007547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818111610635575f52600560205260405f205461063a576001810180911161063557806007557febad8099c467528a56c98b63c8d476d251cf1ffb4c75db94b4d23fa2b6a1e3355f80a2005b6122ec565b7f9488aaa6000000000000000000000000000000000000000000000000000000005f5260045ffd5b346103ee575f6003193601126103ee57602061050161246a565b346103ee5760406003193601126103ee5760043560243561069c81610526565b3373ffffffffffffffffffffffffffffffffffffffff8216036106c2576105a99161444a565b7f6697b232000000000000000000000000000000000000000000000000000000005f5260045ffd5b346103ee575f6003193601126103ee5761070261455f565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff81161561079d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b346103ee575f6003193601126103ee576107dd61402d565b6108176107fe5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b6004602061083a73ffffffffffffffffffffffffffffffffffffffff84166107fe565b604051928380927f18160ddd0000000000000000000000000000000000000000000000000000000082525afa801561097d57610881915f9161099f575b5060065490612361565b61088961246a565b90808211156109965761089b91612354565b905b816108a457005b803b156103ee575f60405180927f2dca44160000000000000000000000000000000000000000000000000000000082528183816108e988600483019190602083019252565b03925af1801561097d57610982575b5061091b6107fe60015473ffffffffffffffffffffffffffffffffffffffff1690565b803b156103ee576040517f8bdf67f200000000000000000000000000000000000000000000000000000000815260048101929092525f908290602490829084905af1801561097d5761096957005b806109775f6105a993611ea3565b80610493565b6123f2565b806109775f61099093611ea3565b5f6108f8565b50505f9061089d565b6109c1915060203d6020116109c7575b6109b98183611ea3565b810190612411565b5f610877565b503d6109af565b346103ee575f6003193601126103ee57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b60ff8116036103ee57565b60a43590610a1882610a00565b565b346103ee5760c06003193601126103ee57600435610a3781610526565b60243590610a4482610526565b604435610a5081610526565b6084359160643567ffffffffffffffff84116103ee57366023850112156103ee5783600401359267ffffffffffffffff84116103ee573660248560061b870101116103ee576105a9956024610aa3610a0b565b9601936129f2565b346103ee5760406003193601126103ee57600435610ac881610526565b73ffffffffffffffffffffffffffffffffffffffff60243591165f52600460205260405f20905f52602052602060405f2054604051908152f35b346103ee575f6003193601126103ee57602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b346103ee575f6003193601126103ee5760206040517316a9fa2fda030272ce99b29cf780dfa30361e0f38152f35b346103ee5760406003193601126103ee57600435610b8e81610526565b60243590610b9a61469b565b610ba26146ee565b73ffffffffffffffffffffffffffffffffffffffff60075491165f52600460205260405f20815f5260205260405f2080549083820180921161063557555f52600560205260405f20805491808301809311610635576105a992610c089255600654612361565b600655565b346103ee575f6003193601126103ee57602060405173fdbb4d606c199f091143bd604c85c191a526fbd08152f35b346103ee575f6003193601126103ee5760206040517f33986ffa000000000000000000000000000000000000000000000000000000008152f35b90602080835192838152019201905f5b818110610c925750505090565b825180517fffffffff0000000000000000000000000000000000000000000000000000000016855260209081015160ff168186015260409094019390920191600101610c85565b90610d739073ffffffffffffffffffffffffffffffffffffffff835116815273ffffffffffffffffffffffffffffffffffffffff602084015116602082015273ffffffffffffffffffffffffffffffffffffffff6040840151166040820152606083015160608201526080830151608082015260c080610d6860a086015160e060a086015260e0850190610c75565b94015160ff16910152565b90565b346103ee5760206003193601126103ee5773ffffffffffffffffffffffffffffffffffffffff600435610da881610526565b610db0612be8565b50165f526002602052610ddc610dc860405f20612caa565b604051918291602083526020830190610cd9565b0390f35b346103ee575f6003193601126103ee57610df861455f565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346103ee575f6003193601126103ee5760206040517f8d7ef9bb000000000000000000000000000000000000000000000000000000008152f35b346103ee575f6003193601126103ee57610eee612db1565b6040518091602082016020835281518091526040830190602060408260051b8601019301915f905b828210610f2557505050500390f35b91936020610f60827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186528851610cd9565b9601920192018594939192610f16565b346103ee575f6003193601126103ee57602060405160048152f35b346103ee575f6003193601126103ee57335f9081527f75442b0a96088b5456bc4ed01394c96a4feec0f883c9494257d76b96ab1c9b6b602052604090205460ff161561106e57610fd961469b565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005416177fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60245260445ffd5b346103ee575f6003193601126103ee576020604051730b2c639c533813f4aa9d7837caf62653d097ff858152f35b346103ee575f6003193601126103ee57602060405173fa6ba4b504814f3fb524ea506c79d76077e5d5408152f35b346103ee575f6003193601126103ee57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b9181601f840112156103ee5782359167ffffffffffffffff83116103ee576020808501948460051b0101116103ee57565b346103ee5760806003193601126103ee5760043567ffffffffffffffff81116103ee576111ce90369060040161116c565b9060243567ffffffffffffffff81116103ee576111ef90369060040161116c565b926044359367ffffffffffffffff85116103ee576112146105a995369060040161116c565b93909260643595612f51565b346103ee5760206003193601126103ee576004355f526005602052602060405f2054604051908152f35b346103ee5760406003193601126103ee57602060ff6112bd60243560043561127182610526565b5f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800845260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54166040519015158152f35b346103ee5760406003193601126103ee576105a96004356112e981610526565b602435906112f561455f565b73ffffffffffffffffffffffffffffffffffffffff339116614d09565b346103ee575f6003193601126103ee5760206040517fccc143b8000000000000000000000000000000000000000000000000000000008152f35b346103ee575f6003193601126103ee57602060ff7f34255c687a9ae703b4ae30638c7776ee81513fdfa4b4dd654e5578b21b95d80054166040519015158152f35b346103ee575f6003193601126103ee5760206040517f95991276000000000000000000000000000000000000000000000000000000008152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6003548110156114105760035f52600760205f20910201905f90565b6113c7565b8054821015611410575f52600760205f20910201905f90565b346103ee5760206003193601126103ee576004356003548110156103ee57611455906113f4565b50805460018201546002830154600384015460048501546006909501546040805173ffffffffffffffffffffffffffffffffffffffff9687168152948616602086015294909216938301939093526060820192909252608081019290925260ff1660a082015260c090f35b346103ee5760206003193601126103ee5760206105016004356114e281610526565b6133d1565b346103ee575f6003193601126103ee57602060405173e5dab8208c1f4cce15883348b72086dbace3e64b8152f35b346103ee5760206003193601126103ee5760043561153281610526565b61153a61455f565b61156a6115658273ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2090565b612caa565b9073ffffffffffffffffffffffffffffffffffffffff6115a16107fe845173ffffffffffffffffffffffffffffffffffffffff1690565b16156117cb576115b0816133d1565b6117a3576115d56107fe835173ffffffffffffffffffffffffffffffffffffffff1690565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff83166024820152602081604481855afa90811561097d576116409284915f93611782575b506152a6565b61167061166b8273ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2090565b6134ab565b611678612db1565b80515f5b8181106116c1575b73ffffffffffffffffffffffffffffffffffffffff84167fe7816966a8707500235695bccaf160aa49f5d2cb6356db2408ded57832c8b9165f80a2005b6116ec6107fe6116d183866123fd565b515173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff6117256107fe6107fe895173ffffffffffffffffffffffffffffffffffffffff1690565b9116146117345760010161167c565b9073ffffffffffffffffffffffffffffffffffffffff94506117656117729361175f61176c93612319565b906123fd565b51916113f4565b906129a8565b61177a6134da565b5f8080611684565b61179c91935060203d6020116109c7576109b98183611ea3565b915f61163a565b7f3ad69e2b000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f5a7e258d000000000000000000000000000000000000000000000000000000005f5260045ffd5b346103ee5760606003193601126103ee5760043567ffffffffffffffff81116103ee5761182490369060040161116c565b60243567ffffffffffffffff81116103ee5761184490369060040161116c565b9160443567ffffffffffffffff81116103ee5761186590369060040161116c565b909361186f61469b565b61187761402d565b82158015611a0e575b8015611a04575b6119dc575f5b83811061189657005b80856119d37f293fd31fc9330af6e8ded58e129ab615ec6c97318fc310339efd980fc1d8d47a7fffffffff000000000000000000000000000000000000000000000000000000008a6119ab868a8f61192b838f61199f8f9160019f818f97611999898e61199361198c878f6119a59f61192b838f6119806119469f83611946918f61197b61193061192b85896119869d612e26565b612e40565b611975600561196f61194b611946898989612e26565b612e36565b73ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2090565b01612c1f565b90614736565b612e26565b99612e26565b94612e4a565b3691612ee4565b91614acb565b50612e26565b9b612e26565b93612e4a565b73ffffffffffffffffffffffffffffffffffffffff6040969296519485941697169583613573565b0390a30161188d565b7f6dac6a09000000000000000000000000000000000000000000000000000000005f5260045ffd5b5081831415611887565b5080831415611880565b346103ee575f6003193601126103ee576020604051737f70ec0bdc89f0d61e108afe921311205b4c34318152f35b346103ee5760406003193601126103ee576020610501600435611a6881610526565b602435906135f3565b346103ee575f6003193601126103ee5760206040517fb450dfce000000000000000000000000000000000000000000000000000000008152f35b346103ee5760406003193601126103ee576105a9602435600435611ace82610526565b611b0661059f825f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052600160405f20015490565b61444a565b346103ee575f6003193601126103ee5760206040517f6e553f65000000000000000000000000000000000000000000000000000000008152f35b346103ee575f6003193601126103ee5760206040517fba087652000000000000000000000000000000000000000000000000000000008152f35b346103ee575f6003193601126103ee57602060405173290c4dc2402cd77643af42ba926a15aba4d3508b8152f35b346103ee575f6003193601126103ee57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346103ee5760206003193601126103ee5773ffffffffffffffffffffffffffffffffffffffff600435611c1281610526565b165f52600260205260405f2073ffffffffffffffffffffffffffffffffffffffff815416610ddc73ffffffffffffffffffffffffffffffffffffffff6001840154169273ffffffffffffffffffffffffffffffffffffffff60028201541690600381015460ff6006600484015493015416926040519687968794909695919373ffffffffffffffffffffffffffffffffffffffff60ff948160a0978160c08b019c168a521660208901521660408701526060860152608085015216910152565b346103ee575f6003193601126103ee5760206105016138ea565b346103ee575f6003193601126103ee5760206040517f991052b7000000000000000000000000000000000000000000000000000000008152f35b346103ee575f6003193601126103ee5760206040517f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8152f35b346103ee575f6003193601126103ee5760206040517f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b088152f35b346103ee575f6003193601126103ee5760206040517fb460af94000000000000000000000000000000000000000000000000000000008152f35b346103ee5760206003193601126103ee576105a9600435611df481610526565b611dfc61455f565b613a67565b346103ee575f6003193601126103ee576020600754604051908152f35b346103ee575f6003193601126103ee57602060405160088152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff821117611e8257604052565b611e39565b60e0810190811067ffffffffffffffff821117611e8257604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611e8257604052565b60405190610a1860e083611ea3565b67ffffffffffffffff8111611e825760051b60200190565b9080601f830112156103ee578135611f2281611ef3565b92611f306040519485611ea3565b81845260208085019260051b8201019283116103ee57602001905b828210611f585750505090565b602080918335611f6781610526565b815201910190611f4b565b346103ee5760a06003193601126103ee57600435611f8f81610526565b60243590611f9c82610526565b611fa7604435610526565b611fb2606435610526565b60843567ffffffffffffffff81116103ee57611fd2903690600401611f0b565b507ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549167ffffffffffffffff61201960ff604086901c16159467ffffffffffffffff1690565b168015908161220c575b6001149081612202575b1590816121f9575b506121d1576120b691836120ad60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61215657613b54565b6120bc57005b6121277fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b6121cc680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b613b54565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f612035565b303b15915061202d565b849150612023565b346103ee5760606003193601126103ee5760043567ffffffffffffffff81116103ee57612245903690600401611f0b565b60243567ffffffffffffffff81116103ee57366023820112156103ee5780600401359061227182611ef3565b9161227f6040519384611ea3565b8083526024602084019160051b830101913683116103ee57602401905b8282106122d2575050506044359167ffffffffffffffff83116103ee576122ca6105a993369060040161116c565b929091613caa565b6020809183356122e1816103c4565b81520191019061229c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161063557565b601203906012821161063557565b9190820391821161063557565b9190820180921161063557565b6020818303126103ee5780519067ffffffffffffffff82116103ee57019080601f830112156103ee5781516123a281611ef3565b926123b06040519485611ea3565b81845260208085019260051b8201019283116103ee57602001905b8282106123d85750505090565b6020809183516123e781610526565b8152019101906123cb565b6040513d5f823e3d90fd5b80518210156114105760209160051b010190565b908160209103126103ee575190565b908160209103126103ee5751610d7381610a00565b60ff166012039060ff821161063557565b60ff16604d811161063557600a0a90565b8181029291811591840414171561063557565b5f9060045f6124906107fe825473ffffffffffffffffffffffffffffffffffffffff1690565b604051928380927f78b926360000000000000000000000000000000000000000000000000000000082525afa90811561097d575f91612672575b5080515f915b81831061252d575050506003545f905b8082106124eb575050565b909261252560019161251f6114e284612503896113f4565b50015473ffffffffffffffffffffffffffffffffffffffff1690565b90612361565b9301906124e0565b90919373ffffffffffffffffffffffffffffffffffffffff61256f6107fe61255588866123fd565b5173ffffffffffffffffffffffffffffffffffffffff1690565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152911691602082602481865afa91821561097d575f9261264f575b50602060049293604051938480927f313ce5670000000000000000000000000000000000000000000000000000000082525afa91821561097d5760019361261261260d6126189561251f945f91612621575b50612435565b612446565b90612457565b940191906124d0565b612642915060203d8111612648575b61263a8183611ea3565b810190612420565b5f612607565b503d612630565b6004925061266b602091823d81116109c7576109b98183611ea3565b92506125b5565b61268e91503d805f833e6126868183611ea3565b81019061236e565b5f6124ca565b9291926126a082611ef3565b936126ae6040519586611ea3565b602085848152019260061b8201918183116103ee57925b8284106126d25750505050565b6040848303126103ee57602060409182516126ec81611e66565b86356126f7816103c4565b81528287013561270681610a00565b838201528152019301926126c5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b8054905f815581612750575050565b5f5260205f20908101905b818110612766575050565b5f815560010161275b565b815191680100000000000000008311611e825781548383558084106127fb575b50602001905f5260205f205f915b8383106127ac5750505050565b6001602082829351805160e01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000064ff00000000858954940151861b169216171785550192019201919061279f565b825f528360205f2091820191015b8181106128165750612791565b5f8155600101612809565b600661297960c0610a189461288873ffffffffffffffffffffffffffffffffffffffff825116869073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b6128ea73ffffffffffffffffffffffffffffffffffffffff602083015116600187019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b61294c73ffffffffffffffffffffffffffffffffffffffff604083015116600287019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b606081015160038601556080810151600486015561297160a082015160058701612771565b015160ff1690565b91019060ff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b91906129b757610a1891612821565b612715565b60035468010000000000000000811015611e82578060016129e292016003556003611415565b9190916129b757610a1891612821565b929594919095612a0061455f565b73ffffffffffffffffffffffffffffffffffffffff612a5d6107fe612a438773ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b166117cb5773ffffffffffffffffffffffffffffffffffffffff84169586158015612bca575b8015612bac575b8015612ba4575b6119dc57612b33612b7e96612b7895612b429473ffffffffffffffffffffffffffffffffffffffff612b219c169b8c97612ae8612acc611ee4565b73ffffffffffffffffffffffffffffffffffffffff909a168a52565b73ffffffffffffffffffffffffffffffffffffffff8b1660208a015273ffffffffffffffffffffffffffffffffffffffff166040890152565b60608701525f60808701523691612694565b60a084015260ff1660c0830152565b612b7381612b6e8573ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2090565b612821565b6129bc565b836145cb565b7fe707395e33aba2b86eeb8427d34294bf318cfbc202805d3452f1f9a753bb77bc5f80a3565b508315612a91565b5073ffffffffffffffffffffffffffffffffffffffff831615612a8a565b5073ffffffffffffffffffffffffffffffffffffffff881615612a83565b60405190612bf582611e87565b5f60c083828152826020820152826040820152826060820152826080820152606060a08201520152565b908154612c2b81611ef3565b92612c396040519485611ea3565b81845260208401905f5260205f205f915b838310612c575750505050565b600160208192604051612c6981611e66565b60ff86547fffffffff000000000000000000000000000000000000000000000000000000008160e01b168352841c1683820152815201920192019190612c4a565b90610a18604051612cba81611e87565b60c0612da960068396612cfa73ffffffffffffffffffffffffffffffffffffffff825416869073ffffffffffffffffffffffffffffffffffffffff169052565b612d3b612d1e600183015473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff166020870152565b612d7c612d5f600283015473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff166040870152565b6003810154606086015260048101546080860152612d9c60058201612c1f565b60a0860152015460ff1690565b60ff16910152565b60035490612dbe82611ef3565b91612dcc6040519384611ea3565b80835260035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b602085015b838310612e085750505050565b60076020600192612e1885612caa565b815201920192019190612dfb565b91908110156114105760051b0190565b35610d7381610526565b35610d73816103c4565b91908110156114105760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156103ee57019081359167ffffffffffffffff83116103ee5760200182360381136103ee579190565b67ffffffffffffffff8111611e8257601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192612ef082612eaa565b91612efe6040519384611ea3565b8294818452818301116103ee578281602093845f960137010152565b8115612f24570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b91949294939093612f6061469b565b612f6861402d565b841580156133c7575b80156133bd575b80156133b2575b6119dc57612f8b612be8565b50612f9e875f52600560205260405f2090565b54955f955f5b81811061300357505050505050506007548303612fc057505050565b818110612fdf5750612fcf5750565b5f90815260056020526040812055565b91612fff9150612ff7905f52600560205260405f2090565b918254612354565b9055565b613011611946828489612e26565b61303c6115658273ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2090565b61305861304d61192b85888a612e26565b60a0830151906147f0565b6130796107fe825173ffffffffffffffffffffffffffffffffffffffff1690565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290602090829060249082905afa801561097d578a85888a945f9461337a575b50816130de61192b6130e59461198c946130ec9899612e26565b938d612e4a565b9085614acb565b5061310e6107fe835173ffffffffffffffffffffffffffffffffffffffff1690565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529190602090839060249082905afa801561097d5761315f925f9161335c575b50612354565b90600461316b846133d1565b602061318e6107fe855173ffffffffffffffffffffffffffffffffffffffff1690565b604051938480927f313ce5670000000000000000000000000000000000000000000000000000000082525afa801561097d5761260d6131d7916131dd945f916126215750612435565b90612f1a565b60046132078573ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2090565b01558161321a575b505050600101612fa4565b8b613293575b907f5fbaf84d3e4b0852ffdf50e317f255a9e2f63d8875ebb1e3f5b954300e3e8a5473ffffffffffffffffffffffffffffffffffffffff61327c6107fe60019796955173ffffffffffffffffffffffffffffffffffffffff1690565b6040519384528116931691602090a3905f8061320f565b99929190600460206132bc6107fe8e5173ffffffffffffffffffffffffffffffffffffffff1690565b604051928380927f313ce5670000000000000000000000000000000000000000000000000000000082525afa801561097d5761327c6107fe61334d60019861251f61334761260d73ffffffffffffffffffffffffffffffffffffffff977f5fbaf84d3e4b0852ffdf50e317f255a9e2f63d8875ebb1e3f5b954300e3e8a54995f916126215750612435565b88612457565b9e949596975050505050613220565b613374915060203d81116109c7576109b98183611ea3565b5f613159565b6130ec9450916130de61192b8261198c946133a56130e59760203d81116109c7576109b98183611ea3565b98509450945050506130c4565b506007548711612f7f565b5083851415612f78565b5085851415612f71565b9073ffffffffffffffffffffffffffffffffffffffff5f92165f5260026020526133fd60405f20612caa565b60c081015160ff166001810361347b5750610d73919250613435602082015173ffffffffffffffffffffffffffffffffffffffff1690565b9061347561345a604083015173ffffffffffffffffffffffffffffffffffffffff1690565b915173ffffffffffffffffffffffffffffffffffffffff1690565b91614f5e565b6002146134855750565b60400151909150610d739073ffffffffffffffffffffffffffffffffffffffff16614d85565b60065f918281558260018201558260028201558260038201558260048201556134d660058201612741565b0155565b6003548015613546577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613510816003611415565b6129b7576006815f80935582600182015582600282015582600382015582600482015561353f60058201612741565b0155600355565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b90601f836040947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09360208652816020870152868601375f8582860101520116010190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106355760010190565b604d811161063557600a0a90565b9190916135fe61469b565b6136066146ee565b613618835f52600560205260405f2090565b54158015906138d7575b61063a5761365f836136528373ffffffffffffffffffffffffffffffffffffffff165f52600460205260405f2090565b905f5260205260405f2090565b549283156138d0576136945f916136528473ffffffffffffffffffffffffffffffffffffffff165f52600460205260405f2090565b5560045f6136b96107fe825473ffffffffffffffffffffffffffffffffffffffff1690565b604051928380927f78b926360000000000000000000000000000000000000000000000000000000082525afa90811561097d575f916138b6575b50805192845f5b858110806138ad575b1561386b5773ffffffffffffffffffffffffffffffffffffffff61372d6107fe61255584886123fd565b166040517f313ce567000000000000000000000000000000000000000000000000000000008152602081600481855afa801561097d5760ff915f9161384d575b506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015291169190602081602481855afa801561097d576137ca915f9161382f575b506126126137c585612346565b6135e5565b806137e1575b5050506137dc906135b8565b6136fa565b90876138106137dc95949b613816948181115f1461381e57506131d76137c561380a8380612354565b9e612346565b91614d09565b905f806137d0565b6137c561380a6131d7928094612354565b613847915060203d81116109c7576109b98183611ea3565b5f6137b8565b613865915060203d81116126485761263a8183611ea3565b5f61376d565b5093509391505061388557610d73610c0882600654612354565b7ff4d678b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b50861515613703565b6138ca91503d805f833e6126868183611ea3565b5f6136f3565b505f925050565b506138e3600754612319565b8311613622565b5f9060045f6139106107fe825473ffffffffffffffffffffffffffffffffffffffff1690565b604051928380927f78b926360000000000000000000000000000000000000000000000000000000082525afa90811561097d575f91613a4d575b5080515f915b81831061395c57505050565b90919373ffffffffffffffffffffffffffffffffffffffff6139846107fe61255588866123fd565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152911691602082602481865afa91821561097d575f92613a2a575b50602060049293604051938480927f313ce5670000000000000000000000000000000000000000000000000000000082525afa91821561097d5760019361261261260d613a219561251f945f916126215750612435565b94019190613950565b60049250613a46602091823d81116109c7576109b98183611ea3565b92506139ca565b613a6191503d805f833e6126868183611ea3565b5f61394a565b73ffffffffffffffffffffffffffffffffffffffff168015613b285773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b90613c38613c3e92613b646156e5565b613b6c6156e5565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055613b986156e5565b613ba06156e5565b613ba86156e5565b613bb133613a67565b613bb96156e5565b613bc16156e5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330055613c2f6156e5565b613c3881614142565b50614229565b5060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f34255c687a9ae703b4ae30638c7776ee81513fdfa4b4dd654e5578b21b95d8005416177f34255c687a9ae703b4ae30638c7776ee81513fdfa4b4dd654e5578b21b95d80055565b92613cb361469b565b613cbb61402d565b83519282518414801590614023575b6119dc57613cd6612be8565b505f5b848110613d3357505050505050600754613cf16138ea565b613d10600654613d09845f52600560205260405f2090565b5490612354565b1161388557613d30613d225f92612319565b5f52600560205260405f2090565b55565b613d4661156561194b612555848a6123fd565b90613d88613d7d613d5783886123fd565b517fffffffff000000000000000000000000000000000000000000000000000000001690565b60a0840151906148a4565b613da96107fe835173ffffffffffffffffffffffffffffffffffffffff1690565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290602090829060249082905afa90811561097d575f91614005575b50613e1c613e01612555848b6123fd565b613e0e613d57858a6123fd565b61199361198c868a8a612e4a565b50613e3e6107fe845173ffffffffffffffffffffffffffffffffffffffff1690565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529190602090839060249082905afa90811561097d57613e8f925f92613fe55750612354565b916004613ea26114e2612555858c6123fd565b6020613ec56107fe855173ffffffffffffffffffffffffffffffffffffffff1690565b604051938480927f313ce5670000000000000000000000000000000000000000000000000000000082525afa801561097d5761260d6131d791613f0e945f916126215750612435565b9260608201518015159081613fdb575b50613fb3577ff155ed2659dcb48d4b2a72975078c1e97c5b13012b866374ee0312a364ce604873ffffffffffffffffffffffffffffffffffffffff613f9e6107fe613f83612555888f60019b6004613f7c61194b61255586866123fd565b01556123fd565b955173ffffffffffffffffffffffffffffffffffffffff1690565b6040519384528116931691602090a301613cd9565b7f2b676364000000000000000000000000000000000000000000000000000000005f5260045ffd5b905084115f613f1e565b613ffe91925060203d81116109c7576109b98183611ea3565b905f613159565b61401d915060203d81116109c7576109b98183611ea3565b5f613df0565b5081841415613cca565b335f9081527f06484cc59dc38e4f67c31122333a17ca81b3ca18cdf02bfc298072fa52b0316a602052604090205460ff161561406557565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f52336004527f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0860245260445ffd5b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff6141093360405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b5416156141135750565b7fe2517d3f000000000000000000000000000000000000000000000000000000005f523360045260245260445ffd5b73ffffffffffffffffffffffffffffffffffffffff81165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff166142245773ffffffffffffffffffffffffffffffffffffffff165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f75442b0a96088b5456bc4ed01394c96a4feec0f883c9494257d76b96ab1c9b6b602052604090205460ff166142245773ffffffffffffffffffffffffffffffffffffffff165f8181527f75442b0a96088b5456bc4ed01394c96a4feec0f883c9494257d76b96ab1c9b6b6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff6143818360405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b541661444457805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526143d98260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff61449e8360405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54161561444457805f527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526144f78260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361459f57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8316602482015290916020828060448101038173ffffffffffffffffffffffffffffffffffffffff87165afa91821561097d575f9261467a575b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820180921161063557610a18926153a2565b61469491925060203d6020116109c7576109b98183611ea3565b905f614646565b60ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166146c657565b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff5f5416330361470e57565b7f3d693ada000000000000000000000000000000000000000000000000000000005f5260045ffd5b908051915f5b83811061476b577f3d693ada000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffff0000000000000000000000000000000000000000000000000000000061479682856123fd565b5151167fffffffff00000000000000000000000000000000000000000000000000000000831614806147d5575b6147cf5760010161473c565b50505050565b50600160ff60206147e684876123fd565b51015116146147c3565b908051915f5b838110614825577f3d693ada000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffff0000000000000000000000000000000000000000000000000000000061485082856123fd565b5151167fffffffff0000000000000000000000000000000000000000000000000000000083161480614889575b6147cf576001016147f6565b50600260ff602061489a84876123fd565b510151161461487d565b908051915f5b8381106148d9577f3d693ada000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffff0000000000000000000000000000000000000000000000000000000061490482856123fd565b5151167fffffffff000000000000000000000000000000000000000000000000000000008316148061493d575b6147cf576001016148aa565b5060ff602061494c83866123fd565b5101511615614931565b908160609103126103ee578051916040602083015161497481610526565b920151610d7381610526565b91908260409103126103ee5760208251920151610d7381610526565b91908260409103126103ee57602082516149b581610526565b92015190565b5f5b8381106149cc5750505f910152565b81810151838201526020016149bd565b7fffffffff0000000000000000000000000000000000000000000000000000000060049392168152614a1782518093602086850191016149bb565b010190565b3d15614a46573d90614a2d82612eaa565b91614a3b6040519384611ea3565b82523d5f602084013e565b606090565b15614a535750565b6044601f917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06040519384927f08c379a000000000000000000000000000000000000000000000000000000000845260206004850152614ac281518092816024880152602088880191016149bb565b01168101030190fd5b919091307fffffffff0000000000000000000000000000000000000000000000000000000084167f8d7ef9bb0000000000000000000000000000000000000000000000000000000081148015614ce0575b15614bfa57505073ffffffffffffffffffffffffffffffffffffffff614b4b602084518501016020850161499c565b50165b73ffffffffffffffffffffffffffffffffffffffff30911603614bd2575f9283614b87614bb382956040519283916020830196876149dc565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611ea3565b51925af1610d73614bc2614a1c565b91614bcc8361559b565b90614a4b565b7f8e194f33000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f6e553f65000000000000000000000000000000000000000000000000000000008103614c5357505073ffffffffffffffffffffffffffffffffffffffff614c4b6020845185010160208501614980565b905016614b4e565b7fb460af94000000000000000000000000000000000000000000000000000000008114908115614cb6575b5015614b4e575073ffffffffffffffffffffffffffffffffffffffff614cad6020845185010160208501614956565b50905016614b4e565b7fba087652000000000000000000000000000000000000000000000000000000009150145f614c7e565b507f95991276000000000000000000000000000000000000000000000000000000008114614b1c565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff929092166024830152604480830193909352918152610a1891614d6b606483611ea3565b61565e565b908160209103126103ee5751610d7381610526565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529073ffffffffffffffffffffffffffffffffffffffff16602082602481845afa91821561097d57614e1f926020915f91614f41575b50604051809481927f07a2d13a000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381845afa90811561097d576004925f92614f1f575b50602090604051938480927f38d52e0f0000000000000000000000000000000000000000000000000000000082525afa91821561097d5773ffffffffffffffffffffffffffffffffffffffff926020915f91614ef2575b506004604051809581937f313ce567000000000000000000000000000000000000000000000000000000008352165afa801561097d5761260d61261291610d73945f91614ed95750612435565b612642915060203d6020116126485761263a8183611ea3565b614f129150823d8411614f18575b614f0a8183611ea3565b810190614d70565b5f614e8c565b503d614f00565b6020919250614f3a90823d84116109c7576109b98183611ea3565b9190614e35565b614f589150823d84116109c7576109b98183611ea3565b5f614de6565b73ffffffffffffffffffffffffffffffffffffffff90929192166040517fa8c62e76000000000000000000000000000000000000000000000000000000008152602081600481855afa801561097d5773ffffffffffffffffffffffffffffffffffffffff60209181935f91615289575b5016936004604051809481937f313ce567000000000000000000000000000000000000000000000000000000008352165afa801561097d5760ff915f9161526a575b506040517facfd7dce00000000000000000000000000000000000000000000000000000000815230600482015291169290602081602481855afa801561097d57615068915f9161524b575b506126126137c586612346565b6040517f9bf5bbe70000000000000000000000000000000000000000000000000000000081523060048201529091602090829060249082905afa801561097d576150bf915f9161524b57506126126137c586612346565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152949093906020908690602490829073ffffffffffffffffffffffffffffffffffffffff165afa94851561097d575f9561522a575b506040517f44966ba0000000000000000000000000000000000000000000000000000000008152602081600481875afa801561097d576151b5946020925f9261520b575b5060405180809781947f9290d4270000000000000000000000000000000000000000000000000000000083526004830191909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b03915afa90811561097d576131d76151df6151e593610d73986151e5975f926151ea575b50612457565b916135e5565b612361565b61520491925060203d6020116109c7576109b98183611ea3565b905f6151d9565b615223919250833d8511614f1857614f0a8183611ea3565b905f615163565b61524491955060203d6020116109c7576109b98183611ea3565b935f61511f565b615264915060203d6020116109c7576109b98183611ea3565b5f61505b565b615283915060203d6020116126485761263a8183611ea3565b5f615010565b6152a09150833d8511614f1857614f0a8183611ea3565b5f614fce565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff831660248201529293929091906020818060448101038173ffffffffffffffffffffffffffffffffffffffff87165afa90811561097d575f91615383575b5084811061533a5793610a18939403916153a2565b73ffffffffffffffffffffffffffffffffffffffff85927fe570110f000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b61539c915060203d6020116109c7576109b98183611ea3565b5f615325565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000602080830191825273ffffffffffffffffffffffffffffffffffffffff85166024840152604480840196909652948252929390925f90615407606486611ea3565b84519082855af15f51903d8161548d575b501590505b61542657505050565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff90931660248401525f6044840152610a1892614d6b906154878160648101614b87565b8261565e565b151590506154ba575061541d73ffffffffffffffffffffffffffffffffffffffff82163b15155b5f615418565b600161541d91146154b4565b604051906154d5604083611ea3565b600282527f52310000000000000000000000000000000000000000000000000000000000006020830152565b6020818303126103ee5780519067ffffffffffffffff82116103ee570181601f820112156103ee57805161553481612eaa565b926155426040519485611ea3565b818452602082840101116103ee57610d7391602080850191016149bb565b6040519061556f604083611ea3565b600282527f52430000000000000000000000000000000000000000000000000000000000006020830152565b6004815110615622577f08c379a0000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000602083015116146155fa5750610d73615560565b604481511061561957806024806004610d739401518301019101615501565b50610d736154c6565b50604051615631604082611ea3565b600281527f5230000000000000000000000000000000000000000000000000000000000000602082015290565b905f602091828151910182855af1156123f2575f513d6156dc575073ffffffffffffffffffffffffffffffffffffffff81163b155b61569a5750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415615693565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561571457565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffdfea164736f6c634300081d000af0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00