From 9ed11c1b7fe4ff8368a456351328c042be646ba8 Mon Sep 17 00:00:00 2001 From: Mikko Ohtamaa Date: Wed, 1 Jan 2025 21:52:06 +0100 Subject: [PATCH 1/2] Create a guard that allows trading any token --- contracts/guard/src/GuardV0Base.sol | 59 +++++++++++++++---- eth_defi/abi/guard/GuardV0.json | 2 +- eth_defi/abi/guard/SimpleVaultV0.json | 2 +- .../test_guard_simple_vault_uniswap_v2.py | 47 ++++++++++++++- 4 files changed, 94 insertions(+), 16 deletions(-) diff --git a/contracts/guard/src/GuardV0Base.sol b/contracts/guard/src/GuardV0Base.sol index 559b8ed9..ce8d8f5e 100644 --- a/contracts/guard/src/GuardV0Base.sol +++ b/contracts/guard/src/GuardV0Base.sol @@ -15,6 +15,8 @@ import "./IGuard.sol"; * * - Abstract base contract to deal with different ownership modifiers and initialisers (Safe, OpenZeppelin) * + * TODO: Externally managed safe token registry + * */ abstract contract GuardV0Base is IGuard { using Path for bytes; @@ -56,7 +58,7 @@ abstract contract GuardV0Base is IGuard { uint256 amountInMaximum; } - // Allowed ERC20.approve() + // Allowed external smart contract calls (address, function selector) tuples mapping(address target => mapping(bytes4 selector => bool allowed)) public allowedCallSites; // How many call sites we have enabled all-time counter. @@ -83,6 +85,12 @@ abstract contract GuardV0Base is IGuard { // Allowed routers mapping(address destination => bool allowed) public allowedDelegationApprovalDestinations; + // Allow trading any token + // + // Dangerous, as malicious/compromised trade-executor can drain all assets through creating fake tokens + // + bool public anyAsset; + event CallSiteApproved(address target, bytes4 selector, string notes); event CallSiteRemoved(address target, bytes4 selector, string notes); @@ -104,10 +112,17 @@ abstract contract GuardV0Base is IGuard { event AssetApproved(address sender, string notes); event AssetRemoved(address sender, string notes); + event AnyAssetSet(bool value, string notes); + + // Implementation needs to provide its own ownership policy hooks modifier onlyGuardOwner() virtual; + // Implementation needs to provide its own ownership policy hooks function getGovernanceAddress() virtual public view returns (address); + /** + * Calculate Solidity 4-byte function selector from a string. + */ function getSelector(string memory _func) internal pure returns (bytes4) { // https://solidity-by-example.org/function-selector/ return bytes4(keccak256(bytes(_func))); @@ -195,6 +210,15 @@ abstract contract GuardV0Base is IGuard { // Basic check if any target contract is whitelisted function isAllowedCallSite(address target, bytes4 selector) public view returns (bool) { + + // If we have dynamic whitelist/any token, we cannot check approve() call sites of + // individual tokens + if(anyAsset) { + if(selector == getSelector("approve(address,uint256)")) { + return true; + } + } + return allowedCallSites[target][selector]; } @@ -219,8 +243,11 @@ abstract contract GuardV0Base is IGuard { return allowedDelegationApprovalDestinations[receiver] == true; } + /** + * Are we allowed to trade/own an ERC-20. + */ function isAllowedAsset(address token) public view returns (bool) { - return allowedAssets[token] == true; + return anyAsset || allowedAssets[token] == true; } function validate_transfer(bytes memory callData) public view { @@ -249,6 +276,23 @@ abstract contract GuardV0Base is IGuard { allowAsset(token, notes); } + function whitelistUniswapV3Router(address router, string calldata notes) external { + allowCallSite(router, getSelector("exactInput((bytes,address,uint256,uint256,uint256))"), notes); + allowCallSite(router, getSelector("exactOutput((bytes,address,uint256,uint256,uint256))"), notes); + allowApprovalDestination(router, notes); + } + + function whitelistUniswapV2Router(address router, string calldata notes) external { + allowCallSite(router, getSelector("swapExactTokensForTokens(uint256,uint256,address[],address,uint256)"), notes); + allowApprovalDestination(router, notes); + } + + // Enable unlimited trading space + function setAnyAssetAllowed(bool value, string calldata notes) external onlyGuardOwner { + anyAsset = value; + emit AnyAssetSet(value, notes); + } + // Satisfy IGuard function validateCall( address sender, @@ -311,11 +355,6 @@ abstract contract GuardV0Base is IGuard { } } - function whitelistUniswapV2Router(address router, string calldata notes) external { - allowCallSite(router, getSelector("swapExactTokensForTokens(uint256,uint256,address[],address,uint256)"), notes); - allowApprovalDestination(router, notes); - } - // validate Uniswap v3 trade function validate_exactInput(bytes memory callData) public view { (ExactInputParams memory params) = abi.decode(callData, (ExactInputParams)); @@ -349,12 +388,6 @@ abstract contract GuardV0Base is IGuard { } } - function whitelistUniswapV3Router(address router, string calldata notes) external { - allowCallSite(router, getSelector("exactInput((bytes,address,uint256,uint256,uint256))"), notes); - allowCallSite(router, getSelector("exactOutput((bytes,address,uint256,uint256,uint256))"), notes); - allowApprovalDestination(router, notes); - } - // validate 1delta trade function validate_1deltaMulticall(bytes memory callData) public view { (bytes[] memory callArr) = abi.decode(callData, (bytes[])); diff --git a/eth_defi/abi/guard/GuardV0.json b/eth_defi/abi/guard/GuardV0.json index 354cfc53..eb031a23 100644 --- a/eth_defi/abi/guard/GuardV0.json +++ b/eth_defi/abi/guard/GuardV0.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowApprovalDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowAsset","inputs":[{"name":"asset","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowCallSite","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowDelegationApprovalDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowSender","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowWithdrawDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowedApprovalDestinations","inputs":[{"name":"destination","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedAssets","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedCallSites","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedDelegationApprovalDestinations","inputs":[{"name":"destination","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedReceivers","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedSenders","inputs":[{"name":"sender","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedWithdrawDestinations","inputs":[{"name":"destination","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"callSiteCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getGovernanceAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getInternalVersion","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"pure"},{"type":"function","name":"isAllowedApprovalDestination","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedAsset","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedCallSite","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedDelegationApprovalDestination","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedSender","inputs":[{"name":"sender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedWithdrawDestination","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"removeApprovalDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeAsset","inputs":[{"name":"asset","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeCallSite","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeDelegationApprovalDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeSender","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeWithdrawDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validate1deltaPath","inputs":[{"name":"path","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validateCall","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"target","type":"address","internalType":"address"},{"name":"callDataWithSelector","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validateUniswapV3Path","inputs":[{"name":"path","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_1deltaDeposit","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_1deltaMulticall","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_1deltaWithdraw","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_aaveSupply","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_aaveWithdraw","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_approve","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_approveDelegation","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_exactInput","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_exactOutput","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_flashSwapAllOut","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_flashSwapExactInt","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_flashSwapExactOut","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_swapExactTokensForTokens","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_transfer","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_transferERC20AllIn","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_transferERC20In","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"whitelistAaveV3","inputs":[{"name":"lendingPool","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistOnedelta","inputs":[{"name":"brokerProxy","type":"address","internalType":"address"},{"name":"lendingPool","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistToken","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistTokenForDelegation","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistUniswapV2Router","inputs":[{"name":"router","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistUniswapV3Router","inputs":[{"name":"router","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ApprovalDestinationApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"ApprovalDestinationRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"AssetApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"AssetRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"CallSiteApproved","inputs":[{"name":"target","type":"address","indexed":false,"internalType":"address"},{"name":"selector","type":"bytes4","indexed":false,"internalType":"bytes4"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"CallSiteRemoved","inputs":[{"name":"target","type":"address","indexed":false,"internalType":"address"},{"name":"selector","type":"bytes4","indexed":false,"internalType":"bytes4"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"DelegationApprovalDestinationApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"DelegationApprovalDestinationRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ReceiverApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"ReceiverRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"SenderApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"SenderRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"WithdrawDestinationApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"WithdrawDestinationRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false}],"bytecode":{"object":"0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6132c2806200007f6000396000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c80638c2fdf9e116101e9578063d7334c9d1161010f578063f259a073116100ad578063f901dc331161007c578063f901dc3314610890578063fa2c59c8146108a3578063fadbcf48146108b6578063fdedfa27146108d957600080fd5b8063f259a0731461039e578063f26749f314610857578063f2fde38b1461086a578063f76081e41461087d57600080fd5b8063ebe26816116100e9578063ebe26816146107ed578063ee5462cc14610800578063efb47bff14610813578063f20e85e01461084457600080fd5b8063d7334c9d146107a4578063e98539c5146107b7578063eb0de042146107ca57600080fd5b8063a847cf4d11610187578063c537bed011610156578063c537bed01461076b578063ca963c501461058a578063d075f9bb1461077e578063d4c0fe451461079157600080fd5b8063a847cf4d146106e2578063a9fc3d4f14610710578063be8c97b014610727578063c4cc9dba1461075857600080fd5b806398b3cc39116101c357806398b3cc3914610686578063a1b6b43014610699578063a4c1cccb146106ac578063a67e1f54146106cf57600080fd5b80638c2fdf9e1461064f5780638da5cb5b14610662578063957dc6c01461067357600080fd5b806359b92be9116102ce5780636d9a14231161026c578063732524941161023b57806373252494146105f1578063761bcd9c146106165780637ea446551461062957806386b6dbe51461063c57600080fd5b80636d9a1423146105b0578063713ebf3b146105c3578063715018a6146105d657806372e548a9146105de57600080fd5b806363cc17f2116102a857806363cc17f2146105645780636a6d5cc8146105775780636ad113531461058a5780636d5025f11461059d57600080fd5b806359b92be91461052b5780635ace1d921461053e5780635e4ccace1461055157600080fd5b80632dc32a611161033b5780633ea35551116103155780633ea35551146104cf578063425f49d0146104e25780634b941268146104f55780634b956bd81461051857600080fd5b80632dc32a611461046857806334ec8d7e146104995780633cf20025146104ac57600080fd5b80631710a4f2116103775780631710a4f2146103fe5780631c123e77146104115780631d49039c146104245780632d12d7881461045557600080fd5b806304a3ba251461039e57806307ac3562146103b357806307ef00cf146103c6575b600080fd5b6103b16103ac3660046127c0565b6108e8565b005b6103b16103c1366004612881565b610951565b6103e96103d4366004612900565b60066020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103b161040c366004612881565b610c92565b6103b161041f366004612881565b610d48565b6103e9610432366004612900565b6001600160a01b031660009081526007602052604090205460ff16151560011490565b6103b16104633660046127c0565b610dc2565b6103e9610476366004612900565b6001600160a01b031660009081526008602052604090205460ff16151560011490565b6103b16104a73660046127c0565b610e1e565b6103e96104ba366004612900565b60056020526000908152604090205460ff1681565b6103b16104dd3660046127c0565b610e86565b6103b16104f0366004612881565b610eb1565b6103e9610503366004612900565b60086020526000908152604090205460ff1681565b6103b1610526366004612881565b610ed3565b6103b1610539366004612881565b610f78565b6103b161054c3660046127c0565b610ffa565b6103b161055f366004612941565b611059565b6103b16105723660046127c0565b6110ef565b6103b1610585366004612881565b61114e565b6103b1610598366004612881565b6111f6565b6103b16105ab3660046129a3565b611219565b6103b16105be3660046127c0565b611798565b6103e96105d13660046129d4565b6117ce565b6103b1611806565b6103b16105ec3660046127c0565b61181a565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016103f5565b6103b1610624366004612881565b611879565b6103b1610637366004612881565b611984565b6103b161064a3660046127c0565b6119c1565b6103b161065d3660046127c0565b611a20565b6000546001600160a01b03166105fe565b6103b1610681366004612881565b611a7c565b6103b16106943660046127c0565b611b3c565b6103b16106a7366004612881565b611b9b565b6103e96106ba366004612900565b60036020526000908152604090205460ff1681565b6103b16106dd3660046127c0565b611ce3565b6103e96106f03660046129d4565b600160209081526000928352604080842090915290825290205460ff1681565b61071960025481565b6040519081526020016103f5565b6103e9610735366004612900565b6001600160a01b031660009081526004602052604090205460ff16151560011490565b6103b1610766366004612881565b611d3f565b6103e9610779366004612900565b611dfa565b6103e961078c366004612900565b611e1d565b6103b161079f366004612881565b611e40565b6103b16107b2366004612941565b611e80565b6103b16107c5366004612881565b611ef3565b6103e96107d8366004612900565b60076020526000908152604090205460ff1681565b6103b16107fb366004612881565b611f95565b6103b161080e3660046127c0565b61202c565b6103e9610821366004612900565b6001600160a01b031660009081526006602052604090205460ff16151560011490565b6103b16108523660046127c0565b6120e1565b6103b16108653660046129a3565b612137565b6103b1610878366004612900565b6121ac565b6103b161088b366004612881565b612225565b6103b161089e3660046127c0565b6122a1565b6103b16108b13660046127c0565b6122fd565b6103e96108c4366004612900565b60046020526000908152604090205460ff1681565b604051600181526020016103f5565b6108f061235c565b6001600160a01b03831660009081526007602052604090819020805460ff19169055517fb71be9befd3ac90c1c9981d3b1161b3c2c6dcd741f13b34061aa251226a802df9061094490859085908590612a32565b60405180910390a1505050565b6000818060200190518101906109679190612aec565b905060005b8151811015610c8d57600082828151811061098957610989612b9c565b6020026020010151905060006109ac60006004846123b69092919063ffffffff16565b6109b590612bb2565b905060006109d360048085516109cb9190612bff565b8591906123b6565b6040805180820190915260208082527f7472616e736665724552433230496e28616464726573732c75696e74323536299101529050631dac092b60e11b6001600160e01b0319831601610a2e57610a2981610f78565b610c82565b60408051808201909152601b81527f7472616e736665724552433230416c6c496e2861646472657373290000000000602090910152635cf59cb760e11b6001600160e01b0319831601610a8457610a2981611984565b60408051808201909152601881527f6465706f73697428616464726573732c6164647265737329000000000000000060209091015262d3ec1f60e31b6001600160e01b0319831601610ad957610a2981611d3f565b60408051808201909152601981527f776974686472617728616464726573732c6164647265737329000000000000006020909101526306bf1c7b60e01b6001600160e01b0319831601610b2f57610a2981612225565b610b5660405180606001604052806027815260200161323260279139805160209091012090565b6001600160e01b031916826001600160e01b03191603610b7957610a29816111f6565b610ba060405180606001604052806028815260200161320a60289139805160209091012090565b6001600160e01b031916826001600160e01b03191603610bc357610a29816111f6565b60408051808201909152601e81527f666c61736853776170416c6c4f75742875696e743235362c627974657329000060209091015263d2b3d16560e01b6001600160e01b0319831601610c1957610a2981610eb1565b60405162461bcd60e51b815260206004820152603360248201527f76616c69646174655f3164656c74614d756c746963616c6c3a20556e6b6e6f776044820152723710333ab731ba34b7b71039b2b632b1ba37b960691b60648201526084015b60405180910390fd5b50505060010161096c565b505050565b600081806020019051810190610ca89190612c1d565b509050610cd2816001600160a01b031660009081526006602052604090205460ff16151560011490565b610d445760405162461bcd60e51b815260206004820152603c60248201527f76616c69646174655f7472616e736665723a205265636569766572206164647260448201527f657373206e6f742077686974656c6973746564206279204775617264000000006064820152608401610c79565b5050565b6000805b610d558361250d565b5092509050610d6382611dfa565b610d7f5760405162461bcd60e51b8152600401610c7990612c4b565b610d8881611dfa565b610da45760405162461bcd60e51b8152600401610c7990612c4b565b610dad83612549565b15610c8d57610dbb83612583565b9250610d4c565b610dca61235c565b6001600160a01b03831660009081526005602052604090819020805460ff19169055517f4e13b11ab98e672bd78295ef9cebe764dc617f95decf47d842c25b83abc0c7249061094490859085908590612a32565b610e5083610e496040518060600160405280603381526020016131d760339139805160209091012090565b8484611059565b610e7b83610e4960405180606001604052806034815260200161325960349139805160209091012090565b610c8d838383611b3c565b610e7b83610e4960405180608001604052806043815260200161312b60439139805160209091012090565b600081806020019051810190610ec79190612c93565b915050610d4481611b9b565b600081806020019051810190610ee99190612c1d565b509050610f13816001600160a01b031660009081526007602052604090205460ff16151560011490565b610d445760405162461bcd60e51b815260206004820152603060248201527f76616c69646174655f617070726f76653a20417070726f76652061646472657360448201526f0e640c8decae640dcdee840dac2e8c6d60831b6064820152608401610c79565b600081806020019051810190610f8e9190612c1d565b509050610f9a81611dfa565b610d445760405162461bcd60e51b815260206004820152602b60248201527f76616c69646174655f7472616e736665724552433230496e3a20546f6b656e2060448201526a1b9bdd08185b1b1bddd95960aa1b6064820152608401610c79565b61100261235c565b6001600160a01b03831660009081526006602052604090819020805460ff19166001179055517f3562181221a42a19ddd03a82dfe06acab1905ceb65cdaf7d86a1d9fec66435529061094490859085908590612a32565b61106161235c565b6001600160a01b03841660009081526001602081815260408084206001600160e01b0319881685529091528220805460ff1916909117905560028054916110a783612cd9565b91905055507fef729aaa41b9fd994f9ff7c1960df214a84f722002e6cfbea31799cd0873a3ef848484846040516110e19493929190612cf2565b60405180910390a150505050565b6110f761235c565b6001600160a01b03831660009081526008602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f35899061094490859085908590612a32565b600080828060200190518101906111659190612d31565b925050915061117382611dfa565b61118f5760405162461bcd60e51b8152600401610c7990612d74565b61119881611e1d565b610c8d5760405162461bcd60e51b815260206004820152602960248201527f52656365697665722061646472657373206e6f742077686974656c697374656460448201526808189e4811dd585c9960ba1b6064820152608401610c79565b60008180602001905181019061120c9190612d9f565b92505050610d4481611b9b565b6000546001600160a01b0385811691161461179257611255846001600160a01b031660009081526004602052604090205460ff16151560011490565b6112a15760405162461bcd60e51b815260206004820181905260248201527f76616c696461746543616c6c3a2053656e646572206e6f7420616c6c6f7765646044820152606401610c79565b60006112b06004828486612dee565b6112b991612e18565b90503660006112cb8460048188612dee565b915091506112d986846117ce565b6113315760405162461bcd60e51b815260206004820152602360248201527f76616c696461746543616c6c3a2043616c6c2073697465206e6f7420616c6c6f6044820152621dd95960ea1b6064820152608401610c79565b61135860405180608001604052806043815260200161312b60439139805160209091012090565b6001600160e01b031916836001600160e01b031916036113b6576113b182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061187992505050565b61178e565b6113dd6040518060600160405280603381526020016131d760339139805160209091012090565b6001600160e01b031916836001600160e01b03191603611436576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f9592505050565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b602090910152630a6d35e560e31b6001600160e01b03198416016114b7576113b182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061095192505050565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b6020909101526356fa634560e01b6001600160e01b031984160161153f576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c9292505050565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b60209091015263f6a1584d60e01b6001600160e01b03198416016115c6576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ed392505050565b6115ed6040518060600160405280602281526020016131b560229139805160209091012090565b6001600160e01b031916836001600160e01b03191603611646576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7c92505050565b61166d60405180606001604052806026815260200161316e60269139805160209091012090565b6001600160e01b031916836001600160e01b031916036116c6576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e4092505050565b6116ed60405180606001604052806021815260200161319460219139805160209091012090565b6001600160e01b031916836001600160e01b03191603611746576113b182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061114e92505050565b60405162461bcd60e51b815260206004820152601960248201527f556e6b6e6f776e2066756e6374696f6e2073656c6563746f72000000000000006044820152606401610c79565b5050505b50505050565b6117c383610e496040518060600160405280602281526020016131b560229139805160209091012090565b610c8d8383836119c1565b6001600160a01b03821660009081526001602090815260408083206001600160e01b03198516845290915290205460ff165b92915050565b61180e61235c565b61181860006125b4565b565b61182261235c565b6001600160a01b03831660009081526005602052604090819020805460ff19166001179055517f62dd88c5ecfa60713a657640ebec4de26fc1aefa4afdb24e6d15a124fce727799061094490859085908590612a32565b600080828060200190518101906118909190612e48565b509350935050506118a081611e1d565b6119275760405162461bcd60e51b815260206004820152604c60248201527f76616c69646174655f737761704578616374546f6b656e73466f72546f6b656e60448201527f733a2052656365697665722061646472657373206e6f742077686974656c697360648201526b1d195908189e4811dd585c9960a21b608482015260a401610c79565b6000805b835181101561197d5783818151811061194657611946612b9c565b6020026020010151915061195982611dfa565b6119755760405162461bcd60e51b8152600401610c7990612d74565b60010161192b565b5050505050565b60008180602001905181019061199a9190612f11565b90506119a581611dfa565b610d445760405162461bcd60e51b8152600401610c7990612f2e565b6119c961235c565b6001600160a01b03831660009081526003602052604090819020805460ff19166001179055517fad90e2570fc4fe9f7437be3188d5c791c6662892d31731992aa88f5c876219839061094490859085908590612a32565b611a2861235c565b6001600160a01b03831660009081526006602052604090819020805460ff19169055517f1212f8ddb39de8e1a339460c95752d61100723efeaa34ccd94bca94393f409389061094490859085908590612a32565b600081806020019051810190611a929190612c1d565b509050611abc816001600160a01b031660009081526008602052604090205460ff16151560011490565b610d445760405162461bcd60e51b815260206004820152604560248201527f76616c69646174655f617070726f766544656c65676174696f6e3a204170707260448201527f6f76652064656c65676174696f6e206164647265737320646f6573206e6f74206064820152640dac2e8c6d60db1b608482015260a401610c79565b611b4461235c565b6001600160a01b03831660009081526007602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f35899061094490859085908590612a32565b6000805b611baa836000612604565b9150611bd9600180611bbe60036014612f7c565b611bc89190612f7c565b611bd29190612f7c565b8490612604565b9050611be482611dfa565b611c005760405162461bcd60e51b8152600401610c7990612f8f565b611c0981611dfa565b611c255760405162461bcd60e51b8152600401610c7990612f8f565b600180611c3460036014612f7c565b611c3e9190612f7c565b611c489190612f7c565b6014600180611c58600384612f7c565b611c629190612f7c565b611c6c9190612f7c565b611c769190612f7c565b611c809190612f7c565b835110610c8d57611cdc600180611c9960036014612f7c565b611ca39190612f7c565b611cad9190612f7c565b600180611cbc60036014612f7c565b611cc69190612f7c565b611cd09190612f7c565b85516109cb9190612bff565b9250611b9f565b611ceb61235c565b6001600160a01b03831660009081526004602052604090819020805460ff19169055517f3097928509c53a2dab9500431201d82b0d756e8f890fd01f4ae6b33b45687ea49061094490859085908590612a32565b60008082806020019051810190611d569190612fd4565b91509150611d6382611dfa565b611d7f5760405162461bcd60e51b8152600401610c7990612f2e565b611d8881611e1d565b610c8d5760405162461bcd60e51b815260206004820152603b60248201527f76616c69646174655f6465706f7369743a20526563656976657220616464726560448201527f7373206e6f742077686974656c697374656420627920477561726400000000006064820152608401610c79565b6001600160a01b031660009081526003602052604090205460ff16151560011490565b6001600160a01b031660009081526005602052604090205460ff16151560011490565b600081806020019051810190611e56919061300e565b5050509050611e6481611dfa565b610d445760405162461bcd60e51b8152600401610c7990612d74565b611e8861235c565b6001600160a01b03841660009081526001602090815260408083206001600160e01b03198716845290915290819020805460ff19169055517f37ea10f2d08f5a9803dfcd5abf3cfc7b0d6fcdf5fcbc36be9ea5a0b53d9a4d9b906110e1908690869086908690612cf2565b600081806020019051810190611f0991906130ee565b9050611f188160200151611e1d565b611f8a5760405162461bcd60e51b815260206004820152603f60248201527f76616c69646174655f65786163744f75747075743a205265636569766572206160448201527f646472657373206e6f742077686974656c6973746564206279204775617264006064820152608401610c79565b8051610d4490610d48565b600081806020019051810190611fab91906130ee565b9050611fba8160200151611e1d565b611f8a5760405162461bcd60e51b815260206004820152603e60248201527f76616c69646174655f6578616374496e7075743a20526563656976657220616460448201527f6472657373206e6f742077686974656c697374656420627920477561726400006064820152608401610c79565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b602090910152612087837fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b610e49565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b6020909101526117c3837f095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba610e49565b61210c83610e4960405180606001604052806026815260200161316e60269139805160209091012090565b610e7b83610e4960405180606001604052806021815260200161319460219139805160209091012090565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b60209091015261218b847fac9650d882acfa253cba1ed543b9ff47351da99c3bd00a89625e5cdb2099009c610e49565b612196848383611b3c565b6121a1838383611b3c565b6117928483836110ef565b6121b461235c565b6001600160a01b0381166122195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c79565b612222816125b4565b50565b6000808280602001905181019061223c9190612fd4565b9150915061224982611dfa565b611d7f5760405162461bcd60e51b8152602060048201526024808201527f76616c69646174655f77697468647261773a20546f6b656e206e6f7420616c6c6044820152631bddd95960e21b6064820152608401610c79565b6122a961235c565b6001600160a01b03831660009081526003602052604090819020805460ff19169055517f9ca3f065622f5f03f32b7157677a0e420c3a36ab45fd49f256ffebce3e3105879061094490859085908590612a32565b61230561235c565b6001600160a01b03831660009081526004602052604090819020805460ff19166001179055517fa8f9caaf4861720900294428e4ff34d37070c37afd26d96e6e4da75326d2c3ad9061094490859085908590612a32565b6000546001600160a01b031633146118185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c79565b6060816123c481601f612f7c565b10156124035760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610c79565b8261240e8382612f7c565b101561244d5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610c79565b6124578284612f7c565b8451101561249b5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610c79565b6060821580156124ba5760405191506000825260208201604052612504565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156124f35780518352602092830192016124db565b5050858452601f01601f1916604052505b50949350505050565b6000808061251b8482612604565b92506125288460146126b8565b905061254061253960036014612f7c565b8590612604565b91509193909250565b600061255760036014612f7c565b6014612564600382612f7c565b61256e9190612f7c565b6125789190612f7c565b825110159050919050565b606061180061259460036014612f7c565b6125a060036014612f7c565b84516125ac9190612bff565b8491906123b6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081612612816014612f7c565b10156126555760405162461bcd60e51b8152602060048201526012602482015271746f416464726573735f6f766572666c6f7760701b6044820152606401610c79565b612660826014612f7c565b835110156126a85760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610c79565b500160200151600160601b900490565b6000816126c6816003612f7c565b10156127085760405162461bcd60e51b8152602060048201526011602482015270746f55696e7432345f6f766572666c6f7760781b6044820152606401610c79565b612713826003612f7c565b8351101561275a5760405162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b6044820152606401610c79565b50016003015190565b6001600160a01b038116811461222257600080fd5b60008083601f84011261278a57600080fd5b5081356001600160401b038111156127a157600080fd5b6020830191508360208285010111156127b957600080fd5b9250929050565b6000806000604084860312156127d557600080fd5b83356127e081612763565b925060208401356001600160401b038111156127fb57600080fd5b61280786828701612778565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561285257612852612814565b604052919050565b60006001600160401b0382111561287357612873612814565b50601f01601f191660200190565b60006020828403121561289357600080fd5b81356001600160401b038111156128a957600080fd5b8201601f810184136128ba57600080fd5b80356128cd6128c88261285a565b61282a565b8181528560208385010111156128e257600080fd5b81602084016020830137600091810160200191909152949350505050565b60006020828403121561291257600080fd5b813561291d81612763565b9392505050565b80356001600160e01b03198116811461293c57600080fd5b919050565b6000806000806060858703121561295757600080fd5b843561296281612763565b935061297060208601612924565b925060408501356001600160401b0381111561298b57600080fd5b61299787828801612778565b95989497509550505050565b600080600080606085870312156129b957600080fd5b84356129c481612763565b9350602085013561297081612763565b600080604083850312156129e757600080fd5b82356129f281612763565b9150612a0060208401612924565b90509250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612a579083018486612a09565b95945050505050565b60006001600160401b03821115612a7957612a79612814565b5060051b60200190565b600082601f830112612a9457600080fd5b8151612aa26128c88261285a565b8181526020856020848701011115612ab957600080fd5b60005b83811015612ad7578581018201518382018301528101612abc565b50506000918101602001919091529392505050565b60006020808385031215612aff57600080fd5b82516001600160401b0380821115612b1657600080fd5b818501915085601f830112612b2a57600080fd5b8151612b386128c882612a60565b81815260059190911b83018401908481019088831115612b5757600080fd5b8585015b83811015612b8f57805185811115612b735760008081fd5b612b818b89838a0101612a83565b845250918601918601612b5b565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b805160208201516001600160e01b03198082169291906004831015612be15780818460040360031b1b83161693505b505050919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561180057611800612be9565b805161293c81612763565b60008060408385031215612c3057600080fd5b8251612c3b81612763565b6020939093015192949293505050565b60208082526028908201527f76616c6964617465556e69737761705633506174683a20546f6b656e206e6f7460408201526708185b1b1bddd95960c21b606082015260800190565b60008060408385031215612ca657600080fd5b8251915060208301516001600160401b03811115612cc357600080fd5b612ccf85828601612a83565b9150509250929050565b600060018201612ceb57612ceb612be9565b5060010190565b6001600160a01b03851681526001600160e01b031984166020820152606060408201819052600090612d279083018486612a09565b9695505050505050565b600080600060608486031215612d4657600080fd5b8351612d5181612763565b602085015160408601519194509250612d6981612763565b809150509250925092565b602080825260119082015270151bdad95b881b9bdd08185b1b1bddd959607a1b604082015260600190565b600080600060608486031215612db457600080fd5b835192506020840151915060408401516001600160401b03811115612dd857600080fd5b612de486828701612a83565b9150509250925092565b60008085851115612dfe57600080fd5b83861115612e0b57600080fd5b5050820193919092039150565b6001600160e01b03198135818116916004851015612e405780818660040360031b1b83161692505b505092915050565b600080600080600060a08688031215612e6057600080fd5b85519450602080870151945060408701516001600160401b03811115612e8557600080fd5b8701601f81018913612e9657600080fd5b8051612ea46128c882612a60565b81815260059190911b8201830190838101908b831115612ec357600080fd5b928401925b82841015612eea578351612edb81612763565b82529284019290840190612ec8565b8097505050505050612efe60608701612c12565b9150608086015190509295509295909350565b600060208284031215612f2357600080fd5b815161291d81612763565b6020808252602e908201527f76616c69646174655f7472616e736665724552433230416c6c496e3a20546f6b60408201526d195b881b9bdd08185b1b1bddd95960921b606082015260800190565b8082018082111561180057611800612be9565b60208082526025908201527f76616c69646174653164656c7461506174683a20546f6b656e206e6f7420616c6040820152641b1bddd95960da1b606082015260800190565b60008060408385031215612fe757600080fd5b8251612ff281612763565b602084015190925061300381612763565b809150509250929050565b6000806000806080858703121561302457600080fd5b845161302f81612763565b60208601516040870151919550935061304781612763565b6060959095015193969295505050565b600060a0828403121561306957600080fd5b60405160a081016001600160401b03828210818311171561308c5761308c612814565b8160405282935084519150808211156130a457600080fd5b506130b185828601612a83565b82525060208301516130c281612763565b806020830152506040830151604082015260608301516060820152608083015160808201525092915050565b60006020828403121561310057600080fd5b81516001600160401b0381111561311657600080fd5b61312284828501613057565b94935050505056fe737761704578616374546f6b656e73466f72546f6b656e732875696e743235362c75696e743235362c616464726573735b5d2c616464726573732c75696e7432353629737570706c7928616464726573732c75696e743235362c616464726573732c75696e74313629776974686472617728616464726573732c75696e743235362c6164647265737329617070726f766544656c65676174696f6e28616464726573732c75696e74323536296578616374496e707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929666c6173685377617045786163744f75742875696e743235362c75696e743235362c627974657329666c617368537761704578616374496e2875696e743235362c75696e743235362c62797465732965786163744f7574707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929a2646970667358221220b603d69f408106e492212ff58c93c034be3d82476c7f60a6952e62d679f8ab1e64736f6c63430008170033","sourceMap":"272:21473:3:-:0;;;3703:31;;;;;;;;;-1:-1:-1;936:32:0;734:10:2;936:18:0;:32::i;:::-;272:21473:3;;2426:187:0;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:0;;;-1:-1:-1;;;;;;2534:17:0;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;272:21473:3:-;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106103995760003560e01c80638c2fdf9e116101e9578063d7334c9d1161010f578063f259a073116100ad578063f901dc331161007c578063f901dc3314610890578063fa2c59c8146108a3578063fadbcf48146108b6578063fdedfa27146108d957600080fd5b8063f259a0731461039e578063f26749f314610857578063f2fde38b1461086a578063f76081e41461087d57600080fd5b8063ebe26816116100e9578063ebe26816146107ed578063ee5462cc14610800578063efb47bff14610813578063f20e85e01461084457600080fd5b8063d7334c9d146107a4578063e98539c5146107b7578063eb0de042146107ca57600080fd5b8063a847cf4d11610187578063c537bed011610156578063c537bed01461076b578063ca963c501461058a578063d075f9bb1461077e578063d4c0fe451461079157600080fd5b8063a847cf4d146106e2578063a9fc3d4f14610710578063be8c97b014610727578063c4cc9dba1461075857600080fd5b806398b3cc39116101c357806398b3cc3914610686578063a1b6b43014610699578063a4c1cccb146106ac578063a67e1f54146106cf57600080fd5b80638c2fdf9e1461064f5780638da5cb5b14610662578063957dc6c01461067357600080fd5b806359b92be9116102ce5780636d9a14231161026c578063732524941161023b57806373252494146105f1578063761bcd9c146106165780637ea446551461062957806386b6dbe51461063c57600080fd5b80636d9a1423146105b0578063713ebf3b146105c3578063715018a6146105d657806372e548a9146105de57600080fd5b806363cc17f2116102a857806363cc17f2146105645780636a6d5cc8146105775780636ad113531461058a5780636d5025f11461059d57600080fd5b806359b92be91461052b5780635ace1d921461053e5780635e4ccace1461055157600080fd5b80632dc32a611161033b5780633ea35551116103155780633ea35551146104cf578063425f49d0146104e25780634b941268146104f55780634b956bd81461051857600080fd5b80632dc32a611461046857806334ec8d7e146104995780633cf20025146104ac57600080fd5b80631710a4f2116103775780631710a4f2146103fe5780631c123e77146104115780631d49039c146104245780632d12d7881461045557600080fd5b806304a3ba251461039e57806307ac3562146103b357806307ef00cf146103c6575b600080fd5b6103b16103ac3660046127c0565b6108e8565b005b6103b16103c1366004612881565b610951565b6103e96103d4366004612900565b60066020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103b161040c366004612881565b610c92565b6103b161041f366004612881565b610d48565b6103e9610432366004612900565b6001600160a01b031660009081526007602052604090205460ff16151560011490565b6103b16104633660046127c0565b610dc2565b6103e9610476366004612900565b6001600160a01b031660009081526008602052604090205460ff16151560011490565b6103b16104a73660046127c0565b610e1e565b6103e96104ba366004612900565b60056020526000908152604090205460ff1681565b6103b16104dd3660046127c0565b610e86565b6103b16104f0366004612881565b610eb1565b6103e9610503366004612900565b60086020526000908152604090205460ff1681565b6103b1610526366004612881565b610ed3565b6103b1610539366004612881565b610f78565b6103b161054c3660046127c0565b610ffa565b6103b161055f366004612941565b611059565b6103b16105723660046127c0565b6110ef565b6103b1610585366004612881565b61114e565b6103b1610598366004612881565b6111f6565b6103b16105ab3660046129a3565b611219565b6103b16105be3660046127c0565b611798565b6103e96105d13660046129d4565b6117ce565b6103b1611806565b6103b16105ec3660046127c0565b61181a565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016103f5565b6103b1610624366004612881565b611879565b6103b1610637366004612881565b611984565b6103b161064a3660046127c0565b6119c1565b6103b161065d3660046127c0565b611a20565b6000546001600160a01b03166105fe565b6103b1610681366004612881565b611a7c565b6103b16106943660046127c0565b611b3c565b6103b16106a7366004612881565b611b9b565b6103e96106ba366004612900565b60036020526000908152604090205460ff1681565b6103b16106dd3660046127c0565b611ce3565b6103e96106f03660046129d4565b600160209081526000928352604080842090915290825290205460ff1681565b61071960025481565b6040519081526020016103f5565b6103e9610735366004612900565b6001600160a01b031660009081526004602052604090205460ff16151560011490565b6103b1610766366004612881565b611d3f565b6103e9610779366004612900565b611dfa565b6103e961078c366004612900565b611e1d565b6103b161079f366004612881565b611e40565b6103b16107b2366004612941565b611e80565b6103b16107c5366004612881565b611ef3565b6103e96107d8366004612900565b60076020526000908152604090205460ff1681565b6103b16107fb366004612881565b611f95565b6103b161080e3660046127c0565b61202c565b6103e9610821366004612900565b6001600160a01b031660009081526006602052604090205460ff16151560011490565b6103b16108523660046127c0565b6120e1565b6103b16108653660046129a3565b612137565b6103b1610878366004612900565b6121ac565b6103b161088b366004612881565b612225565b6103b161089e3660046127c0565b6122a1565b6103b16108b13660046127c0565b6122fd565b6103e96108c4366004612900565b60046020526000908152604090205460ff1681565b604051600181526020016103f5565b6108f061235c565b6001600160a01b03831660009081526007602052604090819020805460ff19169055517fb71be9befd3ac90c1c9981d3b1161b3c2c6dcd741f13b34061aa251226a802df9061094490859085908590612a32565b60405180910390a1505050565b6000818060200190518101906109679190612aec565b905060005b8151811015610c8d57600082828151811061098957610989612b9c565b6020026020010151905060006109ac60006004846123b69092919063ffffffff16565b6109b590612bb2565b905060006109d360048085516109cb9190612bff565b8591906123b6565b6040805180820190915260208082527f7472616e736665724552433230496e28616464726573732c75696e74323536299101529050631dac092b60e11b6001600160e01b0319831601610a2e57610a2981610f78565b610c82565b60408051808201909152601b81527f7472616e736665724552433230416c6c496e2861646472657373290000000000602090910152635cf59cb760e11b6001600160e01b0319831601610a8457610a2981611984565b60408051808201909152601881527f6465706f73697428616464726573732c6164647265737329000000000000000060209091015262d3ec1f60e31b6001600160e01b0319831601610ad957610a2981611d3f565b60408051808201909152601981527f776974686472617728616464726573732c6164647265737329000000000000006020909101526306bf1c7b60e01b6001600160e01b0319831601610b2f57610a2981612225565b610b5660405180606001604052806027815260200161323260279139805160209091012090565b6001600160e01b031916826001600160e01b03191603610b7957610a29816111f6565b610ba060405180606001604052806028815260200161320a60289139805160209091012090565b6001600160e01b031916826001600160e01b03191603610bc357610a29816111f6565b60408051808201909152601e81527f666c61736853776170416c6c4f75742875696e743235362c627974657329000060209091015263d2b3d16560e01b6001600160e01b0319831601610c1957610a2981610eb1565b60405162461bcd60e51b815260206004820152603360248201527f76616c69646174655f3164656c74614d756c746963616c6c3a20556e6b6e6f776044820152723710333ab731ba34b7b71039b2b632b1ba37b960691b60648201526084015b60405180910390fd5b50505060010161096c565b505050565b600081806020019051810190610ca89190612c1d565b509050610cd2816001600160a01b031660009081526006602052604090205460ff16151560011490565b610d445760405162461bcd60e51b815260206004820152603c60248201527f76616c69646174655f7472616e736665723a205265636569766572206164647260448201527f657373206e6f742077686974656c6973746564206279204775617264000000006064820152608401610c79565b5050565b6000805b610d558361250d565b5092509050610d6382611dfa565b610d7f5760405162461bcd60e51b8152600401610c7990612c4b565b610d8881611dfa565b610da45760405162461bcd60e51b8152600401610c7990612c4b565b610dad83612549565b15610c8d57610dbb83612583565b9250610d4c565b610dca61235c565b6001600160a01b03831660009081526005602052604090819020805460ff19169055517f4e13b11ab98e672bd78295ef9cebe764dc617f95decf47d842c25b83abc0c7249061094490859085908590612a32565b610e5083610e496040518060600160405280603381526020016131d760339139805160209091012090565b8484611059565b610e7b83610e4960405180606001604052806034815260200161325960349139805160209091012090565b610c8d838383611b3c565b610e7b83610e4960405180608001604052806043815260200161312b60439139805160209091012090565b600081806020019051810190610ec79190612c93565b915050610d4481611b9b565b600081806020019051810190610ee99190612c1d565b509050610f13816001600160a01b031660009081526007602052604090205460ff16151560011490565b610d445760405162461bcd60e51b815260206004820152603060248201527f76616c69646174655f617070726f76653a20417070726f76652061646472657360448201526f0e640c8decae640dcdee840dac2e8c6d60831b6064820152608401610c79565b600081806020019051810190610f8e9190612c1d565b509050610f9a81611dfa565b610d445760405162461bcd60e51b815260206004820152602b60248201527f76616c69646174655f7472616e736665724552433230496e3a20546f6b656e2060448201526a1b9bdd08185b1b1bddd95960aa1b6064820152608401610c79565b61100261235c565b6001600160a01b03831660009081526006602052604090819020805460ff19166001179055517f3562181221a42a19ddd03a82dfe06acab1905ceb65cdaf7d86a1d9fec66435529061094490859085908590612a32565b61106161235c565b6001600160a01b03841660009081526001602081815260408084206001600160e01b0319881685529091528220805460ff1916909117905560028054916110a783612cd9565b91905055507fef729aaa41b9fd994f9ff7c1960df214a84f722002e6cfbea31799cd0873a3ef848484846040516110e19493929190612cf2565b60405180910390a150505050565b6110f761235c565b6001600160a01b03831660009081526008602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f35899061094490859085908590612a32565b600080828060200190518101906111659190612d31565b925050915061117382611dfa565b61118f5760405162461bcd60e51b8152600401610c7990612d74565b61119881611e1d565b610c8d5760405162461bcd60e51b815260206004820152602960248201527f52656365697665722061646472657373206e6f742077686974656c697374656460448201526808189e4811dd585c9960ba1b6064820152608401610c79565b60008180602001905181019061120c9190612d9f565b92505050610d4481611b9b565b6000546001600160a01b0385811691161461179257611255846001600160a01b031660009081526004602052604090205460ff16151560011490565b6112a15760405162461bcd60e51b815260206004820181905260248201527f76616c696461746543616c6c3a2053656e646572206e6f7420616c6c6f7765646044820152606401610c79565b60006112b06004828486612dee565b6112b991612e18565b90503660006112cb8460048188612dee565b915091506112d986846117ce565b6113315760405162461bcd60e51b815260206004820152602360248201527f76616c696461746543616c6c3a2043616c6c2073697465206e6f7420616c6c6f6044820152621dd95960ea1b6064820152608401610c79565b61135860405180608001604052806043815260200161312b60439139805160209091012090565b6001600160e01b031916836001600160e01b031916036113b6576113b182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061187992505050565b61178e565b6113dd6040518060600160405280603381526020016131d760339139805160209091012090565b6001600160e01b031916836001600160e01b03191603611436576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f9592505050565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b602090910152630a6d35e560e31b6001600160e01b03198416016114b7576113b182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061095192505050565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b6020909101526356fa634560e01b6001600160e01b031984160161153f576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c9292505050565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b60209091015263f6a1584d60e01b6001600160e01b03198416016115c6576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ed392505050565b6115ed6040518060600160405280602281526020016131b560229139805160209091012090565b6001600160e01b031916836001600160e01b03191603611646576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7c92505050565b61166d60405180606001604052806026815260200161316e60269139805160209091012090565b6001600160e01b031916836001600160e01b031916036116c6576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e4092505050565b6116ed60405180606001604052806021815260200161319460219139805160209091012090565b6001600160e01b031916836001600160e01b03191603611746576113b182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061114e92505050565b60405162461bcd60e51b815260206004820152601960248201527f556e6b6e6f776e2066756e6374696f6e2073656c6563746f72000000000000006044820152606401610c79565b5050505b50505050565b6117c383610e496040518060600160405280602281526020016131b560229139805160209091012090565b610c8d8383836119c1565b6001600160a01b03821660009081526001602090815260408083206001600160e01b03198516845290915290205460ff165b92915050565b61180e61235c565b61181860006125b4565b565b61182261235c565b6001600160a01b03831660009081526005602052604090819020805460ff19166001179055517f62dd88c5ecfa60713a657640ebec4de26fc1aefa4afdb24e6d15a124fce727799061094490859085908590612a32565b600080828060200190518101906118909190612e48565b509350935050506118a081611e1d565b6119275760405162461bcd60e51b815260206004820152604c60248201527f76616c69646174655f737761704578616374546f6b656e73466f72546f6b656e60448201527f733a2052656365697665722061646472657373206e6f742077686974656c697360648201526b1d195908189e4811dd585c9960a21b608482015260a401610c79565b6000805b835181101561197d5783818151811061194657611946612b9c565b6020026020010151915061195982611dfa565b6119755760405162461bcd60e51b8152600401610c7990612d74565b60010161192b565b5050505050565b60008180602001905181019061199a9190612f11565b90506119a581611dfa565b610d445760405162461bcd60e51b8152600401610c7990612f2e565b6119c961235c565b6001600160a01b03831660009081526003602052604090819020805460ff19166001179055517fad90e2570fc4fe9f7437be3188d5c791c6662892d31731992aa88f5c876219839061094490859085908590612a32565b611a2861235c565b6001600160a01b03831660009081526006602052604090819020805460ff19169055517f1212f8ddb39de8e1a339460c95752d61100723efeaa34ccd94bca94393f409389061094490859085908590612a32565b600081806020019051810190611a929190612c1d565b509050611abc816001600160a01b031660009081526008602052604090205460ff16151560011490565b610d445760405162461bcd60e51b815260206004820152604560248201527f76616c69646174655f617070726f766544656c65676174696f6e3a204170707260448201527f6f76652064656c65676174696f6e206164647265737320646f6573206e6f74206064820152640dac2e8c6d60db1b608482015260a401610c79565b611b4461235c565b6001600160a01b03831660009081526007602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f35899061094490859085908590612a32565b6000805b611baa836000612604565b9150611bd9600180611bbe60036014612f7c565b611bc89190612f7c565b611bd29190612f7c565b8490612604565b9050611be482611dfa565b611c005760405162461bcd60e51b8152600401610c7990612f8f565b611c0981611dfa565b611c255760405162461bcd60e51b8152600401610c7990612f8f565b600180611c3460036014612f7c565b611c3e9190612f7c565b611c489190612f7c565b6014600180611c58600384612f7c565b611c629190612f7c565b611c6c9190612f7c565b611c769190612f7c565b611c809190612f7c565b835110610c8d57611cdc600180611c9960036014612f7c565b611ca39190612f7c565b611cad9190612f7c565b600180611cbc60036014612f7c565b611cc69190612f7c565b611cd09190612f7c565b85516109cb9190612bff565b9250611b9f565b611ceb61235c565b6001600160a01b03831660009081526004602052604090819020805460ff19169055517f3097928509c53a2dab9500431201d82b0d756e8f890fd01f4ae6b33b45687ea49061094490859085908590612a32565b60008082806020019051810190611d569190612fd4565b91509150611d6382611dfa565b611d7f5760405162461bcd60e51b8152600401610c7990612f2e565b611d8881611e1d565b610c8d5760405162461bcd60e51b815260206004820152603b60248201527f76616c69646174655f6465706f7369743a20526563656976657220616464726560448201527f7373206e6f742077686974656c697374656420627920477561726400000000006064820152608401610c79565b6001600160a01b031660009081526003602052604090205460ff16151560011490565b6001600160a01b031660009081526005602052604090205460ff16151560011490565b600081806020019051810190611e56919061300e565b5050509050611e6481611dfa565b610d445760405162461bcd60e51b8152600401610c7990612d74565b611e8861235c565b6001600160a01b03841660009081526001602090815260408083206001600160e01b03198716845290915290819020805460ff19169055517f37ea10f2d08f5a9803dfcd5abf3cfc7b0d6fcdf5fcbc36be9ea5a0b53d9a4d9b906110e1908690869086908690612cf2565b600081806020019051810190611f0991906130ee565b9050611f188160200151611e1d565b611f8a5760405162461bcd60e51b815260206004820152603f60248201527f76616c69646174655f65786163744f75747075743a205265636569766572206160448201527f646472657373206e6f742077686974656c6973746564206279204775617264006064820152608401610c79565b8051610d4490610d48565b600081806020019051810190611fab91906130ee565b9050611fba8160200151611e1d565b611f8a5760405162461bcd60e51b815260206004820152603e60248201527f76616c69646174655f6578616374496e7075743a20526563656976657220616460448201527f6472657373206e6f742077686974656c697374656420627920477561726400006064820152608401610c79565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b602090910152612087837fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b610e49565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b6020909101526117c3837f095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba610e49565b61210c83610e4960405180606001604052806026815260200161316e60269139805160209091012090565b610e7b83610e4960405180606001604052806021815260200161319460219139805160209091012090565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b60209091015261218b847fac9650d882acfa253cba1ed543b9ff47351da99c3bd00a89625e5cdb2099009c610e49565b612196848383611b3c565b6121a1838383611b3c565b6117928483836110ef565b6121b461235c565b6001600160a01b0381166122195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c79565b612222816125b4565b50565b6000808280602001905181019061223c9190612fd4565b9150915061224982611dfa565b611d7f5760405162461bcd60e51b8152602060048201526024808201527f76616c69646174655f77697468647261773a20546f6b656e206e6f7420616c6c6044820152631bddd95960e21b6064820152608401610c79565b6122a961235c565b6001600160a01b03831660009081526003602052604090819020805460ff19169055517f9ca3f065622f5f03f32b7157677a0e420c3a36ab45fd49f256ffebce3e3105879061094490859085908590612a32565b61230561235c565b6001600160a01b03831660009081526004602052604090819020805460ff19166001179055517fa8f9caaf4861720900294428e4ff34d37070c37afd26d96e6e4da75326d2c3ad9061094490859085908590612a32565b6000546001600160a01b031633146118185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c79565b6060816123c481601f612f7c565b10156124035760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610c79565b8261240e8382612f7c565b101561244d5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610c79565b6124578284612f7c565b8451101561249b5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610c79565b6060821580156124ba5760405191506000825260208201604052612504565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156124f35780518352602092830192016124db565b5050858452601f01601f1916604052505b50949350505050565b6000808061251b8482612604565b92506125288460146126b8565b905061254061253960036014612f7c565b8590612604565b91509193909250565b600061255760036014612f7c565b6014612564600382612f7c565b61256e9190612f7c565b6125789190612f7c565b825110159050919050565b606061180061259460036014612f7c565b6125a060036014612f7c565b84516125ac9190612bff565b8491906123b6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081612612816014612f7c565b10156126555760405162461bcd60e51b8152602060048201526012602482015271746f416464726573735f6f766572666c6f7760701b6044820152606401610c79565b612660826014612f7c565b835110156126a85760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610c79565b500160200151600160601b900490565b6000816126c6816003612f7c565b10156127085760405162461bcd60e51b8152602060048201526011602482015270746f55696e7432345f6f766572666c6f7760781b6044820152606401610c79565b612713826003612f7c565b8351101561275a5760405162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b6044820152606401610c79565b50016003015190565b6001600160a01b038116811461222257600080fd5b60008083601f84011261278a57600080fd5b5081356001600160401b038111156127a157600080fd5b6020830191508360208285010111156127b957600080fd5b9250929050565b6000806000604084860312156127d557600080fd5b83356127e081612763565b925060208401356001600160401b038111156127fb57600080fd5b61280786828701612778565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561285257612852612814565b604052919050565b60006001600160401b0382111561287357612873612814565b50601f01601f191660200190565b60006020828403121561289357600080fd5b81356001600160401b038111156128a957600080fd5b8201601f810184136128ba57600080fd5b80356128cd6128c88261285a565b61282a565b8181528560208385010111156128e257600080fd5b81602084016020830137600091810160200191909152949350505050565b60006020828403121561291257600080fd5b813561291d81612763565b9392505050565b80356001600160e01b03198116811461293c57600080fd5b919050565b6000806000806060858703121561295757600080fd5b843561296281612763565b935061297060208601612924565b925060408501356001600160401b0381111561298b57600080fd5b61299787828801612778565b95989497509550505050565b600080600080606085870312156129b957600080fd5b84356129c481612763565b9350602085013561297081612763565b600080604083850312156129e757600080fd5b82356129f281612763565b9150612a0060208401612924565b90509250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612a579083018486612a09565b95945050505050565b60006001600160401b03821115612a7957612a79612814565b5060051b60200190565b600082601f830112612a9457600080fd5b8151612aa26128c88261285a565b8181526020856020848701011115612ab957600080fd5b60005b83811015612ad7578581018201518382018301528101612abc565b50506000918101602001919091529392505050565b60006020808385031215612aff57600080fd5b82516001600160401b0380821115612b1657600080fd5b818501915085601f830112612b2a57600080fd5b8151612b386128c882612a60565b81815260059190911b83018401908481019088831115612b5757600080fd5b8585015b83811015612b8f57805185811115612b735760008081fd5b612b818b89838a0101612a83565b845250918601918601612b5b565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b805160208201516001600160e01b03198082169291906004831015612be15780818460040360031b1b83161693505b505050919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561180057611800612be9565b805161293c81612763565b60008060408385031215612c3057600080fd5b8251612c3b81612763565b6020939093015192949293505050565b60208082526028908201527f76616c6964617465556e69737761705633506174683a20546f6b656e206e6f7460408201526708185b1b1bddd95960c21b606082015260800190565b60008060408385031215612ca657600080fd5b8251915060208301516001600160401b03811115612cc357600080fd5b612ccf85828601612a83565b9150509250929050565b600060018201612ceb57612ceb612be9565b5060010190565b6001600160a01b03851681526001600160e01b031984166020820152606060408201819052600090612d279083018486612a09565b9695505050505050565b600080600060608486031215612d4657600080fd5b8351612d5181612763565b602085015160408601519194509250612d6981612763565b809150509250925092565b602080825260119082015270151bdad95b881b9bdd08185b1b1bddd959607a1b604082015260600190565b600080600060608486031215612db457600080fd5b835192506020840151915060408401516001600160401b03811115612dd857600080fd5b612de486828701612a83565b9150509250925092565b60008085851115612dfe57600080fd5b83861115612e0b57600080fd5b5050820193919092039150565b6001600160e01b03198135818116916004851015612e405780818660040360031b1b83161692505b505092915050565b600080600080600060a08688031215612e6057600080fd5b85519450602080870151945060408701516001600160401b03811115612e8557600080fd5b8701601f81018913612e9657600080fd5b8051612ea46128c882612a60565b81815260059190911b8201830190838101908b831115612ec357600080fd5b928401925b82841015612eea578351612edb81612763565b82529284019290840190612ec8565b8097505050505050612efe60608701612c12565b9150608086015190509295509295909350565b600060208284031215612f2357600080fd5b815161291d81612763565b6020808252602e908201527f76616c69646174655f7472616e736665724552433230416c6c496e3a20546f6b60408201526d195b881b9bdd08185b1b1bddd95960921b606082015260800190565b8082018082111561180057611800612be9565b60208082526025908201527f76616c69646174653164656c7461506174683a20546f6b656e206e6f7420616c6040820152641b1bddd95960da1b606082015260800190565b60008060408385031215612fe757600080fd5b8251612ff281612763565b602084015190925061300381612763565b809150509250929050565b6000806000806080858703121561302457600080fd5b845161302f81612763565b60208601516040870151919550935061304781612763565b6060959095015193969295505050565b600060a0828403121561306957600080fd5b60405160a081016001600160401b03828210818311171561308c5761308c612814565b8160405282935084519150808211156130a457600080fd5b506130b185828601612a83565b82525060208301516130c281612763565b806020830152506040830151604082015260608301516060820152608083015160808201525092915050565b60006020828403121561310057600080fd5b81516001600160401b0381111561311657600080fd5b61312284828501613057565b94935050505056fe737761704578616374546f6b656e73466f72546f6b656e732875696e743235362c75696e743235362c616464726573735b5d2c616464726573732c75696e7432353629737570706c7928616464726573732c75696e743235362c616464726573732c75696e74313629776974686472617728616464726573732c75696e743235362c6164647265737329617070726f766544656c65676174696f6e28616464726573732c75696e74323536296578616374496e707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929666c6173685377617045786163744f75742875696e743235362c75696e743235362c627974657329666c617368537761704578616374496e2875696e743235362c75696e743235362c62797465732965786163744f7574707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929a2646970667358221220b603d69f408106e492212ff58c93c034be3d82476c7f60a6952e62d679f8ab1e64736f6c63430008170033","sourceMap":"272:21473:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6155:221;;;;;;:::i;:::-;;:::i;:::-;;13814:1680;;;;;;:::i;:::-;;:::i;2467:79::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2750:14:8;;2743:22;2725:41;;2713:2;2698:18;2467:79:3;;;;;;;;8342:248;;;;;;:::i;:::-;;:::i;12883:539::-;;;;;;:::i;:::-;;:::i;7882:152::-;;;;;;:::i;:::-;-1:-1:-1;;;;;7982:37:3;7959:4;7982:37;;;:27;:37;;;;;;;;:45;;:37;:45;;7882:152;5289:179;;;;;;:::i;:::-;;:::i;8040:172::-;;;;;;:::i;:::-;-1:-1:-1;;;;;8150:47:3;8127:4;8150:47;;;:37;:47;;;;;;;;:55;;:47;:55;;8040:172;13428:351;;;;;;:::i;:::-;;:::i;2373:65::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11910:260;;;;;;:::i;:::-;;:::i;18401:183::-;;;;;;:::i;:::-;;:::i;2685:89::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8596:235;;;;;;:::i;:::-;;:::i;15685:234::-;;;;;;:::i;:::-;;:::i;5474:221::-;;;;;;:::i;:::-;;:::i;4301:235::-;;;;;;:::i;:::-;;:::i;6382:241::-;;;;;;:::i;:::-;;:::i;21090:308::-;;;;;;:::i;:::-;;:::i;18014:196::-;;;;;;:::i;:::-;;:::i;9613:1744::-;;;;;;:::i;:::-;;:::i;9394:213::-;;;;;;:::i;:::-;;:::i;7257:145::-;;;;;;:::i;:::-;;:::i;1824:101:0:-;;;:::i;5104:179:3:-;;;;;;:::i;:::-;;:::i;3992:93::-;4045:7;1273:6:0;-1:-1:-1;;;;;1273:6:0;3992:93:3;;;-1:-1:-1;;;;;4757:32:8;;;4739:51;;4727:2;4712:18;3992:93:3;4593:203:8;11396:508:3;;;;;;:::i;:::-;;:::i;16110:229::-;;;;;;:::i;:::-;;:::i;6866:161::-;;;;;;:::i;:::-;;:::i;5701:221::-;;;;;;:::i;:::-;;:::i;1201:85:0:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;1201:85;;8837:276:3;;;;;;:::i;:::-;;:::i;5928:221::-;;;;;;:::i;:::-;;:::i;19125:729::-;;;;;;:::i;:::-;;:::i;2155:59::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4931:167;;;;;;:::i;:::-;;:::i;1848:91::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;2060:25;;;;;;;;;4947::8;;;4935:2;4920:18;2060:25:3;4801:177:8;7408:122:3;;;;;;:::i;:::-;-1:-1:-1;;;;;7493:22:3;7470:4;7493:22;;;:14;:22;;;;;;;;:30;;:22;:30;;7408:122;16534:368;;;;;;:::i;:::-;;:::i;8218:118::-;;;;;;:::i;:::-;;:::i;7588:130::-;;;;;;:::i;:::-;;:::i;20621:311::-;;;;;;:::i;:::-;;:::i;4542:210::-;;;;;;:::i;:::-;;:::i;12544:333::-;;;;;;:::i;:::-;;:::i;2576:79::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;12209:329;;;;;;:::i;:::-;;:::i;9119:269::-;;;;;;:::i;:::-;;:::i;7724:152::-;;;;;;:::i;:::-;-1:-1:-1;;;;;7824:37:3;7801:4;7824:37;;;:27;:37;;;;;;;;:45;;:37;:45;;7724:152;21404:339;;;;;;:::i;:::-;;:::i;19860:603::-;;;;;;:::i;:::-;;:::i;2074:198:0:-;;;;;;:::i;:::-;;:::i;17078:359:3:-;;;;;;:::i;:::-;;:::i;7033:161::-;;;;;;:::i;:::-;;:::i;4758:167::-;;;;;;:::i;:::-;;:::i;2263:61::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4212:83;;;4287:1;5817:36:8;;5805:2;5790:18;4212:83:3;5675:184:8;6155:221:3;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;6268:40:3;::::1;;::::0;;;:27:::1;:40;::::0;;;;;;6261:47;;-1:-1:-1;;6261:47:3::1;::::0;;6323:46;::::1;::::0;::::1;::::0;6296:11;;6363:5;;;;6323:46:::1;:::i;:::-;;;;;;;;6155:221:::0;;;:::o;13814:1680::-;13894:22;13931:8;13920:31;;;;;;;;;;;;:::i;:::-;13893:58;;14018:6;14013:1475;14030:7;:14;14026:1;:18;14013:1475;;;14065:33;14101:7;14109:1;14101:10;;;;;;;;:::i;:::-;;;;;;;14065:46;;14186:15;14211:32;14238:1;14241;14211:20;:26;;:32;;;;;:::i;:::-;14204:40;;;:::i;:::-;14186:58;;14258:24;14285:62;14312:1;14345;14315:20;:27;:31;;;;:::i;:::-;14285:20;;:62;:26;:62::i;:::-;14416:47;;;;;;;;;;;;;;;;;14258:89;-1:-1:-1;;;;;;;;;;14404:59:3;;;14400:1078;;14483:37;14508:11;14483:24;:37::i;:::-;14400:1078;;;14557:42;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;14545:54:3;;;14541:937;;14619:40;14647:11;14619:27;:40::i;14541:937::-;14696:39;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;14684:51:3;;;14680:798;;14755:35;14778:11;14755:22;:35::i;14680:798::-;14827:40;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;14815:52:3;;;14811:667;;14887:36;14911:11;14887:23;:36::i;14811:667::-;14960:54;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;14960:54;-1:-1:-1;;;;;14948:66:3;;:8;-1:-1:-1;;;;;14948:66:3;;;14944:534;;15034:39;15061:11;15034:26;:39::i;14944:534::-;15110:55;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;15110:55;-1:-1:-1;;;;;15098:67:3;;:8;-1:-1:-1;;;;;15098:67:3;;;15094:384;;15185:39;15212:11;15185:26;:39::i;15094:384::-;15261:45;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;15249:57:3;;;15245:233;;15326:37;15351:11;15326:24;:37::i;15245:233::-;15402:61;;-1:-1:-1;;;15402:61:3;;9363:2:8;15402:61:3;;;9345:21:8;9402:2;9382:18;;;9375:30;9441:34;9421:18;;;9414:62;-1:-1:-1;;;9492:18:8;;;9485:49;9551:19;;15402:61:3;;;;;;;;15245:233;-1:-1:-1;;;14046:3:3;;14013:1475;;;;13883:1611;13814:1680;:::o;8342:248::-;8415:10;8442:8;8431:37;;;;;;;;;;;;:::i;:::-;8414:54;;;8486:32;8515:2;-1:-1:-1;;;;;7824:37:3;7801:4;7824:37;;;:27;:37;;;;;;;;:45;;:37;:45;;7724:152;8486:32;8478:105;;;;-1:-1:-1;;;8478:105:3;;10259:2:8;8478:105:3;;;10241:21:8;10298:2;10278:18;;;10271:30;10337:34;10317:18;;;10310:62;10408:30;10388:18;;;10381:58;10456:19;;8478:105:3;10057:424:8;8478:105:3;8404:186;8342:248;:::o;12883:539::-;12955:15;12980:16;13007:409;13058:22;:4;:20;:22::i;:::-;-1:-1:-1;13034:46:3;-1:-1:-1;13034:46:3;-1:-1:-1;13103:23:3;13034:46;13103:14;:23::i;:::-;13095:76;;;;-1:-1:-1;;;13095:76:3;;;;;;;:::i;:::-;13193:24;13208:8;13193:14;:24::i;:::-;13185:77;;;;-1:-1:-1;;;13185:77:3;;;;;;;:::i;:::-;13281:23;:4;:21;:23::i;:::-;13277:129;;;13331:16;:4;:14;:16::i;:::-;13324:23;;13007:409;;5289:179;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;5388:26:3;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;5381:33;;-1:-1:-1;;5381:33:3::1;::::0;;5429:32;::::1;::::0;::::1;::::0;5405:8;;5455:5;;;;5429:32:::1;:::i;13428:351::-:0;13520:96;13534:6;13542:66;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;13542:66;13610:5;;13520:13;:96::i;:::-;13626:97;13640:6;13648:67;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;13626:97;13733:39;13758:6;13766:5;;13733:24;:39::i;11910:260::-;12002:112;12016:6;12024:82;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;18401:183;18483:17;18515:8;18504:38;;;;;;;;;;;;:::i;:::-;18480:62;;;18553:24;18572:4;18553:18;:24::i;8596:235::-;8668:10;8695:8;8684:37;;;;;;;;;;;;:::i;:::-;8667:54;;;8739:32;8768:2;-1:-1:-1;;;;;7982:37:3;7959:4;7982:37;;;:27;:37;;;;;;;;:45;;:37;:45;;7882:152;8739:32;8731:93;;;;-1:-1:-1;;;8731:93:3;;11498:2:8;8731:93:3;;;11480:21:8;11537:2;11517:18;;;11510:30;11576:34;11556:18;;;11549:62;-1:-1:-1;;;11627:18:8;;;11620:46;11683:19;;8731:93:3;11296:412:8;15685:234:3;15765:13;15795:8;15784:40;;;;;;;;;;;;:::i;:::-;15764:60;;;15843:21;15858:5;15843:14;:21::i;:::-;15835:77;;;;-1:-1:-1;;;15835:77:3;;11915:2:8;15835:77:3;;;11897:21:8;11954:2;11934:18;;;11927:30;11993:34;11973:18;;;11966:62;-1:-1:-1;;;12044:18:8;;;12037:41;12095:19;;15835:77:3;11713:407:8;5474:221:3;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;5579:40:3;::::1;;::::0;;;:27:::1;:40;::::0;;;;;;:47;;-1:-1:-1;;5579:47:3::1;5622:4;5579:47;::::0;;5641;::::1;::::0;::::1;::::0;5607:11;;5682:5;;;;5641:47:::1;:::i;4301:235::-:0;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;4407:24:3;::::1;;::::0;;;4444:4:::1;4407:24;::::0;;;;;;;-1:-1:-1;;;;;;4407:34:3;::::1;::::0;;;;;;;:41;;-1:-1:-1;;4407:41:3::1;::::0;;::::1;::::0;;4458:13:::1;:15:::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;4488:41;4505:6;4513:8;4523:5;;4488:41;;;;;;;;;:::i;:::-;;;;;;;;4301:235:::0;;;;:::o;6382:241::-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;6497:50:3;::::1;;::::0;;;:37:::1;:50;::::0;;;;;;:57;;-1:-1:-1;;6497:57:3::1;6550:4;6497:57;::::0;;6569:47;::::1;::::0;::::1;::::0;6535:11;;6610:5;;;;6569:47:::1;:::i;21090:308::-:0;21167:13;21184:10;21209:8;21198:46;;;;;;;;;;;;:::i;:::-;21166:78;;;;;21263:21;21278:5;21263:14;:21::i;:::-;21255:51;;;;-1:-1:-1;;;21255:51:3;;;;;;;:::i;:::-;21324:21;21342:2;21324:17;:21::i;:::-;21316:75;;;;-1:-1:-1;;;21316:75:3;;13725:2:8;21316:75:3;;;13707:21:8;13764:2;13744:18;;;13737:30;13803:34;13783:18;;;13776:62;-1:-1:-1;;;13854:18:8;;;13847:39;13903:19;;21316:75:3;13523:405:8;18014:196:3;18100:17;18132:8;18121:47;;;;;;;;;;;;:::i;:::-;18095:73;;;;18179:24;18198:4;18179:18;:24::i;9613:1744::-;4045:7;1273:6:0;-1:-1:-1;;;;;9762:32:3;;;1273:6:0;;9759:125:3;9867:7;9759:125;9902:23;9918:6;-1:-1:-1;;;;;7493:22:3;7470:4;7493:22;;;:14;:22;;;;;;;;:30;;:22;:30;;7408:122;9902:23;9894:68;;;;-1:-1:-1;;;9894:68:3;;14597:2:8;9894:68:3;;;14579:21:8;;;14616:18;;;14609:30;14675:34;14655:18;;;14648:62;14727:18;;9894:68:3;14395:356:8;9894:68:3;10028:15;10053:24;10075:1;10028:15;10053:20;;:24;:::i;:::-;10046:32;;;:::i;:::-;10028:50;-1:-1:-1;10088:23:3;;10114:24;:20;10135:1;10114:20;;:24;:::i;:::-;10088:50;;;;10156:35;10174:6;10182:8;10156:17;:35::i;:::-;10148:83;;;;-1:-1:-1;;;10148:83:3;;15622:2:8;10148:83:3;;;15604:21:8;15661:2;15641:18;;;15634:30;15700:34;15680:18;;;15673:62;-1:-1:-1;;;15751:18:8;;;15744:33;15794:19;;10148:83:3;15420:399:8;10148:83:3;10257:82;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;10257:82;-1:-1:-1;;;;;10245:94:3;;:8;-1:-1:-1;;;;;10245:94:3;;;10242:1109;;10355:43;10389:8;;10355:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10355:33:3;;-1:-1:-1;;;10355:43:3:i;:::-;10242:1109;;;10430:66;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;10430:66;-1:-1:-1;;;;;10418:78:3;;:8;-1:-1:-1;;;;;10418:78:3;;;10415:936;;10512:29;10532:8;;10512:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10512:19:3;;-1:-1:-1;;;10512:29:3:i;10415:936::-;10573:33;;;;;;;;;;;;-1:-1:-1;;;10573:33:3;;;;;-1:-1:-1;;;;;;;;;10561:45:3;;;10558:793;;10622:34;10647:8;;10622:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10622:24:3;;-1:-1:-1;;;10622:34:3:i;10558:793::-;10688:40;;;;;;;;;;;;-1:-1:-1;;;10688:40:3;;;;;-1:-1:-1;;;;;;;;;10676:52:3;;;10673:678;;10744:27;10762:8;;10744:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10744:17:3;;-1:-1:-1;;;10744:27:3:i;10673:678::-;10803:39;;;;;;;;;;;;-1:-1:-1;;;10803:39:3;;;;;-1:-1:-1;;;;;;;;;10791:51:3;;;10788:563;;10858:26;10875:8;;10858:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10858:16:3;;-1:-1:-1;;;10858:26:3:i;10788:563::-;10916:49;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;10916:49;-1:-1:-1;;;;;10904:61:3;;:8;-1:-1:-1;;;;;10904:61:3;;;10901:450;;10981:36;11008:8;;10981:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10981:26:3;;-1:-1:-1;;;10981:36:3:i;10901:450::-;11049:53;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;11049:53;-1:-1:-1;;;;;11037:65:3;;:8;-1:-1:-1;;;;;11037:65:3;;;11034:317;;11118:29;11138:8;;11118:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11118:19:3;;-1:-1:-1;;;11118:29:3:i;11034:317::-;11179:48;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;11179:48;-1:-1:-1;;;;;11167:60:3;;:8;-1:-1:-1;;;;;11167:60:3;;;11164:187;;11243:31;11265:8;;11243:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11243:21:3;;-1:-1:-1;;;11243:31:3:i;11164:187::-;11305:35;;-1:-1:-1;;;11305:35:3;;16026:2:8;11305:35:3;;;16008:21:8;16065:2;16045:18;;;16038:30;16104:27;16084:18;;;16077:55;16149:18;;11305:35:3;15824:349:8;11164:187:3;9748:1609;;;9613:1744;;;;;:::o;9394:213::-;9488:78;9502:5;9509:49;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;9488:78;9576:24;9587:5;9594;;9576:10;:24::i;7257:145::-;-1:-1:-1;;;;;7361:24:3;;7338:4;7361:24;;;:16;:24;;;;;;;;-1:-1:-1;;;;;;7361:34:3;;;;;;;;;;;;7257:145;;;;;:::o;1824:101:0:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;5104:179:3:-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;5195:26:3;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;:33;;-1:-1:-1;;5195:33:3::1;5224:4;5195:33;::::0;;5243;::::1;::::0;::::1;::::0;5212:8;;5270:5;;;;5243:33:::1;:::i;11396:508::-:0;11489:21;11512:10;11539:8;11528:60;;;;;;;;;;;;:::i;:::-;11484:104;;;;;;;11607:21;11625:2;11607:17;:21::i;:::-;11599:110;;;;-1:-1:-1;;;11599:110:3;;17625:2:8;11599:110:3;;;17607:21:8;17664:2;17644:18;;;17637:30;17703:34;17683:18;;;17676:62;17774:34;17754:18;;;17747:62;-1:-1:-1;;;17825:19:8;;;17818:43;17878:19;;11599:110:3;17423:480:8;11599:110:3;11720:13;;11743:147;11767:4;:11;11763:1;:15;11743:147;;;11807:4;11812:1;11807:7;;;;;;;;:::i;:::-;;;;;;;11799:15;;11836:21;11851:5;11836:14;:21::i;:::-;11828:51;;;;-1:-1:-1;;;11828:51:3;;;;;;;:::i;:::-;11780:3;;11743:147;;;;11474:430;;;11396:508;:::o;16110:229::-;16193:13;16221:8;16210:31;;;;;;;;;;;;:::i;:::-;16192:49;;16260:21;16275:5;16260:14;:21::i;:::-;16252:80;;;;-1:-1:-1;;;16252:80:3;;;;;;;:::i;6866:161::-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;6951:20:3;::::1;;::::0;;;:13:::1;:20;::::0;;;;;;:27;;-1:-1:-1;;6951:27:3::1;6974:4;6951:27;::::0;;6993;::::1;::::0;::::1;::::0;6965:5;;7014;;;;6993:27:::1;:::i;5701:221::-:0;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;5814:40:3;::::1;;::::0;;;:27:::1;:40;::::0;;;;;;5807:47;;-1:-1:-1;;5807:47:3::1;::::0;;5869:46;::::1;::::0;::::1;::::0;5842:11;;5909:5;;;;5869:46:::1;:::i;8837:276::-:0;8919:10;8946:8;8935:37;;;;;;;;;;;;:::i;:::-;8918:54;;;8990:42;9029:2;-1:-1:-1;;;;;8150:47:3;8127:4;8150:47;;;:37;:47;;;;;;;;:55;;:47;:55;;8040:172;8990:42;8982:124;;;;-1:-1:-1;;;8982:124:3;;18789:2:8;8982:124:3;;;18771:21:8;18828:2;18808:18;;;18801:30;18867:34;18847:18;;;18840:62;18938:34;18918:18;;;18911:62;-1:-1:-1;;;18989:19:8;;;18982:36;19035:19;;8982:124:3;18587:473:8;5928:221:3;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;6033:40:3;::::1;;::::0;;;:27:::1;:40;::::0;;;;;;:47;;-1:-1:-1;;6033:47:3::1;6076:4;6033:47;::::0;;6095;::::1;::::0;::::1;::::0;6061:11;;6136:5;;;;6095:47:::1;:::i;19125:729::-:0;19194:15;19219:16;19246:602;19283:17;:4;19298:1;19283:14;:17::i;:::-;19273:27;-1:-1:-1;19325:36:3;952:1;;1078:29;741:1;634:2;1078:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;19325:4;;:14;:36::i;:::-;19314:47;;19384:23;19399:7;19384:14;:23::i;:::-;19376:73;;;;-1:-1:-1;;;19376:73:3;;;;;;;:::i;:::-;19471:24;19486:8;19471:14;:24::i;:::-;19463:74;;;;-1:-1:-1;;;19463:74:3;;;;;;;:::i;:::-;952:1;;1078:29;741:1;634:2;1078:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;634:2;952:1;;1078:29;741:1;634:2;1078:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;1250:32;;;;:::i;:::-;1427:42;;;;:::i;:::-;19635:4;:11;:49;19631:207;;19711:68;952:1;;1078:29;741:1;634:2;1078:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;952:1;;1078:29;741:1;634:2;1078:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;19744:4;:11;:34;;;;:::i;19711:68::-;19704:75;;19246:602;;4931:167;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;5026:22:3;::::1;;::::0;;;:14:::1;:22;::::0;;;;;;5019:29;;-1:-1:-1;;5019:29:3::1;::::0;;5063:28;::::1;::::0;::::1;::::0;5041:6;;5085:5;;;;5063:28:::1;:::i;16534:368::-:0;16612:13;16627:16;16658:8;16647:40;;;;;;;;;;;;:::i;:::-;16611:76;;;;16714:21;16729:5;16714:14;:21::i;:::-;16706:80;;;;-1:-1:-1;;;16706:80:3;;;;;;;:::i;:::-;16804:27;16822:8;16804:17;:27::i;:::-;16796:99;;;;-1:-1:-1;;;16796:99:3;;20209:2:8;16796:99:3;;;20191:21:8;20248:2;20228:18;;;20221:30;20287:34;20267:18;;;20260:62;20358:29;20338:18;;;20331:57;20405:19;;16796:99:3;20007:423:8;8218:118:3;-1:-1:-1;;;;;8301:20:3;8278:4;8301:20;;;:13;:20;;;;;;;;:28;;:20;:28;;8218:118::o;7588:130::-;-1:-1:-1;;;;;7677:26:3;7654:4;7677:26;;;:16;:26;;;;;;;;:34;;:26;:34;;7588:130::o;20621:311::-;20696:13;20730:8;20719:52;;;;;;;;;;;;:::i;:::-;20695:76;;;;;20790:21;20805:5;20790:14;:21::i;:::-;20782:51;;;;-1:-1:-1;;;20782:51:3;;;;;;;:::i;4542:210::-;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;4656:24:3;::::1;;::::0;;;:16:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;;4656:34:3;::::1;::::0;;;;;;;;;4649:41;;-1:-1:-1;;4649:41:3::1;::::0;;4705:40;::::1;::::0;::::1;::::0;4673:6;;4681:8;;4739:5;;;;4705:40:::1;:::i;12544:333::-:0;12620:31;12666:8;12655:41;;;;;;;;;;;;:::i;:::-;12619:77;;12723:35;12741:6;:16;;;12723:17;:35::i;:::-;12715:111;;;;-1:-1:-1;;;12715:111:3;;22429:2:8;12715:111:3;;;22411:21:8;22468:2;22448:18;;;22441:30;22507:34;22487:18;;;22480:62;22578:33;22558:18;;;22551:61;22629:19;;12715:111:3;22227:427:8;12715:111:3;12858:11;;12836:34;;:21;:34::i;12209:329::-;12284:30;12329:8;12318:40;;;;;;;;;;;;:::i;:::-;12283:75;;12385:35;12403:6;:16;;;12385:17;:35::i;:::-;12377:110;;;;-1:-1:-1;;;12377:110:3;;23244:2:8;12377:110:3;;;23226:21:8;23283:2;23263:18;;;23256:30;23322:34;23302:18;;;23295:62;23393:32;23373:18;;;23366:60;23443:19;;12377:110:3;23042:426:8;9119:269:3;9221:40;;;;;;;;;;;;-1:-1:-1;;;9221:40:3;;;;;9200:69;9214:5;3899:23;9221:40;3740:190;9200:69;9300:39;;;;;;;;;;;;-1:-1:-1;;;9300:39:3;;;;;9279:68;9293:5;3899:23;9300:39;3740:190;21404:339;21492:88;21506:11;21519:53;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;21492:88;21590:83;21604:11;21617:48;;;;;;;;;;;;;;;;;;3899:23;;;;;;;;3740:190;19860:603;19998:33;;;;;;;;;;;;-1:-1:-1;;;19998:33:3;;;;;19971:68;19985:11;3899:23;19998:33;3740:190;19971:68;20049:44;20074:11;20087:5;;20049:24;:44::i;:::-;20103;20128:11;20141:5;;20103:24;:44::i;:::-;20402:54;20437:11;20450:5;;20402:34;:54::i;2074:198:0:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2162:22:0;::::1;2154:73;;;::::0;-1:-1:-1;;;2154:73:0;;23675:2:8;2154:73:0::1;::::0;::::1;23657:21:8::0;23714:2;23694:18;;;23687:30;23753:34;23733:18;;;23726:62;-1:-1:-1;;;23804:18:8;;;23797:36;23850:19;;2154:73:0::1;23473:402:8::0;2154:73:0::1;2237:28;2256:8;2237:18;:28::i;:::-;2074:198:::0;:::o;17078:359:3:-;17157:13;17172:16;17203:8;17192:40;;;;;;;;;;;;:::i;:::-;17156:76;;;;17259:21;17274:5;17259:14;:21::i;:::-;17251:70;;;;-1:-1:-1;;;17251:70:3;;24082:2:8;17251:70:3;;;24064:21:8;24121:2;24101:18;;;24094:30;24160:34;24140:18;;;24133:62;-1:-1:-1;;;24211:18:8;;;24204:34;24255:19;;17251:70:3;23880:400:8;7033:161:3;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;7126:20:3;::::1;;::::0;;;:13:::1;:20;::::0;;;;;;7119:27;;-1:-1:-1;;7119:27:3::1;::::0;;7161:26;::::1;::::0;::::1;::::0;7140:5;;7181;;;;7161:26:::1;:::i;4758:167::-:0;1094:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;4845:22:3;::::1;;::::0;;;:14:::1;:22;::::0;;;;;;:29;;-1:-1:-1;;4845:29:3::1;4870:4;4845:29;::::0;;4889;::::1;::::0;::::1;::::0;4860:6;;4912:5;;;;4889:29:::1;:::i;1359:130:0:-:0;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;734:10:2;1422:23:0;1414:68;;;;-1:-1:-1;;;1414:68:0;;24487:2:8;1414:68:0;;;24469:21:8;;;24506:18;;;24499:30;24565:34;24545:18;;;24538:62;24617:18;;1414:68:0;24285:356:8;392:3007:6;514:12;562:7;546:12;562:7;556:2;546:12;:::i;:::-;:23;;538:50;;;;-1:-1:-1;;;538:50:6;;24848:2:8;538:50:6;;;24830:21:8;24887:2;24867:18;;;24860:30;-1:-1:-1;;;24906:18:8;;;24899:44;24960:18;;538:50:6;24646:338:8;538:50:6;626:6;606:16;615:7;626:6;606:16;:::i;:::-;:26;;598:53;;;;-1:-1:-1;;;598:53:6;;24848:2:8;598:53:6;;;24830:21:8;24887:2;24867:18;;;24860:30;-1:-1:-1;;;24906:18:8;;;24899:44;24960:18;;598:53:6;24646:338:8;598:53:6;686:16;695:7;686:6;:16;:::i;:::-;669:6;:13;:33;;661:63;;;;-1:-1:-1;;;661:63:6;;25191:2:8;661:63:6;;;25173:21:8;25230:2;25210:18;;;25203:30;-1:-1:-1;;;25249:18:8;;;25242:47;25306:18;;661:63:6;24989:341:8;661:63:6;735:22;798:15;;830:2099;;;;3082:4;3076:11;3063:24;;3280:1;3269:9;3262:20;3332:4;3321:9;3317:20;3311:4;3304:34;791:2565;;830:2099;1024:4;1018:11;1005:24;;1719:2;1710:7;1706:16;2121:9;2114:17;2108:4;2104:28;2092:9;2081;2077:25;2073:60;2173:7;2169:2;2165:16;2441:6;2427:9;2420:17;2414:4;2410:28;2398:9;2390:6;2386:22;2382:57;2378:70;2203:461;2478:3;2474:2;2471:11;2203:461;;;2632:9;;2621:21;;2523:4;2515:13;;;;2559;2203:461;;;-1:-1:-1;;2686:26:6;;;2906:2;2889:11;-1:-1:-1;;2885:25:6;2879:4;2872:39;-1:-1:-1;791:2565:6;-1:-1:-1;3383:9:6;392:3007;-1:-1:-1;;;;392:3007:6:o;1779:314:7:-;1883:14;;;1983:17;:4;1883:14;1983;:17::i;:::-;1974:26;-1:-1:-1;2016:24:7;:4;304:2;2016:13;:24::i;:::-;2010:30;-1:-1:-1;2059:27:7;507:20;397:1;304:2;507:20;:::i;:::-;2059:4;;:14;:27::i;:::-;2050:36;;1779:314;;;;;:::o;992:138::-;1060:4;507:20;397:1;304:2;507:20;:::i;:::-;304:2;507:20;397:1;304:2;507:20;:::i;:::-;618:23;;;;:::i;:::-;777:24;;;;:::i;:::-;1083:4;:11;:40;;1076:47;;992:138;;;:::o;2635:149::-;2696:12;2727:50;507:20;397:1;304:2;507:20;:::i;:::-;;397:1;304:2;507:20;:::i;:::-;2751:4;:11;:25;;;;:::i;:::-;2727:4;;:50;:10;:50::i;2426:187:0:-;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:0;;;-1:-1:-1;;;;;;2534:17:0;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;3405:416:6:-;3484:7;3526:6;3511:11;3526:6;3520:2;3511:11;:::i;:::-;:21;;3503:52;;;;-1:-1:-1;;;3503:52:6;;25537:2:8;3503:52:6;;;25519:21:8;25576:2;25556:18;;;25549:30;-1:-1:-1;;;25595:18:8;;;25588:48;25653:18;;3503:52:6;25335:342:8;3503:52:6;3590:11;:6;3599:2;3590:11;:::i;:::-;3573:6;:13;:28;;3565:62;;;;-1:-1:-1;;;3565:62:6;;25884:2:8;3565:62:6;;;25866:21:8;25923:2;25903:18;;;25896:30;-1:-1:-1;;;25942:18:8;;;25935:51;26003:18;;3565:62:6;25682:345:8;3565:62:6;-1:-1:-1;3715:30:6;3731:4;3715:30;3709:37;-1:-1:-1;;;3705:71:6;;;3405:416::o;3827:365::-;3905:6;3945;3931:10;3945:6;3940:1;3931:10;:::i;:::-;:20;;3923:50;;;;-1:-1:-1;;;3923:50:6;;26234:2:8;3923:50:6;;;26216:21:8;26273:2;26253:18;;;26246:30;-1:-1:-1;;;26292:18:8;;;26285:47;26349:18;;3923:50:6;26032:341:8;3923:50:6;4008:10;:6;4017:1;4008:10;:::i;:::-;3991:6;:13;:27;;3983:60;;;;-1:-1:-1;;;3983:60:6;;26580:2:8;3983:60:6;;;26562:21:8;26619:2;26599:18;;;26592:30;-1:-1:-1;;;26638:18:8;;;26631:50;26698:18;;3983:60:6;26378:344:8;3983:60:6;-1:-1:-1;4120:29:6;4136:3;4120:29;4114:36;;3827:365::o;14:131:8:-;-1:-1:-1;;;;;89:31:8;;79:42;;69:70;;135:1;132;125:12;150:348;202:8;212:6;266:3;259:4;251:6;247:17;243:27;233:55;;284:1;281;274:12;233:55;-1:-1:-1;307:20:8;;-1:-1:-1;;;;;339:30:8;;336:50;;;382:1;379;372:12;336:50;419:4;411:6;407:17;395:29;;471:3;464:4;455:6;447;443:19;439:30;436:39;433:59;;;488:1;485;478:12;433:59;150:348;;;;;:::o;503:546::-;583:6;591;599;652:2;640:9;631:7;627:23;623:32;620:52;;;668:1;665;658:12;620:52;707:9;694:23;726:31;751:5;726:31;:::i;:::-;776:5;-1:-1:-1;832:2:8;817:18;;804:32;-1:-1:-1;;;;;848:30:8;;845:50;;;891:1;888;881:12;845:50;930:59;981:7;972:6;961:9;957:22;930:59;:::i;:::-;503:546;;1008:8;;-1:-1:-1;904:85:8;;-1:-1:-1;;;;503:546:8:o;1054:127::-;1115:10;1110:3;1106:20;1103:1;1096:31;1146:4;1143:1;1136:15;1170:4;1167:1;1160:15;1186:275;1257:2;1251:9;1322:2;1303:13;;-1:-1:-1;;1299:27:8;1287:40;;-1:-1:-1;;;;;1342:34:8;;1378:22;;;1339:62;1336:88;;;1404:18;;:::i;:::-;1440:2;1433:22;1186:275;;-1:-1:-1;1186:275:8:o;1466:186::-;1514:4;-1:-1:-1;;;;;1539:6:8;1536:30;1533:56;;;1569:18;;:::i;:::-;-1:-1:-1;1635:2:8;1614:15;-1:-1:-1;;1610:29:8;1641:4;1606:40;;1466:186::o;1657:671::-;1725:6;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1834:9;1821:23;-1:-1:-1;;;;;1859:6:8;1856:30;1853:50;;;1899:1;1896;1889:12;1853:50;1922:22;;1975:4;1967:13;;1963:27;-1:-1:-1;1953:55:8;;2004:1;2001;1994:12;1953:55;2040:2;2027:16;2065:48;2081:31;2109:2;2081:31;:::i;:::-;2065:48;:::i;:::-;2136:2;2129:5;2122:17;2176:7;2171:2;2166;2162;2158:11;2154:20;2151:33;2148:53;;;2197:1;2194;2187:12;2148:53;2252:2;2247;2243;2239:11;2234:2;2227:5;2223:14;2210:45;2296:1;2275:14;;;2291:2;2271:23;2264:34;;;;2279:5;1657:671;-1:-1:-1;;;;1657:671:8:o;2333:247::-;2392:6;2445:2;2433:9;2424:7;2420:23;2416:32;2413:52;;;2461:1;2458;2451:12;2413:52;2500:9;2487:23;2519:31;2544:5;2519:31;:::i;:::-;2569:5;2333:247;-1:-1:-1;;;2333:247:8:o;2777:173::-;2844:20;;-1:-1:-1;;;;;;2893:32:8;;2883:43;;2873:71;;2940:1;2937;2930:12;2873:71;2777:173;;;:::o;2955:618::-;3043:6;3051;3059;3067;3120:2;3108:9;3099:7;3095:23;3091:32;3088:52;;;3136:1;3133;3126:12;3088:52;3175:9;3162:23;3194:31;3219:5;3194:31;:::i;:::-;3244:5;-1:-1:-1;3268:37:8;3301:2;3286:18;;3268:37;:::i;:::-;3258:47;;3356:2;3345:9;3341:18;3328:32;-1:-1:-1;;;;;3375:6:8;3372:30;3369:50;;;3415:1;3412;3405:12;3369:50;3454:59;3505:7;3496:6;3485:9;3481:22;3454:59;:::i;:::-;2955:618;;;;-1:-1:-1;3532:8:8;-1:-1:-1;;;;2955:618:8:o;3578:686::-;3666:6;3674;3682;3690;3743:2;3731:9;3722:7;3718:23;3714:32;3711:52;;;3759:1;3756;3749:12;3711:52;3798:9;3785:23;3817:31;3842:5;3817:31;:::i;:::-;3867:5;-1:-1:-1;3924:2:8;3909:18;;3896:32;3937:33;3896:32;3937:33;:::i;4269:319::-;4336:6;4344;4397:2;4385:9;4376:7;4372:23;4368:32;4365:52;;;4413:1;4410;4403:12;4365:52;4452:9;4439:23;4471:31;4496:5;4471:31;:::i;:::-;4521:5;-1:-1:-1;4545:37:8;4578:2;4563:18;;4545:37;:::i;:::-;4535:47;;4269:319;;;;;:::o;5864:267::-;5953:6;5948:3;5941:19;6005:6;5998:5;5991:4;5986:3;5982:14;5969:43;-1:-1:-1;6057:1:8;6032:16;;;6050:4;6028:27;;;6021:38;;;;6113:2;6092:15;;;-1:-1:-1;;6088:29:8;6079:39;;;6075:50;;5864:267::o;6136:344::-;-1:-1:-1;;;;;6323:32:8;;6305:51;;6392:2;6387;6372:18;;6365:30;;;-1:-1:-1;;6412:62:8;;6455:18;;6447:6;6439;6412:62;:::i;:::-;6404:70;6136:344;-1:-1:-1;;;;;6136:344:8:o;6485:181::-;6543:4;-1:-1:-1;;;;;6568:6:8;6565:30;6562:56;;;6598:18;;:::i;:::-;-1:-1:-1;6643:1:8;6639:14;6655:4;6635:25;;6485:181::o;6671:587::-;6724:5;6777:3;6770:4;6762:6;6758:17;6754:27;6744:55;;6795:1;6792;6785:12;6744:55;6824:6;6818:13;6855:48;6871:31;6899:2;6871:31;:::i;6855:48::-;6928:2;6919:7;6912:19;6950:4;6997:3;6990:4;6985:2;6977:6;6973:15;6969:26;6966:35;6963:55;;;7014:1;7011;7004:12;6963:55;7036:1;7046:134;7060:2;7057:1;7054:9;7046:134;;;7149:14;;;7145:23;;7139:30;7117:15;;;7113:24;;7106:64;7071:10;;7046:134;;;-1:-1:-1;;7225:1:8;7200:16;;;7218:4;7196:27;7189:38;;;;7204:7;6671:587;-1:-1:-1;;;6671:587:8:o;7263:1130::-;7367:6;7398:2;7441;7429:9;7420:7;7416:23;7412:32;7409:52;;;7457:1;7454;7447:12;7409:52;7490:9;7484:16;-1:-1:-1;;;;;7560:2:8;7552:6;7549:14;7546:34;;;7576:1;7573;7566:12;7546:34;7614:6;7603:9;7599:22;7589:32;;7659:7;7652:4;7648:2;7644:13;7640:27;7630:55;;7681:1;7678;7671:12;7630:55;7710:2;7704:9;7733:58;7749:41;7787:2;7749:41;:::i;7733:58::-;7825:15;;;7907:1;7903:10;;;;7895:19;;7891:28;;;7856:12;;;;7931:19;;;7928:39;;;7963:1;7960;7953:12;7928:39;7995:2;7991;7987:11;8007:356;8023:6;8018:3;8015:15;8007:356;;;8102:3;8096:10;8138:2;8125:11;8122:19;8119:109;;;8182:1;8211:2;8207;8200:14;8119:109;8253:67;8312:7;8307:2;8293:11;8289:2;8285:20;8281:29;8253:67;:::i;:::-;8241:80;;-1:-1:-1;8341:12:8;;;;8040;;8007:356;;;-1:-1:-1;8382:5:8;7263:1130;-1:-1:-1;;;;;;;;7263:1130:8:o;8398:127::-;8459:10;8454:3;8450:20;8447:1;8440:31;8490:4;8487:1;8480:15;8514:4;8511:1;8504:15;8530:361;8647:12;;8695:4;8684:16;;8678:23;-1:-1:-1;;;;;;8758:11:8;;;;8647:12;8678:23;8792:1;8781:13;;8778:107;;;8872:2;8866;8856:6;8853:1;8849:14;8846:1;8842:22;8838:31;8834:2;8830:40;8826:49;8817:58;;8778:107;;;;8530:361;;;:::o;8896:127::-;8957:10;8952:3;8948:20;8945:1;8938:31;8988:4;8985:1;8978:15;9012:4;9009:1;9002:15;9028:128;9095:9;;;9116:11;;;9113:37;;;9130:18;;:::i;9581:146::-;9668:13;;9690:31;9668:13;9690:31;:::i;9732:320::-;9819:6;9827;9880:2;9868:9;9859:7;9855:23;9851:32;9848:52;;;9896:1;9893;9886:12;9848:52;9928:9;9922:16;9947:31;9972:5;9947:31;:::i;:::-;10042:2;10027:18;;;;10021:25;9997:5;;10021:25;;-1:-1:-1;;;9732:320:8:o;10486:404::-;10688:2;10670:21;;;10727:2;10707:18;;;10700:30;10766:34;10761:2;10746:18;;10739:62;-1:-1:-1;;;10832:2:8;10817:18;;10810:38;10880:3;10865:19;;10486:404::o;10895:396::-;10983:6;10991;11044:2;11032:9;11023:7;11019:23;11015:32;11012:52;;;11060:1;11057;11050:12;11012:52;11089:9;11083:16;11073:26;;11143:2;11132:9;11128:18;11122:25;-1:-1:-1;;;;;11162:6:8;11159:30;11156:50;;;11202:1;11199;11192:12;11156:50;11225:60;11277:7;11268:6;11257:9;11253:22;11225:60;:::i;:::-;11215:70;;;10895:396;;;;;:::o;12125:135::-;12164:3;12185:17;;;12182:43;;12205:18;;:::i;:::-;-1:-1:-1;12252:1:8;12241:13;;12125:135::o;12265:440::-;-1:-1:-1;;;;;12478:32:8;;12460:51;;-1:-1:-1;;;;;;12547:33:8;;12542:2;12527:18;;12520:61;12617:2;12612;12597:18;;12590:30;;;-1:-1:-1;;12637:62:8;;12680:18;;12672:6;12664;12637:62;:::i;:::-;12629:70;12265:440;-1:-1:-1;;;;;;12265:440:8:o;12710:462::-;12814:6;12822;12830;12883:2;12871:9;12862:7;12858:23;12854:32;12851:52;;;12899:1;12896;12889:12;12851:52;12931:9;12925:16;12950:31;12975:5;12950:31;:::i;:::-;13045:2;13030:18;;13024:25;13094:2;13079:18;;13073:25;13000:5;;-1:-1:-1;13024:25:8;-1:-1:-1;13107:33:8;13073:25;13107:33;:::i;:::-;13159:7;13149:17;;;12710:462;;;;;:::o;13177:341::-;13379:2;13361:21;;;13418:2;13398:18;;;13391:30;-1:-1:-1;;;13452:2:8;13437:18;;13430:47;13509:2;13494:18;;13177:341::o;13933:457::-;14030:6;14038;14046;14099:2;14087:9;14078:7;14074:23;14070:32;14067:52;;;14115:1;14112;14105:12;14067:52;14144:9;14138:16;14128:26;;14194:2;14183:9;14179:18;14173:25;14163:35;;14242:2;14231:9;14227:18;14221:25;-1:-1:-1;;;;;14261:6:8;14258:30;14255:50;;;14301:1;14298;14291:12;14255:50;14324:60;14376:7;14367:6;14356:9;14352:22;14324:60;:::i;:::-;14314:70;;;13933:457;;;;;:::o;14756:331::-;14861:9;14872;14914:8;14902:10;14899:24;14896:44;;;14936:1;14933;14926:12;14896:44;14965:6;14955:8;14952:20;14949:40;;;14985:1;14982;14975:12;14949:40;-1:-1:-1;;15011:23:8;;;15056:25;;;;;-1:-1:-1;14756:331:8:o;15092:323::-;-1:-1:-1;;;;;;15212:19:8;;15288:11;;;;15319:1;15311:10;;15308:101;;;15396:2;15390;15383:3;15380:1;15376:11;15373:1;15369:19;15365:28;15361:2;15357:37;15353:46;15344:55;;15308:101;;;15092:323;;;;:::o;16178:1240::-;16317:6;16325;16333;16341;16349;16402:3;16390:9;16381:7;16377:23;16373:33;16370:53;;;16419:1;16416;16409:12;16370:53;16448:9;16442:16;16432:26;;16477:2;16519;16508:9;16504:18;16498:25;16488:35;;16567:2;16556:9;16552:18;16546:25;-1:-1:-1;;;;;16586:6:8;16583:30;16580:50;;;16626:1;16623;16616:12;16580:50;16649:22;;16702:4;16694:13;;16690:27;-1:-1:-1;16680:55:8;;16731:1;16728;16721:12;16680:55;16760:2;16754:9;16783:58;16799:41;16837:2;16799:41;:::i;16783:58::-;16875:15;;;16957:1;16953:10;;;;16945:19;;16941:28;;;16906:12;;;;16981:19;;;16978:39;;;17013:1;17010;17003:12;16978:39;17037:11;;;;17057:210;17073:6;17068:3;17065:15;17057:210;;;17146:3;17140:10;17163:31;17188:5;17163:31;:::i;:::-;17207:18;;17090:12;;;;17245;;;;17057:210;;;17286:5;17276:15;;;;;;;17310:57;17363:2;17352:9;17348:18;17310:57;:::i;:::-;17300:67;;17407:3;17396:9;17392:19;17386:26;17376:36;;16178:1240;;;;;;;;:::o;17908:259::-;17986:6;18039:2;18027:9;18018:7;18014:23;18010:32;18007:52;;;18055:1;18052;18045:12;18007:52;18087:9;18081:16;18106:31;18131:5;18106:31;:::i;18172:410::-;18374:2;18356:21;;;18413:2;18393:18;;;18386:30;18452:34;18447:2;18432:18;;18425:62;-1:-1:-1;;;18518:2:8;18503:18;;18496:44;18572:3;18557:19;;18172:410::o;19065:125::-;19130:9;;;19151:10;;;19148:36;;;19164:18;;:::i;19195:401::-;19397:2;19379:21;;;19436:2;19416:18;;;19409:30;19475:34;19470:2;19455:18;;19448:62;-1:-1:-1;;;19541:2:8;19526:18;;19519:35;19586:3;19571:19;;19195:401::o;19601:::-;19696:6;19704;19757:2;19745:9;19736:7;19732:23;19728:32;19725:52;;;19773:1;19770;19763:12;19725:52;19805:9;19799:16;19824:31;19849:5;19824:31;:::i;:::-;19924:2;19909:18;;19903:25;19874:5;;-1:-1:-1;19937:33:8;19903:25;19937:33;:::i;:::-;19989:7;19979:17;;;19601:401;;;;;:::o;20435:524::-;20548:6;20556;20564;20572;20625:3;20613:9;20604:7;20600:23;20596:33;20593:53;;;20642:1;20639;20632:12;20593:53;20674:9;20668:16;20693:31;20718:5;20693:31;:::i;:::-;20788:2;20773:18;;20767:25;20837:2;20822:18;;20816:25;20743:5;;-1:-1:-1;20767:25:8;-1:-1:-1;20850:33:8;20816:25;20850:33;:::i;:::-;20949:2;20934:18;;;;20928:25;20435:524;;;;-1:-1:-1;;;20435:524:8:o;20964:874::-;21039:5;21087:4;21075:9;21070:3;21066:19;21062:30;21059:50;;;21105:1;21102;21095:12;21059:50;21138:2;21132:9;21180:4;21172:6;21168:17;-1:-1:-1;;;;;21272:6:8;21260:10;21257:22;21252:2;21240:10;21237:18;21234:46;21231:72;;;21283:18;;:::i;:::-;21323:10;21319:2;21312:22;21352:6;21343:15;;21387:9;21381:16;21367:30;;21420:2;21412:6;21409:14;21406:34;;;21436:1;21433;21426:12;21406:34;;21464:56;21516:3;21507:6;21496:9;21492:22;21464:56;:::i;:::-;21456:6;21449:72;;21566:2;21555:9;21551:18;21545:25;21579:33;21604:7;21579:33;:::i;:::-;21645:7;21640:2;21632:6;21628:15;21621:32;;21707:2;21696:9;21692:18;21686:25;21681:2;21673:6;21669:15;21662:50;21766:2;21755:9;21751:18;21745:25;21740:2;21732:6;21728:15;21721:50;21826:3;21815:9;21811:19;21805:26;21799:3;21791:6;21787:16;21780:52;;20964:874;;;;:::o;21843:379::-;21947:6;22000:2;21988:9;21979:7;21975:23;21971:32;21968:52;;;22016:1;22013;22006:12;21968:52;22049:9;22043:16;-1:-1:-1;;;;;22074:6:8;22071:30;22068:50;;;22114:1;22111;22104:12;22068:50;22137:79;22208:7;22199:6;22188:9;22184:22;22137:79;:::i;:::-;22127:89;21843:379;-1:-1:-1;;;;21843:379:8:o","linkReferences":{}},"methodIdentifiers":{"allowApprovalDestination(address,string)":"98b3cc39","allowAsset(address,string)":"86b6dbe5","allowCallSite(address,bytes4,string)":"5e4ccace","allowDelegationApprovalDestination(address,string)":"63cc17f2","allowReceiver(address,string)":"72e548a9","allowSender(address,string)":"fa2c59c8","allowWithdrawDestination(address,string)":"5ace1d92","allowedApprovalDestinations(address)":"eb0de042","allowedAssets(address)":"a4c1cccb","allowedCallSites(address,bytes4)":"a847cf4d","allowedDelegationApprovalDestinations(address)":"4b941268","allowedReceivers(address)":"3cf20025","allowedSenders(address)":"fadbcf48","allowedWithdrawDestinations(address)":"07ef00cf","callSiteCount()":"a9fc3d4f","getGovernanceAddress()":"73252494","getInternalVersion()":"fdedfa27","isAllowedApprovalDestination(address)":"1d49039c","isAllowedAsset(address)":"c537bed0","isAllowedCallSite(address,bytes4)":"713ebf3b","isAllowedDelegationApprovalDestination(address)":"2dc32a61","isAllowedReceiver(address)":"d075f9bb","isAllowedSender(address)":"be8c97b0","isAllowedWithdrawDestination(address)":"efb47bff","owner()":"8da5cb5b","removeApprovalDestination(address,string)":"04a3ba25","removeAsset(address,string)":"f901dc33","removeCallSite(address,bytes4,string)":"d7334c9d","removeDelegationApprovalDestination(address,string)":"f259a073","removeReceiver(address,string)":"2d12d788","removeSender(address,string)":"a67e1f54","removeWithdrawDestination(address,string)":"8c2fdf9e","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b","validate1deltaPath(bytes)":"a1b6b430","validateCall(address,address,bytes)":"6d5025f1","validateUniswapV3Path(bytes)":"1c123e77","validate_1deltaDeposit(bytes)":"c4cc9dba","validate_1deltaMulticall(bytes)":"07ac3562","validate_1deltaWithdraw(bytes)":"f76081e4","validate_aaveSupply(bytes)":"d4c0fe45","validate_aaveWithdraw(bytes)":"6a6d5cc8","validate_approve(bytes)":"4b956bd8","validate_approveDelegation(bytes)":"957dc6c0","validate_exactInput(bytes)":"ebe26816","validate_exactOutput(bytes)":"e98539c5","validate_flashSwapAllOut(bytes)":"425f49d0","validate_flashSwapExactInt(bytes)":"ca963c50","validate_flashSwapExactOut(bytes)":"6ad11353","validate_swapExactTokensForTokens(bytes)":"761bcd9c","validate_transfer(bytes)":"1710a4f2","validate_transferERC20AllIn(bytes)":"7ea44655","validate_transferERC20In(bytes)":"59b92be9","whitelistAaveV3(address,string)":"f20e85e0","whitelistOnedelta(address,address,string)":"f26749f3","whitelistToken(address,string)":"ee5462cc","whitelistTokenForDelegation(address,string)":"6d9a1423","whitelistUniswapV2Router(address,string)":"3ea35551","whitelistUniswapV3Router(address,string)":"34ec8d7e"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"ApprovalDestinationApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"ApprovalDestinationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"AssetApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"AssetRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"CallSiteApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"CallSiteRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"DelegationApprovalDestinationApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"DelegationApprovalDestinationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"ReceiverApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"ReceiverRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"SenderApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"SenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"WithdrawDestinationApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"WithdrawDestinationRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowApprovalDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowCallSite\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowDelegationApprovalDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowWithdrawDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"allowedApprovalDestinations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"allowedAssets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"allowedCallSites\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"allowedDelegationApprovalDestinations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"allowedReceivers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"allowedSenders\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"allowedWithdrawDestinations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"callSiteCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGovernanceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getInternalVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"isAllowedApprovalDestination\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isAllowedAsset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"isAllowedCallSite\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"isAllowedDelegationApprovalDestination\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"isAllowedReceiver\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"isAllowedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"isAllowedWithdrawDestination\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeApprovalDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeCallSite\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeDelegationApprovalDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeWithdrawDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"}],\"name\":\"validate1deltaPath\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callDataWithSelector\",\"type\":\"bytes\"}],\"name\":\"validateCall\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"}],\"name\":\"validateUniswapV3Path\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_1deltaDeposit\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_1deltaMulticall\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_1deltaWithdraw\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_aaveSupply\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_aaveWithdraw\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_approve\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_approveDelegation\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_exactInput\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_exactOutput\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_flashSwapAllOut\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_flashSwapExactInt\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_flashSwapExactOut\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_swapExactTokensForTokens\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_transfer\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_transferERC20AllIn\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_transferERC20In\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"lendingPool\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistAaveV3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"brokerProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lendingPool\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistOnedelta\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistTokenForDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistUniswapV2Router\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistUniswapV3Router\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"ADDR_SIZE\":{\"details\":\"The length of the bytes encoded address\"},\"ONEDELTA_ACTION_SIZE\":{\"details\":\"The length of the bytes encoded action\"},\"ONEDELTA_FEE_SIZE\":{\"details\":\"The length of the bytes encoded pool fee\"},\"ONEDELTA_MULTIPLE_POOLS_MIN_LENGTH\":{\"details\":\"The minimum length of an encoding that contains 2 or more pools\"},\"ONEDELTA_NEXT_OFFSET\":{\"details\":\"The offset of a single token address, fee, pid and action\"},\"ONEDELTA_PID_SIZE\":{\"details\":\"The length of the bytes encoded DEX ID\"},\"ONEDELTA_POP_OFFSET\":{\"details\":\"The offset of an encoded pool key\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getGovernanceAddress()\":{\"notice\":\"Get the address of the proto DAO\"},\"getInternalVersion()\":{\"notice\":\"Track version during internal development. We bump up when new whitelistings added.\"},\"validate1deltaPath(bytes)\":{\"notice\":\"Our implementation of 1delta path decoding and validation using similar approach as Uniswap v3 `Path.sol` Read more: - How 1delta encodes the path: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/test-ts/1delta/shared/aggregatorPath.ts#L5-L32 - How 1delta decodes the path: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/contracts/1delta/modules/aave/MarginTrading.sol#L54-L60\"}},\"notice\":\"Prototype guard implementation. - Hardcoded actions for Uniswap v2, v3, 1delta\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/GuardV0.sol\":\"GuardV0\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c\",\"dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h\"]},\"src/GuardV0.sol\":{\"keccak256\":\"0x26ebef3fcd081d578584bba1b83fd14e6890d9b150d1458c2e51f3781d9dfdad\",\"urls\":[\"bzz-raw://d28b1816517f51101c33391dcddf36320f7e6c84e37ea9e9e2a6648034a9c6f0\",\"dweb:/ipfs/QmeRkLiNABnpUCu5XA9UKVkZ5VZV7yTnhogwwcz7v8sTwU\"]},\"src/IGuard.sol\":{\"keccak256\":\"0xb7b3ef010870980bd812779fd5dc8133d6dccb0e2b5d390dcfdc7a61c5064559\",\"urls\":[\"bzz-raw://17226392a130d807b0e1cd46f3b3fa8bf36d4f4cac6218f09d2dca75605945a3\",\"dweb:/ipfs/QmYgn6g7B2wU6VYrhtZicWohw795yyu6qUD1riWaG2hikD\"]},\"src/lib/BytesLib.sol\":{\"keccak256\":\"0x7446c0f0de6eb147f0f3e40b3a72e39d02a951e8c453437dcc6b3c06007bc62a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://1b2b64668ea4287dfe75e1029fef387b0e3ae191b784d1bc5be01edac6d1d5c5\",\"dweb:/ipfs/Qma3zAe3Svez1kdGc5F356m9tRjCDg8F8tAocbd5Qk13PE\"]},\"src/lib/Path.sol\":{\"keccak256\":\"0xb22c562b5175d50dbcc2224325666090d985f052abdcfe275c8dfc884e34de61\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://27aeff27314476ab3c77313ae1f0c5b2442b86315f5ce741cb2150a87c3cbad3\",\"dweb:/ipfs/QmQNno2g1CJvjnH6ych4LuHr1UZDEZPACgYG4XvivxGrqV\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.23+commit.f704f362"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"ApprovalDestinationApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"ApprovalDestinationRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"AssetApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"AssetRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"target","type":"address","indexed":false},{"internalType":"bytes4","name":"selector","type":"bytes4","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"CallSiteApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"target","type":"address","indexed":false},{"internalType":"bytes4","name":"selector","type":"bytes4","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"CallSiteRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"DelegationApprovalDestinationApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"DelegationApprovalDestinationRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"ReceiverApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"ReceiverRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"SenderApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"SenderRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"WithdrawDestinationApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"WithdrawDestinationRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowApprovalDestination"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowAsset"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowCallSite"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowDelegationApprovalDestination"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowSender"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowWithdrawDestination"},{"inputs":[{"internalType":"address","name":"destination","type":"address"}],"stateMutability":"view","type":"function","name":"allowedApprovalDestinations","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"allowedAssets","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"allowedCallSites","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"}],"stateMutability":"view","type":"function","name":"allowedDelegationApprovalDestinations","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"allowedReceivers","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"stateMutability":"view","type":"function","name":"allowedSenders","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"}],"stateMutability":"view","type":"function","name":"allowedWithdrawDestinations","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"callSiteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getGovernanceAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"getInternalVersion","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedApprovalDestination","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedAsset","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"isAllowedCallSite","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedDelegationApprovalDestination","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedReceiver","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedSender","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedWithdrawDestination","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeApprovalDestination"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeAsset"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeCallSite"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeDelegationApprovalDestination"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeSender"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeWithdrawDestination"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"bytes","name":"path","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate1deltaPath"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callDataWithSelector","type":"bytes"}],"stateMutability":"view","type":"function","name":"validateCall"},{"inputs":[{"internalType":"bytes","name":"path","type":"bytes"}],"stateMutability":"view","type":"function","name":"validateUniswapV3Path"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_1deltaDeposit"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_1deltaMulticall"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_1deltaWithdraw"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_aaveSupply"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_aaveWithdraw"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_approve"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_approveDelegation"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_exactInput"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_exactOutput"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_flashSwapAllOut"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_flashSwapExactInt"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_flashSwapExactOut"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_swapExactTokensForTokens"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_transfer"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_transferERC20AllIn"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_transferERC20In"},{"inputs":[{"internalType":"address","name":"lendingPool","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistAaveV3"},{"inputs":[{"internalType":"address","name":"brokerProxy","type":"address"},{"internalType":"address","name":"lendingPool","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistOnedelta"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistToken"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistTokenForDelegation"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistUniswapV2Router"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistUniswapV3Router"}],"devdoc":{"kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{"getGovernanceAddress()":{"notice":"Get the address of the proto DAO"},"getInternalVersion()":{"notice":"Track version during internal development. We bump up when new whitelistings added."},"validate1deltaPath(bytes)":{"notice":"Our implementation of 1delta path decoding and validation using similar approach as Uniswap v3 `Path.sol` Read more: - How 1delta encodes the path: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/test-ts/1delta/shared/aggregatorPath.ts#L5-L32 - How 1delta decodes the path: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/contracts/1delta/modules/aave/MarginTrading.sol#L54-L60"}},"version":1}},"settings":{"remappings":["@openzeppelin/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/GuardV0.sol":"GuardV0"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218","urls":["bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32","dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439","urls":["bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c","dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h"],"license":"MIT"},"src/GuardV0.sol":{"keccak256":"0x26ebef3fcd081d578584bba1b83fd14e6890d9b150d1458c2e51f3781d9dfdad","urls":["bzz-raw://d28b1816517f51101c33391dcddf36320f7e6c84e37ea9e9e2a6648034a9c6f0","dweb:/ipfs/QmeRkLiNABnpUCu5XA9UKVkZ5VZV7yTnhogwwcz7v8sTwU"],"license":null},"src/IGuard.sol":{"keccak256":"0xb7b3ef010870980bd812779fd5dc8133d6dccb0e2b5d390dcfdc7a61c5064559","urls":["bzz-raw://17226392a130d807b0e1cd46f3b3fa8bf36d4f4cac6218f09d2dca75605945a3","dweb:/ipfs/QmYgn6g7B2wU6VYrhtZicWohw795yyu6qUD1riWaG2hikD"],"license":null},"src/lib/BytesLib.sol":{"keccak256":"0x7446c0f0de6eb147f0f3e40b3a72e39d02a951e8c453437dcc6b3c06007bc62a","urls":["bzz-raw://1b2b64668ea4287dfe75e1029fef387b0e3ae191b784d1bc5be01edac6d1d5c5","dweb:/ipfs/Qma3zAe3Svez1kdGc5F356m9tRjCDg8F8tAocbd5Qk13PE"],"license":"Unlicense"},"src/lib/Path.sol":{"keccak256":"0xb22c562b5175d50dbcc2224325666090d985f052abdcfe275c8dfc884e34de61","urls":["bzz-raw://27aeff27314476ab3c77313ae1f0c5b2442b86315f5ce741cb2150a87c3cbad3","dweb:/ipfs/QmQNno2g1CJvjnH6ych4LuHr1UZDEZPACgYG4XvivxGrqV"],"license":"GPL-2.0-or-later"}},"version":1},"id":3} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"_validateCallInternal","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"target","type":"address","internalType":"address"},{"name":"callDataWithSelector","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"allowApprovalDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowAsset","inputs":[{"name":"asset","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowCallSite","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowDelegationApprovalDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowSender","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowWithdrawDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"allowedApprovalDestinations","inputs":[{"name":"destination","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedAssets","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedCallSites","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedDelegationApprovalDestinations","inputs":[{"name":"destination","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedReceivers","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedSenders","inputs":[{"name":"sender","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowedWithdrawDestinations","inputs":[{"name":"destination","type":"address","internalType":"address"}],"outputs":[{"name":"allowed","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"anyAsset","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"callSiteCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getGovernanceAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getInternalVersion","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"pure"},{"type":"function","name":"isAllowedApprovalDestination","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedAsset","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedCallSite","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedDelegationApprovalDestination","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedSender","inputs":[{"name":"sender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isAllowedWithdrawDestination","inputs":[{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"removeApprovalDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeAsset","inputs":[{"name":"asset","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeCallSite","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeDelegationApprovalDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeSender","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeWithdrawDestination","inputs":[{"name":"destination","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAnyAssetAllowed","inputs":[{"name":"value","type":"bool","internalType":"bool"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validate1deltaPath","inputs":[{"name":"path","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validateCall","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"target","type":"address","internalType":"address"},{"name":"callDataWithSelector","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validateUniswapV3Path","inputs":[{"name":"path","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_1deltaDeposit","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_1deltaMulticall","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_1deltaWithdraw","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_aaveSupply","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_aaveWithdraw","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_approve","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_approveDelegation","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_exactInput","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_exactOutput","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_flashSwapAllOut","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_flashSwapExactInt","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_flashSwapExactOut","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_swapExactTokensForTokens","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_transfer","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_transferERC20AllIn","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validate_transferERC20In","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"whitelistAaveV3","inputs":[{"name":"lendingPool","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistOnedelta","inputs":[{"name":"brokerProxy","type":"address","internalType":"address"},{"name":"lendingPool","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistToken","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistTokenForDelegation","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistUniswapV2Router","inputs":[{"name":"router","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"whitelistUniswapV3Router","inputs":[{"name":"router","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"AnyAssetSet","inputs":[{"name":"value","type":"bool","indexed":false,"internalType":"bool"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"ApprovalDestinationApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"ApprovalDestinationRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"AssetApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"AssetRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"CallSiteApproved","inputs":[{"name":"target","type":"address","indexed":false,"internalType":"address"},{"name":"selector","type":"bytes4","indexed":false,"internalType":"bytes4"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"CallSiteRemoved","inputs":[{"name":"target","type":"address","indexed":false,"internalType":"address"},{"name":"selector","type":"bytes4","indexed":false,"internalType":"bytes4"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"DelegationApprovalDestinationApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"DelegationApprovalDestinationRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ReceiverApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"ReceiverRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"SenderApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"SenderRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"WithdrawDestinationApproved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"WithdrawDestinationRemoved","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"},{"name":"notes","type":"string","indexed":false,"internalType":"string"}],"anonymous":false}],"bytecode":{"object":"0x60806040523480156200001157600080fd5b506200001d3362000023565b6200007d565b600880546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61366c806200008d6000396000f3fe608060405234801561001057600080fd5b50600436106103ba5760003560e01c80638c2fdf9e116101f4578063d4c0fe451161011a578063f259a073116100ad578063f901dc331161007c578063f901dc33146108eb578063fa2c59c8146108fe578063fadbcf4814610911578063fdedfa271461093457600080fd5b8063f259a073146103bf578063f26749f3146108b2578063f2fde38b146108c5578063f76081e4146108d857600080fd5b8063ebe26816116100e9578063ebe2681614610848578063ee5462cc1461085b578063efb47bff1461086e578063f20e85e01461089f57600080fd5b8063d4c0fe45146107ec578063d7334c9d146107ff578063e98539c514610812578063eb0de0421461082557600080fd5b8063a847cf4d11610192578063c4cc9dba11610161578063c4cc9dba146107b3578063c537bed0146107c6578063ca963c50146105be578063d075f9bb146107d957600080fd5b8063a847cf4d1461072d578063a9fc3d4f14610758578063be8c97b01461076f578063c2e657ae146107a057600080fd5b806398b3cc39116101ce57806398b3cc39146106d1578063a1b6b430146106e4578063a4c1cccb146106f7578063a67e1f541461071a57600080fd5b80638c2fdf9e146106955780638da5cb5b146106a8578063957dc6c0146106be57600080fd5b806359b92be9116102e4578063713ebf3b11610277578063761bcd9c11610246578063761bcd9c1461064f5780637ea446551461066257806386b6dbe514610675578063873016081461068857600080fd5b8063713ebf3b146105f7578063715018a61461060a57806372e548a914610612578063732524941461062557600080fd5b80636a6d5cc8116102b35780636a6d5cc8146105ab5780636ad11353146105be5780636d5025f1146105d15780636d9a1423146105e457600080fd5b806359b92be91461055f5780635ace1d92146105725780635e4ccace1461058557806363cc17f21461059857600080fd5b80632d12d7881161035c5780633ea355511161032b5780633ea3555114610503578063425f49d0146105165780634b941268146105295780634b956bd81461054c57600080fd5b80632d12d788146104895780632dc32a611461049c57806334ec8d7e146104cd5780633cf20025146104e057600080fd5b80631710a4f2116103985780631710a4f21461041f5780631c123e77146104325780631d49039c146104455780632674111e1461047657600080fd5b806304a3ba25146103bf57806307ac3562146103d457806307ef00cf146103e7575b600080fd5b6103d26103cd366004612af4565b610943565b005b6103d26103e2366004612bb5565b6109dd565b61040a6103f5366004612c34565b60056020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103d261042d366004612bb5565b610d19565b6103d2610440366004612bb5565b610dcf565b61040a610453366004612c34565b6001600160a01b031660009081526006602052604090205460ff16151560011490565b6103d2610484366004612c58565b610e49565b6103d2610497366004612af4565b6113cd565b61040a6104aa366004612c34565b6001600160a01b031660009081526007602052604090205460ff16151560011490565b6103d26104db366004612af4565b611451565b61040a6104ee366004612c34565b60046020526000908152604090205460ff1681565b6103d2610511366004612af4565b6114b9565b6103d2610524366004612bb5565b6114e4565b61040a610537366004612c34565b60076020526000908152604090205460ff1681565b6103d261055a366004612bb5565b611506565b6103d261056d366004612bb5565b6115ab565b6103d2610580366004612af4565b61162d565b6103d2610593366004612cd9565b6116b4565b6103d26105a6366004612af4565b611771565b6103d26105b9366004612bb5565b6117f8565b6103d26105cc366004612bb5565b6118a0565b6103d26105df366004612c58565b6118c3565b6103d26105f2366004612af4565b6118cf565b61040a610605366004612d08565b611905565b6103d261199a565b6103d2610620366004612af4565b6119ae565b60085461010090046001600160a01b03165b6040516001600160a01b039091168152602001610416565b6103d261065d366004612bb5565b611a35565b6103d2610670366004612bb5565b611b40565b6103d2610683366004612af4565b611b7d565b60085461040a9060ff1681565b6103d26106a3366004612af4565b611c04565b60085461010090046001600160a01b0316610637565b6103d26106cc366004612bb5565b611c88565b6103d26106df366004612af4565b611d48565b6103d26106f2366004612bb5565b611dcf565b61040a610705366004612c34565b60026020526000908152604090205460ff1681565b6103d2610728366004612af4565b611f17565b61040a61073b366004612d08565b600060208181529281526040808220909352908152205460ff1681565b61076160015481565b604051908152602001610416565b61040a61077d366004612c34565b6001600160a01b031660009081526003602052604090205460ff16151560011490565b6103d26107ae366004612d3d565b611f9b565b6103d26107c1366004612bb5565b61200d565b61040a6107d4366004612c34565b6120c8565b61040a6107e7366004612c34565b6120fb565b6103d26107fa366004612bb5565b61211e565b6103d261080d366004612cd9565b61215e565b6103d2610820366004612bb5565b6121f7565b61040a610833366004612c34565b60066020526000908152604090205460ff1681565b6103d2610856366004612bb5565b612299565b6103d2610869366004612af4565b612330565b61040a61087c366004612c34565b6001600160a01b031660009081526005602052604090205460ff16151560011490565b6103d26108ad366004612af4565b6123e5565b6103d26108c0366004612c58565b61243b565b6103d26108d3366004612c34565b6124b0565b6103d26108e6366004612bb5565b612529565b6103d26108f9366004612af4565b6125a5565b6103d261090c366004612af4565b612629565b61040a61091f366004612c34565b60036020526000908152604090205460ff1681565b60405160018152602001610416565b6008546001600160a01b0361010090910416331461097c5760405162461bcd60e51b815260040161097390612d62565b60405180910390fd5b6001600160a01b03831660009081526006602052604090819020805460ff19169055517fb71be9befd3ac90c1c9981d3b1161b3c2c6dcd741f13b34061aa251226a802df906109d090859085908590612dc0565b60405180910390a1505050565b6000818060200190518101906109f39190612e7a565b905060005b8151811015610d14576000828281518110610a1557610a15612f2a565b602002602001015190506000610a3860006004846126b09092919063ffffffff16565b610a4190612f40565b90506000610a5f6004808551610a579190612f8d565b8591906126b0565b6040805180820190915260208082527f7472616e736665724552433230496e28616464726573732c75696e74323536299101529050631dac092b60e11b6001600160e01b0319831601610aba57610ab5816115ab565b610d09565b60408051808201909152601b81527f7472616e736665724552433230416c6c496e2861646472657373290000000000602090910152635cf59cb760e11b6001600160e01b0319831601610b1057610ab581611b40565b60408051808201909152601881527f6465706f73697428616464726573732c6164647265737329000000000000000060209091015262d3ec1f60e31b6001600160e01b0319831601610b6557610ab58161200d565b60408051808201909152601981527f776974686472617728616464726573732c6164647265737329000000000000006020909101526306bf1c7b60e01b6001600160e01b0319831601610bbb57610ab581612529565b610be26040518060600160405280602781526020016135dc60279139805160209091012090565b6001600160e01b031916826001600160e01b03191603610c0557610ab5816118a0565b610c2c6040518060600160405280602881526020016135b460289139805160209091012090565b6001600160e01b031916826001600160e01b03191603610c4f57610ab5816118a0565b60408051808201909152601e81527f666c61736853776170416c6c4f75742875696e743235362c627974657329000060209091015263d2b3d16560e01b6001600160e01b0319831601610ca557610ab5816114e4565b60405162461bcd60e51b815260206004820152603360248201527f76616c69646174655f3164656c74614d756c746963616c6c3a20556e6b6e6f776044820152723710333ab731ba34b7b71039b2b632b1ba37b960691b6064820152608401610973565b5050506001016109f8565b505050565b600081806020019051810190610d2f9190612fab565b509050610d59816001600160a01b031660009081526005602052604090205460ff16151560011490565b610dcb5760405162461bcd60e51b815260206004820152603c60248201527f76616c69646174655f7472616e736665723a205265636569766572206164647260448201527f657373206e6f742077686974656c6973746564206279204775617264000000006064820152608401610973565b5050565b6000805b610ddc83612807565b5092509050610dea826120c8565b610e065760405162461bcd60e51b815260040161097390612fd9565b610e0f816120c8565b610e2b5760405162461bcd60e51b815260040161097390612fd9565b610e3483612843565b15610d1457610e428361287d565b9250610dd3565b6008546001600160a01b0385811661010090920416146113c757610e8a846001600160a01b031660009081526003602052604090205460ff16151560011490565b610ed65760405162461bcd60e51b815260206004820181905260248201527f76616c696461746543616c6c3a2053656e646572206e6f7420616c6c6f7765646044820152606401610973565b6000610ee56004828486613021565b610eee9161304b565b9050366000610f008460048188613021565b91509150610f0e8684611905565b610f665760405162461bcd60e51b815260206004820152602360248201527f76616c696461746543616c6c3a2043616c6c2073697465206e6f7420616c6c6f6044820152621dd95960ea1b6064820152608401610973565b610f8d6040518060800160405280604381526020016134d560439139805160209091012090565b6001600160e01b031916836001600160e01b03191603610feb57610fe682828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a3592505050565b6113c3565b61101260405180606001604052806033815260200161358160339139805160209091012090565b6001600160e01b031916836001600160e01b0319160361106b57610fe682828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061229992505050565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b602090910152630a6d35e560e31b6001600160e01b03198416016110ec57610fe682828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506109dd92505050565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b6020909101526356fa634560e01b6001600160e01b031984160161117457610fe682828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610d1992505050565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b60209091015263f6a1584d60e01b6001600160e01b03198416016111fb57610fe682828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150692505050565b61122260405180606001604052806022815260200161355f60229139805160209091012090565b6001600160e01b031916836001600160e01b0319160361127b57610fe682828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c8892505050565b6112a260405180606001604052806026815260200161351860269139805160209091012090565b6001600160e01b031916836001600160e01b031916036112fb57610fe682828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061211e92505050565b61132260405180606001604052806021815260200161353e60219139805160209091012090565b6001600160e01b031916836001600160e01b0319160361137b57610fe682828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117f892505050565b60405162461bcd60e51b815260206004820152601960248201527f556e6b6e6f776e2066756e6374696f6e2073656c6563746f72000000000000006044820152606401610973565b5050505b50505050565b6008546001600160a01b036101009091041633146113fd5760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526004602052604090819020805460ff19169055517f4e13b11ab98e672bd78295ef9cebe764dc617f95decf47d842c25b83abc0c724906109d090859085908590612dc0565b6114838361147c60405180606001604052806033815260200161358160339139805160209091012090565b84846116b4565b6114ae8361147c60405180606001604052806034815260200161360360349139805160209091012090565b610d14838383611d48565b6114ae8361147c6040518060800160405280604381526020016134d560439139805160209091012090565b6000818060200190518101906114fa919061307b565b915050610dcb81611dcf565b60008180602001905181019061151c9190612fab565b509050611546816001600160a01b031660009081526006602052604090205460ff16151560011490565b610dcb5760405162461bcd60e51b815260206004820152603060248201527f76616c69646174655f617070726f76653a20417070726f76652061646472657360448201526f0e640c8decae640dcdee840dac2e8c6d60831b6064820152608401610973565b6000818060200190518101906115c19190612fab565b5090506115cd816120c8565b610dcb5760405162461bcd60e51b815260206004820152602b60248201527f76616c69646174655f7472616e736665724552433230496e3a20546f6b656e2060448201526a1b9bdd08185b1b1bddd95960aa1b6064820152608401610973565b6008546001600160a01b0361010090910416331461165d5760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526005602052604090819020805460ff19166001179055517f3562181221a42a19ddd03a82dfe06acab1905ceb65cdaf7d86a1d9fec6643552906109d090859085908590612dc0565b6008546001600160a01b036101009091041633146116e45760405162461bcd60e51b815260040161097390612d62565b6001600160a01b0384166000908152602081815260408083206001600160e01b0319871684529091528120805460ff19166001908117909155805491611729836130c1565b91905055507fef729aaa41b9fd994f9ff7c1960df214a84f722002e6cfbea31799cd0873a3ef8484848460405161176394939291906130da565b60405180910390a150505050565b6008546001600160a01b036101009091041633146117a15760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526007602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f3589906109d090859085908590612dc0565b6000808280602001905181019061180f9190613119565b925050915061181d826120c8565b6118395760405162461bcd60e51b81526004016109739061315c565b611842816120fb565b610d145760405162461bcd60e51b815260206004820152602960248201527f52656365697665722061646472657373206e6f742077686974656c697374656460448201526808189e4811dd585c9960ba1b6064820152608401610973565b6000818060200190518101906118b69190613187565b92505050610dcb81611dcf565b6113c784848484610e49565b6118fa8361147c60405180606001604052806022815260200161355f60229139805160209091012090565b610d14838383611b7d565b60085460009060ff161561196357604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b60209091015263f6a1584d60e01b6001600160e01b031983160161196357506001611994565b506001600160a01b0382166000908152602081815260408083206001600160e01b03198516845290915290205460ff165b92915050565b6119a26128ae565b6119ac60006128de565b565b6008546001600160a01b036101009091041633146119de5760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526004602052604090819020805460ff19166001179055517f62dd88c5ecfa60713a657640ebec4de26fc1aefa4afdb24e6d15a124fce72779906109d090859085908590612dc0565b60008082806020019051810190611a4c91906131d6565b50935093505050611a5c816120fb565b611ae35760405162461bcd60e51b815260206004820152604c60248201527f76616c69646174655f737761704578616374546f6b656e73466f72546f6b656e60448201527f733a2052656365697665722061646472657373206e6f742077686974656c697360648201526b1d195908189e4811dd585c9960a21b608482015260a401610973565b6000805b8351811015611b3957838181518110611b0257611b02612f2a565b60200260200101519150611b15826120c8565b611b315760405162461bcd60e51b81526004016109739061315c565b600101611ae7565b5050505050565b600081806020019051810190611b56919061329f565b9050611b61816120c8565b610dcb5760405162461bcd60e51b8152600401610973906132bc565b6008546001600160a01b03610100909104163314611bad5760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526002602052604090819020805460ff19166001179055517fad90e2570fc4fe9f7437be3188d5c791c6662892d31731992aa88f5c87621983906109d090859085908590612dc0565b6008546001600160a01b03610100909104163314611c345760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526005602052604090819020805460ff19169055517f1212f8ddb39de8e1a339460c95752d61100723efeaa34ccd94bca94393f40938906109d090859085908590612dc0565b600081806020019051810190611c9e9190612fab565b509050611cc8816001600160a01b031660009081526007602052604090205460ff16151560011490565b610dcb5760405162461bcd60e51b815260206004820152604560248201527f76616c69646174655f617070726f766544656c65676174696f6e3a204170707260448201527f6f76652064656c65676174696f6e206164647265737320646f6573206e6f74206064820152640dac2e8c6d60db1b608482015260a401610973565b6008546001600160a01b03610100909104163314611d785760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526006602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f3589906109d090859085908590612dc0565b6000805b611dde836000612938565b9150611e0d600180611df26003601461330a565b611dfc919061330a565b611e06919061330a565b8490612938565b9050611e18826120c8565b611e345760405162461bcd60e51b81526004016109739061331d565b611e3d816120c8565b611e595760405162461bcd60e51b81526004016109739061331d565b600180611e686003601461330a565b611e72919061330a565b611e7c919061330a565b6014600180611e8c60038461330a565b611e96919061330a565b611ea0919061330a565b611eaa919061330a565b611eb4919061330a565b835110610d1457611f10600180611ecd6003601461330a565b611ed7919061330a565b611ee1919061330a565b600180611ef06003601461330a565b611efa919061330a565b611f04919061330a565b8551610a579190612f8d565b9250611dd3565b6008546001600160a01b03610100909104163314611f475760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526003602052604090819020805460ff19169055517f3097928509c53a2dab9500431201d82b0d756e8f890fd01f4ae6b33b45687ea4906109d090859085908590612dc0565b6008546001600160a01b03610100909104163314611fcb5760405162461bcd60e51b815260040161097390612d62565b6008805460ff19168415151790556040517f50454d9d0025a28a39cac5a4b3f3101d29b6e413fbb64f75fb42eb6837b07718906109d090859085908590613362565b60008082806020019051810190612024919061337e565b91509150612031826120c8565b61204d5760405162461bcd60e51b8152600401610973906132bc565b612056816120fb565b610d145760405162461bcd60e51b815260206004820152603b60248201527f76616c69646174655f6465706f7369743a20526563656976657220616464726560448201527f7373206e6f742077686974656c697374656420627920477561726400000000006064820152608401610973565b60085460009060ff16806119945750506001600160a01b031660009081526002602052604090205460ff16151560011490565b6001600160a01b031660009081526004602052604090205460ff16151560011490565b60008180602001905181019061213491906133b8565b5050509050612142816120c8565b610dcb5760405162461bcd60e51b81526004016109739061315c565b6008546001600160a01b0361010090910416331461218e5760405162461bcd60e51b815260040161097390612d62565b6001600160a01b0384166000908152602081815260408083206001600160e01b03198716845290915290819020805460ff19169055517f37ea10f2d08f5a9803dfcd5abf3cfc7b0d6fcdf5fcbc36be9ea5a0b53d9a4d9b906117639086908690869086906130da565b60008180602001905181019061220d9190613498565b905061221c81602001516120fb565b61228e5760405162461bcd60e51b815260206004820152603f60248201527f76616c69646174655f65786163744f75747075743a205265636569766572206160448201527f646472657373206e6f742077686974656c6973746564206279204775617264006064820152608401610973565b8051610dcb90610dcf565b6000818060200190518101906122af9190613498565b90506122be81602001516120fb565b61228e5760405162461bcd60e51b815260206004820152603e60248201527f76616c69646174655f6578616374496e7075743a20526563656976657220616460448201527f6472657373206e6f742077686974656c697374656420627920477561726400006064820152608401610973565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b60209091015261238b837fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b61147c565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b6020909101526118fa837f095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba61147c565b6124108361147c60405180606001604052806026815260200161351860269139805160209091012090565b6114ae8361147c60405180606001604052806021815260200161353e60219139805160209091012090565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b60209091015261248f847fac9650d882acfa253cba1ed543b9ff47351da99c3bd00a89625e5cdb2099009c61147c565b61249a848383611d48565b6124a5838383611d48565b6113c7848383611771565b6124b86128ae565b6001600160a01b03811661251d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610973565b612526816128de565b50565b60008082806020019051810190612540919061337e565b9150915061254d826120c8565b61204d5760405162461bcd60e51b8152602060048201526024808201527f76616c69646174655f77697468647261773a20546f6b656e206e6f7420616c6c6044820152631bddd95960e21b6064820152608401610973565b6008546001600160a01b036101009091041633146125d55760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526002602052604090819020805460ff19169055517f9ca3f065622f5f03f32b7157677a0e420c3a36ab45fd49f256ffebce3e310587906109d090859085908590612dc0565b6008546001600160a01b036101009091041633146126595760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526003602052604090819020805460ff19166001179055517fa8f9caaf4861720900294428e4ff34d37070c37afd26d96e6e4da75326d2c3ad906109d090859085908590612dc0565b6060816126be81601f61330a565b10156126fd5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610973565b82612708838261330a565b10156127475760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610973565b612751828461330a565b845110156127955760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610973565b6060821580156127b457604051915060008252602082016040526127fe565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156127ed5780518352602092830192016127d5565b5050858452601f01601f1916604052505b50949350505050565b600080806128158482612938565b92506128228460146129ec565b905061283a6128336003601461330a565b8590612938565b91509193909250565b60006128516003601461330a565b601461285e60038261330a565b612868919061330a565b612872919061330a565b825110159050919050565b606061199461288e6003601461330a565b61289a6003601461330a565b84516128a69190612f8d565b8491906126b0565b6008546001600160a01b036101009091041633146119ac5760405162461bcd60e51b815260040161097390612d62565b600880546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008161294681601461330a565b10156129895760405162461bcd60e51b8152602060048201526012602482015271746f416464726573735f6f766572666c6f7760701b6044820152606401610973565b61299482601461330a565b835110156129dc5760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610973565b500160200151600160601b900490565b6000816129fa81600361330a565b1015612a3c5760405162461bcd60e51b8152602060048201526011602482015270746f55696e7432345f6f766572666c6f7760781b6044820152606401610973565b612a4782600361330a565b83511015612a8e5760405162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b6044820152606401610973565b50016003015190565b6001600160a01b038116811461252657600080fd5b60008083601f840112612abe57600080fd5b5081356001600160401b03811115612ad557600080fd5b602083019150836020828501011115612aed57600080fd5b9250929050565b600080600060408486031215612b0957600080fd5b8335612b1481612a97565b925060208401356001600160401b03811115612b2f57600080fd5b612b3b86828701612aac565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612b8657612b86612b48565b604052919050565b60006001600160401b03821115612ba757612ba7612b48565b50601f01601f191660200190565b600060208284031215612bc757600080fd5b81356001600160401b03811115612bdd57600080fd5b8201601f81018413612bee57600080fd5b8035612c01612bfc82612b8e565b612b5e565b818152856020838501011115612c1657600080fd5b81602084016020830137600091810160200191909152949350505050565b600060208284031215612c4657600080fd5b8135612c5181612a97565b9392505050565b60008060008060608587031215612c6e57600080fd5b8435612c7981612a97565b93506020850135612c8981612a97565b925060408501356001600160401b03811115612ca457600080fd5b612cb087828801612aac565b95989497509550505050565b80356001600160e01b031981168114612cd457600080fd5b919050565b60008060008060608587031215612cef57600080fd5b8435612cfa81612a97565b9350612c8960208601612cbc565b60008060408385031215612d1b57600080fd5b8235612d2681612a97565b9150612d3460208401612cbc565b90509250929050565b600080600060408486031215612d5257600080fd5b83358015158114612b1457600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612de59083018486612d97565b95945050505050565b60006001600160401b03821115612e0757612e07612b48565b5060051b60200190565b600082601f830112612e2257600080fd5b8151612e30612bfc82612b8e565b8181526020856020848701011115612e4757600080fd5b60005b83811015612e65578581018201518382018301528101612e4a565b50506000918101602001919091529392505050565b60006020808385031215612e8d57600080fd5b82516001600160401b0380821115612ea457600080fd5b818501915085601f830112612eb857600080fd5b8151612ec6612bfc82612dee565b81815260059190911b83018401908481019088831115612ee557600080fd5b8585015b83811015612f1d57805185811115612f015760008081fd5b612f0f8b89838a0101612e11565b845250918601918601612ee9565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b805160208201516001600160e01b03198082169291906004831015612f6f5780818460040360031b1b83161693505b505050919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561199457611994612f77565b8051612cd481612a97565b60008060408385031215612fbe57600080fd5b8251612fc981612a97565b6020939093015192949293505050565b60208082526028908201527f76616c6964617465556e69737761705633506174683a20546f6b656e206e6f7460408201526708185b1b1bddd95960c21b606082015260800190565b6000808585111561303157600080fd5b8386111561303e57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156130735780818660040360031b1b83161692505b505092915050565b6000806040838503121561308e57600080fd5b8251915060208301516001600160401b038111156130ab57600080fd5b6130b785828601612e11565b9150509250929050565b6000600182016130d3576130d3612f77565b5060010190565b6001600160a01b03851681526001600160e01b03198416602082015260606040820181905260009061310f9083018486612d97565b9695505050505050565b60008060006060848603121561312e57600080fd5b835161313981612a97565b60208501516040860151919450925061315181612a97565b809150509250925092565b602080825260119082015270151bdad95b881b9bdd08185b1b1bddd959607a1b604082015260600190565b60008060006060848603121561319c57600080fd5b835192506020840151915060408401516001600160401b038111156131c057600080fd5b6131cc86828701612e11565b9150509250925092565b600080600080600060a086880312156131ee57600080fd5b85519450602080870151945060408701516001600160401b0381111561321357600080fd5b8701601f8101891361322457600080fd5b8051613232612bfc82612dee565b81815260059190911b8201830190838101908b83111561325157600080fd5b928401925b8284101561327857835161326981612a97565b82529284019290840190613256565b809750505050505061328c60608701612fa0565b9150608086015190509295509295909350565b6000602082840312156132b157600080fd5b8151612c5181612a97565b6020808252602e908201527f76616c69646174655f7472616e736665724552433230416c6c496e3a20546f6b60408201526d195b881b9bdd08185b1b1bddd95960921b606082015260800190565b8082018082111561199457611994612f77565b60208082526025908201527f76616c69646174653164656c7461506174683a20546f6b656e206e6f7420616c6040820152641b1bddd95960da1b606082015260800190565b8315158152604060208201526000612de5604083018486612d97565b6000806040838503121561339157600080fd5b825161339c81612a97565b60208401519092506133ad81612a97565b809150509250929050565b600080600080608085870312156133ce57600080fd5b84516133d981612a97565b6020860151604087015191955093506133f181612a97565b6060959095015193969295505050565b600060a0828403121561341357600080fd5b60405160a081016001600160401b03828210818311171561343657613436612b48565b81604052829350845191508082111561344e57600080fd5b5061345b85828601612e11565b825250602083015161346c81612a97565b806020830152506040830151604082015260608301516060820152608083015160808201525092915050565b6000602082840312156134aa57600080fd5b81516001600160401b038111156134c057600080fd5b6134cc84828501613401565b94935050505056fe737761704578616374546f6b656e73466f72546f6b656e732875696e743235362c75696e743235362c616464726573735b5d2c616464726573732c75696e7432353629737570706c7928616464726573732c75696e743235362c616464726573732c75696e74313629776974686472617728616464726573732c75696e743235362c6164647265737329617070726f766544656c65676174696f6e28616464726573732c75696e74323536296578616374496e707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929666c6173685377617045786163744f75742875696e743235362c75696e743235362c627974657329666c617368537761704578616374496e2875696e743235362c75696e743235362c62797465732965786163744f7574707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929a26469706673582212203662b17178f09b3227d88196bf0d8f1241bf880e674ea18dcce8bf0f36a4fca164736f6c63430008170033","sourceMap":"300:441:3:-:0;;;348:31;;;;;;;;;-1:-1:-1;936:32:0;734:10:2;936:18:0;:32::i;:::-;300:441:3;;2426:187:0;2518:6;;;-1:-1:-1;;;;;2534:17:0;;;2518:6;2534:17;;;-1:-1:-1;;;;;;2534:17:0;;;;;;2566:40;;2518:6;;;;;;;;2566:40;;2499:16;;2566:40;2489:124;2426:187;:::o;300:441:3:-;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106103ba5760003560e01c80638c2fdf9e116101f4578063d4c0fe451161011a578063f259a073116100ad578063f901dc331161007c578063f901dc33146108eb578063fa2c59c8146108fe578063fadbcf4814610911578063fdedfa271461093457600080fd5b8063f259a073146103bf578063f26749f3146108b2578063f2fde38b146108c5578063f76081e4146108d857600080fd5b8063ebe26816116100e9578063ebe2681614610848578063ee5462cc1461085b578063efb47bff1461086e578063f20e85e01461089f57600080fd5b8063d4c0fe45146107ec578063d7334c9d146107ff578063e98539c514610812578063eb0de0421461082557600080fd5b8063a847cf4d11610192578063c4cc9dba11610161578063c4cc9dba146107b3578063c537bed0146107c6578063ca963c50146105be578063d075f9bb146107d957600080fd5b8063a847cf4d1461072d578063a9fc3d4f14610758578063be8c97b01461076f578063c2e657ae146107a057600080fd5b806398b3cc39116101ce57806398b3cc39146106d1578063a1b6b430146106e4578063a4c1cccb146106f7578063a67e1f541461071a57600080fd5b80638c2fdf9e146106955780638da5cb5b146106a8578063957dc6c0146106be57600080fd5b806359b92be9116102e4578063713ebf3b11610277578063761bcd9c11610246578063761bcd9c1461064f5780637ea446551461066257806386b6dbe514610675578063873016081461068857600080fd5b8063713ebf3b146105f7578063715018a61461060a57806372e548a914610612578063732524941461062557600080fd5b80636a6d5cc8116102b35780636a6d5cc8146105ab5780636ad11353146105be5780636d5025f1146105d15780636d9a1423146105e457600080fd5b806359b92be91461055f5780635ace1d92146105725780635e4ccace1461058557806363cc17f21461059857600080fd5b80632d12d7881161035c5780633ea355511161032b5780633ea3555114610503578063425f49d0146105165780634b941268146105295780634b956bd81461054c57600080fd5b80632d12d788146104895780632dc32a611461049c57806334ec8d7e146104cd5780633cf20025146104e057600080fd5b80631710a4f2116103985780631710a4f21461041f5780631c123e77146104325780631d49039c146104455780632674111e1461047657600080fd5b806304a3ba25146103bf57806307ac3562146103d457806307ef00cf146103e7575b600080fd5b6103d26103cd366004612af4565b610943565b005b6103d26103e2366004612bb5565b6109dd565b61040a6103f5366004612c34565b60056020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103d261042d366004612bb5565b610d19565b6103d2610440366004612bb5565b610dcf565b61040a610453366004612c34565b6001600160a01b031660009081526006602052604090205460ff16151560011490565b6103d2610484366004612c58565b610e49565b6103d2610497366004612af4565b6113cd565b61040a6104aa366004612c34565b6001600160a01b031660009081526007602052604090205460ff16151560011490565b6103d26104db366004612af4565b611451565b61040a6104ee366004612c34565b60046020526000908152604090205460ff1681565b6103d2610511366004612af4565b6114b9565b6103d2610524366004612bb5565b6114e4565b61040a610537366004612c34565b60076020526000908152604090205460ff1681565b6103d261055a366004612bb5565b611506565b6103d261056d366004612bb5565b6115ab565b6103d2610580366004612af4565b61162d565b6103d2610593366004612cd9565b6116b4565b6103d26105a6366004612af4565b611771565b6103d26105b9366004612bb5565b6117f8565b6103d26105cc366004612bb5565b6118a0565b6103d26105df366004612c58565b6118c3565b6103d26105f2366004612af4565b6118cf565b61040a610605366004612d08565b611905565b6103d261199a565b6103d2610620366004612af4565b6119ae565b60085461010090046001600160a01b03165b6040516001600160a01b039091168152602001610416565b6103d261065d366004612bb5565b611a35565b6103d2610670366004612bb5565b611b40565b6103d2610683366004612af4565b611b7d565b60085461040a9060ff1681565b6103d26106a3366004612af4565b611c04565b60085461010090046001600160a01b0316610637565b6103d26106cc366004612bb5565b611c88565b6103d26106df366004612af4565b611d48565b6103d26106f2366004612bb5565b611dcf565b61040a610705366004612c34565b60026020526000908152604090205460ff1681565b6103d2610728366004612af4565b611f17565b61040a61073b366004612d08565b600060208181529281526040808220909352908152205460ff1681565b61076160015481565b604051908152602001610416565b61040a61077d366004612c34565b6001600160a01b031660009081526003602052604090205460ff16151560011490565b6103d26107ae366004612d3d565b611f9b565b6103d26107c1366004612bb5565b61200d565b61040a6107d4366004612c34565b6120c8565b61040a6107e7366004612c34565b6120fb565b6103d26107fa366004612bb5565b61211e565b6103d261080d366004612cd9565b61215e565b6103d2610820366004612bb5565b6121f7565b61040a610833366004612c34565b60066020526000908152604090205460ff1681565b6103d2610856366004612bb5565b612299565b6103d2610869366004612af4565b612330565b61040a61087c366004612c34565b6001600160a01b031660009081526005602052604090205460ff16151560011490565b6103d26108ad366004612af4565b6123e5565b6103d26108c0366004612c58565b61243b565b6103d26108d3366004612c34565b6124b0565b6103d26108e6366004612bb5565b612529565b6103d26108f9366004612af4565b6125a5565b6103d261090c366004612af4565b612629565b61040a61091f366004612c34565b60036020526000908152604090205460ff1681565b60405160018152602001610416565b6008546001600160a01b0361010090910416331461097c5760405162461bcd60e51b815260040161097390612d62565b60405180910390fd5b6001600160a01b03831660009081526006602052604090819020805460ff19169055517fb71be9befd3ac90c1c9981d3b1161b3c2c6dcd741f13b34061aa251226a802df906109d090859085908590612dc0565b60405180910390a1505050565b6000818060200190518101906109f39190612e7a565b905060005b8151811015610d14576000828281518110610a1557610a15612f2a565b602002602001015190506000610a3860006004846126b09092919063ffffffff16565b610a4190612f40565b90506000610a5f6004808551610a579190612f8d565b8591906126b0565b6040805180820190915260208082527f7472616e736665724552433230496e28616464726573732c75696e74323536299101529050631dac092b60e11b6001600160e01b0319831601610aba57610ab5816115ab565b610d09565b60408051808201909152601b81527f7472616e736665724552433230416c6c496e2861646472657373290000000000602090910152635cf59cb760e11b6001600160e01b0319831601610b1057610ab581611b40565b60408051808201909152601881527f6465706f73697428616464726573732c6164647265737329000000000000000060209091015262d3ec1f60e31b6001600160e01b0319831601610b6557610ab58161200d565b60408051808201909152601981527f776974686472617728616464726573732c6164647265737329000000000000006020909101526306bf1c7b60e01b6001600160e01b0319831601610bbb57610ab581612529565b610be26040518060600160405280602781526020016135dc60279139805160209091012090565b6001600160e01b031916826001600160e01b03191603610c0557610ab5816118a0565b610c2c6040518060600160405280602881526020016135b460289139805160209091012090565b6001600160e01b031916826001600160e01b03191603610c4f57610ab5816118a0565b60408051808201909152601e81527f666c61736853776170416c6c4f75742875696e743235362c627974657329000060209091015263d2b3d16560e01b6001600160e01b0319831601610ca557610ab5816114e4565b60405162461bcd60e51b815260206004820152603360248201527f76616c69646174655f3164656c74614d756c746963616c6c3a20556e6b6e6f776044820152723710333ab731ba34b7b71039b2b632b1ba37b960691b6064820152608401610973565b5050506001016109f8565b505050565b600081806020019051810190610d2f9190612fab565b509050610d59816001600160a01b031660009081526005602052604090205460ff16151560011490565b610dcb5760405162461bcd60e51b815260206004820152603c60248201527f76616c69646174655f7472616e736665723a205265636569766572206164647260448201527f657373206e6f742077686974656c6973746564206279204775617264000000006064820152608401610973565b5050565b6000805b610ddc83612807565b5092509050610dea826120c8565b610e065760405162461bcd60e51b815260040161097390612fd9565b610e0f816120c8565b610e2b5760405162461bcd60e51b815260040161097390612fd9565b610e3483612843565b15610d1457610e428361287d565b9250610dd3565b6008546001600160a01b0385811661010090920416146113c757610e8a846001600160a01b031660009081526003602052604090205460ff16151560011490565b610ed65760405162461bcd60e51b815260206004820181905260248201527f76616c696461746543616c6c3a2053656e646572206e6f7420616c6c6f7765646044820152606401610973565b6000610ee56004828486613021565b610eee9161304b565b9050366000610f008460048188613021565b91509150610f0e8684611905565b610f665760405162461bcd60e51b815260206004820152602360248201527f76616c696461746543616c6c3a2043616c6c2073697465206e6f7420616c6c6f6044820152621dd95960ea1b6064820152608401610973565b610f8d6040518060800160405280604381526020016134d560439139805160209091012090565b6001600160e01b031916836001600160e01b03191603610feb57610fe682828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a3592505050565b6113c3565b61101260405180606001604052806033815260200161358160339139805160209091012090565b6001600160e01b031916836001600160e01b0319160361106b57610fe682828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061229992505050565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b602090910152630a6d35e560e31b6001600160e01b03198416016110ec57610fe682828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506109dd92505050565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b6020909101526356fa634560e01b6001600160e01b031984160161117457610fe682828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610d1992505050565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b60209091015263f6a1584d60e01b6001600160e01b03198416016111fb57610fe682828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150692505050565b61122260405180606001604052806022815260200161355f60229139805160209091012090565b6001600160e01b031916836001600160e01b0319160361127b57610fe682828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c8892505050565b6112a260405180606001604052806026815260200161351860269139805160209091012090565b6001600160e01b031916836001600160e01b031916036112fb57610fe682828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061211e92505050565b61132260405180606001604052806021815260200161353e60219139805160209091012090565b6001600160e01b031916836001600160e01b0319160361137b57610fe682828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117f892505050565b60405162461bcd60e51b815260206004820152601960248201527f556e6b6e6f776e2066756e6374696f6e2073656c6563746f72000000000000006044820152606401610973565b5050505b50505050565b6008546001600160a01b036101009091041633146113fd5760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526004602052604090819020805460ff19169055517f4e13b11ab98e672bd78295ef9cebe764dc617f95decf47d842c25b83abc0c724906109d090859085908590612dc0565b6114838361147c60405180606001604052806033815260200161358160339139805160209091012090565b84846116b4565b6114ae8361147c60405180606001604052806034815260200161360360349139805160209091012090565b610d14838383611d48565b6114ae8361147c6040518060800160405280604381526020016134d560439139805160209091012090565b6000818060200190518101906114fa919061307b565b915050610dcb81611dcf565b60008180602001905181019061151c9190612fab565b509050611546816001600160a01b031660009081526006602052604090205460ff16151560011490565b610dcb5760405162461bcd60e51b815260206004820152603060248201527f76616c69646174655f617070726f76653a20417070726f76652061646472657360448201526f0e640c8decae640dcdee840dac2e8c6d60831b6064820152608401610973565b6000818060200190518101906115c19190612fab565b5090506115cd816120c8565b610dcb5760405162461bcd60e51b815260206004820152602b60248201527f76616c69646174655f7472616e736665724552433230496e3a20546f6b656e2060448201526a1b9bdd08185b1b1bddd95960aa1b6064820152608401610973565b6008546001600160a01b0361010090910416331461165d5760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526005602052604090819020805460ff19166001179055517f3562181221a42a19ddd03a82dfe06acab1905ceb65cdaf7d86a1d9fec6643552906109d090859085908590612dc0565b6008546001600160a01b036101009091041633146116e45760405162461bcd60e51b815260040161097390612d62565b6001600160a01b0384166000908152602081815260408083206001600160e01b0319871684529091528120805460ff19166001908117909155805491611729836130c1565b91905055507fef729aaa41b9fd994f9ff7c1960df214a84f722002e6cfbea31799cd0873a3ef8484848460405161176394939291906130da565b60405180910390a150505050565b6008546001600160a01b036101009091041633146117a15760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526007602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f3589906109d090859085908590612dc0565b6000808280602001905181019061180f9190613119565b925050915061181d826120c8565b6118395760405162461bcd60e51b81526004016109739061315c565b611842816120fb565b610d145760405162461bcd60e51b815260206004820152602960248201527f52656365697665722061646472657373206e6f742077686974656c697374656460448201526808189e4811dd585c9960ba1b6064820152608401610973565b6000818060200190518101906118b69190613187565b92505050610dcb81611dcf565b6113c784848484610e49565b6118fa8361147c60405180606001604052806022815260200161355f60229139805160209091012090565b610d14838383611b7d565b60085460009060ff161561196357604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b60209091015263f6a1584d60e01b6001600160e01b031983160161196357506001611994565b506001600160a01b0382166000908152602081815260408083206001600160e01b03198516845290915290205460ff165b92915050565b6119a26128ae565b6119ac60006128de565b565b6008546001600160a01b036101009091041633146119de5760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526004602052604090819020805460ff19166001179055517f62dd88c5ecfa60713a657640ebec4de26fc1aefa4afdb24e6d15a124fce72779906109d090859085908590612dc0565b60008082806020019051810190611a4c91906131d6565b50935093505050611a5c816120fb565b611ae35760405162461bcd60e51b815260206004820152604c60248201527f76616c69646174655f737761704578616374546f6b656e73466f72546f6b656e60448201527f733a2052656365697665722061646472657373206e6f742077686974656c697360648201526b1d195908189e4811dd585c9960a21b608482015260a401610973565b6000805b8351811015611b3957838181518110611b0257611b02612f2a565b60200260200101519150611b15826120c8565b611b315760405162461bcd60e51b81526004016109739061315c565b600101611ae7565b5050505050565b600081806020019051810190611b56919061329f565b9050611b61816120c8565b610dcb5760405162461bcd60e51b8152600401610973906132bc565b6008546001600160a01b03610100909104163314611bad5760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526002602052604090819020805460ff19166001179055517fad90e2570fc4fe9f7437be3188d5c791c6662892d31731992aa88f5c87621983906109d090859085908590612dc0565b6008546001600160a01b03610100909104163314611c345760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526005602052604090819020805460ff19169055517f1212f8ddb39de8e1a339460c95752d61100723efeaa34ccd94bca94393f40938906109d090859085908590612dc0565b600081806020019051810190611c9e9190612fab565b509050611cc8816001600160a01b031660009081526007602052604090205460ff16151560011490565b610dcb5760405162461bcd60e51b815260206004820152604560248201527f76616c69646174655f617070726f766544656c65676174696f6e3a204170707260448201527f6f76652064656c65676174696f6e206164647265737320646f6573206e6f74206064820152640dac2e8c6d60db1b608482015260a401610973565b6008546001600160a01b03610100909104163314611d785760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526006602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f3589906109d090859085908590612dc0565b6000805b611dde836000612938565b9150611e0d600180611df26003601461330a565b611dfc919061330a565b611e06919061330a565b8490612938565b9050611e18826120c8565b611e345760405162461bcd60e51b81526004016109739061331d565b611e3d816120c8565b611e595760405162461bcd60e51b81526004016109739061331d565b600180611e686003601461330a565b611e72919061330a565b611e7c919061330a565b6014600180611e8c60038461330a565b611e96919061330a565b611ea0919061330a565b611eaa919061330a565b611eb4919061330a565b835110610d1457611f10600180611ecd6003601461330a565b611ed7919061330a565b611ee1919061330a565b600180611ef06003601461330a565b611efa919061330a565b611f04919061330a565b8551610a579190612f8d565b9250611dd3565b6008546001600160a01b03610100909104163314611f475760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526003602052604090819020805460ff19169055517f3097928509c53a2dab9500431201d82b0d756e8f890fd01f4ae6b33b45687ea4906109d090859085908590612dc0565b6008546001600160a01b03610100909104163314611fcb5760405162461bcd60e51b815260040161097390612d62565b6008805460ff19168415151790556040517f50454d9d0025a28a39cac5a4b3f3101d29b6e413fbb64f75fb42eb6837b07718906109d090859085908590613362565b60008082806020019051810190612024919061337e565b91509150612031826120c8565b61204d5760405162461bcd60e51b8152600401610973906132bc565b612056816120fb565b610d145760405162461bcd60e51b815260206004820152603b60248201527f76616c69646174655f6465706f7369743a20526563656976657220616464726560448201527f7373206e6f742077686974656c697374656420627920477561726400000000006064820152608401610973565b60085460009060ff16806119945750506001600160a01b031660009081526002602052604090205460ff16151560011490565b6001600160a01b031660009081526004602052604090205460ff16151560011490565b60008180602001905181019061213491906133b8565b5050509050612142816120c8565b610dcb5760405162461bcd60e51b81526004016109739061315c565b6008546001600160a01b0361010090910416331461218e5760405162461bcd60e51b815260040161097390612d62565b6001600160a01b0384166000908152602081815260408083206001600160e01b03198716845290915290819020805460ff19169055517f37ea10f2d08f5a9803dfcd5abf3cfc7b0d6fcdf5fcbc36be9ea5a0b53d9a4d9b906117639086908690869086906130da565b60008180602001905181019061220d9190613498565b905061221c81602001516120fb565b61228e5760405162461bcd60e51b815260206004820152603f60248201527f76616c69646174655f65786163744f75747075743a205265636569766572206160448201527f646472657373206e6f742077686974656c6973746564206279204775617264006064820152608401610973565b8051610dcb90610dcf565b6000818060200190518101906122af9190613498565b90506122be81602001516120fb565b61228e5760405162461bcd60e51b815260206004820152603e60248201527f76616c69646174655f6578616374496e7075743a20526563656976657220616460448201527f6472657373206e6f742077686974656c697374656420627920477561726400006064820152608401610973565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b60209091015261238b837fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b61147c565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b6020909101526118fa837f095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba61147c565b6124108361147c60405180606001604052806026815260200161351860269139805160209091012090565b6114ae8361147c60405180606001604052806021815260200161353e60219139805160209091012090565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b60209091015261248f847fac9650d882acfa253cba1ed543b9ff47351da99c3bd00a89625e5cdb2099009c61147c565b61249a848383611d48565b6124a5838383611d48565b6113c7848383611771565b6124b86128ae565b6001600160a01b03811661251d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610973565b612526816128de565b50565b60008082806020019051810190612540919061337e565b9150915061254d826120c8565b61204d5760405162461bcd60e51b8152602060048201526024808201527f76616c69646174655f77697468647261773a20546f6b656e206e6f7420616c6c6044820152631bddd95960e21b6064820152608401610973565b6008546001600160a01b036101009091041633146125d55760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526002602052604090819020805460ff19169055517f9ca3f065622f5f03f32b7157677a0e420c3a36ab45fd49f256ffebce3e310587906109d090859085908590612dc0565b6008546001600160a01b036101009091041633146126595760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526003602052604090819020805460ff19166001179055517fa8f9caaf4861720900294428e4ff34d37070c37afd26d96e6e4da75326d2c3ad906109d090859085908590612dc0565b6060816126be81601f61330a565b10156126fd5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610973565b82612708838261330a565b10156127475760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610973565b612751828461330a565b845110156127955760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610973565b6060821580156127b457604051915060008252602082016040526127fe565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156127ed5780518352602092830192016127d5565b5050858452601f01601f1916604052505b50949350505050565b600080806128158482612938565b92506128228460146129ec565b905061283a6128336003601461330a565b8590612938565b91509193909250565b60006128516003601461330a565b601461285e60038261330a565b612868919061330a565b612872919061330a565b825110159050919050565b606061199461288e6003601461330a565b61289a6003601461330a565b84516128a69190612f8d565b8491906126b0565b6008546001600160a01b036101009091041633146119ac5760405162461bcd60e51b815260040161097390612d62565b600880546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008161294681601461330a565b10156129895760405162461bcd60e51b8152602060048201526012602482015271746f416464726573735f6f766572666c6f7760701b6044820152606401610973565b61299482601461330a565b835110156129dc5760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610973565b500160200151600160601b900490565b6000816129fa81600361330a565b1015612a3c5760405162461bcd60e51b8152602060048201526011602482015270746f55696e7432345f6f766572666c6f7760781b6044820152606401610973565b612a4782600361330a565b83511015612a8e5760405162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b6044820152606401610973565b50016003015190565b6001600160a01b038116811461252657600080fd5b60008083601f840112612abe57600080fd5b5081356001600160401b03811115612ad557600080fd5b602083019150836020828501011115612aed57600080fd5b9250929050565b600080600060408486031215612b0957600080fd5b8335612b1481612a97565b925060208401356001600160401b03811115612b2f57600080fd5b612b3b86828701612aac565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612b8657612b86612b48565b604052919050565b60006001600160401b03821115612ba757612ba7612b48565b50601f01601f191660200190565b600060208284031215612bc757600080fd5b81356001600160401b03811115612bdd57600080fd5b8201601f81018413612bee57600080fd5b8035612c01612bfc82612b8e565b612b5e565b818152856020838501011115612c1657600080fd5b81602084016020830137600091810160200191909152949350505050565b600060208284031215612c4657600080fd5b8135612c5181612a97565b9392505050565b60008060008060608587031215612c6e57600080fd5b8435612c7981612a97565b93506020850135612c8981612a97565b925060408501356001600160401b03811115612ca457600080fd5b612cb087828801612aac565b95989497509550505050565b80356001600160e01b031981168114612cd457600080fd5b919050565b60008060008060608587031215612cef57600080fd5b8435612cfa81612a97565b9350612c8960208601612cbc565b60008060408385031215612d1b57600080fd5b8235612d2681612a97565b9150612d3460208401612cbc565b90509250929050565b600080600060408486031215612d5257600080fd5b83358015158114612b1457600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612de59083018486612d97565b95945050505050565b60006001600160401b03821115612e0757612e07612b48565b5060051b60200190565b600082601f830112612e2257600080fd5b8151612e30612bfc82612b8e565b8181526020856020848701011115612e4757600080fd5b60005b83811015612e65578581018201518382018301528101612e4a565b50506000918101602001919091529392505050565b60006020808385031215612e8d57600080fd5b82516001600160401b0380821115612ea457600080fd5b818501915085601f830112612eb857600080fd5b8151612ec6612bfc82612dee565b81815260059190911b83018401908481019088831115612ee557600080fd5b8585015b83811015612f1d57805185811115612f015760008081fd5b612f0f8b89838a0101612e11565b845250918601918601612ee9565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b805160208201516001600160e01b03198082169291906004831015612f6f5780818460040360031b1b83161693505b505050919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561199457611994612f77565b8051612cd481612a97565b60008060408385031215612fbe57600080fd5b8251612fc981612a97565b6020939093015192949293505050565b60208082526028908201527f76616c6964617465556e69737761705633506174683a20546f6b656e206e6f7460408201526708185b1b1bddd95960c21b606082015260800190565b6000808585111561303157600080fd5b8386111561303e57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156130735780818660040360031b1b83161692505b505092915050565b6000806040838503121561308e57600080fd5b8251915060208301516001600160401b038111156130ab57600080fd5b6130b785828601612e11565b9150509250929050565b6000600182016130d3576130d3612f77565b5060010190565b6001600160a01b03851681526001600160e01b03198416602082015260606040820181905260009061310f9083018486612d97565b9695505050505050565b60008060006060848603121561312e57600080fd5b835161313981612a97565b60208501516040860151919450925061315181612a97565b809150509250925092565b602080825260119082015270151bdad95b881b9bdd08185b1b1bddd959607a1b604082015260600190565b60008060006060848603121561319c57600080fd5b835192506020840151915060408401516001600160401b038111156131c057600080fd5b6131cc86828701612e11565b9150509250925092565b600080600080600060a086880312156131ee57600080fd5b85519450602080870151945060408701516001600160401b0381111561321357600080fd5b8701601f8101891361322457600080fd5b8051613232612bfc82612dee565b81815260059190911b8201830190838101908b83111561325157600080fd5b928401925b8284101561327857835161326981612a97565b82529284019290840190613256565b809750505050505061328c60608701612fa0565b9150608086015190509295509295909350565b6000602082840312156132b157600080fd5b8151612c5181612a97565b6020808252602e908201527f76616c69646174655f7472616e736665724552433230416c6c496e3a20546f6b60408201526d195b881b9bdd08185b1b1bddd95960921b606082015260800190565b8082018082111561199457611994612f77565b60208082526025908201527f76616c69646174653164656c7461506174683a20546f6b656e206e6f7420616c6040820152641b1bddd95960da1b606082015260800190565b8315158152604060208201526000612de5604083018486612d97565b6000806040838503121561339157600080fd5b825161339c81612a97565b60208401519092506133ad81612a97565b809150509250929050565b600080600080608085870312156133ce57600080fd5b84516133d981612a97565b6020860151604087015191955093506133f181612a97565b6060959095015193969295505050565b600060a0828403121561341357600080fd5b60405160a081016001600160401b03828210818311171561343657613436612b48565b81604052829350845191508082111561344e57600080fd5b5061345b85828601612e11565b825250602083015161346c81612a97565b806020830152506040830151604082015260608301516060820152608083015160808201525092915050565b6000602082840312156134aa57600080fd5b81516001600160401b038111156134c057600080fd5b6134cc84828501613401565b94935050505056fe737761704578616374546f6b656e73466f72546f6b656e732875696e743235362c75696e743235362c616464726573735b5d2c616464726573732c75696e7432353629737570706c7928616464726573732c75696e743235362c616464726573732c75696e74313629776974686472617728616464726573732c75696e743235362c6164647265737329617070726f766544656c65676174696f6e28616464726573732c75696e74323536296578616374496e707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929666c6173685377617045786163744f75742875696e743235362c75696e743235362c627974657329666c617368537761704578616374496e2875696e743235362c75696e743235362c62797465732965786163744f7574707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929a26469706673582212203662b17178f09b3227d88196bf0d8f1241bf880e674ea18dcce8bf0f36a4fca164736f6c63430008170033","sourceMap":"300:441:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6706:226:4;;;;;;:::i;:::-;;:::i;:::-;;15182:1680;;;;;;:::i;:::-;;:::i;2597:79::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2750:14:9;;2743:22;2725:41;;2713:2;2698:18;2597:79:4;;;;;;;;9260:248;;;;;;:::i;:::-;;:::i;14608:539::-;;;;;;:::i;:::-;;:::i;8726:152::-;;;;;;:::i;:::-;-1:-1:-1;;;;;8826:37:4;8803:4;8826:37;;;:27;:37;;;;;;;;:45;;:37;:45;;8726:152;11597:1751;;;;;;:::i;:::-;;:::i;5820:184::-;;;;;;:::i;:::-;;:::i;8884:172::-;;;;;;:::i;:::-;-1:-1:-1;;;;;8994:47:4;8971:4;8994:47;;;:37;:47;;;;;;;;:55;;:47;:55;;8884:172;10531:351;;;;;;:::i;:::-;;:::i;2503:65::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10888:260;;;;;;:::i;:::-;;:::i;19769:183::-;;;;;;:::i;:::-;;:::i;2815:89::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;9514:235;;;;;;:::i;:::-;;:::i;17053:234::-;;;;;;:::i;:::-;;:::i;6010:226::-;;;;;;:::i;:::-;;:::i;4807:240::-;;;;;;:::i;:::-;;:::i;6938:246::-;;;;;;:::i;:::-;;:::i;22458:308::-;;;;;;:::i;:::-;;:::i;19382:196::-;;;;;;:::i;:::-;;:::i;11380:211::-;;;;;;:::i;:::-;;:::i;10312:213::-;;;;;;:::i;:::-;;:::i;7833:413::-;;;;;;:::i;:::-;;:::i;1824:101:0:-;;;:::i;5630:184:4:-;;;;;;:::i;:::-;;:::i;636:102:3:-;1273:6:0;;;;;-1:-1:-1;;;;;1273:6:0;636:102:3;;;-1:-1:-1;;;;;4757:32:9;;;4739:51;;4727:2;4712:18;636:102:3;4593:203:9;13387:508:4;;;;;;:::i;:::-;;:::i;17478:229::-;;;;;;:::i;:::-;;:::i;7432:166::-;;;;;;:::i;:::-;;:::i;3064:20::-;;;;;;;;;6242:226;;;;;;:::i;:::-;;:::i;1201:85:0:-;1273:6;;;;;-1:-1:-1;;;;;1273:6:0;1201:85;;9755:276:4;;;;;;:::i;:::-;;:::i;6474:226::-;;;;;;:::i;:::-;;:::i;20493:729::-;;;;;;:::i;:::-;;:::i;2285:59::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;5452:172;;;;;;:::i;:::-;;:::i;1978:91::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2190:25;;;;;;;;;4947::9;;;4935:2;4920:18;2190:25:4;4801:177:9;8252:122:4;;;;;;:::i;:::-;-1:-1:-1;;;;;8337:22:4;8314:4;8337:22;;;:14;:22;;;;;;;;:30;;:22;:30;;8252:122;11192:160;;;;;;:::i;:::-;;:::i;17902:368::-;;;;;;:::i;:::-;;:::i;9124:130::-;;;;;;:::i;:::-;;:::i;8432:::-;;;;;;:::i;:::-;;:::i;21989:311::-;;;;;;:::i;:::-;;:::i;5053:215::-;;;;;;:::i;:::-;;:::i;14269:333::-;;;;;;:::i;:::-;;:::i;2706:79::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13934:329;;;;;;:::i;:::-;;:::i;10037:269::-;;;;;;:::i;:::-;;:::i;8568:152::-;;;;;;:::i;:::-;-1:-1:-1;;;;;8668:37:4;8645:4;8668:37;;;:27;:37;;;;;;;;:45;;:37;:45;;8568:152;22772:339;;;;;;:::i;:::-;;:::i;21228:603::-;;;;;;:::i;:::-;;:::i;2074:198:0:-;;;;;;:::i;:::-;;:::i;18446:359:4:-;;;;;;:::i;:::-;;:::i;7604:166::-;;;;;;:::i;:::-;;:::i;5274:172::-;;;;;;:::i;:::-;;:::i;2393:61::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4718:83;;;4793:1;6394:36:9;;6382:2;6367:18;4718:83:4;6252:184:9;6706:226:4;1273:6:0;;-1:-1:-1;;;;;1273:6:0;;;;;734:10:2;496:23:3;488:68;;;;-1:-1:-1;;;488:68:3;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;6824:40:4;::::1;;::::0;;;:27:::1;:40;::::0;;;;;;6817:47;;-1:-1:-1;;6817:47:4::1;::::0;;6879:46;::::1;::::0;::::1;::::0;6852:11;;6919:5;;;;6879:46:::1;:::i;:::-;;;;;;;;6706:226:::0;;;:::o;15182:1680::-;15262:22;15299:8;15288:31;;;;;;;;;;;;:::i;:::-;15261:58;;15386:6;15381:1475;15398:7;:14;15394:1;:18;15381:1475;;;15433:33;15469:7;15477:1;15469:10;;;;;;;;:::i;:::-;;;;;;;15433:46;;15554:15;15579:32;15606:1;15609;15579:20;:26;;:32;;;;;:::i;:::-;15572:40;;;:::i;:::-;15554:58;;15626:24;15653:62;15680:1;15713;15683:20;:27;:31;;;;:::i;:::-;15653:20;;:62;:26;:62::i;:::-;15784:47;;;;;;;;;;;;;;;;;15626:89;-1:-1:-1;;;;;;;;;;15772:59:4;;;15768:1078;;15851:37;15876:11;15851:24;:37::i;:::-;15768:1078;;;15925:42;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;15913:54:4;;;15909:937;;15987:40;16015:11;15987:27;:40::i;15909:937::-;16064:39;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;16052:51:4;;;16048:798;;16123:35;16146:11;16123:22;:35::i;16048:798::-;16195:40;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;16183:52:4;;;16179:667;;16255:36;16279:11;16255:23;:36::i;16179:667::-;16328:54;;;;;;;;;;;;;;;;;;4560:23;;;;;;;;4401:190;16328:54;-1:-1:-1;;;;;16316:66:4;;:8;-1:-1:-1;;;;;16316:66:4;;;16312:534;;16402:39;16429:11;16402:26;:39::i;16312:534::-;16478:55;;;;;;;;;;;;;;;;;;4560:23;;;;;;;;4401:190;16478:55;-1:-1:-1;;;;;16466:67:4;;:8;-1:-1:-1;;;;;16466:67:4;;;16462:384;;16553:39;16580:11;16553:26;:39::i;16462:384::-;16629:45;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;16617:57:4;;;16613:233;;16694:37;16719:11;16694:24;:37::i;16613:233::-;16770:61;;-1:-1:-1;;;16770:61:4;;10301:2:9;16770:61:4;;;10283:21:9;10340:2;10320:18;;;10313:30;10379:34;10359:18;;;10352:62;-1:-1:-1;;;10430:18:9;;;10423:49;10489:19;;16770:61:4;10099:415:9;16613:233:4;-1:-1:-1;;;15414:3:4;;15381:1475;;;;15251:1611;15182:1680;:::o;9260:248::-;9333:10;9360:8;9349:37;;;;;;;;;;;;:::i;:::-;9332:54;;;9404:32;9433:2;-1:-1:-1;;;;;8668:37:4;8645:4;8668:37;;;:27;:37;;;;;;;;:45;;:37;:45;;8568:152;9404:32;9396:105;;;;-1:-1:-1;;;9396:105:4;;11197:2:9;9396:105:4;;;11179:21:9;11236:2;11216:18;;;11209:30;11275:34;11255:18;;;11248:62;11346:30;11326:18;;;11319:58;11394:19;;9396:105:4;10995:424:9;9396:105:4;9322:186;9260:248;:::o;14608:539::-;14680:15;14705:16;14732:409;14783:22;:4;:20;:22::i;:::-;-1:-1:-1;14759:46:4;-1:-1:-1;14759:46:4;-1:-1:-1;14828:23:4;14759:46;14828:14;:23::i;:::-;14820:76;;;;-1:-1:-1;;;14820:76:4;;;;;;;:::i;:::-;14918:24;14933:8;14918:14;:24::i;:::-;14910:77;;;;-1:-1:-1;;;14910:77:4;;;;;;;:::i;:::-;15006:23;:4;:21;:23::i;:::-;15002:129;;;15056:16;:4;:14;:16::i;:::-;15049:23;;14732:409;;11597:1751;1273:6:0;;-1:-1:-1;;;;;11753:32:4;;;1273:6:0;;;;;11750:125:4;11858:7;11750:125;11893:23;11909:6;-1:-1:-1;;;;;8337:22:4;8314:4;8337:22;;;:14;:22;;;;;;;;:30;;:22;:30;;8252:122;11893:23;11885:68;;;;-1:-1:-1;;;11885:68:4;;12035:2:9;11885:68:4;;;12017:21:9;;;12054:18;;;12047:30;12113:34;12093:18;;;12086:62;12165:18;;11885:68:4;11833:356:9;11885:68:4;12019:15;12044:24;12066:1;12019:15;12044:20;;:24;:::i;:::-;12037:32;;;:::i;:::-;12019:50;-1:-1:-1;12079:23:4;;12105:24;:20;12126:1;12105:20;;:24;:::i;:::-;12079:50;;;;12147:35;12165:6;12173:8;12147:17;:35::i;:::-;12139:83;;;;-1:-1:-1;;;12139:83:4;;13060:2:9;12139:83:4;;;13042:21:9;13099:2;13079:18;;;13072:30;13138:34;13118:18;;;13111:62;-1:-1:-1;;;13189:18:9;;;13182:33;13232:19;;12139:83:4;12858:399:9;12139:83:4;12248:82;;;;;;;;;;;;;;;;;;4560:23;;;;;;;;4401:190;12248:82;-1:-1:-1;;;;;12236:94:4;;:8;-1:-1:-1;;;;;12236:94:4;;;12233:1109;;12346:43;12380:8;;12346:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12346:33:4;;-1:-1:-1;;;12346:43:4:i;:::-;12233:1109;;;12421:66;;;;;;;;;;;;;;;;;;4560:23;;;;;;;;4401:190;12421:66;-1:-1:-1;;;;;12409:78:4;;:8;-1:-1:-1;;;;;12409:78:4;;;12406:936;;12503:29;12523:8;;12503:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12503:19:4;;-1:-1:-1;;;12503:29:4:i;12406:936::-;12564:33;;;;;;;;;;;;-1:-1:-1;;;12564:33:4;;;;;-1:-1:-1;;;;;;;;;12552:45:4;;;12549:793;;12613:34;12638:8;;12613:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12613:24:4;;-1:-1:-1;;;12613:34:4:i;12549:793::-;12679:40;;;;;;;;;;;;-1:-1:-1;;;12679:40:4;;;;;-1:-1:-1;;;;;;;;;12667:52:4;;;12664:678;;12735:27;12753:8;;12735:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12735:17:4;;-1:-1:-1;;;12735:27:4:i;12664:678::-;12794:39;;;;;;;;;;;;-1:-1:-1;;;12794:39:4;;;;;-1:-1:-1;;;;;;;;;12782:51:4;;;12779:563;;12849:26;12866:8;;12849:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12849:16:4;;-1:-1:-1;;;12849:26:4:i;12779:563::-;12907:49;;;;;;;;;;;;;;;;;;4560:23;;;;;;;;4401:190;12907:49;-1:-1:-1;;;;;12895:61:4;;:8;-1:-1:-1;;;;;12895:61:4;;;12892:450;;12972:36;12999:8;;12972:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12972:26:4;;-1:-1:-1;;;12972:36:4:i;12892:450::-;13040:53;;;;;;;;;;;;;;;;;;4560:23;;;;;;;;4401:190;13040:53;-1:-1:-1;;;;;13028:65:4;;:8;-1:-1:-1;;;;;13028:65:4;;;13025:317;;13109:29;13129:8;;13109:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13109:19:4;;-1:-1:-1;;;13109:29:4:i;13025:317::-;13170:48;;;;;;;;;;;;;;;;;;4560:23;;;;;;;;4401:190;13170:48;-1:-1:-1;;;;;13158:60:4;;:8;-1:-1:-1;;;;;13158:60:4;;;13155:187;;13234:31;13256:8;;13234:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13234:21:4;;-1:-1:-1;;;13234:31:4:i;13155:187::-;13296:35;;-1:-1:-1;;;13296:35:4;;13464:2:9;13296:35:4;;;13446:21:9;13503:2;13483:18;;;13476:30;13542:27;13522:18;;;13515:55;13587:18;;13296:35:4;13262:349:9;13155:187:4;11739:1609;;;11597:1751;;;;;:::o;5820:184::-;1273:6:0;;-1:-1:-1;;;;;1273:6:0;;;;;734:10:2;496:23:3;488:68;;;;-1:-1:-1;;;488:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;5924:26:4;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;5917:33;;-1:-1:-1;;5917:33:4::1;::::0;;5965:32;::::1;::::0;::::1;::::0;5941:8;;5991:5;;;;5965:32:::1;:::i;10531:351::-:0;10623:96;10637:6;10645:66;;;;;;;;;;;;;;;;;;4560:23;;;;;;;;4401:190;10645:66;10713:5;;10623:13;:96::i;:::-;10729:97;10743:6;10751:67;;;;;;;;;;;;;;;;;;4560:23;;;;;;;;4401:190;10729:97;10836:39;10861:6;10869:5;;10836:24;:39::i;10888:260::-;10980:112;10994:6;11002:82;;;;;;;;;;;;;;;;;;4560:23;;;;;;;;4401:190;19769:183;19851:17;19883:8;19872:38;;;;;;;;;;;;:::i;:::-;19848:62;;;19921:24;19940:4;19921:18;:24::i;9514:235::-;9586:10;9613:8;9602:37;;;;;;;;;;;;:::i;:::-;9585:54;;;9657:32;9686:2;-1:-1:-1;;;;;8826:37:4;8803:4;8826:37;;;:27;:37;;;;;;;;:45;;:37;:45;;8726:152;9657:32;9649:93;;;;-1:-1:-1;;;9649:93:4;;14219:2:9;9649:93:4;;;14201:21:9;14258:2;14238:18;;;14231:30;14297:34;14277:18;;;14270:62;-1:-1:-1;;;14348:18:9;;;14341:46;14404:19;;9649:93:4;14017:412:9;17053:234:4;17133:13;17163:8;17152:40;;;;;;;;;;;;:::i;:::-;17132:60;;;17211:21;17226:5;17211:14;:21::i;:::-;17203:77;;;;-1:-1:-1;;;17203:77:4;;14636:2:9;17203:77:4;;;14618:21:9;14675:2;14655:18;;;14648:30;14714:34;14694:18;;;14687:62;-1:-1:-1;;;14765:18:9;;;14758:41;14816:19;;17203:77:4;14434:407:9;6010:226:4;1273:6:0;;-1:-1:-1;;;;;1273:6:0;;;;;734:10:2;496:23:3;488:68;;;;-1:-1:-1;;;488:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;6120:40:4;::::1;;::::0;;;:27:::1;:40;::::0;;;;;;:47;;-1:-1:-1;;6120:47:4::1;6163:4;6120:47;::::0;;6182;::::1;::::0;::::1;::::0;6148:11;;6223:5;;;;6182:47:::1;:::i;4807:240::-:0;1273:6:0;;-1:-1:-1;;;;;1273:6:0;;;;;734:10:2;496:23:3;488:68;;;;-1:-1:-1;;;488:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;4918:24:4;::::1;:16;:24:::0;;;::::1;::::0;;;;;;;-1:-1:-1;;;;;;4918:34:4;::::1;::::0;;;;;;;:41;;-1:-1:-1;;4918:41:4::1;4955:4;4918:41:::0;;::::1;::::0;;;4969:15;;;::::1;::::0;::::1;:::i;:::-;;;;;;4999:41;5016:6;5024:8;5034:5;;4999:41;;;;;;;;;:::i;:::-;;;;;;;;4807:240:::0;;;;:::o;6938:246::-;1273:6:0;;-1:-1:-1;;;;;1273:6:0;;;;;734:10:2;496:23:3;488:68;;;;-1:-1:-1;;;488:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;7058:50:4;::::1;;::::0;;;:37:::1;:50;::::0;;;;;;:57;;-1:-1:-1;;7058:57:4::1;7111:4;7058:57;::::0;;7130:47;::::1;::::0;::::1;::::0;7096:11;;7171:5;;;;7130:47:::1;:::i;22458:308::-:0;22535:13;22552:10;22577:8;22566:46;;;;;;;;;;;;:::i;:::-;22534:78;;;;;22631:21;22646:5;22631:14;:21::i;:::-;22623:51;;;;-1:-1:-1;;;22623:51:4;;;;;;;:::i;:::-;22692:21;22710:2;22692:17;:21::i;:::-;22684:75;;;;-1:-1:-1;;;22684:75:4;;16446:2:9;22684:75:4;;;16428:21:9;16485:2;16465:18;;;16458:30;16524:34;16504:18;;;16497:62;-1:-1:-1;;;16575:18:9;;;16568:39;16624:19;;22684:75:4;16244:405:9;19382:196:4;19468:17;19500:8;19489:47;;;;;;;;;;;;:::i;:::-;19463:73;;;;19547:24;19566:4;19547:18;:24::i;11380:211::-;11525:59;11547:6;11555;11563:20;;11525:21;:59::i;10312:213::-;10406:78;10420:5;10427:49;;;;;;;;;;;;;;;;;;4560:23;;;;;;;;4401:190;10406:78;10494:24;10505:5;10512;;10494:10;:24::i;7833:413::-;8054:8;;7914:4;;8054:8;;8051:137;;;8093:39;;;;;;;;;;;;-1:-1:-1;;;8093:39:4;;;;;-1:-1:-1;;;;;;;;;8081:51:4;;;8078:100;;-1:-1:-1;8159:4:4;8152:11;;8078:100;-1:-1:-1;;;;;;8205:24:4;;:16;:24;;;;;;;;;;;-1:-1:-1;;;;;;8205:34:4;;;;;;;;;;;;7833:413;;;;;:::o;1824:101:0:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;5630:184:4:-;1273:6:0;;-1:-1:-1;;;;;1273:6:0;;;;;734:10:2;496:23:3;488:68;;;;-1:-1:-1;;;488:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;5726:26:4;::::1;;::::0;;;:16:::1;:26;::::0;;;;;;:33;;-1:-1:-1;;5726:33:4::1;5755:4;5726:33;::::0;;5774;::::1;::::0;::::1;::::0;5743:8;;5801:5;;;;5774:33:::1;:::i;13387:508::-:0;13480:21;13503:10;13530:8;13519:60;;;;;;;;;;;;:::i;:::-;13475:104;;;;;;;13598:21;13616:2;13598:17;:21::i;:::-;13590:110;;;;-1:-1:-1;;;13590:110:4;;18563:2:9;13590:110:4;;;18545:21:9;18602:2;18582:18;;;18575:30;18641:34;18621:18;;;18614:62;18712:34;18692:18;;;18685:62;-1:-1:-1;;;18763:19:9;;;18756:43;18816:19;;13590:110:4;18361:480:9;13590:110:4;13711:13;;13734:147;13758:4;:11;13754:1;:15;13734:147;;;13798:4;13803:1;13798:7;;;;;;;;:::i;:::-;;;;;;;13790:15;;13827:21;13842:5;13827:14;:21::i;:::-;13819:51;;;;-1:-1:-1;;;13819:51:4;;;;;;;:::i;:::-;13771:3;;13734:147;;;;13465:430;;;13387:508;:::o;17478:229::-;17561:13;17589:8;17578:31;;;;;;;;;;;;:::i;:::-;17560:49;;17628:21;17643:5;17628:14;:21::i;:::-;17620:80;;;;-1:-1:-1;;;17620:80:4;;;;;;;:::i;7432:166::-;1273:6:0;;-1:-1:-1;;;;;1273:6:0;;;;;734:10:2;496:23:3;488:68;;;;-1:-1:-1;;;488:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;7522:20:4;::::1;;::::0;;;:13:::1;:20;::::0;;;;;;:27;;-1:-1:-1;;7522:27:4::1;7545:4;7522:27;::::0;;7564;::::1;::::0;::::1;::::0;7536:5;;7585;;;;7564:27:::1;:::i;6242:226::-:0;1273:6:0;;-1:-1:-1;;;;;1273:6:0;;;;;734:10:2;496:23:3;488:68;;;;-1:-1:-1;;;488:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;6360:40:4;::::1;;::::0;;;:27:::1;:40;::::0;;;;;;6353:47;;-1:-1:-1;;6353:47:4::1;::::0;;6415:46;::::1;::::0;::::1;::::0;6388:11;;6455:5;;;;6415:46:::1;:::i;9755:276::-:0;9837:10;9864:8;9853:37;;;;;;;;;;;;:::i;:::-;9836:54;;;9908:42;9947:2;-1:-1:-1;;;;;8994:47:4;8971:4;8994:47;;;:37;:47;;;;;;;;:55;;:47;:55;;8884:172;9908:42;9900:124;;;;-1:-1:-1;;;9900:124:4;;19727:2:9;9900:124:4;;;19709:21:9;19766:2;19746:18;;;19739:30;19805:34;19785:18;;;19778:62;19876:34;19856:18;;;19849:62;-1:-1:-1;;;19927:19:9;;;19920:36;19973:19;;9900:124:4;19525:473:9;6474:226:4;1273:6:0;;-1:-1:-1;;;;;1273:6:0;;;;;734:10:2;496:23:3;488:68;;;;-1:-1:-1;;;488:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;6584:40:4;::::1;;::::0;;;:27:::1;:40;::::0;;;;;;:47;;-1:-1:-1;;6584:47:4::1;6627:4;6584:47;::::0;;6646;::::1;::::0;::::1;::::0;6612:11;;6687:5;;;;6646:47:::1;:::i;20493:729::-:0;20562:15;20587:16;20614:602;20651:17;:4;20666:1;20651:14;:17::i;:::-;20641:27;-1:-1:-1;20693:36:4;1032:1;;1158:29;821:1;714:2;1158:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;20693:4;;:14;:36::i;:::-;20682:47;;20752:23;20767:7;20752:14;:23::i;:::-;20744:73;;;;-1:-1:-1;;;20744:73:4;;;;;;;:::i;:::-;20839:24;20854:8;20839:14;:24::i;:::-;20831:74;;;;-1:-1:-1;;;20831:74:4;;;;;;;:::i;:::-;1032:1;;1158:29;821:1;714:2;1158:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;714:2;1032:1;;1158:29;821:1;714:2;1158:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;1330:32;;;;:::i;:::-;1507:42;;;;:::i;:::-;21003:4;:11;:49;20999:207;;21079:68;1032:1;;1158:29;821:1;714:2;1158:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;1032:1;;1158:29;821:1;714:2;1158:29;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;21112:4;:11;:34;;;;:::i;21079:68::-;21072:75;;20614:602;;5452:172;1273:6:0;;-1:-1:-1;;;;;1273:6:0;;;;;734:10:2;496:23:3;488:68;;;;-1:-1:-1;;;488:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;5552:22:4;::::1;;::::0;;;:14:::1;:22;::::0;;;;;;5545:29;;-1:-1:-1;;5545:29:4::1;::::0;;5589:28;::::1;::::0;::::1;::::0;5567:6;;5611:5;;;;5589:28:::1;:::i;11192:160::-:0;1273:6:0;;-1:-1:-1;;;;;1273:6:0;;;;;734:10:2;496:23:3;488:68;;;;-1:-1:-1;;;488:68:3;;;;;;;:::i;:::-;11289:8:4::1;:16:::0;;-1:-1:-1;;11289:16:4::1;::::0;::::1;;;::::0;;11320:25:::1;::::0;::::1;::::0;::::1;::::0;11289:16;;11339:5;;;;11320:25:::1;:::i;17902:368::-:0;17980:13;17995:16;18026:8;18015:40;;;;;;;;;;;;:::i;:::-;17979:76;;;;18082:21;18097:5;18082:14;:21::i;:::-;18074:80;;;;-1:-1:-1;;;18074:80:4;;;;;;;:::i;:::-;18172:27;18190:8;18172:17;:27::i;:::-;18164:99;;;;-1:-1:-1;;;18164:99:4;;21480:2:9;18164:99:4;;;21462:21:9;21519:2;21499:18;;;21492:30;21558:34;21538:18;;;21531:62;21629:29;21609:18;;;21602:57;21676:19;;18164:99:4;21278:423:9;9124:130:4;9207:8;;9184:4;;9207:8;;;:40;;-1:-1:-1;;;;;;;9219:20:4;;;;;:13;:20;;;;;;;;:28;;:20;:28;;9124:130::o;8432:::-;-1:-1:-1;;;;;8521:26:4;8498:4;8521:26;;;:16;:26;;;;;;;;:34;;:26;:34;;8432:130::o;21989:311::-;22064:13;22098:8;22087:52;;;;;;;;;;;;:::i;:::-;22063:76;;;;;22158:21;22173:5;22158:14;:21::i;:::-;22150:51;;;;-1:-1:-1;;;22150:51:4;;;;;;;:::i;5053:215::-;1273:6:0;;-1:-1:-1;;;;;1273:6:0;;;;;734:10:2;496:23:3;488:68;;;;-1:-1:-1;;;488:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;5172:24:4;::::1;:16;:24:::0;;;::::1;::::0;;;;;;;-1:-1:-1;;;;;;5172:34:4;::::1;::::0;;;;;;;;;5165:41;;-1:-1:-1;;5165:41:4::1;::::0;;5221:40;::::1;::::0;::::1;::::0;5189:6;;5197:8;;5255:5;;;;5221:40:::1;:::i;14269:333::-:0;14345:31;14391:8;14380:41;;;;;;;;;;;;:::i;:::-;14344:77;;14448:35;14466:6;:16;;;14448:17;:35::i;:::-;14440:111;;;;-1:-1:-1;;;14440:111:4;;23700:2:9;14440:111:4;;;23682:21:9;23739:2;23719:18;;;23712:30;23778:34;23758:18;;;23751:62;23849:33;23829:18;;;23822:61;23900:19;;14440:111:4;23498:427:9;14440:111:4;14583:11;;14561:34;;:21;:34::i;13934:329::-;14009:30;14054:8;14043:40;;;;;;;;;;;;:::i;:::-;14008:75;;14110:35;14128:6;:16;;;14110:17;:35::i;:::-;14102:110;;;;-1:-1:-1;;;14102:110:4;;24515:2:9;14102:110:4;;;24497:21:9;24554:2;24534:18;;;24527:30;24593:34;24573:18;;;24566:62;24664:32;24644:18;;;24637:60;24714:19;;14102:110:4;24313:426:9;10037:269:4;10139:40;;;;;;;;;;;;-1:-1:-1;;;10139:40:4;;;;;10118:69;10132:5;4560:23;10139:40;4401:190;10118:69;10218:39;;;;;;;;;;;;-1:-1:-1;;;10218:39:4;;;;;10197:68;10211:5;4560:23;10218:39;4401:190;22772:339;22860:88;22874:11;22887:53;;;;;;;;;;;;;;;;;;4560:23;;;;;;;;4401:190;22860:88;22958:83;22972:11;22985:48;;;;;;;;;;;;;;;;;;4560:23;;;;;;;;4401:190;21228:603;21366:33;;;;;;;;;;;;-1:-1:-1;;;21366:33:4;;;;;21339:68;21353:11;4560:23;21366:33;4401:190;21339:68;21417:44;21442:11;21455:5;;21417:24;:44::i;:::-;21471;21496:11;21509:5;;21471:24;:44::i;:::-;21770:54;21805:11;21818:5;;21770:34;:54::i;2074:198:0:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2162:22:0;::::1;2154:73;;;::::0;-1:-1:-1;;;2154:73:0;;24946:2:9;2154:73:0::1;::::0;::::1;24928:21:9::0;24985:2;24965:18;;;24958:30;25024:34;25004:18;;;24997:62;-1:-1:-1;;;25075:18:9;;;25068:36;25121:19;;2154:73:0::1;24744:402:9::0;2154:73:0::1;2237:28;2256:8;2237:18;:28::i;:::-;2074:198:::0;:::o;18446:359:4:-;18525:13;18540:16;18571:8;18560:40;;;;;;;;;;;;:::i;:::-;18524:76;;;;18627:21;18642:5;18627:14;:21::i;:::-;18619:70;;;;-1:-1:-1;;;18619:70:4;;25353:2:9;18619:70:4;;;25335:21:9;25392:2;25372:18;;;25365:30;25431:34;25411:18;;;25404:62;-1:-1:-1;;;25482:18:9;;;25475:34;25526:19;;18619:70:4;25151:400:9;7604:166:4;1273:6:0;;-1:-1:-1;;;;;1273:6:0;;;;;734:10:2;496:23:3;488:68;;;;-1:-1:-1;;;488:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;7702:20:4;::::1;;::::0;;;:13:::1;:20;::::0;;;;;;7695:27;;-1:-1:-1;;7695:27:4::1;::::0;;7737:26;::::1;::::0;::::1;::::0;7716:5;;7757;;;;7737:26:::1;:::i;5274:172::-:0;1273:6:0;;-1:-1:-1;;;;;1273:6:0;;;;;734:10:2;496:23:3;488:68;;;;-1:-1:-1;;;488:68:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;5366:22:4;::::1;;::::0;;;:14:::1;:22;::::0;;;;;;:29;;-1:-1:-1;;5366:29:4::1;5391:4;5366:29;::::0;;5410;::::1;::::0;::::1;::::0;5381:6;;5433:5;;;;5410:29:::1;:::i;392:3007:7:-:0;514:12;562:7;546:12;562:7;556:2;546:12;:::i;:::-;:23;;538:50;;;;-1:-1:-1;;;538:50:7;;25758:2:9;538:50:7;;;25740:21:9;25797:2;25777:18;;;25770:30;-1:-1:-1;;;25816:18:9;;;25809:44;25870:18;;538:50:7;25556:338:9;538:50:7;626:6;606:16;615:7;626:6;606:16;:::i;:::-;:26;;598:53;;;;-1:-1:-1;;;598:53:7;;25758:2:9;598:53:7;;;25740:21:9;25797:2;25777:18;;;25770:30;-1:-1:-1;;;25816:18:9;;;25809:44;25870:18;;598:53:7;25556:338:9;598:53:7;686:16;695:7;686:6;:16;:::i;:::-;669:6;:13;:33;;661:63;;;;-1:-1:-1;;;661:63:7;;26101:2:9;661:63:7;;;26083:21:9;26140:2;26120:18;;;26113:30;-1:-1:-1;;;26159:18:9;;;26152:47;26216:18;;661:63:7;25899:341:9;661:63:7;735:22;798:15;;830:2099;;;;3082:4;3076:11;3063:24;;3280:1;3269:9;3262:20;3332:4;3321:9;3317:20;3311:4;3304:34;791:2565;;830:2099;1024:4;1018:11;1005:24;;1719:2;1710:7;1706:16;2121:9;2114:17;2108:4;2104:28;2092:9;2081;2077:25;2073:60;2173:7;2169:2;2165:16;2441:6;2427:9;2420:17;2414:4;2410:28;2398:9;2390:6;2386:22;2382:57;2378:70;2203:461;2478:3;2474:2;2471:11;2203:461;;;2632:9;;2621:21;;2523:4;2515:13;;;;2559;2203:461;;;-1:-1:-1;;2686:26:7;;;2906:2;2889:11;-1:-1:-1;;2885:25:7;2879:4;2872:39;-1:-1:-1;791:2565:7;-1:-1:-1;3383:9:7;392:3007;-1:-1:-1;;;;392:3007:7:o;1779:314:8:-;1883:14;;;1983:17;:4;1883:14;1983;:17::i;:::-;1974:26;-1:-1:-1;2016:24:8;:4;304:2;2016:13;:24::i;:::-;2010:30;-1:-1:-1;2059:27:8;507:20;397:1;304:2;507:20;:::i;:::-;2059:4;;:14;:27::i;:::-;2050:36;;1779:314;;;;;:::o;992:138::-;1060:4;507:20;397:1;304:2;507:20;:::i;:::-;304:2;507:20;397:1;304:2;507:20;:::i;:::-;618:23;;;;:::i;:::-;777:24;;;;:::i;:::-;1083:4;:11;:40;;1076:47;;992:138;;;:::o;2635:149::-;2696:12;2727:50;507:20;397:1;304:2;507:20;:::i;:::-;;397:1;304:2;507:20;:::i;:::-;2751:4;:11;:25;;;;:::i;:::-;2727:4;;:50;:10;:50::i;1359:130:0:-;1273:6;;-1:-1:-1;;;;;1273:6:0;;;;;734:10:2;1422:23:0;1414:68;;;;-1:-1:-1;;;1414:68:0;;;;;;;:::i;2426:187::-;2518:6;;;-1:-1:-1;;;;;2534:17:0;;;2518:6;2534:17;;;-1:-1:-1;;;;;;2534:17:0;;;;;;2566:40;;2518:6;;;;;;;;2566:40;;2499:16;;2566:40;2489:124;2426:187;:::o;3405:416:7:-;3484:7;3526:6;3511:11;3526:6;3520:2;3511:11;:::i;:::-;:21;;3503:52;;;;-1:-1:-1;;;3503:52:7;;26447:2:9;3503:52:7;;;26429:21:9;26486:2;26466:18;;;26459:30;-1:-1:-1;;;26505:18:9;;;26498:48;26563:18;;3503:52:7;26245:342:9;3503:52:7;3590:11;:6;3599:2;3590:11;:::i;:::-;3573:6;:13;:28;;3565:62;;;;-1:-1:-1;;;3565:62:7;;26794:2:9;3565:62:7;;;26776:21:9;26833:2;26813:18;;;26806:30;-1:-1:-1;;;26852:18:9;;;26845:51;26913:18;;3565:62:7;26592:345:9;3565:62:7;-1:-1:-1;3715:30:7;3731:4;3715:30;3709:37;-1:-1:-1;;;3705:71:7;;;3405:416::o;3827:365::-;3905:6;3945;3931:10;3945:6;3940:1;3931:10;:::i;:::-;:20;;3923:50;;;;-1:-1:-1;;;3923:50:7;;27144:2:9;3923:50:7;;;27126:21:9;27183:2;27163:18;;;27156:30;-1:-1:-1;;;27202:18:9;;;27195:47;27259:18;;3923:50:7;26942:341:9;3923:50:7;4008:10;:6;4017:1;4008:10;:::i;:::-;3991:6;:13;:27;;3983:60;;;;-1:-1:-1;;;3983:60:7;;27490:2:9;3983:60:7;;;27472:21:9;27529:2;27509:18;;;27502:30;-1:-1:-1;;;27548:18:9;;;27541:50;27608:18;;3983:60:7;27288:344:9;3983:60:7;-1:-1:-1;4120:29:7;4136:3;4120:29;4114:36;;3827:365::o;14:131:9:-;-1:-1:-1;;;;;89:31:9;;79:42;;69:70;;135:1;132;125:12;150:348;202:8;212:6;266:3;259:4;251:6;247:17;243:27;233:55;;284:1;281;274:12;233:55;-1:-1:-1;307:20:9;;-1:-1:-1;;;;;339:30:9;;336:50;;;382:1;379;372:12;336:50;419:4;411:6;407:17;395:29;;471:3;464:4;455:6;447;443:19;439:30;436:39;433:59;;;488:1;485;478:12;433:59;150:348;;;;;:::o;503:546::-;583:6;591;599;652:2;640:9;631:7;627:23;623:32;620:52;;;668:1;665;658:12;620:52;707:9;694:23;726:31;751:5;726:31;:::i;:::-;776:5;-1:-1:-1;832:2:9;817:18;;804:32;-1:-1:-1;;;;;848:30:9;;845:50;;;891:1;888;881:12;845:50;930:59;981:7;972:6;961:9;957:22;930:59;:::i;:::-;503:546;;1008:8;;-1:-1:-1;904:85:9;;-1:-1:-1;;;;503:546:9:o;1054:127::-;1115:10;1110:3;1106:20;1103:1;1096:31;1146:4;1143:1;1136:15;1170:4;1167:1;1160:15;1186:275;1257:2;1251:9;1322:2;1303:13;;-1:-1:-1;;1299:27:9;1287:40;;-1:-1:-1;;;;;1342:34:9;;1378:22;;;1339:62;1336:88;;;1404:18;;:::i;:::-;1440:2;1433:22;1186:275;;-1:-1:-1;1186:275:9:o;1466:186::-;1514:4;-1:-1:-1;;;;;1539:6:9;1536:30;1533:56;;;1569:18;;:::i;:::-;-1:-1:-1;1635:2:9;1614:15;-1:-1:-1;;1610:29:9;1641:4;1606:40;;1466:186::o;1657:671::-;1725:6;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1834:9;1821:23;-1:-1:-1;;;;;1859:6:9;1856:30;1853:50;;;1899:1;1896;1889:12;1853:50;1922:22;;1975:4;1967:13;;1963:27;-1:-1:-1;1953:55:9;;2004:1;2001;1994:12;1953:55;2040:2;2027:16;2065:48;2081:31;2109:2;2081:31;:::i;:::-;2065:48;:::i;:::-;2136:2;2129:5;2122:17;2176:7;2171:2;2166;2162;2158:11;2154:20;2151:33;2148:53;;;2197:1;2194;2187:12;2148:53;2252:2;2247;2243;2239:11;2234:2;2227:5;2223:14;2210:45;2296:1;2275:14;;;2291:2;2271:23;2264:34;;;;2279:5;1657:671;-1:-1:-1;;;;1657:671:9:o;2333:247::-;2392:6;2445:2;2433:9;2424:7;2420:23;2416:32;2413:52;;;2461:1;2458;2451:12;2413:52;2500:9;2487:23;2519:31;2544:5;2519:31;:::i;:::-;2569:5;2333:247;-1:-1:-1;;;2333:247:9:o;2777:686::-;2865:6;2873;2881;2889;2942:2;2930:9;2921:7;2917:23;2913:32;2910:52;;;2958:1;2955;2948:12;2910:52;2997:9;2984:23;3016:31;3041:5;3016:31;:::i;:::-;3066:5;-1:-1:-1;3123:2:9;3108:18;;3095:32;3136:33;3095:32;3136:33;:::i;:::-;3188:7;-1:-1:-1;3246:2:9;3231:18;;3218:32;-1:-1:-1;;;;;3262:30:9;;3259:50;;;3305:1;3302;3295:12;3259:50;3344:59;3395:7;3386:6;3375:9;3371:22;3344:59;:::i;:::-;2777:686;;;;-1:-1:-1;3422:8:9;-1:-1:-1;;;;2777:686:9:o;3468:173::-;3535:20;;-1:-1:-1;;;;;;3584:32:9;;3574:43;;3564:71;;3631:1;3628;3621:12;3564:71;3468:173;;;:::o;3646:618::-;3734:6;3742;3750;3758;3811:2;3799:9;3790:7;3786:23;3782:32;3779:52;;;3827:1;3824;3817:12;3779:52;3866:9;3853:23;3885:31;3910:5;3885:31;:::i;:::-;3935:5;-1:-1:-1;3959:37:9;3992:2;3977:18;;3959:37;:::i;4269:319::-;4336:6;4344;4397:2;4385:9;4376:7;4372:23;4368:32;4365:52;;;4413:1;4410;4403:12;4365:52;4452:9;4439:23;4471:31;4496:5;4471:31;:::i;:::-;4521:5;-1:-1:-1;4545:37:9;4578:2;4563:18;;4545:37;:::i;:::-;4535:47;;4269:319;;;;;:::o;4983:572::-;5060:6;5068;5076;5129:2;5117:9;5108:7;5104:23;5100:32;5097:52;;;5145:1;5142;5135:12;5097:52;5184:9;5171:23;5237:5;5230:13;5223:21;5216:5;5213:32;5203:60;;5259:1;5256;5249:12;6441:356;6643:2;6625:21;;;6662:18;;;6655:30;6721:34;6716:2;6701:18;;6694:62;6788:2;6773:18;;6441:356::o;6802:267::-;6891:6;6886:3;6879:19;6943:6;6936:5;6929:4;6924:3;6920:14;6907:43;-1:-1:-1;6995:1:9;6970:16;;;6988:4;6966:27;;;6959:38;;;;7051:2;7030:15;;;-1:-1:-1;;7026:29:9;7017:39;;;7013:50;;6802:267::o;7074:344::-;-1:-1:-1;;;;;7261:32:9;;7243:51;;7330:2;7325;7310:18;;7303:30;;;-1:-1:-1;;7350:62:9;;7393:18;;7385:6;7377;7350:62;:::i;:::-;7342:70;7074:344;-1:-1:-1;;;;;7074:344:9:o;7423:181::-;7481:4;-1:-1:-1;;;;;7506:6:9;7503:30;7500:56;;;7536:18;;:::i;:::-;-1:-1:-1;7581:1:9;7577:14;7593:4;7573:25;;7423:181::o;7609:587::-;7662:5;7715:3;7708:4;7700:6;7696:17;7692:27;7682:55;;7733:1;7730;7723:12;7682:55;7762:6;7756:13;7793:48;7809:31;7837:2;7809:31;:::i;7793:48::-;7866:2;7857:7;7850:19;7888:4;7935:3;7928:4;7923:2;7915:6;7911:15;7907:26;7904:35;7901:55;;;7952:1;7949;7942:12;7901:55;7974:1;7984:134;7998:2;7995:1;7992:9;7984:134;;;8087:14;;;8083:23;;8077:30;8055:15;;;8051:24;;8044:64;8009:10;;7984:134;;;-1:-1:-1;;8163:1:9;8138:16;;;8156:4;8134:27;8127:38;;;;8142:7;7609:587;-1:-1:-1;;;7609:587:9:o;8201:1130::-;8305:6;8336:2;8379;8367:9;8358:7;8354:23;8350:32;8347:52;;;8395:1;8392;8385:12;8347:52;8428:9;8422:16;-1:-1:-1;;;;;8498:2:9;8490:6;8487:14;8484:34;;;8514:1;8511;8504:12;8484:34;8552:6;8541:9;8537:22;8527:32;;8597:7;8590:4;8586:2;8582:13;8578:27;8568:55;;8619:1;8616;8609:12;8568:55;8648:2;8642:9;8671:58;8687:41;8725:2;8687:41;:::i;8671:58::-;8763:15;;;8845:1;8841:10;;;;8833:19;;8829:28;;;8794:12;;;;8869:19;;;8866:39;;;8901:1;8898;8891:12;8866:39;8933:2;8929;8925:11;8945:356;8961:6;8956:3;8953:15;8945:356;;;9040:3;9034:10;9076:2;9063:11;9060:19;9057:109;;;9120:1;9149:2;9145;9138:14;9057:109;9191:67;9250:7;9245:2;9231:11;9227:2;9223:20;9219:29;9191:67;:::i;:::-;9179:80;;-1:-1:-1;9279:12:9;;;;8978;;8945:356;;;-1:-1:-1;9320:5:9;8201:1130;-1:-1:-1;;;;;;;;8201:1130:9:o;9336:127::-;9397:10;9392:3;9388:20;9385:1;9378:31;9428:4;9425:1;9418:15;9452:4;9449:1;9442:15;9468:361;9585:12;;9633:4;9622:16;;9616:23;-1:-1:-1;;;;;;9696:11:9;;;;9585:12;9616:23;9730:1;9719:13;;9716:107;;;9810:2;9804;9794:6;9791:1;9787:14;9784:1;9780:22;9776:31;9772:2;9768:40;9764:49;9755:58;;9716:107;;;;9468:361;;;:::o;9834:127::-;9895:10;9890:3;9886:20;9883:1;9876:31;9926:4;9923:1;9916:15;9950:4;9947:1;9940:15;9966:128;10033:9;;;10054:11;;;10051:37;;;10068:18;;:::i;10519:146::-;10606:13;;10628:31;10606:13;10628:31;:::i;10670:320::-;10757:6;10765;10818:2;10806:9;10797:7;10793:23;10789:32;10786:52;;;10834:1;10831;10824:12;10786:52;10866:9;10860:16;10885:31;10910:5;10885:31;:::i;:::-;10980:2;10965:18;;;;10959:25;10935:5;;10959:25;;-1:-1:-1;;;10670:320:9:o;11424:404::-;11626:2;11608:21;;;11665:2;11645:18;;;11638:30;11704:34;11699:2;11684:18;;11677:62;-1:-1:-1;;;11770:2:9;11755:18;;11748:38;11818:3;11803:19;;11424:404::o;12194:331::-;12299:9;12310;12352:8;12340:10;12337:24;12334:44;;;12374:1;12371;12364:12;12334:44;12403:6;12393:8;12390:20;12387:40;;;12423:1;12420;12413:12;12387:40;-1:-1:-1;;12449:23:9;;;12494:25;;;;;-1:-1:-1;12194:331:9:o;12530:323::-;-1:-1:-1;;;;;;12650:19:9;;12726:11;;;;12757:1;12749:10;;12746:101;;;12834:2;12828;12821:3;12818:1;12814:11;12811:1;12807:19;12803:28;12799:2;12795:37;12791:46;12782:55;;12746:101;;;12530:323;;;;:::o;13616:396::-;13704:6;13712;13765:2;13753:9;13744:7;13740:23;13736:32;13733:52;;;13781:1;13778;13771:12;13733:52;13810:9;13804:16;13794:26;;13864:2;13853:9;13849:18;13843:25;-1:-1:-1;;;;;13883:6:9;13880:30;13877:50;;;13923:1;13920;13913:12;13877:50;13946:60;13998:7;13989:6;13978:9;13974:22;13946:60;:::i;:::-;13936:70;;;13616:396;;;;;:::o;14846:135::-;14885:3;14906:17;;;14903:43;;14926:18;;:::i;:::-;-1:-1:-1;14973:1:9;14962:13;;14846:135::o;14986:440::-;-1:-1:-1;;;;;15199:32:9;;15181:51;;-1:-1:-1;;;;;;15268:33:9;;15263:2;15248:18;;15241:61;15338:2;15333;15318:18;;15311:30;;;-1:-1:-1;;15358:62:9;;15401:18;;15393:6;15385;15358:62;:::i;:::-;15350:70;14986:440;-1:-1:-1;;;;;;14986:440:9:o;15431:462::-;15535:6;15543;15551;15604:2;15592:9;15583:7;15579:23;15575:32;15572:52;;;15620:1;15617;15610:12;15572:52;15652:9;15646:16;15671:31;15696:5;15671:31;:::i;:::-;15766:2;15751:18;;15745:25;15815:2;15800:18;;15794:25;15721:5;;-1:-1:-1;15745:25:9;-1:-1:-1;15828:33:9;15794:25;15828:33;:::i;:::-;15880:7;15870:17;;;15431:462;;;;;:::o;15898:341::-;16100:2;16082:21;;;16139:2;16119:18;;;16112:30;-1:-1:-1;;;16173:2:9;16158:18;;16151:47;16230:2;16215:18;;15898:341::o;16654:457::-;16751:6;16759;16767;16820:2;16808:9;16799:7;16795:23;16791:32;16788:52;;;16836:1;16833;16826:12;16788:52;16865:9;16859:16;16849:26;;16915:2;16904:9;16900:18;16894:25;16884:35;;16963:2;16952:9;16948:18;16942:25;-1:-1:-1;;;;;16982:6:9;16979:30;16976:50;;;17022:1;17019;17012:12;16976:50;17045:60;17097:7;17088:6;17077:9;17073:22;17045:60;:::i;:::-;17035:70;;;16654:457;;;;;:::o;17116:1240::-;17255:6;17263;17271;17279;17287;17340:3;17328:9;17319:7;17315:23;17311:33;17308:53;;;17357:1;17354;17347:12;17308:53;17386:9;17380:16;17370:26;;17415:2;17457;17446:9;17442:18;17436:25;17426:35;;17505:2;17494:9;17490:18;17484:25;-1:-1:-1;;;;;17524:6:9;17521:30;17518:50;;;17564:1;17561;17554:12;17518:50;17587:22;;17640:4;17632:13;;17628:27;-1:-1:-1;17618:55:9;;17669:1;17666;17659:12;17618:55;17698:2;17692:9;17721:58;17737:41;17775:2;17737:41;:::i;17721:58::-;17813:15;;;17895:1;17891:10;;;;17883:19;;17879:28;;;17844:12;;;;17919:19;;;17916:39;;;17951:1;17948;17941:12;17916:39;17975:11;;;;17995:210;18011:6;18006:3;18003:15;17995:210;;;18084:3;18078:10;18101:31;18126:5;18101:31;:::i;:::-;18145:18;;18028:12;;;;18183;;;;17995:210;;;18224:5;18214:15;;;;;;;18248:57;18301:2;18290:9;18286:18;18248:57;:::i;:::-;18238:67;;18345:3;18334:9;18330:19;18324:26;18314:36;;17116:1240;;;;;;;;:::o;18846:259::-;18924:6;18977:2;18965:9;18956:7;18952:23;18948:32;18945:52;;;18993:1;18990;18983:12;18945:52;19025:9;19019:16;19044:31;19069:5;19044:31;:::i;19110:410::-;19312:2;19294:21;;;19351:2;19331:18;;;19324:30;19390:34;19385:2;19370:18;;19363:62;-1:-1:-1;;;19456:2:9;19441:18;;19434:44;19510:3;19495:19;;19110:410::o;20003:125::-;20068:9;;;20089:10;;;20086:36;;;20102:18;;:::i;20133:401::-;20335:2;20317:21;;;20374:2;20354:18;;;20347:30;20413:34;20408:2;20393:18;;20386:62;-1:-1:-1;;;20479:2:9;20464:18;;20457:35;20524:3;20509:19;;20133:401::o;20539:328::-;20734:6;20727:14;20720:22;20709:9;20702:41;20779:2;20774;20763:9;20759:18;20752:30;20683:4;20799:62;20857:2;20846:9;20842:18;20834:6;20826;20799:62;:::i;20872:401::-;20967:6;20975;21028:2;21016:9;21007:7;21003:23;20999:32;20996:52;;;21044:1;21041;21034:12;20996:52;21076:9;21070:16;21095:31;21120:5;21095:31;:::i;:::-;21195:2;21180:18;;21174:25;21145:5;;-1:-1:-1;21208:33:9;21174:25;21208:33;:::i;:::-;21260:7;21250:17;;;20872:401;;;;;:::o;21706:524::-;21819:6;21827;21835;21843;21896:3;21884:9;21875:7;21871:23;21867:33;21864:53;;;21913:1;21910;21903:12;21864:53;21945:9;21939:16;21964:31;21989:5;21964:31;:::i;:::-;22059:2;22044:18;;22038:25;22108:2;22093:18;;22087:25;22014:5;;-1:-1:-1;22038:25:9;-1:-1:-1;22121:33:9;22087:25;22121:33;:::i;:::-;22220:2;22205:18;;;;22199:25;21706:524;;;;-1:-1:-1;;;21706:524:9:o;22235:874::-;22310:5;22358:4;22346:9;22341:3;22337:19;22333:30;22330:50;;;22376:1;22373;22366:12;22330:50;22409:2;22403:9;22451:4;22443:6;22439:17;-1:-1:-1;;;;;22543:6:9;22531:10;22528:22;22523:2;22511:10;22508:18;22505:46;22502:72;;;22554:18;;:::i;:::-;22594:10;22590:2;22583:22;22623:6;22614:15;;22658:9;22652:16;22638:30;;22691:2;22683:6;22680:14;22677:34;;;22707:1;22704;22697:12;22677:34;;22735:56;22787:3;22778:6;22767:9;22763:22;22735:56;:::i;:::-;22727:6;22720:72;;22837:2;22826:9;22822:18;22816:25;22850:33;22875:7;22850:33;:::i;:::-;22916:7;22911:2;22903:6;22899:15;22892:32;;22978:2;22967:9;22963:18;22957:25;22952:2;22944:6;22940:15;22933:50;23037:2;23026:9;23022:18;23016:25;23011:2;23003:6;22999:15;22992:50;23097:3;23086:9;23082:19;23076:26;23070:3;23062:6;23058:16;23051:52;;22235:874;;;;:::o;23114:379::-;23218:6;23271:2;23259:9;23250:7;23246:23;23242:32;23239:52;;;23287:1;23284;23277:12;23239:52;23320:9;23314:16;-1:-1:-1;;;;;23345:6:9;23342:30;23339:50;;;23385:1;23382;23375:12;23339:50;23408:79;23479:7;23470:6;23459:9;23455:22;23408:79;:::i;:::-;23398:89;23114:379;-1:-1:-1;;;;23114:379:9:o","linkReferences":{}},"methodIdentifiers":{"_validateCallInternal(address,address,bytes)":"2674111e","allowApprovalDestination(address,string)":"98b3cc39","allowAsset(address,string)":"86b6dbe5","allowCallSite(address,bytes4,string)":"5e4ccace","allowDelegationApprovalDestination(address,string)":"63cc17f2","allowReceiver(address,string)":"72e548a9","allowSender(address,string)":"fa2c59c8","allowWithdrawDestination(address,string)":"5ace1d92","allowedApprovalDestinations(address)":"eb0de042","allowedAssets(address)":"a4c1cccb","allowedCallSites(address,bytes4)":"a847cf4d","allowedDelegationApprovalDestinations(address)":"4b941268","allowedReceivers(address)":"3cf20025","allowedSenders(address)":"fadbcf48","allowedWithdrawDestinations(address)":"07ef00cf","anyAsset()":"87301608","callSiteCount()":"a9fc3d4f","getGovernanceAddress()":"73252494","getInternalVersion()":"fdedfa27","isAllowedApprovalDestination(address)":"1d49039c","isAllowedAsset(address)":"c537bed0","isAllowedCallSite(address,bytes4)":"713ebf3b","isAllowedDelegationApprovalDestination(address)":"2dc32a61","isAllowedReceiver(address)":"d075f9bb","isAllowedSender(address)":"be8c97b0","isAllowedWithdrawDestination(address)":"efb47bff","owner()":"8da5cb5b","removeApprovalDestination(address,string)":"04a3ba25","removeAsset(address,string)":"f901dc33","removeCallSite(address,bytes4,string)":"d7334c9d","removeDelegationApprovalDestination(address,string)":"f259a073","removeReceiver(address,string)":"2d12d788","removeSender(address,string)":"a67e1f54","removeWithdrawDestination(address,string)":"8c2fdf9e","renounceOwnership()":"715018a6","setAnyAssetAllowed(bool,string)":"c2e657ae","transferOwnership(address)":"f2fde38b","validate1deltaPath(bytes)":"a1b6b430","validateCall(address,address,bytes)":"6d5025f1","validateUniswapV3Path(bytes)":"1c123e77","validate_1deltaDeposit(bytes)":"c4cc9dba","validate_1deltaMulticall(bytes)":"07ac3562","validate_1deltaWithdraw(bytes)":"f76081e4","validate_aaveSupply(bytes)":"d4c0fe45","validate_aaveWithdraw(bytes)":"6a6d5cc8","validate_approve(bytes)":"4b956bd8","validate_approveDelegation(bytes)":"957dc6c0","validate_exactInput(bytes)":"ebe26816","validate_exactOutput(bytes)":"e98539c5","validate_flashSwapAllOut(bytes)":"425f49d0","validate_flashSwapExactInt(bytes)":"ca963c50","validate_flashSwapExactOut(bytes)":"6ad11353","validate_swapExactTokensForTokens(bytes)":"761bcd9c","validate_transfer(bytes)":"1710a4f2","validate_transferERC20AllIn(bytes)":"7ea44655","validate_transferERC20In(bytes)":"59b92be9","whitelistAaveV3(address,string)":"f20e85e0","whitelistOnedelta(address,address,string)":"f26749f3","whitelistToken(address,string)":"ee5462cc","whitelistTokenForDelegation(address,string)":"6d9a1423","whitelistUniswapV2Router(address,string)":"3ea35551","whitelistUniswapV3Router(address,string)":"34ec8d7e"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"AnyAssetSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"ApprovalDestinationApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"ApprovalDestinationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"AssetApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"AssetRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"CallSiteApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"CallSiteRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"DelegationApprovalDestinationApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"DelegationApprovalDestinationRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"ReceiverApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"ReceiverRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"SenderApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"SenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"WithdrawDestinationApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"WithdrawDestinationRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callDataWithSelector\",\"type\":\"bytes\"}],\"name\":\"_validateCallInternal\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowApprovalDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowCallSite\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowDelegationApprovalDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"allowWithdrawDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"allowedApprovalDestinations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"allowedAssets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"allowedCallSites\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"allowedDelegationApprovalDestinations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"allowedReceivers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"allowedSenders\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"allowedWithdrawDestinations\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"anyAsset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"callSiteCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGovernanceAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getInternalVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"isAllowedApprovalDestination\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isAllowedAsset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"isAllowedCallSite\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"isAllowedDelegationApprovalDestination\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"isAllowedReceiver\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"isAllowedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"isAllowedWithdrawDestination\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeApprovalDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeCallSite\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeDelegationApprovalDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"removeWithdrawDestination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"setAnyAssetAllowed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"}],\"name\":\"validate1deltaPath\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callDataWithSelector\",\"type\":\"bytes\"}],\"name\":\"validateCall\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"}],\"name\":\"validateUniswapV3Path\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_1deltaDeposit\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_1deltaMulticall\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_1deltaWithdraw\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_aaveSupply\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_aaveWithdraw\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_approve\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_approveDelegation\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_exactInput\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_exactOutput\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_flashSwapAllOut\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_flashSwapExactInt\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_flashSwapExactOut\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_swapExactTokensForTokens\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_transfer\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_transferERC20AllIn\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"validate_transferERC20In\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"lendingPool\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistAaveV3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"brokerProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lendingPool\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistOnedelta\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistTokenForDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistUniswapV2Router\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"whitelistUniswapV3Router\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getGovernanceAddress()\":{\"notice\":\"Get the address of the proto DAO\"},\"getInternalVersion()\":{\"notice\":\"Track version during internal development. We bump up when new whitelistings added.\"},\"isAllowedAsset(address)\":{\"notice\":\"Are we allowed to trade/own an ERC-20.\"},\"validate1deltaPath(bytes)\":{\"notice\":\"Our implementation of 1delta path decoding and validation using similar approach as Uniswap v3 `Path.sol` Read more: - How 1delta encodes the path: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/test-ts/1delta/shared/aggregatorPath.ts#L5-L32 - How 1delta decodes the path: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/contracts/1delta/modules/aave/MarginTrading.sol#L54-L60\"},\"validateCall(address,address,bytes)\":{\"notice\":\"Revert if the smart contract call is not allowed\"}},\"notice\":\"Prototype guard implementation. - Hardcoded actions for Uniswap v2, v3, 1delta\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/GuardV0.sol\":\"GuardV0\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@gnosis.pm/=lib/\",\":@openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c\",\"dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h\"]},\"src/GuardV0.sol\":{\"keccak256\":\"0x90d2bfbede62f7e44ee960e4ccce6c558c0f745e2969bfcab8e04c11e1c1bd1e\",\"urls\":[\"bzz-raw://7b1ce9e9aea413f26dade35a093ef3324f12c72067a93d062d5959aaa85bc87d\",\"dweb:/ipfs/QmVUnaMWkP2mNHBoxTSt5x1w75vsGzT2knz1XskgZACQyf\"]},\"src/GuardV0Base.sol\":{\"keccak256\":\"0xd1d74d7ce12aeb499be7f8b827c9c1ee17a7a8e646788db81f22dbb9d43f94f8\",\"urls\":[\"bzz-raw://b262a2e05ccac31379c5494936db83a6c6a82357966c1210170fe693c0c82786\",\"dweb:/ipfs/QmRAn9TqMjzrre7gPe9WhLneHEpPcQgu4CAjqG79B7XX1t\"]},\"src/IGuard.sol\":{\"keccak256\":\"0xcb7ae06b3f3406e29c4012a1ba0ff81a8d30e6e760c15241e9182069c34db1c4\",\"urls\":[\"bzz-raw://2ef7e5cc3383a1439396e6c9ff0821b60e461c502d90d83b81b104ad88362f6a\",\"dweb:/ipfs/QmXQWP9shBmdD219btryxgfhY3RExjASgofb41SpAGdWhW\"]},\"src/lib/BytesLib.sol\":{\"keccak256\":\"0x7446c0f0de6eb147f0f3e40b3a72e39d02a951e8c453437dcc6b3c06007bc62a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://1b2b64668ea4287dfe75e1029fef387b0e3ae191b784d1bc5be01edac6d1d5c5\",\"dweb:/ipfs/Qma3zAe3Svez1kdGc5F356m9tRjCDg8F8tAocbd5Qk13PE\"]},\"src/lib/Path.sol\":{\"keccak256\":\"0xb22c562b5175d50dbcc2224325666090d985f052abdcfe275c8dfc884e34de61\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://27aeff27314476ab3c77313ae1f0c5b2442b86315f5ce741cb2150a87c3cbad3\",\"dweb:/ipfs/QmQNno2g1CJvjnH6ych4LuHr1UZDEZPACgYG4XvivxGrqV\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.23+commit.f704f362"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bool","name":"value","type":"bool","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"AnyAssetSet","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"ApprovalDestinationApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"ApprovalDestinationRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"AssetApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"AssetRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"target","type":"address","indexed":false},{"internalType":"bytes4","name":"selector","type":"bytes4","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"CallSiteApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"target","type":"address","indexed":false},{"internalType":"bytes4","name":"selector","type":"bytes4","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"CallSiteRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"DelegationApprovalDestinationApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"DelegationApprovalDestinationRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"ReceiverApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"ReceiverRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"SenderApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"SenderRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"WithdrawDestinationApproved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false},{"internalType":"string","name":"notes","type":"string","indexed":false}],"type":"event","name":"WithdrawDestinationRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callDataWithSelector","type":"bytes"}],"stateMutability":"view","type":"function","name":"_validateCallInternal"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowApprovalDestination"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowAsset"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowCallSite"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowDelegationApprovalDestination"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowSender"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"allowWithdrawDestination"},{"inputs":[{"internalType":"address","name":"destination","type":"address"}],"stateMutability":"view","type":"function","name":"allowedApprovalDestinations","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"allowedAssets","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"allowedCallSites","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"}],"stateMutability":"view","type":"function","name":"allowedDelegationApprovalDestinations","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"allowedReceivers","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"stateMutability":"view","type":"function","name":"allowedSenders","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"}],"stateMutability":"view","type":"function","name":"allowedWithdrawDestinations","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"anyAsset","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"callSiteCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getGovernanceAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"getInternalVersion","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedApprovalDestination","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedAsset","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"isAllowedCallSite","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedDelegationApprovalDestination","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedReceiver","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedSender","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function","name":"isAllowedWithdrawDestination","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeApprovalDestination"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeAsset"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeCallSite"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeDelegationApprovalDestination"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeSender"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeWithdrawDestination"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"setAnyAssetAllowed"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"bytes","name":"path","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate1deltaPath"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callDataWithSelector","type":"bytes"}],"stateMutability":"view","type":"function","name":"validateCall"},{"inputs":[{"internalType":"bytes","name":"path","type":"bytes"}],"stateMutability":"view","type":"function","name":"validateUniswapV3Path"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_1deltaDeposit"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_1deltaMulticall"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_1deltaWithdraw"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_aaveSupply"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_aaveWithdraw"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_approve"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_approveDelegation"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_exactInput"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_exactOutput"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_flashSwapAllOut"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_flashSwapExactInt"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_flashSwapExactOut"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_swapExactTokensForTokens"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_transfer"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_transferERC20AllIn"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"view","type":"function","name":"validate_transferERC20In"},{"inputs":[{"internalType":"address","name":"lendingPool","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistAaveV3"},{"inputs":[{"internalType":"address","name":"brokerProxy","type":"address"},{"internalType":"address","name":"lendingPool","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistOnedelta"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistToken"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistTokenForDelegation"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistUniswapV2Router"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"whitelistUniswapV3Router"}],"devdoc":{"kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{"getGovernanceAddress()":{"notice":"Get the address of the proto DAO"},"getInternalVersion()":{"notice":"Track version during internal development. We bump up when new whitelistings added."},"isAllowedAsset(address)":{"notice":"Are we allowed to trade/own an ERC-20."},"validate1deltaPath(bytes)":{"notice":"Our implementation of 1delta path decoding and validation using similar approach as Uniswap v3 `Path.sol` Read more: - How 1delta encodes the path: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/test-ts/1delta/shared/aggregatorPath.ts#L5-L32 - How 1delta decodes the path: https://github.com/1delta-DAO/contracts-delegation/blob/4f27e1593c564c419ff042cdd932ed52d04216bf/contracts/1delta/modules/aave/MarginTrading.sol#L54-L60"},"validateCall(address,address,bytes)":{"notice":"Revert if the smart contract call is not allowed"}},"version":1}},"settings":{"remappings":["@gnosis.pm/=lib/","@openzeppelin/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/GuardV0.sol":"GuardV0"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218","urls":["bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32","dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439","urls":["bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c","dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h"],"license":"MIT"},"src/GuardV0.sol":{"keccak256":"0x90d2bfbede62f7e44ee960e4ccce6c558c0f745e2969bfcab8e04c11e1c1bd1e","urls":["bzz-raw://7b1ce9e9aea413f26dade35a093ef3324f12c72067a93d062d5959aaa85bc87d","dweb:/ipfs/QmVUnaMWkP2mNHBoxTSt5x1w75vsGzT2knz1XskgZACQyf"],"license":null},"src/GuardV0Base.sol":{"keccak256":"0xd1d74d7ce12aeb499be7f8b827c9c1ee17a7a8e646788db81f22dbb9d43f94f8","urls":["bzz-raw://b262a2e05ccac31379c5494936db83a6c6a82357966c1210170fe693c0c82786","dweb:/ipfs/QmRAn9TqMjzrre7gPe9WhLneHEpPcQgu4CAjqG79B7XX1t"],"license":null},"src/IGuard.sol":{"keccak256":"0xcb7ae06b3f3406e29c4012a1ba0ff81a8d30e6e760c15241e9182069c34db1c4","urls":["bzz-raw://2ef7e5cc3383a1439396e6c9ff0821b60e461c502d90d83b81b104ad88362f6a","dweb:/ipfs/QmXQWP9shBmdD219btryxgfhY3RExjASgofb41SpAGdWhW"],"license":null},"src/lib/BytesLib.sol":{"keccak256":"0x7446c0f0de6eb147f0f3e40b3a72e39d02a951e8c453437dcc6b3c06007bc62a","urls":["bzz-raw://1b2b64668ea4287dfe75e1029fef387b0e3ae191b784d1bc5be01edac6d1d5c5","dweb:/ipfs/Qma3zAe3Svez1kdGc5F356m9tRjCDg8F8tAocbd5Qk13PE"],"license":"Unlicense"},"src/lib/Path.sol":{"keccak256":"0xb22c562b5175d50dbcc2224325666090d985f052abdcfe275c8dfc884e34de61","urls":["bzz-raw://27aeff27314476ab3c77313ae1f0c5b2442b86315f5ce741cb2150a87c3cbad3","dweb:/ipfs/QmQNno2g1CJvjnH6ych4LuHr1UZDEZPACgYG4XvivxGrqV"],"license":"GPL-2.0-or-later"}},"version":1},"id":3} \ No newline at end of file diff --git a/eth_defi/abi/guard/SimpleVaultV0.json b/eth_defi/abi/guard/SimpleVaultV0.json index 8d29ad65..f1aa2d7c 100644 --- a/eth_defi/abi/guard/SimpleVaultV0.json +++ b/eth_defi/abi/guard/SimpleVaultV0.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"_assetManager","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"assetManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getWithdrawAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"guard","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract GuardV0"}],"stateMutability":"view"},{"type":"function","name":"initialiseOwnership","inputs":[{"name":"_owner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isDisabled","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"performCall","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"resetGuard","inputs":[{"name":"_guard","type":"address","internalType":"contract GuardV0"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateAssetManager","inputs":[{"name":"_assetManager","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x608060405234801561001057600080fd5b50604051613d46380380613d4683398101604081905261002f91610177565b6100383361011a565b6040516100449061016a565b604051809103906000f080158015610060573d6000803e3d6000fd5b50600380546001600160a01b039283166001600160a01b0319918216811790925560018054938516939091168317905560408051631f458b3960e31b815260048101939093526024830152601960448301527f496e697469616c206173736574206d616e61676572207365740000000000000060648301529063fa2c59c890608401600060405180830381600087803b1580156100fc57600080fd5b505af1158015610110573d6000803e3d6000fd5b50505050506101a7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61334180610a0583390190565b60006020828403121561018957600080fd5b81516001600160a01b03811681146101a057600080fd5b9392505050565b61084f806101b66000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80638da5cb5b116100715780638da5cb5b1461014957806394217ad11461015a578063d13573361461016d578063d2f73e3d14610180578063e8e7f80014610149578063f2fde38b1461019357600080fd5b80631581b600146100b957806337cfecf2146100e95780634a0e159d146100fe5780636c57f5a914610111578063715018a61461012e5780637ceab3b114610136575b600080fd5b6002546100cc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100fc6100f73660046106b9565b6101a6565b005b6100fc61010c366004610726565b61034e565b6001546040516001600160a01b03909116151581526020016100e0565b6100fc610461565b6003546100cc906001600160a01b031681565b6000546001600160a01b03166100cc565b6001546100cc906001600160a01b031681565b6100fc61017b3660046106b9565b610475565b6100fc61018e366004610726565b61049f565b6100fc6101a13660046106b9565b61057f565b6101ae6105fa565b60035460408051632d670ec960e11b81526001600160a01b0384811660048301526024820192909252601a60448201527f496e697469616c206f776e65722063616e2077697468647261770000000000006064820152911690635ace1d9290608401600060405180830381600087803b15801561022a57600080fd5b505af115801561023e573d6000803e3d6000fd5b5050600354604080516372e548a960e01b81523060048201526024810191909152602560448201527f5661756c742063616e207265636569766520746f6b656e732066726f6d206120606482015264747261646560d81b60848201526001600160a01b0390911692506372e548a9915060a401600060405180830381600087803b1580156102cb57600080fd5b505af11580156102df573d6000803e3d6000fd5b505060035460405163f2fde38b60e01b81526001600160a01b038581166004830152909116925063f2fde38b9150602401600060405180830381600087803b15801561032a57600080fd5b505af115801561033e573d6000803e3d6000fd5b5050505061034b8161057f565b50565b6103566105fa565b6001546001600160a01b0316156103d25760035460015460405163299f87d560e21b81526001600160a01b039283169263a67e1f549261039f92911690869086906004016107a4565b600060405180830381600087803b1580156103b957600080fd5b505af11580156103cd573d6000803e3d6000fd5b505050505b600180546001600160a01b0319166001600160a01b0385169081179091551561045c57600354604051631f458b3960e31b81526001600160a01b039091169063fa2c59c890610429908690869086906004016107a4565b600060405180830381600087803b15801561044357600080fd5b505af1158015610457573d6000803e3d6000fd5b505050505b505050565b6104696105fa565b6104736000610654565b565b61047d6105fa565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600354604051636d5025f160e01b81526001600160a01b0390911690636d5025f1906104d59033908790879087906004016107d2565b60006040518083038186803b1580156104ed57600080fd5b505afa158015610501573d6000803e3d6000fd5b50505050600080846001600160a01b03168484604051610522929190610809565b6000604051808303816000865af19150503d806000811461055f576040519150601f19603f3d011682016040523d82523d6000602084013e610564565b606091505b509150915081610578578051602082018181fd5b5050505050565b6105876105fa565b6001600160a01b0381166105f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61034b81610654565b6000546001600160a01b031633146104735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105e8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461034b57600080fd5b6000602082840312156106cb57600080fd5b81356106d6816106a4565b9392505050565b60008083601f8401126106ef57600080fd5b50813567ffffffffffffffff81111561070757600080fd5b60208301915083602082850101111561071f57600080fd5b9250929050565b60008060006040848603121561073b57600080fd5b8335610746816106a4565b9250602084013567ffffffffffffffff81111561076257600080fd5b61076e868287016106dd565b9497909650939450505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906107c9908301848661077b565b95945050505050565b6001600160a01b038581168252841660208201526060604082018190526000906107ff908301848661077b565b9695505050505050565b818382376000910190815291905056fea26469706673582212206079472c105f7c72fe2df74f6f36084929e82eac7e09a62cafe38230686fb6b264736f6c63430008170033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6132c2806200007f6000396000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c80638c2fdf9e116101e9578063d7334c9d1161010f578063f259a073116100ad578063f901dc331161007c578063f901dc3314610890578063fa2c59c8146108a3578063fadbcf48146108b6578063fdedfa27146108d957600080fd5b8063f259a0731461039e578063f26749f314610857578063f2fde38b1461086a578063f76081e41461087d57600080fd5b8063ebe26816116100e9578063ebe26816146107ed578063ee5462cc14610800578063efb47bff14610813578063f20e85e01461084457600080fd5b8063d7334c9d146107a4578063e98539c5146107b7578063eb0de042146107ca57600080fd5b8063a847cf4d11610187578063c537bed011610156578063c537bed01461076b578063ca963c501461058a578063d075f9bb1461077e578063d4c0fe451461079157600080fd5b8063a847cf4d146106e2578063a9fc3d4f14610710578063be8c97b014610727578063c4cc9dba1461075857600080fd5b806398b3cc39116101c357806398b3cc3914610686578063a1b6b43014610699578063a4c1cccb146106ac578063a67e1f54146106cf57600080fd5b80638c2fdf9e1461064f5780638da5cb5b14610662578063957dc6c01461067357600080fd5b806359b92be9116102ce5780636d9a14231161026c578063732524941161023b57806373252494146105f1578063761bcd9c146106165780637ea446551461062957806386b6dbe51461063c57600080fd5b80636d9a1423146105b0578063713ebf3b146105c3578063715018a6146105d657806372e548a9146105de57600080fd5b806363cc17f2116102a857806363cc17f2146105645780636a6d5cc8146105775780636ad113531461058a5780636d5025f11461059d57600080fd5b806359b92be91461052b5780635ace1d921461053e5780635e4ccace1461055157600080fd5b80632dc32a611161033b5780633ea35551116103155780633ea35551146104cf578063425f49d0146104e25780634b941268146104f55780634b956bd81461051857600080fd5b80632dc32a611461046857806334ec8d7e146104995780633cf20025146104ac57600080fd5b80631710a4f2116103775780631710a4f2146103fe5780631c123e77146104115780631d49039c146104245780632d12d7881461045557600080fd5b806304a3ba251461039e57806307ac3562146103b357806307ef00cf146103c6575b600080fd5b6103b16103ac3660046127c0565b6108e8565b005b6103b16103c1366004612881565b610951565b6103e96103d4366004612900565b60066020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103b161040c366004612881565b610c92565b6103b161041f366004612881565b610d48565b6103e9610432366004612900565b6001600160a01b031660009081526007602052604090205460ff16151560011490565b6103b16104633660046127c0565b610dc2565b6103e9610476366004612900565b6001600160a01b031660009081526008602052604090205460ff16151560011490565b6103b16104a73660046127c0565b610e1e565b6103e96104ba366004612900565b60056020526000908152604090205460ff1681565b6103b16104dd3660046127c0565b610e86565b6103b16104f0366004612881565b610eb1565b6103e9610503366004612900565b60086020526000908152604090205460ff1681565b6103b1610526366004612881565b610ed3565b6103b1610539366004612881565b610f78565b6103b161054c3660046127c0565b610ffa565b6103b161055f366004612941565b611059565b6103b16105723660046127c0565b6110ef565b6103b1610585366004612881565b61114e565b6103b1610598366004612881565b6111f6565b6103b16105ab3660046129a3565b611219565b6103b16105be3660046127c0565b611798565b6103e96105d13660046129d4565b6117ce565b6103b1611806565b6103b16105ec3660046127c0565b61181a565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016103f5565b6103b1610624366004612881565b611879565b6103b1610637366004612881565b611984565b6103b161064a3660046127c0565b6119c1565b6103b161065d3660046127c0565b611a20565b6000546001600160a01b03166105fe565b6103b1610681366004612881565b611a7c565b6103b16106943660046127c0565b611b3c565b6103b16106a7366004612881565b611b9b565b6103e96106ba366004612900565b60036020526000908152604090205460ff1681565b6103b16106dd3660046127c0565b611ce3565b6103e96106f03660046129d4565b600160209081526000928352604080842090915290825290205460ff1681565b61071960025481565b6040519081526020016103f5565b6103e9610735366004612900565b6001600160a01b031660009081526004602052604090205460ff16151560011490565b6103b1610766366004612881565b611d3f565b6103e9610779366004612900565b611dfa565b6103e961078c366004612900565b611e1d565b6103b161079f366004612881565b611e40565b6103b16107b2366004612941565b611e80565b6103b16107c5366004612881565b611ef3565b6103e96107d8366004612900565b60076020526000908152604090205460ff1681565b6103b16107fb366004612881565b611f95565b6103b161080e3660046127c0565b61202c565b6103e9610821366004612900565b6001600160a01b031660009081526006602052604090205460ff16151560011490565b6103b16108523660046127c0565b6120e1565b6103b16108653660046129a3565b612137565b6103b1610878366004612900565b6121ac565b6103b161088b366004612881565b612225565b6103b161089e3660046127c0565b6122a1565b6103b16108b13660046127c0565b6122fd565b6103e96108c4366004612900565b60046020526000908152604090205460ff1681565b604051600181526020016103f5565b6108f061235c565b6001600160a01b03831660009081526007602052604090819020805460ff19169055517fb71be9befd3ac90c1c9981d3b1161b3c2c6dcd741f13b34061aa251226a802df9061094490859085908590612a32565b60405180910390a1505050565b6000818060200190518101906109679190612aec565b905060005b8151811015610c8d57600082828151811061098957610989612b9c565b6020026020010151905060006109ac60006004846123b69092919063ffffffff16565b6109b590612bb2565b905060006109d360048085516109cb9190612bff565b8591906123b6565b6040805180820190915260208082527f7472616e736665724552433230496e28616464726573732c75696e74323536299101529050631dac092b60e11b6001600160e01b0319831601610a2e57610a2981610f78565b610c82565b60408051808201909152601b81527f7472616e736665724552433230416c6c496e2861646472657373290000000000602090910152635cf59cb760e11b6001600160e01b0319831601610a8457610a2981611984565b60408051808201909152601881527f6465706f73697428616464726573732c6164647265737329000000000000000060209091015262d3ec1f60e31b6001600160e01b0319831601610ad957610a2981611d3f565b60408051808201909152601981527f776974686472617728616464726573732c6164647265737329000000000000006020909101526306bf1c7b60e01b6001600160e01b0319831601610b2f57610a2981612225565b610b5660405180606001604052806027815260200161323260279139805160209091012090565b6001600160e01b031916826001600160e01b03191603610b7957610a29816111f6565b610ba060405180606001604052806028815260200161320a60289139805160209091012090565b6001600160e01b031916826001600160e01b03191603610bc357610a29816111f6565b60408051808201909152601e81527f666c61736853776170416c6c4f75742875696e743235362c627974657329000060209091015263d2b3d16560e01b6001600160e01b0319831601610c1957610a2981610eb1565b60405162461bcd60e51b815260206004820152603360248201527f76616c69646174655f3164656c74614d756c746963616c6c3a20556e6b6e6f776044820152723710333ab731ba34b7b71039b2b632b1ba37b960691b60648201526084015b60405180910390fd5b50505060010161096c565b505050565b600081806020019051810190610ca89190612c1d565b509050610cd2816001600160a01b031660009081526006602052604090205460ff16151560011490565b610d445760405162461bcd60e51b815260206004820152603c60248201527f76616c69646174655f7472616e736665723a205265636569766572206164647260448201527f657373206e6f742077686974656c6973746564206279204775617264000000006064820152608401610c79565b5050565b6000805b610d558361250d565b5092509050610d6382611dfa565b610d7f5760405162461bcd60e51b8152600401610c7990612c4b565b610d8881611dfa565b610da45760405162461bcd60e51b8152600401610c7990612c4b565b610dad83612549565b15610c8d57610dbb83612583565b9250610d4c565b610dca61235c565b6001600160a01b03831660009081526005602052604090819020805460ff19169055517f4e13b11ab98e672bd78295ef9cebe764dc617f95decf47d842c25b83abc0c7249061094490859085908590612a32565b610e5083610e496040518060600160405280603381526020016131d760339139805160209091012090565b8484611059565b610e7b83610e4960405180606001604052806034815260200161325960349139805160209091012090565b610c8d838383611b3c565b610e7b83610e4960405180608001604052806043815260200161312b60439139805160209091012090565b600081806020019051810190610ec79190612c93565b915050610d4481611b9b565b600081806020019051810190610ee99190612c1d565b509050610f13816001600160a01b031660009081526007602052604090205460ff16151560011490565b610d445760405162461bcd60e51b815260206004820152603060248201527f76616c69646174655f617070726f76653a20417070726f76652061646472657360448201526f0e640c8decae640dcdee840dac2e8c6d60831b6064820152608401610c79565b600081806020019051810190610f8e9190612c1d565b509050610f9a81611dfa565b610d445760405162461bcd60e51b815260206004820152602b60248201527f76616c69646174655f7472616e736665724552433230496e3a20546f6b656e2060448201526a1b9bdd08185b1b1bddd95960aa1b6064820152608401610c79565b61100261235c565b6001600160a01b03831660009081526006602052604090819020805460ff19166001179055517f3562181221a42a19ddd03a82dfe06acab1905ceb65cdaf7d86a1d9fec66435529061094490859085908590612a32565b61106161235c565b6001600160a01b03841660009081526001602081815260408084206001600160e01b0319881685529091528220805460ff1916909117905560028054916110a783612cd9565b91905055507fef729aaa41b9fd994f9ff7c1960df214a84f722002e6cfbea31799cd0873a3ef848484846040516110e19493929190612cf2565b60405180910390a150505050565b6110f761235c565b6001600160a01b03831660009081526008602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f35899061094490859085908590612a32565b600080828060200190518101906111659190612d31565b925050915061117382611dfa565b61118f5760405162461bcd60e51b8152600401610c7990612d74565b61119881611e1d565b610c8d5760405162461bcd60e51b815260206004820152602960248201527f52656365697665722061646472657373206e6f742077686974656c697374656460448201526808189e4811dd585c9960ba1b6064820152608401610c79565b60008180602001905181019061120c9190612d9f565b92505050610d4481611b9b565b6000546001600160a01b0385811691161461179257611255846001600160a01b031660009081526004602052604090205460ff16151560011490565b6112a15760405162461bcd60e51b815260206004820181905260248201527f76616c696461746543616c6c3a2053656e646572206e6f7420616c6c6f7765646044820152606401610c79565b60006112b06004828486612dee565b6112b991612e18565b90503660006112cb8460048188612dee565b915091506112d986846117ce565b6113315760405162461bcd60e51b815260206004820152602360248201527f76616c696461746543616c6c3a2043616c6c2073697465206e6f7420616c6c6f6044820152621dd95960ea1b6064820152608401610c79565b61135860405180608001604052806043815260200161312b60439139805160209091012090565b6001600160e01b031916836001600160e01b031916036113b6576113b182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061187992505050565b61178e565b6113dd6040518060600160405280603381526020016131d760339139805160209091012090565b6001600160e01b031916836001600160e01b03191603611436576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f9592505050565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b602090910152630a6d35e560e31b6001600160e01b03198416016114b7576113b182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061095192505050565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b6020909101526356fa634560e01b6001600160e01b031984160161153f576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c9292505050565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b60209091015263f6a1584d60e01b6001600160e01b03198416016115c6576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ed392505050565b6115ed6040518060600160405280602281526020016131b560229139805160209091012090565b6001600160e01b031916836001600160e01b03191603611646576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7c92505050565b61166d60405180606001604052806026815260200161316e60269139805160209091012090565b6001600160e01b031916836001600160e01b031916036116c6576113b182828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e4092505050565b6116ed60405180606001604052806021815260200161319460219139805160209091012090565b6001600160e01b031916836001600160e01b03191603611746576113b182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061114e92505050565b60405162461bcd60e51b815260206004820152601960248201527f556e6b6e6f776e2066756e6374696f6e2073656c6563746f72000000000000006044820152606401610c79565b5050505b50505050565b6117c383610e496040518060600160405280602281526020016131b560229139805160209091012090565b610c8d8383836119c1565b6001600160a01b03821660009081526001602090815260408083206001600160e01b03198516845290915290205460ff165b92915050565b61180e61235c565b61181860006125b4565b565b61182261235c565b6001600160a01b03831660009081526005602052604090819020805460ff19166001179055517f62dd88c5ecfa60713a657640ebec4de26fc1aefa4afdb24e6d15a124fce727799061094490859085908590612a32565b600080828060200190518101906118909190612e48565b509350935050506118a081611e1d565b6119275760405162461bcd60e51b815260206004820152604c60248201527f76616c69646174655f737761704578616374546f6b656e73466f72546f6b656e60448201527f733a2052656365697665722061646472657373206e6f742077686974656c697360648201526b1d195908189e4811dd585c9960a21b608482015260a401610c79565b6000805b835181101561197d5783818151811061194657611946612b9c565b6020026020010151915061195982611dfa565b6119755760405162461bcd60e51b8152600401610c7990612d74565b60010161192b565b5050505050565b60008180602001905181019061199a9190612f11565b90506119a581611dfa565b610d445760405162461bcd60e51b8152600401610c7990612f2e565b6119c961235c565b6001600160a01b03831660009081526003602052604090819020805460ff19166001179055517fad90e2570fc4fe9f7437be3188d5c791c6662892d31731992aa88f5c876219839061094490859085908590612a32565b611a2861235c565b6001600160a01b03831660009081526006602052604090819020805460ff19169055517f1212f8ddb39de8e1a339460c95752d61100723efeaa34ccd94bca94393f409389061094490859085908590612a32565b600081806020019051810190611a929190612c1d565b509050611abc816001600160a01b031660009081526008602052604090205460ff16151560011490565b610d445760405162461bcd60e51b815260206004820152604560248201527f76616c69646174655f617070726f766544656c65676174696f6e3a204170707260448201527f6f76652064656c65676174696f6e206164647265737320646f6573206e6f74206064820152640dac2e8c6d60db1b608482015260a401610c79565b611b4461235c565b6001600160a01b03831660009081526007602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f35899061094490859085908590612a32565b6000805b611baa836000612604565b9150611bd9600180611bbe60036014612f7c565b611bc89190612f7c565b611bd29190612f7c565b8490612604565b9050611be482611dfa565b611c005760405162461bcd60e51b8152600401610c7990612f8f565b611c0981611dfa565b611c255760405162461bcd60e51b8152600401610c7990612f8f565b600180611c3460036014612f7c565b611c3e9190612f7c565b611c489190612f7c565b6014600180611c58600384612f7c565b611c629190612f7c565b611c6c9190612f7c565b611c769190612f7c565b611c809190612f7c565b835110610c8d57611cdc600180611c9960036014612f7c565b611ca39190612f7c565b611cad9190612f7c565b600180611cbc60036014612f7c565b611cc69190612f7c565b611cd09190612f7c565b85516109cb9190612bff565b9250611b9f565b611ceb61235c565b6001600160a01b03831660009081526004602052604090819020805460ff19169055517f3097928509c53a2dab9500431201d82b0d756e8f890fd01f4ae6b33b45687ea49061094490859085908590612a32565b60008082806020019051810190611d569190612fd4565b91509150611d6382611dfa565b611d7f5760405162461bcd60e51b8152600401610c7990612f2e565b611d8881611e1d565b610c8d5760405162461bcd60e51b815260206004820152603b60248201527f76616c69646174655f6465706f7369743a20526563656976657220616464726560448201527f7373206e6f742077686974656c697374656420627920477561726400000000006064820152608401610c79565b6001600160a01b031660009081526003602052604090205460ff16151560011490565b6001600160a01b031660009081526005602052604090205460ff16151560011490565b600081806020019051810190611e56919061300e565b5050509050611e6481611dfa565b610d445760405162461bcd60e51b8152600401610c7990612d74565b611e8861235c565b6001600160a01b03841660009081526001602090815260408083206001600160e01b03198716845290915290819020805460ff19169055517f37ea10f2d08f5a9803dfcd5abf3cfc7b0d6fcdf5fcbc36be9ea5a0b53d9a4d9b906110e1908690869086908690612cf2565b600081806020019051810190611f0991906130ee565b9050611f188160200151611e1d565b611f8a5760405162461bcd60e51b815260206004820152603f60248201527f76616c69646174655f65786163744f75747075743a205265636569766572206160448201527f646472657373206e6f742077686974656c6973746564206279204775617264006064820152608401610c79565b8051610d4490610d48565b600081806020019051810190611fab91906130ee565b9050611fba8160200151611e1d565b611f8a5760405162461bcd60e51b815260206004820152603e60248201527f76616c69646174655f6578616374496e7075743a20526563656976657220616460448201527f6472657373206e6f742077686974656c697374656420627920477561726400006064820152608401610c79565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b602090910152612087837fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b610e49565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b6020909101526117c3837f095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba610e49565b61210c83610e4960405180606001604052806026815260200161316e60269139805160209091012090565b610e7b83610e4960405180606001604052806021815260200161319460219139805160209091012090565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b60209091015261218b847fac9650d882acfa253cba1ed543b9ff47351da99c3bd00a89625e5cdb2099009c610e49565b612196848383611b3c565b6121a1838383611b3c565b6117928483836110ef565b6121b461235c565b6001600160a01b0381166122195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c79565b612222816125b4565b50565b6000808280602001905181019061223c9190612fd4565b9150915061224982611dfa565b611d7f5760405162461bcd60e51b8152602060048201526024808201527f76616c69646174655f77697468647261773a20546f6b656e206e6f7420616c6c6044820152631bddd95960e21b6064820152608401610c79565b6122a961235c565b6001600160a01b03831660009081526003602052604090819020805460ff19169055517f9ca3f065622f5f03f32b7157677a0e420c3a36ab45fd49f256ffebce3e3105879061094490859085908590612a32565b61230561235c565b6001600160a01b03831660009081526004602052604090819020805460ff19166001179055517fa8f9caaf4861720900294428e4ff34d37070c37afd26d96e6e4da75326d2c3ad9061094490859085908590612a32565b6000546001600160a01b031633146118185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c79565b6060816123c481601f612f7c565b10156124035760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610c79565b8261240e8382612f7c565b101561244d5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610c79565b6124578284612f7c565b8451101561249b5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610c79565b6060821580156124ba5760405191506000825260208201604052612504565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156124f35780518352602092830192016124db565b5050858452601f01601f1916604052505b50949350505050565b6000808061251b8482612604565b92506125288460146126b8565b905061254061253960036014612f7c565b8590612604565b91509193909250565b600061255760036014612f7c565b6014612564600382612f7c565b61256e9190612f7c565b6125789190612f7c565b825110159050919050565b606061180061259460036014612f7c565b6125a060036014612f7c565b84516125ac9190612bff565b8491906123b6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081612612816014612f7c565b10156126555760405162461bcd60e51b8152602060048201526012602482015271746f416464726573735f6f766572666c6f7760701b6044820152606401610c79565b612660826014612f7c565b835110156126a85760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610c79565b500160200151600160601b900490565b6000816126c6816003612f7c565b10156127085760405162461bcd60e51b8152602060048201526011602482015270746f55696e7432345f6f766572666c6f7760781b6044820152606401610c79565b612713826003612f7c565b8351101561275a5760405162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b6044820152606401610c79565b50016003015190565b6001600160a01b038116811461222257600080fd5b60008083601f84011261278a57600080fd5b5081356001600160401b038111156127a157600080fd5b6020830191508360208285010111156127b957600080fd5b9250929050565b6000806000604084860312156127d557600080fd5b83356127e081612763565b925060208401356001600160401b038111156127fb57600080fd5b61280786828701612778565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561285257612852612814565b604052919050565b60006001600160401b0382111561287357612873612814565b50601f01601f191660200190565b60006020828403121561289357600080fd5b81356001600160401b038111156128a957600080fd5b8201601f810184136128ba57600080fd5b80356128cd6128c88261285a565b61282a565b8181528560208385010111156128e257600080fd5b81602084016020830137600091810160200191909152949350505050565b60006020828403121561291257600080fd5b813561291d81612763565b9392505050565b80356001600160e01b03198116811461293c57600080fd5b919050565b6000806000806060858703121561295757600080fd5b843561296281612763565b935061297060208601612924565b925060408501356001600160401b0381111561298b57600080fd5b61299787828801612778565b95989497509550505050565b600080600080606085870312156129b957600080fd5b84356129c481612763565b9350602085013561297081612763565b600080604083850312156129e757600080fd5b82356129f281612763565b9150612a0060208401612924565b90509250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612a579083018486612a09565b95945050505050565b60006001600160401b03821115612a7957612a79612814565b5060051b60200190565b600082601f830112612a9457600080fd5b8151612aa26128c88261285a565b8181526020856020848701011115612ab957600080fd5b60005b83811015612ad7578581018201518382018301528101612abc565b50506000918101602001919091529392505050565b60006020808385031215612aff57600080fd5b82516001600160401b0380821115612b1657600080fd5b818501915085601f830112612b2a57600080fd5b8151612b386128c882612a60565b81815260059190911b83018401908481019088831115612b5757600080fd5b8585015b83811015612b8f57805185811115612b735760008081fd5b612b818b89838a0101612a83565b845250918601918601612b5b565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b805160208201516001600160e01b03198082169291906004831015612be15780818460040360031b1b83161693505b505050919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561180057611800612be9565b805161293c81612763565b60008060408385031215612c3057600080fd5b8251612c3b81612763565b6020939093015192949293505050565b60208082526028908201527f76616c6964617465556e69737761705633506174683a20546f6b656e206e6f7460408201526708185b1b1bddd95960c21b606082015260800190565b60008060408385031215612ca657600080fd5b8251915060208301516001600160401b03811115612cc357600080fd5b612ccf85828601612a83565b9150509250929050565b600060018201612ceb57612ceb612be9565b5060010190565b6001600160a01b03851681526001600160e01b031984166020820152606060408201819052600090612d279083018486612a09565b9695505050505050565b600080600060608486031215612d4657600080fd5b8351612d5181612763565b602085015160408601519194509250612d6981612763565b809150509250925092565b602080825260119082015270151bdad95b881b9bdd08185b1b1bddd959607a1b604082015260600190565b600080600060608486031215612db457600080fd5b835192506020840151915060408401516001600160401b03811115612dd857600080fd5b612de486828701612a83565b9150509250925092565b60008085851115612dfe57600080fd5b83861115612e0b57600080fd5b5050820193919092039150565b6001600160e01b03198135818116916004851015612e405780818660040360031b1b83161692505b505092915050565b600080600080600060a08688031215612e6057600080fd5b85519450602080870151945060408701516001600160401b03811115612e8557600080fd5b8701601f81018913612e9657600080fd5b8051612ea46128c882612a60565b81815260059190911b8201830190838101908b831115612ec357600080fd5b928401925b82841015612eea578351612edb81612763565b82529284019290840190612ec8565b8097505050505050612efe60608701612c12565b9150608086015190509295509295909350565b600060208284031215612f2357600080fd5b815161291d81612763565b6020808252602e908201527f76616c69646174655f7472616e736665724552433230416c6c496e3a20546f6b60408201526d195b881b9bdd08185b1b1bddd95960921b606082015260800190565b8082018082111561180057611800612be9565b60208082526025908201527f76616c69646174653164656c7461506174683a20546f6b656e206e6f7420616c6040820152641b1bddd95960da1b606082015260800190565b60008060408385031215612fe757600080fd5b8251612ff281612763565b602084015190925061300381612763565b809150509250929050565b6000806000806080858703121561302457600080fd5b845161302f81612763565b60208601516040870151919550935061304781612763565b6060959095015193969295505050565b600060a0828403121561306957600080fd5b60405160a081016001600160401b03828210818311171561308c5761308c612814565b8160405282935084519150808211156130a457600080fd5b506130b185828601612a83565b82525060208301516130c281612763565b806020830152506040830151604082015260608301516060820152608083015160808201525092915050565b60006020828403121561310057600080fd5b81516001600160401b0381111561311657600080fd5b61312284828501613057565b94935050505056fe737761704578616374546f6b656e73466f72546f6b656e732875696e743235362c75696e743235362c616464726573735b5d2c616464726573732c75696e7432353629737570706c7928616464726573732c75696e743235362c616464726573732c75696e74313629776974686472617728616464726573732c75696e743235362c6164647265737329617070726f766544656c65676174696f6e28616464726573732c75696e74323536296578616374496e707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929666c6173685377617045786163744f75742875696e743235362c75696e743235362c627974657329666c617368537761704578616374496e2875696e743235362c75696e743235362c62797465732965786163744f7574707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929a2646970667358221220b603d69f408106e492212ff58c93c034be3d82476c7f60a6952e62d679f8ab1e64736f6c63430008170033","sourceMap":"472:2570:5:-:0;;;611:235;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:0;734:10:2;936:18:0;:32::i;:::-;674:13:5::1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;666:5:5::1;:21:::0;;-1:-1:-1;;;;;666:21:5;;::::1;-1:-1:-1::0;;;;;;666:21:5;;::::1;::::0;::::1;::::0;;;-1:-1:-1;739:28:5;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;777:61:::1;::::0;;-1:-1:-1;;;777:61:5;;::::1;::::0;::::1;521:51:8::0;;;;588:18;;;581:30;647:2;627:18;;;620:30;686:27;666:18;;;659:55;666:21:5;777:17:::1;::::0;731:19:8;;777:61:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;611:235:::0;472:2570;;2426:187:0;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:0;;;-1:-1:-1;;;;;;2534:17:0;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;472:2570:5:-;;;;;;;;:::o;14:290:8:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:8;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:8:o;309:447::-;472:2570:5;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80638da5cb5b116100715780638da5cb5b1461014957806394217ad11461015a578063d13573361461016d578063d2f73e3d14610180578063e8e7f80014610149578063f2fde38b1461019357600080fd5b80631581b600146100b957806337cfecf2146100e95780634a0e159d146100fe5780636c57f5a914610111578063715018a61461012e5780637ceab3b114610136575b600080fd5b6002546100cc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100fc6100f73660046106b9565b6101a6565b005b6100fc61010c366004610726565b61034e565b6001546040516001600160a01b03909116151581526020016100e0565b6100fc610461565b6003546100cc906001600160a01b031681565b6000546001600160a01b03166100cc565b6001546100cc906001600160a01b031681565b6100fc61017b3660046106b9565b610475565b6100fc61018e366004610726565b61049f565b6100fc6101a13660046106b9565b61057f565b6101ae6105fa565b60035460408051632d670ec960e11b81526001600160a01b0384811660048301526024820192909252601a60448201527f496e697469616c206f776e65722063616e2077697468647261770000000000006064820152911690635ace1d9290608401600060405180830381600087803b15801561022a57600080fd5b505af115801561023e573d6000803e3d6000fd5b5050600354604080516372e548a960e01b81523060048201526024810191909152602560448201527f5661756c742063616e207265636569766520746f6b656e732066726f6d206120606482015264747261646560d81b60848201526001600160a01b0390911692506372e548a9915060a401600060405180830381600087803b1580156102cb57600080fd5b505af11580156102df573d6000803e3d6000fd5b505060035460405163f2fde38b60e01b81526001600160a01b038581166004830152909116925063f2fde38b9150602401600060405180830381600087803b15801561032a57600080fd5b505af115801561033e573d6000803e3d6000fd5b5050505061034b8161057f565b50565b6103566105fa565b6001546001600160a01b0316156103d25760035460015460405163299f87d560e21b81526001600160a01b039283169263a67e1f549261039f92911690869086906004016107a4565b600060405180830381600087803b1580156103b957600080fd5b505af11580156103cd573d6000803e3d6000fd5b505050505b600180546001600160a01b0319166001600160a01b0385169081179091551561045c57600354604051631f458b3960e31b81526001600160a01b039091169063fa2c59c890610429908690869086906004016107a4565b600060405180830381600087803b15801561044357600080fd5b505af1158015610457573d6000803e3d6000fd5b505050505b505050565b6104696105fa565b6104736000610654565b565b61047d6105fa565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600354604051636d5025f160e01b81526001600160a01b0390911690636d5025f1906104d59033908790879087906004016107d2565b60006040518083038186803b1580156104ed57600080fd5b505afa158015610501573d6000803e3d6000fd5b50505050600080846001600160a01b03168484604051610522929190610809565b6000604051808303816000865af19150503d806000811461055f576040519150601f19603f3d011682016040523d82523d6000602084013e610564565b606091505b509150915081610578578051602082018181fd5b5050505050565b6105876105fa565b6001600160a01b0381166105f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61034b81610654565b6000546001600160a01b031633146104735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105e8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461034b57600080fd5b6000602082840312156106cb57600080fd5b81356106d6816106a4565b9392505050565b60008083601f8401126106ef57600080fd5b50813567ffffffffffffffff81111561070757600080fd5b60208301915083602082850101111561071f57600080fd5b9250929050565b60008060006040848603121561073b57600080fd5b8335610746816106a4565b9250602084013567ffffffffffffffff81111561076257600080fd5b61076e868287016106dd565b9497909650939450505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906107c9908301848661077b565b95945050505050565b6001600160a01b038581168252841660208201526060604082018190526000906107ff908301848661077b565b9695505050505050565b818382376000910190815291905056fea26469706673582212206079472c105f7c72fe2df74f6f36084929e82eac7e09a62cafe38230686fb6b264736f6c63430008170033","sourceMap":"472:2570:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;547:30;;;;;-1:-1:-1;;;;;547:30:5;;;;;;-1:-1:-1;;;;;178:32:8;;;160:51;;148:2;133:18;547:30:5;;;;;;;;932:479;;;;;;:::i;:::-;;:::i;:::-;;2103:344;;;;;;:::i;:::-;;:::i;1882:99::-;1948:12;;1882:99;;-1:-1:-1;;;;;1948:12:5;;;:26;;1654:41:8;;1642:2;1627:18;1882:99:5;1514:187:8;1824:101:0;;;:::i;584:20:5:-;;;;;-1:-1:-1;;;;;584:20:5;;;1201:85:0;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;1201:85;;513:27:5;;;;;-1:-1:-1;;;;;513:27:5;;;1417:86;;;;;;:::i;:::-;;:::i;2453:586::-;;;;;;:::i;:::-;;:::i;2074:198:0:-;;;;;;:::i;:::-;;:::i;932:479:5:-;1094:13:0;:11;:13::i;:::-;1105:5:5::1;::::0;:68:::1;::::0;;-1:-1:-1;;;1105:68:5;;-1:-1:-1;;;;;2978:32:8;;;1105:68:5::1;::::0;::::1;2960:51:8::0;3027:18;;;3020:30;;;;3086:2;3066:18;;;3059:30;3125:28;3105:18;;;3098:56;1105:5:5;::::1;::::0;:30:::1;::::0;3171:19:8;;1105:68:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;1183:5:5::1;::::0;:75:::1;::::0;;-1:-1:-1;;;1183:75:5;;1211:4:::1;1183:75;::::0;::::1;3413:51:8::0;3480:18;;;3473:30;;;;3539:2;3519:18;;;3512:30;3578:34;3558:18;;;3551:62;-1:-1:-1;;;3629:19:8;;;3622:36;-1:-1:-1;;;;;1183:5:5;;::::1;::::0;-1:-1:-1;1183:19:5::1;::::0;-1:-1:-1;3675:19:8;;1183:75:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;1268:5:5::1;::::0;:31:::1;::::0;-1:-1:-1;;;1268:31:5;;-1:-1:-1;;;;;178:32:8;;;1268:31:5::1;::::0;::::1;160:51:8::0;1268:5:5;;::::1;::::0;-1:-1:-1;1268:23:5::1;::::0;-1:-1:-1;133:18:8;;1268:31:5::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1379:25;1397:6;1379:17;:25::i;:::-;932:479:::0;:::o;2103:344::-;1094:13:0;:11;:13::i;:::-;2207:12:5::1;::::0;-1:-1:-1;;;;;2207:12:5::1;:26:::0;2204:95:::1;;2249:5;::::0;;2268:12;2249:39:::1;::::0;-1:-1:-1;;;2249:39:5;;-1:-1:-1;;;;;2249:5:5;;::::1;::::0;:18:::1;::::0;:39:::1;::::0;2268:12;::::1;::::0;2282:5;;;;2249:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2204:95;2308:12;:28:::0;;-1:-1:-1;;;;;;2308:28:5::1;-1:-1:-1::0;;;;;2308:28:5;::::1;::::0;;::::1;::::0;;;2349:26;2346:95:::1;;2391:5;::::0;:39:::1;::::0;-1:-1:-1;;;2391:39:5;;-1:-1:-1;;;;;2391:5:5;;::::1;::::0;:17:::1;::::0;:39:::1;::::0;2409:13;;2424:5;;;;2391:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2346:95;2103:344:::0;;;:::o;1824:101:0:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;1417:86:5:-;1094:13:0;:11;:13::i;:::-;1482:5:5::1;:14:::0;;-1:-1:-1;;;;;;1482:14:5::1;-1:-1:-1::0;;;;;1482:14:5;;;::::1;::::0;;;::::1;::::0;;1417:86::o;2453:586::-;2601:5;;:48;;-1:-1:-1;;;2601:48:5;;-1:-1:-1;;;;;2601:5:5;;;;:18;;:48;;2620:10;;2632:6;;2640:8;;;;2601:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2719:12;2733:23;2760:6;-1:-1:-1;;;;;2760:11:5;2772:8;;2760:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2718:63;;;;2796:7;2792:241;;2877:10;2871:17;2944:4;2932:10;2928:21;2990:18;2973:15;2966:43;2792:241;2524:515;;2453:586;;;:::o;2074:198:0:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2162:22:0;::::1;2154:73;;;::::0;-1:-1:-1;;;2154:73:0;;5252:2:8;2154:73:0::1;::::0;::::1;5234:21:8::0;5291:2;5271:18;;;5264:30;5330:34;5310:18;;;5303:62;-1:-1:-1;;;5381:18:8;;;5374:36;5427:19;;2154:73:0::1;;;;;;;;;2237:28;2256:8;2237:18;:28::i;1359:130::-:0;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;734:10:2;1422:23:0;1414:68;;;;-1:-1:-1;;;1414:68:0;;5659:2:8;1414:68:0;;;5641:21:8;;;5678:18;;;5671:30;5737:34;5717:18;;;5710:62;5789:18;;1414:68:0;5457:356:8;2426:187:0;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:0;;;-1:-1:-1;;;;;;2534:17:0;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;222:131:8:-;-1:-1:-1;;;;;297:31:8;;287:42;;277:70;;343:1;340;333:12;358:247;417:6;470:2;458:9;449:7;445:23;441:32;438:52;;;486:1;483;476:12;438:52;525:9;512:23;544:31;569:5;544:31;:::i;:::-;594:5;358:247;-1:-1:-1;;;358:247:8:o;610:348::-;662:8;672:6;726:3;719:4;711:6;707:17;703:27;693:55;;744:1;741;734:12;693:55;-1:-1:-1;767:20:8;;810:18;799:30;;796:50;;;842:1;839;832:12;796:50;879:4;871:6;867:17;855:29;;931:3;924:4;915:6;907;903:19;899:30;896:39;893:59;;;948:1;945;938:12;893:59;610:348;;;;;:::o;963:546::-;1043:6;1051;1059;1112:2;1100:9;1091:7;1087:23;1083:32;1080:52;;;1128:1;1125;1118:12;1080:52;1167:9;1154:23;1186:31;1211:5;1186:31;:::i;:::-;1236:5;-1:-1:-1;1292:2:8;1277:18;;1264:32;1319:18;1308:30;;1305:50;;;1351:1;1348;1341:12;1305:50;1390:59;1441:7;1432:6;1421:9;1417:22;1390:59;:::i;:::-;963:546;;1468:8;;-1:-1:-1;1364:85:8;;-1:-1:-1;;;;963:546:8:o;3705:267::-;3794:6;3789:3;3782:19;3846:6;3839:5;3832:4;3827:3;3823:14;3810:43;-1:-1:-1;3898:1:8;3873:16;;;3891:4;3869:27;;;3862:38;;;;3954:2;3933:15;;;-1:-1:-1;;3929:29:8;3920:39;;;3916:50;;3705:267::o;3977:344::-;-1:-1:-1;;;;;4164:32:8;;4146:51;;4233:2;4228;4213:18;;4206:30;;;-1:-1:-1;;4253:62:8;;4296:18;;4288:6;4280;4253:62;:::i;:::-;4245:70;3977:344;-1:-1:-1;;;;;3977:344:8:o;4326:443::-;-1:-1:-1;;;;;4577:15:8;;;4559:34;;4629:15;;4624:2;4609:18;;4602:43;4681:2;4676;4661:18;;4654:30;;;4502:4;;4701:62;;4744:18;;4736:6;4728;4701:62;:::i;:::-;4693:70;4326:443;-1:-1:-1;;;;;;4326:443:8:o;4774:271::-;4957:6;4949;4944:3;4931:33;4913:3;4983:16;;5008:13;;;4983:16;4774:271;-1:-1:-1;4774:271:8:o","linkReferences":{}},"methodIdentifiers":{"assetManager()":"94217ad1","getWithdrawAddress()":"e8e7f800","guard()":"7ceab3b1","initialiseOwnership(address)":"37cfecf2","isDisabled()":"6c57f5a9","owner()":"8da5cb5b","performCall(address,bytes)":"d2f73e3d","renounceOwnership()":"715018a6","resetGuard(address)":"d1357336","transferOwnership(address)":"f2fde38b","updateAssetManager(address,string)":"4a0e159d","withdrawAddress()":"1581b600"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_assetManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"assetManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWithdrawAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guard\",\"outputs\":[{\"internalType\":\"contract GuardV0\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"initialiseOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"performCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract GuardV0\",\"name\":\"_guard\",\"type\":\"address\"}],\"name\":\"resetGuard\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_assetManager\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"updateAssetManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getWithdrawAddress()\":{\"notice\":\"Allow single withdrawal destination. Preferably multisig/DAO treasury address.\"},\"initialiseOwnership(address)\":{\"notice\":\"Initialise vault and guard for a withdrawal destination.\"},\"isDisabled()\":{\"notice\":\"Asset manager can no longer trade on this vault. Emergency pause set by the governance. Disable with updateAssetManager().\"},\"updateAssetManager(address,string)\":{\"notice\":\"Change the asset manager. Set to zero address to disable asset manager.\"}},\"notice\":\"Simple vault allowing delegating of a trading activites to a hot wallet. - Self-contained - Guard is used to check asset manager can only perform approved operations. - No shares, single owner - No accounting - No slippage protection (unlike Enzyme)\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/SimpleVaultV0.sol\":\"SimpleVaultV0\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5\",\"dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c\",\"dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h\"]},\"src/GuardV0.sol\":{\"keccak256\":\"0x26ebef3fcd081d578584bba1b83fd14e6890d9b150d1458c2e51f3781d9dfdad\",\"urls\":[\"bzz-raw://d28b1816517f51101c33391dcddf36320f7e6c84e37ea9e9e2a6648034a9c6f0\",\"dweb:/ipfs/QmeRkLiNABnpUCu5XA9UKVkZ5VZV7yTnhogwwcz7v8sTwU\"]},\"src/IGuard.sol\":{\"keccak256\":\"0xb7b3ef010870980bd812779fd5dc8133d6dccb0e2b5d390dcfdc7a61c5064559\",\"urls\":[\"bzz-raw://17226392a130d807b0e1cd46f3b3fa8bf36d4f4cac6218f09d2dca75605945a3\",\"dweb:/ipfs/QmYgn6g7B2wU6VYrhtZicWohw795yyu6qUD1riWaG2hikD\"]},\"src/SimpleVaultV0.sol\":{\"keccak256\":\"0x28de4090f998d49a9e829c2bbf4d18f68774c2e0df71d9347f7d28a633fa8358\",\"urls\":[\"bzz-raw://f859db4a725bc09d1556103b93ae48c166b74482d7c5417a22a6e3088125f1e4\",\"dweb:/ipfs/QmcyuWDou6L57FVsid9dbfqq3uDqo3iYrDyiEAiTpo1EBM\"]},\"src/lib/BytesLib.sol\":{\"keccak256\":\"0x7446c0f0de6eb147f0f3e40b3a72e39d02a951e8c453437dcc6b3c06007bc62a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://1b2b64668ea4287dfe75e1029fef387b0e3ae191b784d1bc5be01edac6d1d5c5\",\"dweb:/ipfs/Qma3zAe3Svez1kdGc5F356m9tRjCDg8F8tAocbd5Qk13PE\"]},\"src/lib/Path.sol\":{\"keccak256\":\"0xb22c562b5175d50dbcc2224325666090d985f052abdcfe275c8dfc884e34de61\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://27aeff27314476ab3c77313ae1f0c5b2442b86315f5ce741cb2150a87c3cbad3\",\"dweb:/ipfs/QmQNno2g1CJvjnH6ych4LuHr1UZDEZPACgYG4XvivxGrqV\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.23+commit.f704f362"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_assetManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"assetManager","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getWithdrawAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"guard","outputs":[{"internalType":"contract GuardV0","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialiseOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"isDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"performCall"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"contract GuardV0","name":"_guard","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"resetGuard"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"address","name":"_assetManager","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"updateAssetManager"},{"inputs":[],"stateMutability":"view","type":"function","name":"withdrawAddress","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{"getWithdrawAddress()":{"notice":"Allow single withdrawal destination. Preferably multisig/DAO treasury address."},"initialiseOwnership(address)":{"notice":"Initialise vault and guard for a withdrawal destination."},"isDisabled()":{"notice":"Asset manager can no longer trade on this vault. Emergency pause set by the governance. Disable with updateAssetManager()."},"updateAssetManager(address,string)":{"notice":"Change the asset manager. Set to zero address to disable asset manager."}},"version":1}},"settings":{"remappings":["@openzeppelin/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/SimpleVaultV0.sol":"SimpleVaultV0"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218","urls":["bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32","dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305","urls":["bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5","dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439","urls":["bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c","dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h"],"license":"MIT"},"src/GuardV0.sol":{"keccak256":"0x26ebef3fcd081d578584bba1b83fd14e6890d9b150d1458c2e51f3781d9dfdad","urls":["bzz-raw://d28b1816517f51101c33391dcddf36320f7e6c84e37ea9e9e2a6648034a9c6f0","dweb:/ipfs/QmeRkLiNABnpUCu5XA9UKVkZ5VZV7yTnhogwwcz7v8sTwU"],"license":null},"src/IGuard.sol":{"keccak256":"0xb7b3ef010870980bd812779fd5dc8133d6dccb0e2b5d390dcfdc7a61c5064559","urls":["bzz-raw://17226392a130d807b0e1cd46f3b3fa8bf36d4f4cac6218f09d2dca75605945a3","dweb:/ipfs/QmYgn6g7B2wU6VYrhtZicWohw795yyu6qUD1riWaG2hikD"],"license":null},"src/SimpleVaultV0.sol":{"keccak256":"0x28de4090f998d49a9e829c2bbf4d18f68774c2e0df71d9347f7d28a633fa8358","urls":["bzz-raw://f859db4a725bc09d1556103b93ae48c166b74482d7c5417a22a6e3088125f1e4","dweb:/ipfs/QmcyuWDou6L57FVsid9dbfqq3uDqo3iYrDyiEAiTpo1EBM"],"license":null},"src/lib/BytesLib.sol":{"keccak256":"0x7446c0f0de6eb147f0f3e40b3a72e39d02a951e8c453437dcc6b3c06007bc62a","urls":["bzz-raw://1b2b64668ea4287dfe75e1029fef387b0e3ae191b784d1bc5be01edac6d1d5c5","dweb:/ipfs/Qma3zAe3Svez1kdGc5F356m9tRjCDg8F8tAocbd5Qk13PE"],"license":"Unlicense"},"src/lib/Path.sol":{"keccak256":"0xb22c562b5175d50dbcc2224325666090d985f052abdcfe275c8dfc884e34de61","urls":["bzz-raw://27aeff27314476ab3c77313ae1f0c5b2442b86315f5ce741cb2150a87c3cbad3","dweb:/ipfs/QmQNno2g1CJvjnH6ych4LuHr1UZDEZPACgYG4XvivxGrqV"],"license":"GPL-2.0-or-later"}},"version":1},"id":5} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"_assetManager","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"assetManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getWithdrawAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"guard","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract GuardV0"}],"stateMutability":"view"},{"type":"function","name":"initialiseOwnership","inputs":[{"name":"_owner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isDisabled","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"performCall","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"resetGuard","inputs":[{"name":"_guard","type":"address","internalType":"contract GuardV0"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateAssetManager","inputs":[{"name":"_assetManager","type":"address","internalType":"address"},{"name":"notes","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x608060405234801561001057600080fd5b506040516140fe3803806140fe83398101604081905261002f91610177565b6100383361011a565b6040516100449061016a565b604051809103906000f080158015610060573d6000803e3d6000fd5b50600380546001600160a01b039283166001600160a01b0319918216811790925560018054938516939091168317905560408051631f458b3960e31b815260048101939093526024830152601960448301527f496e697469616c206173736574206d616e61676572207365740000000000000060648301529063fa2c59c890608401600060405180830381600087803b1580156100fc57600080fd5b505af1158015610110573d6000803e3d6000fd5b50505050506101a7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6136f980610a0583390190565b60006020828403121561018957600080fd5b81516001600160a01b03811681146101a057600080fd5b9392505050565b61084f806101b66000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80638da5cb5b116100715780638da5cb5b1461014957806394217ad11461015a578063d13573361461016d578063d2f73e3d14610180578063e8e7f80014610149578063f2fde38b1461019357600080fd5b80631581b600146100b957806337cfecf2146100e95780634a0e159d146100fe5780636c57f5a914610111578063715018a61461012e5780637ceab3b114610136575b600080fd5b6002546100cc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100fc6100f73660046106b9565b6101a6565b005b6100fc61010c366004610726565b61034e565b6001546040516001600160a01b03909116151581526020016100e0565b6100fc610461565b6003546100cc906001600160a01b031681565b6000546001600160a01b03166100cc565b6001546100cc906001600160a01b031681565b6100fc61017b3660046106b9565b610475565b6100fc61018e366004610726565b61049f565b6100fc6101a13660046106b9565b61057f565b6101ae6105fa565b60035460408051632d670ec960e11b81526001600160a01b0384811660048301526024820192909252601a60448201527f496e697469616c206f776e65722063616e2077697468647261770000000000006064820152911690635ace1d9290608401600060405180830381600087803b15801561022a57600080fd5b505af115801561023e573d6000803e3d6000fd5b5050600354604080516372e548a960e01b81523060048201526024810191909152602560448201527f5661756c742063616e207265636569766520746f6b656e732066726f6d206120606482015264747261646560d81b60848201526001600160a01b0390911692506372e548a9915060a401600060405180830381600087803b1580156102cb57600080fd5b505af11580156102df573d6000803e3d6000fd5b505060035460405163f2fde38b60e01b81526001600160a01b038581166004830152909116925063f2fde38b9150602401600060405180830381600087803b15801561032a57600080fd5b505af115801561033e573d6000803e3d6000fd5b5050505061034b8161057f565b50565b6103566105fa565b6001546001600160a01b0316156103d25760035460015460405163299f87d560e21b81526001600160a01b039283169263a67e1f549261039f92911690869086906004016107a4565b600060405180830381600087803b1580156103b957600080fd5b505af11580156103cd573d6000803e3d6000fd5b505050505b600180546001600160a01b0319166001600160a01b0385169081179091551561045c57600354604051631f458b3960e31b81526001600160a01b039091169063fa2c59c890610429908690869086906004016107a4565b600060405180830381600087803b15801561044357600080fd5b505af1158015610457573d6000803e3d6000fd5b505050505b505050565b6104696105fa565b6104736000610654565b565b61047d6105fa565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600354604051636d5025f160e01b81526001600160a01b0390911690636d5025f1906104d59033908790879087906004016107d2565b60006040518083038186803b1580156104ed57600080fd5b505afa158015610501573d6000803e3d6000fd5b50505050600080846001600160a01b03168484604051610522929190610809565b6000604051808303816000865af19150503d806000811461055f576040519150601f19603f3d011682016040523d82523d6000602084013e610564565b606091505b509150915081610578578051602082018181fd5b5050505050565b6105876105fa565b6001600160a01b0381166105f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61034b81610654565b6000546001600160a01b031633146104735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105e8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461034b57600080fd5b6000602082840312156106cb57600080fd5b81356106d6816106a4565b9392505050565b60008083601f8401126106ef57600080fd5b50813567ffffffffffffffff81111561070757600080fd5b60208301915083602082850101111561071f57600080fd5b9250929050565b60008060006040848603121561073b57600080fd5b8335610746816106a4565b9250602084013567ffffffffffffffff81111561076257600080fd5b61076e868287016106dd565b9497909650939450505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906107c9908301848661077b565b95945050505050565b6001600160a01b038581168252841660208201526060604082018190526000906107ff908301848661077b565b9695505050505050565b818382376000910190815291905056fea2646970667358221220533ff5fe907598ba072fa5925e9a43a5aa6c6a8b02ec694f48d49423f0f14f8764736f6c6343000817003360806040523480156200001157600080fd5b506200001d3362000023565b6200007d565b600880546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61366c806200008d6000396000f3fe608060405234801561001057600080fd5b50600436106103ba5760003560e01c80638c2fdf9e116101f4578063d4c0fe451161011a578063f259a073116100ad578063f901dc331161007c578063f901dc33146108eb578063fa2c59c8146108fe578063fadbcf4814610911578063fdedfa271461093457600080fd5b8063f259a073146103bf578063f26749f3146108b2578063f2fde38b146108c5578063f76081e4146108d857600080fd5b8063ebe26816116100e9578063ebe2681614610848578063ee5462cc1461085b578063efb47bff1461086e578063f20e85e01461089f57600080fd5b8063d4c0fe45146107ec578063d7334c9d146107ff578063e98539c514610812578063eb0de0421461082557600080fd5b8063a847cf4d11610192578063c4cc9dba11610161578063c4cc9dba146107b3578063c537bed0146107c6578063ca963c50146105be578063d075f9bb146107d957600080fd5b8063a847cf4d1461072d578063a9fc3d4f14610758578063be8c97b01461076f578063c2e657ae146107a057600080fd5b806398b3cc39116101ce57806398b3cc39146106d1578063a1b6b430146106e4578063a4c1cccb146106f7578063a67e1f541461071a57600080fd5b80638c2fdf9e146106955780638da5cb5b146106a8578063957dc6c0146106be57600080fd5b806359b92be9116102e4578063713ebf3b11610277578063761bcd9c11610246578063761bcd9c1461064f5780637ea446551461066257806386b6dbe514610675578063873016081461068857600080fd5b8063713ebf3b146105f7578063715018a61461060a57806372e548a914610612578063732524941461062557600080fd5b80636a6d5cc8116102b35780636a6d5cc8146105ab5780636ad11353146105be5780636d5025f1146105d15780636d9a1423146105e457600080fd5b806359b92be91461055f5780635ace1d92146105725780635e4ccace1461058557806363cc17f21461059857600080fd5b80632d12d7881161035c5780633ea355511161032b5780633ea3555114610503578063425f49d0146105165780634b941268146105295780634b956bd81461054c57600080fd5b80632d12d788146104895780632dc32a611461049c57806334ec8d7e146104cd5780633cf20025146104e057600080fd5b80631710a4f2116103985780631710a4f21461041f5780631c123e77146104325780631d49039c146104455780632674111e1461047657600080fd5b806304a3ba25146103bf57806307ac3562146103d457806307ef00cf146103e7575b600080fd5b6103d26103cd366004612af4565b610943565b005b6103d26103e2366004612bb5565b6109dd565b61040a6103f5366004612c34565b60056020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103d261042d366004612bb5565b610d19565b6103d2610440366004612bb5565b610dcf565b61040a610453366004612c34565b6001600160a01b031660009081526006602052604090205460ff16151560011490565b6103d2610484366004612c58565b610e49565b6103d2610497366004612af4565b6113cd565b61040a6104aa366004612c34565b6001600160a01b031660009081526007602052604090205460ff16151560011490565b6103d26104db366004612af4565b611451565b61040a6104ee366004612c34565b60046020526000908152604090205460ff1681565b6103d2610511366004612af4565b6114b9565b6103d2610524366004612bb5565b6114e4565b61040a610537366004612c34565b60076020526000908152604090205460ff1681565b6103d261055a366004612bb5565b611506565b6103d261056d366004612bb5565b6115ab565b6103d2610580366004612af4565b61162d565b6103d2610593366004612cd9565b6116b4565b6103d26105a6366004612af4565b611771565b6103d26105b9366004612bb5565b6117f8565b6103d26105cc366004612bb5565b6118a0565b6103d26105df366004612c58565b6118c3565b6103d26105f2366004612af4565b6118cf565b61040a610605366004612d08565b611905565b6103d261199a565b6103d2610620366004612af4565b6119ae565b60085461010090046001600160a01b03165b6040516001600160a01b039091168152602001610416565b6103d261065d366004612bb5565b611a35565b6103d2610670366004612bb5565b611b40565b6103d2610683366004612af4565b611b7d565b60085461040a9060ff1681565b6103d26106a3366004612af4565b611c04565b60085461010090046001600160a01b0316610637565b6103d26106cc366004612bb5565b611c88565b6103d26106df366004612af4565b611d48565b6103d26106f2366004612bb5565b611dcf565b61040a610705366004612c34565b60026020526000908152604090205460ff1681565b6103d2610728366004612af4565b611f17565b61040a61073b366004612d08565b600060208181529281526040808220909352908152205460ff1681565b61076160015481565b604051908152602001610416565b61040a61077d366004612c34565b6001600160a01b031660009081526003602052604090205460ff16151560011490565b6103d26107ae366004612d3d565b611f9b565b6103d26107c1366004612bb5565b61200d565b61040a6107d4366004612c34565b6120c8565b61040a6107e7366004612c34565b6120fb565b6103d26107fa366004612bb5565b61211e565b6103d261080d366004612cd9565b61215e565b6103d2610820366004612bb5565b6121f7565b61040a610833366004612c34565b60066020526000908152604090205460ff1681565b6103d2610856366004612bb5565b612299565b6103d2610869366004612af4565b612330565b61040a61087c366004612c34565b6001600160a01b031660009081526005602052604090205460ff16151560011490565b6103d26108ad366004612af4565b6123e5565b6103d26108c0366004612c58565b61243b565b6103d26108d3366004612c34565b6124b0565b6103d26108e6366004612bb5565b612529565b6103d26108f9366004612af4565b6125a5565b6103d261090c366004612af4565b612629565b61040a61091f366004612c34565b60036020526000908152604090205460ff1681565b60405160018152602001610416565b6008546001600160a01b0361010090910416331461097c5760405162461bcd60e51b815260040161097390612d62565b60405180910390fd5b6001600160a01b03831660009081526006602052604090819020805460ff19169055517fb71be9befd3ac90c1c9981d3b1161b3c2c6dcd741f13b34061aa251226a802df906109d090859085908590612dc0565b60405180910390a1505050565b6000818060200190518101906109f39190612e7a565b905060005b8151811015610d14576000828281518110610a1557610a15612f2a565b602002602001015190506000610a3860006004846126b09092919063ffffffff16565b610a4190612f40565b90506000610a5f6004808551610a579190612f8d565b8591906126b0565b6040805180820190915260208082527f7472616e736665724552433230496e28616464726573732c75696e74323536299101529050631dac092b60e11b6001600160e01b0319831601610aba57610ab5816115ab565b610d09565b60408051808201909152601b81527f7472616e736665724552433230416c6c496e2861646472657373290000000000602090910152635cf59cb760e11b6001600160e01b0319831601610b1057610ab581611b40565b60408051808201909152601881527f6465706f73697428616464726573732c6164647265737329000000000000000060209091015262d3ec1f60e31b6001600160e01b0319831601610b6557610ab58161200d565b60408051808201909152601981527f776974686472617728616464726573732c6164647265737329000000000000006020909101526306bf1c7b60e01b6001600160e01b0319831601610bbb57610ab581612529565b610be26040518060600160405280602781526020016135dc60279139805160209091012090565b6001600160e01b031916826001600160e01b03191603610c0557610ab5816118a0565b610c2c6040518060600160405280602881526020016135b460289139805160209091012090565b6001600160e01b031916826001600160e01b03191603610c4f57610ab5816118a0565b60408051808201909152601e81527f666c61736853776170416c6c4f75742875696e743235362c627974657329000060209091015263d2b3d16560e01b6001600160e01b0319831601610ca557610ab5816114e4565b60405162461bcd60e51b815260206004820152603360248201527f76616c69646174655f3164656c74614d756c746963616c6c3a20556e6b6e6f776044820152723710333ab731ba34b7b71039b2b632b1ba37b960691b6064820152608401610973565b5050506001016109f8565b505050565b600081806020019051810190610d2f9190612fab565b509050610d59816001600160a01b031660009081526005602052604090205460ff16151560011490565b610dcb5760405162461bcd60e51b815260206004820152603c60248201527f76616c69646174655f7472616e736665723a205265636569766572206164647260448201527f657373206e6f742077686974656c6973746564206279204775617264000000006064820152608401610973565b5050565b6000805b610ddc83612807565b5092509050610dea826120c8565b610e065760405162461bcd60e51b815260040161097390612fd9565b610e0f816120c8565b610e2b5760405162461bcd60e51b815260040161097390612fd9565b610e3483612843565b15610d1457610e428361287d565b9250610dd3565b6008546001600160a01b0385811661010090920416146113c757610e8a846001600160a01b031660009081526003602052604090205460ff16151560011490565b610ed65760405162461bcd60e51b815260206004820181905260248201527f76616c696461746543616c6c3a2053656e646572206e6f7420616c6c6f7765646044820152606401610973565b6000610ee56004828486613021565b610eee9161304b565b9050366000610f008460048188613021565b91509150610f0e8684611905565b610f665760405162461bcd60e51b815260206004820152602360248201527f76616c696461746543616c6c3a2043616c6c2073697465206e6f7420616c6c6f6044820152621dd95960ea1b6064820152608401610973565b610f8d6040518060800160405280604381526020016134d560439139805160209091012090565b6001600160e01b031916836001600160e01b03191603610feb57610fe682828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a3592505050565b6113c3565b61101260405180606001604052806033815260200161358160339139805160209091012090565b6001600160e01b031916836001600160e01b0319160361106b57610fe682828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061229992505050565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b602090910152630a6d35e560e31b6001600160e01b03198416016110ec57610fe682828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506109dd92505050565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b6020909101526356fa634560e01b6001600160e01b031984160161117457610fe682828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610d1992505050565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b60209091015263f6a1584d60e01b6001600160e01b03198416016111fb57610fe682828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150692505050565b61122260405180606001604052806022815260200161355f60229139805160209091012090565b6001600160e01b031916836001600160e01b0319160361127b57610fe682828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c8892505050565b6112a260405180606001604052806026815260200161351860269139805160209091012090565b6001600160e01b031916836001600160e01b031916036112fb57610fe682828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061211e92505050565b61132260405180606001604052806021815260200161353e60219139805160209091012090565b6001600160e01b031916836001600160e01b0319160361137b57610fe682828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117f892505050565b60405162461bcd60e51b815260206004820152601960248201527f556e6b6e6f776e2066756e6374696f6e2073656c6563746f72000000000000006044820152606401610973565b5050505b50505050565b6008546001600160a01b036101009091041633146113fd5760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526004602052604090819020805460ff19169055517f4e13b11ab98e672bd78295ef9cebe764dc617f95decf47d842c25b83abc0c724906109d090859085908590612dc0565b6114838361147c60405180606001604052806033815260200161358160339139805160209091012090565b84846116b4565b6114ae8361147c60405180606001604052806034815260200161360360349139805160209091012090565b610d14838383611d48565b6114ae8361147c6040518060800160405280604381526020016134d560439139805160209091012090565b6000818060200190518101906114fa919061307b565b915050610dcb81611dcf565b60008180602001905181019061151c9190612fab565b509050611546816001600160a01b031660009081526006602052604090205460ff16151560011490565b610dcb5760405162461bcd60e51b815260206004820152603060248201527f76616c69646174655f617070726f76653a20417070726f76652061646472657360448201526f0e640c8decae640dcdee840dac2e8c6d60831b6064820152608401610973565b6000818060200190518101906115c19190612fab565b5090506115cd816120c8565b610dcb5760405162461bcd60e51b815260206004820152602b60248201527f76616c69646174655f7472616e736665724552433230496e3a20546f6b656e2060448201526a1b9bdd08185b1b1bddd95960aa1b6064820152608401610973565b6008546001600160a01b0361010090910416331461165d5760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526005602052604090819020805460ff19166001179055517f3562181221a42a19ddd03a82dfe06acab1905ceb65cdaf7d86a1d9fec6643552906109d090859085908590612dc0565b6008546001600160a01b036101009091041633146116e45760405162461bcd60e51b815260040161097390612d62565b6001600160a01b0384166000908152602081815260408083206001600160e01b0319871684529091528120805460ff19166001908117909155805491611729836130c1565b91905055507fef729aaa41b9fd994f9ff7c1960df214a84f722002e6cfbea31799cd0873a3ef8484848460405161176394939291906130da565b60405180910390a150505050565b6008546001600160a01b036101009091041633146117a15760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526007602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f3589906109d090859085908590612dc0565b6000808280602001905181019061180f9190613119565b925050915061181d826120c8565b6118395760405162461bcd60e51b81526004016109739061315c565b611842816120fb565b610d145760405162461bcd60e51b815260206004820152602960248201527f52656365697665722061646472657373206e6f742077686974656c697374656460448201526808189e4811dd585c9960ba1b6064820152608401610973565b6000818060200190518101906118b69190613187565b92505050610dcb81611dcf565b6113c784848484610e49565b6118fa8361147c60405180606001604052806022815260200161355f60229139805160209091012090565b610d14838383611b7d565b60085460009060ff161561196357604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b60209091015263f6a1584d60e01b6001600160e01b031983160161196357506001611994565b506001600160a01b0382166000908152602081815260408083206001600160e01b03198516845290915290205460ff165b92915050565b6119a26128ae565b6119ac60006128de565b565b6008546001600160a01b036101009091041633146119de5760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526004602052604090819020805460ff19166001179055517f62dd88c5ecfa60713a657640ebec4de26fc1aefa4afdb24e6d15a124fce72779906109d090859085908590612dc0565b60008082806020019051810190611a4c91906131d6565b50935093505050611a5c816120fb565b611ae35760405162461bcd60e51b815260206004820152604c60248201527f76616c69646174655f737761704578616374546f6b656e73466f72546f6b656e60448201527f733a2052656365697665722061646472657373206e6f742077686974656c697360648201526b1d195908189e4811dd585c9960a21b608482015260a401610973565b6000805b8351811015611b3957838181518110611b0257611b02612f2a565b60200260200101519150611b15826120c8565b611b315760405162461bcd60e51b81526004016109739061315c565b600101611ae7565b5050505050565b600081806020019051810190611b56919061329f565b9050611b61816120c8565b610dcb5760405162461bcd60e51b8152600401610973906132bc565b6008546001600160a01b03610100909104163314611bad5760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526002602052604090819020805460ff19166001179055517fad90e2570fc4fe9f7437be3188d5c791c6662892d31731992aa88f5c87621983906109d090859085908590612dc0565b6008546001600160a01b03610100909104163314611c345760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526005602052604090819020805460ff19169055517f1212f8ddb39de8e1a339460c95752d61100723efeaa34ccd94bca94393f40938906109d090859085908590612dc0565b600081806020019051810190611c9e9190612fab565b509050611cc8816001600160a01b031660009081526007602052604090205460ff16151560011490565b610dcb5760405162461bcd60e51b815260206004820152604560248201527f76616c69646174655f617070726f766544656c65676174696f6e3a204170707260448201527f6f76652064656c65676174696f6e206164647265737320646f6573206e6f74206064820152640dac2e8c6d60db1b608482015260a401610973565b6008546001600160a01b03610100909104163314611d785760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526006602052604090819020805460ff19166001179055517f628a44970c0e450415e3ae74334ea44f3307b74dbf677a1371190242bf2f3589906109d090859085908590612dc0565b6000805b611dde836000612938565b9150611e0d600180611df26003601461330a565b611dfc919061330a565b611e06919061330a565b8490612938565b9050611e18826120c8565b611e345760405162461bcd60e51b81526004016109739061331d565b611e3d816120c8565b611e595760405162461bcd60e51b81526004016109739061331d565b600180611e686003601461330a565b611e72919061330a565b611e7c919061330a565b6014600180611e8c60038461330a565b611e96919061330a565b611ea0919061330a565b611eaa919061330a565b611eb4919061330a565b835110610d1457611f10600180611ecd6003601461330a565b611ed7919061330a565b611ee1919061330a565b600180611ef06003601461330a565b611efa919061330a565b611f04919061330a565b8551610a579190612f8d565b9250611dd3565b6008546001600160a01b03610100909104163314611f475760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526003602052604090819020805460ff19169055517f3097928509c53a2dab9500431201d82b0d756e8f890fd01f4ae6b33b45687ea4906109d090859085908590612dc0565b6008546001600160a01b03610100909104163314611fcb5760405162461bcd60e51b815260040161097390612d62565b6008805460ff19168415151790556040517f50454d9d0025a28a39cac5a4b3f3101d29b6e413fbb64f75fb42eb6837b07718906109d090859085908590613362565b60008082806020019051810190612024919061337e565b91509150612031826120c8565b61204d5760405162461bcd60e51b8152600401610973906132bc565b612056816120fb565b610d145760405162461bcd60e51b815260206004820152603b60248201527f76616c69646174655f6465706f7369743a20526563656976657220616464726560448201527f7373206e6f742077686974656c697374656420627920477561726400000000006064820152608401610973565b60085460009060ff16806119945750506001600160a01b031660009081526002602052604090205460ff16151560011490565b6001600160a01b031660009081526004602052604090205460ff16151560011490565b60008180602001905181019061213491906133b8565b5050509050612142816120c8565b610dcb5760405162461bcd60e51b81526004016109739061315c565b6008546001600160a01b0361010090910416331461218e5760405162461bcd60e51b815260040161097390612d62565b6001600160a01b0384166000908152602081815260408083206001600160e01b03198716845290915290819020805460ff19169055517f37ea10f2d08f5a9803dfcd5abf3cfc7b0d6fcdf5fcbc36be9ea5a0b53d9a4d9b906117639086908690869086906130da565b60008180602001905181019061220d9190613498565b905061221c81602001516120fb565b61228e5760405162461bcd60e51b815260206004820152603f60248201527f76616c69646174655f65786163744f75747075743a205265636569766572206160448201527f646472657373206e6f742077686974656c6973746564206279204775617264006064820152608401610973565b8051610dcb90610dcf565b6000818060200190518101906122af9190613498565b90506122be81602001516120fb565b61228e5760405162461bcd60e51b815260206004820152603e60248201527f76616c69646174655f6578616374496e7075743a20526563656976657220616460448201527f6472657373206e6f742077686974656c697374656420627920477561726400006064820152608401610973565b6040805180820190915260198152787472616e7366657228616464726573732c75696e743235362960381b60209091015261238b837fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b61147c565b604080518082019091526018815277617070726f766528616464726573732c75696e743235362960401b6020909101526118fa837f095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba61147c565b6124108361147c60405180606001604052806026815260200161351860269139805160209091012090565b6114ae8361147c60405180606001604052806021815260200161353e60219139805160209091012090565b6040805180820190915260128152716d756c746963616c6c2862797465735b5d2960701b60209091015261248f847fac9650d882acfa253cba1ed543b9ff47351da99c3bd00a89625e5cdb2099009c61147c565b61249a848383611d48565b6124a5838383611d48565b6113c7848383611771565b6124b86128ae565b6001600160a01b03811661251d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610973565b612526816128de565b50565b60008082806020019051810190612540919061337e565b9150915061254d826120c8565b61204d5760405162461bcd60e51b8152602060048201526024808201527f76616c69646174655f77697468647261773a20546f6b656e206e6f7420616c6c6044820152631bddd95960e21b6064820152608401610973565b6008546001600160a01b036101009091041633146125d55760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526002602052604090819020805460ff19169055517f9ca3f065622f5f03f32b7157677a0e420c3a36ab45fd49f256ffebce3e310587906109d090859085908590612dc0565b6008546001600160a01b036101009091041633146126595760405162461bcd60e51b815260040161097390612d62565b6001600160a01b03831660009081526003602052604090819020805460ff19166001179055517fa8f9caaf4861720900294428e4ff34d37070c37afd26d96e6e4da75326d2c3ad906109d090859085908590612dc0565b6060816126be81601f61330a565b10156126fd5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610973565b82612708838261330a565b10156127475760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610973565b612751828461330a565b845110156127955760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610973565b6060821580156127b457604051915060008252602082016040526127fe565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156127ed5780518352602092830192016127d5565b5050858452601f01601f1916604052505b50949350505050565b600080806128158482612938565b92506128228460146129ec565b905061283a6128336003601461330a565b8590612938565b91509193909250565b60006128516003601461330a565b601461285e60038261330a565b612868919061330a565b612872919061330a565b825110159050919050565b606061199461288e6003601461330a565b61289a6003601461330a565b84516128a69190612f8d565b8491906126b0565b6008546001600160a01b036101009091041633146119ac5760405162461bcd60e51b815260040161097390612d62565b600880546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008161294681601461330a565b10156129895760405162461bcd60e51b8152602060048201526012602482015271746f416464726573735f6f766572666c6f7760701b6044820152606401610973565b61299482601461330a565b835110156129dc5760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610973565b500160200151600160601b900490565b6000816129fa81600361330a565b1015612a3c5760405162461bcd60e51b8152602060048201526011602482015270746f55696e7432345f6f766572666c6f7760781b6044820152606401610973565b612a4782600361330a565b83511015612a8e5760405162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b6044820152606401610973565b50016003015190565b6001600160a01b038116811461252657600080fd5b60008083601f840112612abe57600080fd5b5081356001600160401b03811115612ad557600080fd5b602083019150836020828501011115612aed57600080fd5b9250929050565b600080600060408486031215612b0957600080fd5b8335612b1481612a97565b925060208401356001600160401b03811115612b2f57600080fd5b612b3b86828701612aac565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612b8657612b86612b48565b604052919050565b60006001600160401b03821115612ba757612ba7612b48565b50601f01601f191660200190565b600060208284031215612bc757600080fd5b81356001600160401b03811115612bdd57600080fd5b8201601f81018413612bee57600080fd5b8035612c01612bfc82612b8e565b612b5e565b818152856020838501011115612c1657600080fd5b81602084016020830137600091810160200191909152949350505050565b600060208284031215612c4657600080fd5b8135612c5181612a97565b9392505050565b60008060008060608587031215612c6e57600080fd5b8435612c7981612a97565b93506020850135612c8981612a97565b925060408501356001600160401b03811115612ca457600080fd5b612cb087828801612aac565b95989497509550505050565b80356001600160e01b031981168114612cd457600080fd5b919050565b60008060008060608587031215612cef57600080fd5b8435612cfa81612a97565b9350612c8960208601612cbc565b60008060408385031215612d1b57600080fd5b8235612d2681612a97565b9150612d3460208401612cbc565b90509250929050565b600080600060408486031215612d5257600080fd5b83358015158114612b1457600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612de59083018486612d97565b95945050505050565b60006001600160401b03821115612e0757612e07612b48565b5060051b60200190565b600082601f830112612e2257600080fd5b8151612e30612bfc82612b8e565b8181526020856020848701011115612e4757600080fd5b60005b83811015612e65578581018201518382018301528101612e4a565b50506000918101602001919091529392505050565b60006020808385031215612e8d57600080fd5b82516001600160401b0380821115612ea457600080fd5b818501915085601f830112612eb857600080fd5b8151612ec6612bfc82612dee565b81815260059190911b83018401908481019088831115612ee557600080fd5b8585015b83811015612f1d57805185811115612f015760008081fd5b612f0f8b89838a0101612e11565b845250918601918601612ee9565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b805160208201516001600160e01b03198082169291906004831015612f6f5780818460040360031b1b83161693505b505050919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561199457611994612f77565b8051612cd481612a97565b60008060408385031215612fbe57600080fd5b8251612fc981612a97565b6020939093015192949293505050565b60208082526028908201527f76616c6964617465556e69737761705633506174683a20546f6b656e206e6f7460408201526708185b1b1bddd95960c21b606082015260800190565b6000808585111561303157600080fd5b8386111561303e57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156130735780818660040360031b1b83161692505b505092915050565b6000806040838503121561308e57600080fd5b8251915060208301516001600160401b038111156130ab57600080fd5b6130b785828601612e11565b9150509250929050565b6000600182016130d3576130d3612f77565b5060010190565b6001600160a01b03851681526001600160e01b03198416602082015260606040820181905260009061310f9083018486612d97565b9695505050505050565b60008060006060848603121561312e57600080fd5b835161313981612a97565b60208501516040860151919450925061315181612a97565b809150509250925092565b602080825260119082015270151bdad95b881b9bdd08185b1b1bddd959607a1b604082015260600190565b60008060006060848603121561319c57600080fd5b835192506020840151915060408401516001600160401b038111156131c057600080fd5b6131cc86828701612e11565b9150509250925092565b600080600080600060a086880312156131ee57600080fd5b85519450602080870151945060408701516001600160401b0381111561321357600080fd5b8701601f8101891361322457600080fd5b8051613232612bfc82612dee565b81815260059190911b8201830190838101908b83111561325157600080fd5b928401925b8284101561327857835161326981612a97565b82529284019290840190613256565b809750505050505061328c60608701612fa0565b9150608086015190509295509295909350565b6000602082840312156132b157600080fd5b8151612c5181612a97565b6020808252602e908201527f76616c69646174655f7472616e736665724552433230416c6c496e3a20546f6b60408201526d195b881b9bdd08185b1b1bddd95960921b606082015260800190565b8082018082111561199457611994612f77565b60208082526025908201527f76616c69646174653164656c7461506174683a20546f6b656e206e6f7420616c6040820152641b1bddd95960da1b606082015260800190565b8315158152604060208201526000612de5604083018486612d97565b6000806040838503121561339157600080fd5b825161339c81612a97565b60208401519092506133ad81612a97565b809150509250929050565b600080600080608085870312156133ce57600080fd5b84516133d981612a97565b6020860151604087015191955093506133f181612a97565b6060959095015193969295505050565b600060a0828403121561341357600080fd5b60405160a081016001600160401b03828210818311171561343657613436612b48565b81604052829350845191508082111561344e57600080fd5b5061345b85828601612e11565b825250602083015161346c81612a97565b806020830152506040830151604082015260608301516060820152608083015160808201525092915050565b6000602082840312156134aa57600080fd5b81516001600160401b038111156134c057600080fd5b6134cc84828501613401565b94935050505056fe737761704578616374546f6b656e73466f72546f6b656e732875696e743235362c75696e743235362c616464726573735b5d2c616464726573732c75696e7432353629737570706c7928616464726573732c75696e743235362c616464726573732c75696e74313629776974686472617728616464726573732c75696e743235362c6164647265737329617070726f766544656c65676174696f6e28616464726573732c75696e74323536296578616374496e707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929666c6173685377617045786163744f75742875696e743235362c75696e743235362c627974657329666c617368537761704578616374496e2875696e743235362c75696e743235362c62797465732965786163744f7574707574282862797465732c616464726573732c75696e743235362c75696e743235362c75696e743235362929a26469706673582212203662b17178f09b3227d88196bf0d8f1241bf880e674ea18dcce8bf0f36a4fca164736f6c63430008170033","sourceMap":"472:2570:6:-:0;;;611:235;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:0;734:10:2;936:18:0;:32::i;:::-;674:13:6::1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;666:5:6::1;:21:::0;;-1:-1:-1;;;;;666:21:6;;::::1;-1:-1:-1::0;;;;;;666:21:6;;::::1;::::0;::::1;::::0;;;-1:-1:-1;739:28:6;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;777:61:::1;::::0;;-1:-1:-1;;;777:61:6;;::::1;::::0;::::1;521:51:9::0;;;;588:18;;;581:30;647:2;627:18;;;620:30;686:27;666:18;;;659:55;666:21:6;777:17:::1;::::0;731:19:9;;777:61:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;611:235:::0;472:2570;;2426:187:0;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:0;;;-1:-1:-1;;;;;;2534:17:0;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;472:2570:6:-;;;;;;;;:::o;14:290:9:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:9;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:9:o;309:447::-;472:2570:6;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80638da5cb5b116100715780638da5cb5b1461014957806394217ad11461015a578063d13573361461016d578063d2f73e3d14610180578063e8e7f80014610149578063f2fde38b1461019357600080fd5b80631581b600146100b957806337cfecf2146100e95780634a0e159d146100fe5780636c57f5a914610111578063715018a61461012e5780637ceab3b114610136575b600080fd5b6002546100cc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100fc6100f73660046106b9565b6101a6565b005b6100fc61010c366004610726565b61034e565b6001546040516001600160a01b03909116151581526020016100e0565b6100fc610461565b6003546100cc906001600160a01b031681565b6000546001600160a01b03166100cc565b6001546100cc906001600160a01b031681565b6100fc61017b3660046106b9565b610475565b6100fc61018e366004610726565b61049f565b6100fc6101a13660046106b9565b61057f565b6101ae6105fa565b60035460408051632d670ec960e11b81526001600160a01b0384811660048301526024820192909252601a60448201527f496e697469616c206f776e65722063616e2077697468647261770000000000006064820152911690635ace1d9290608401600060405180830381600087803b15801561022a57600080fd5b505af115801561023e573d6000803e3d6000fd5b5050600354604080516372e548a960e01b81523060048201526024810191909152602560448201527f5661756c742063616e207265636569766520746f6b656e732066726f6d206120606482015264747261646560d81b60848201526001600160a01b0390911692506372e548a9915060a401600060405180830381600087803b1580156102cb57600080fd5b505af11580156102df573d6000803e3d6000fd5b505060035460405163f2fde38b60e01b81526001600160a01b038581166004830152909116925063f2fde38b9150602401600060405180830381600087803b15801561032a57600080fd5b505af115801561033e573d6000803e3d6000fd5b5050505061034b8161057f565b50565b6103566105fa565b6001546001600160a01b0316156103d25760035460015460405163299f87d560e21b81526001600160a01b039283169263a67e1f549261039f92911690869086906004016107a4565b600060405180830381600087803b1580156103b957600080fd5b505af11580156103cd573d6000803e3d6000fd5b505050505b600180546001600160a01b0319166001600160a01b0385169081179091551561045c57600354604051631f458b3960e31b81526001600160a01b039091169063fa2c59c890610429908690869086906004016107a4565b600060405180830381600087803b15801561044357600080fd5b505af1158015610457573d6000803e3d6000fd5b505050505b505050565b6104696105fa565b6104736000610654565b565b61047d6105fa565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600354604051636d5025f160e01b81526001600160a01b0390911690636d5025f1906104d59033908790879087906004016107d2565b60006040518083038186803b1580156104ed57600080fd5b505afa158015610501573d6000803e3d6000fd5b50505050600080846001600160a01b03168484604051610522929190610809565b6000604051808303816000865af19150503d806000811461055f576040519150601f19603f3d011682016040523d82523d6000602084013e610564565b606091505b509150915081610578578051602082018181fd5b5050505050565b6105876105fa565b6001600160a01b0381166105f15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61034b81610654565b6000546001600160a01b031633146104735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105e8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461034b57600080fd5b6000602082840312156106cb57600080fd5b81356106d6816106a4565b9392505050565b60008083601f8401126106ef57600080fd5b50813567ffffffffffffffff81111561070757600080fd5b60208301915083602082850101111561071f57600080fd5b9250929050565b60008060006040848603121561073b57600080fd5b8335610746816106a4565b9250602084013567ffffffffffffffff81111561076257600080fd5b61076e868287016106dd565b9497909650939450505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906107c9908301848661077b565b95945050505050565b6001600160a01b038581168252841660208201526060604082018190526000906107ff908301848661077b565b9695505050505050565b818382376000910190815291905056fea2646970667358221220533ff5fe907598ba072fa5925e9a43a5aa6c6a8b02ec694f48d49423f0f14f8764736f6c63430008170033","sourceMap":"472:2570:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;547:30;;;;;-1:-1:-1;;;;;547:30:6;;;;;;-1:-1:-1;;;;;178:32:9;;;160:51;;148:2;133:18;547:30:6;;;;;;;;932:479;;;;;;:::i;:::-;;:::i;:::-;;2103:344;;;;;;:::i;:::-;;:::i;1882:99::-;1948:12;;1882:99;;-1:-1:-1;;;;;1948:12:6;;;:26;;1654:41:9;;1642:2;1627:18;1882:99:6;1514:187:9;1824:101:0;;;:::i;584:20:6:-;;;;;-1:-1:-1;;;;;584:20:6;;;1201:85:0;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;1201:85;;513:27:6;;;;;-1:-1:-1;;;;;513:27:6;;;1417:86;;;;;;:::i;:::-;;:::i;2453:586::-;;;;;;:::i;:::-;;:::i;2074:198:0:-;;;;;;:::i;:::-;;:::i;932:479:6:-;1094:13:0;:11;:13::i;:::-;1105:5:6::1;::::0;:68:::1;::::0;;-1:-1:-1;;;1105:68:6;;-1:-1:-1;;;;;2976:32:9;;;1105:68:6::1;::::0;::::1;2958:51:9::0;3025:18;;;3018:30;;;;3084:2;3064:18;;;3057:30;3123:28;3103:18;;;3096:56;1105:5:6;::::1;::::0;:30:::1;::::0;3169:19:9;;1105:68:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;1183:5:6::1;::::0;:75:::1;::::0;;-1:-1:-1;;;1183:75:6;;1211:4:::1;1183:75;::::0;::::1;3411:51:9::0;3478:18;;;3471:30;;;;3537:2;3517:18;;;3510:30;3576:34;3556:18;;;3549:62;-1:-1:-1;;;3627:19:9;;;3620:36;-1:-1:-1;;;;;1183:5:6;;::::1;::::0;-1:-1:-1;1183:19:6::1;::::0;-1:-1:-1;3673:19:9;;1183:75:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;1268:5:6::1;::::0;:31:::1;::::0;-1:-1:-1;;;1268:31:6;;-1:-1:-1;;;;;178:32:9;;;1268:31:6::1;::::0;::::1;160:51:9::0;1268:5:6;;::::1;::::0;-1:-1:-1;1268:23:6::1;::::0;-1:-1:-1;133:18:9;;1268:31:6::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1379:25;1397:6;1379:17;:25::i;:::-;932:479:::0;:::o;2103:344::-;1094:13:0;:11;:13::i;:::-;2207:12:6::1;::::0;-1:-1:-1;;;;;2207:12:6::1;:26:::0;2204:95:::1;;2249:5;::::0;;2268:12;2249:39:::1;::::0;-1:-1:-1;;;2249:39:6;;-1:-1:-1;;;;;2249:5:6;;::::1;::::0;:18:::1;::::0;:39:::1;::::0;2268:12;::::1;::::0;2282:5;;;;2249:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2204:95;2308:12;:28:::0;;-1:-1:-1;;;;;;2308:28:6::1;-1:-1:-1::0;;;;;2308:28:6;::::1;::::0;;::::1;::::0;;;2349:26;2346:95:::1;;2391:5;::::0;:39:::1;::::0;-1:-1:-1;;;2391:39:6;;-1:-1:-1;;;;;2391:5:6;;::::1;::::0;:17:::1;::::0;:39:::1;::::0;2409:13;;2424:5;;;;2391:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2346:95;2103:344:::0;;;:::o;1824:101:0:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;1417:86:6:-;1094:13:0;:11;:13::i;:::-;1482:5:6::1;:14:::0;;-1:-1:-1;;;;;;1482:14:6::1;-1:-1:-1::0;;;;;1482:14:6;;;::::1;::::0;;;::::1;::::0;;1417:86::o;2453:586::-;2601:5;;:48;;-1:-1:-1;;;2601:48:6;;-1:-1:-1;;;;;2601:5:6;;;;:18;;:48;;2620:10;;2632:6;;2640:8;;;;2601:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2719:12;2733:23;2760:6;-1:-1:-1;;;;;2760:11:6;2772:8;;2760:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2718:63;;;;2796:7;2792:241;;2877:10;2871:17;2944:4;2932:10;2928:21;2990:18;2973:15;2966:43;2792:241;2524:515;;2453:586;;;:::o;2074:198:0:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2162:22:0;::::1;2154:73;;;::::0;-1:-1:-1;;;2154:73:0;;5250:2:9;2154:73:0::1;::::0;::::1;5232:21:9::0;5289:2;5269:18;;;5262:30;5328:34;5308:18;;;5301:62;-1:-1:-1;;;5379:18:9;;;5372:36;5425:19;;2154:73:0::1;;;;;;;;;2237:28;2256:8;2237:18;:28::i;1359:130::-:0;1247:7;1273:6;-1:-1:-1;;;;;1273:6:0;734:10:2;1422:23:0;1414:68;;;;-1:-1:-1;;;1414:68:0;;5657:2:9;1414:68:0;;;5639:21:9;;;5676:18;;;5669:30;5735:34;5715:18;;;5708:62;5787:18;;1414:68:0;5455:356:9;2426:187:0;2499:16;2518:6;;-1:-1:-1;;;;;2534:17:0;;;-1:-1:-1;;;;;;2534:17:0;;;;;;2566:40;;2518:6;;;;;;;2566:40;;2499:16;2566:40;2489:124;2426:187;:::o;222:131:9:-;-1:-1:-1;;;;;297:31:9;;287:42;;277:70;;343:1;340;333:12;358:247;417:6;470:2;458:9;449:7;445:23;441:32;438:52;;;486:1;483;476:12;438:52;525:9;512:23;544:31;569:5;544:31;:::i;:::-;594:5;358:247;-1:-1:-1;;;358:247:9:o;610:348::-;662:8;672:6;726:3;719:4;711:6;707:17;703:27;693:55;;744:1;741;734:12;693:55;-1:-1:-1;767:20:9;;810:18;799:30;;796:50;;;842:1;839;832:12;796:50;879:4;871:6;867:17;855:29;;931:3;924:4;915:6;907;903:19;899:30;896:39;893:59;;;948:1;945;938:12;893:59;610:348;;;;;:::o;963:546::-;1043:6;1051;1059;1112:2;1100:9;1091:7;1087:23;1083:32;1080:52;;;1128:1;1125;1118:12;1080:52;1167:9;1154:23;1186:31;1211:5;1186:31;:::i;:::-;1236:5;-1:-1:-1;1292:2:9;1277:18;;1264:32;1319:18;1308:30;;1305:50;;;1351:1;1348;1341:12;1305:50;1390:59;1441:7;1432:6;1421:9;1417:22;1390:59;:::i;:::-;963:546;;1468:8;;-1:-1:-1;1364:85:9;;-1:-1:-1;;;;963:546:9:o;3703:267::-;3792:6;3787:3;3780:19;3844:6;3837:5;3830:4;3825:3;3821:14;3808:43;-1:-1:-1;3896:1:9;3871:16;;;3889:4;3867:27;;;3860:38;;;;3952:2;3931:15;;;-1:-1:-1;;3927:29:9;3918:39;;;3914:50;;3703:267::o;3975:344::-;-1:-1:-1;;;;;4162:32:9;;4144:51;;4231:2;4226;4211:18;;4204:30;;;-1:-1:-1;;4251:62:9;;4294:18;;4286:6;4278;4251:62;:::i;:::-;4243:70;3975:344;-1:-1:-1;;;;;3975:344:9:o;4324:443::-;-1:-1:-1;;;;;4575:15:9;;;4557:34;;4627:15;;4622:2;4607:18;;4600:43;4679:2;4674;4659:18;;4652:30;;;4500:4;;4699:62;;4742:18;;4734:6;4726;4699:62;:::i;:::-;4691:70;4324:443;-1:-1:-1;;;;;;4324:443:9:o;4772:271::-;4955:6;4947;4942:3;4929:33;4911:3;4981:16;;5006:13;;;4981:16;4772:271;-1:-1:-1;4772:271:9:o","linkReferences":{}},"methodIdentifiers":{"assetManager()":"94217ad1","getWithdrawAddress()":"e8e7f800","guard()":"7ceab3b1","initialiseOwnership(address)":"37cfecf2","isDisabled()":"6c57f5a9","owner()":"8da5cb5b","performCall(address,bytes)":"d2f73e3d","renounceOwnership()":"715018a6","resetGuard(address)":"d1357336","transferOwnership(address)":"f2fde38b","updateAssetManager(address,string)":"4a0e159d","withdrawAddress()":"1581b600"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.23+commit.f704f362\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_assetManager\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"assetManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWithdrawAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guard\",\"outputs\":[{\"internalType\":\"contract GuardV0\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"initialiseOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"performCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract GuardV0\",\"name\":\"_guard\",\"type\":\"address\"}],\"name\":\"resetGuard\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_assetManager\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"notes\",\"type\":\"string\"}],\"name\":\"updateAssetManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getWithdrawAddress()\":{\"notice\":\"Allow single withdrawal destination. Preferably multisig/DAO treasury address.\"},\"initialiseOwnership(address)\":{\"notice\":\"Initialise vault and guard for a withdrawal destination.\"},\"isDisabled()\":{\"notice\":\"Asset manager can no longer trade on this vault. Emergency pause set by the governance. Disable with updateAssetManager().\"},\"updateAssetManager(address,string)\":{\"notice\":\"Change the asset manager. Set to zero address to disable asset manager.\"}},\"notice\":\"Simple vault allowing delegating of a trading activites to a hot wallet. - Self-contained - Guard is used to check asset manager can only perform approved operations. - No shares, single owner - No accounting - No slippage protection (unlike Enzyme)\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/SimpleVaultV0.sol\":\"SimpleVaultV0\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@gnosis.pm/=lib/\",\":@openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5\",\"dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c\",\"dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h\"]},\"src/GuardV0.sol\":{\"keccak256\":\"0x90d2bfbede62f7e44ee960e4ccce6c558c0f745e2969bfcab8e04c11e1c1bd1e\",\"urls\":[\"bzz-raw://7b1ce9e9aea413f26dade35a093ef3324f12c72067a93d062d5959aaa85bc87d\",\"dweb:/ipfs/QmVUnaMWkP2mNHBoxTSt5x1w75vsGzT2knz1XskgZACQyf\"]},\"src/GuardV0Base.sol\":{\"keccak256\":\"0xd1d74d7ce12aeb499be7f8b827c9c1ee17a7a8e646788db81f22dbb9d43f94f8\",\"urls\":[\"bzz-raw://b262a2e05ccac31379c5494936db83a6c6a82357966c1210170fe693c0c82786\",\"dweb:/ipfs/QmRAn9TqMjzrre7gPe9WhLneHEpPcQgu4CAjqG79B7XX1t\"]},\"src/IGuard.sol\":{\"keccak256\":\"0xcb7ae06b3f3406e29c4012a1ba0ff81a8d30e6e760c15241e9182069c34db1c4\",\"urls\":[\"bzz-raw://2ef7e5cc3383a1439396e6c9ff0821b60e461c502d90d83b81b104ad88362f6a\",\"dweb:/ipfs/QmXQWP9shBmdD219btryxgfhY3RExjASgofb41SpAGdWhW\"]},\"src/SimpleVaultV0.sol\":{\"keccak256\":\"0x28de4090f998d49a9e829c2bbf4d18f68774c2e0df71d9347f7d28a633fa8358\",\"urls\":[\"bzz-raw://f859db4a725bc09d1556103b93ae48c166b74482d7c5417a22a6e3088125f1e4\",\"dweb:/ipfs/QmcyuWDou6L57FVsid9dbfqq3uDqo3iYrDyiEAiTpo1EBM\"]},\"src/lib/BytesLib.sol\":{\"keccak256\":\"0x7446c0f0de6eb147f0f3e40b3a72e39d02a951e8c453437dcc6b3c06007bc62a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://1b2b64668ea4287dfe75e1029fef387b0e3ae191b784d1bc5be01edac6d1d5c5\",\"dweb:/ipfs/Qma3zAe3Svez1kdGc5F356m9tRjCDg8F8tAocbd5Qk13PE\"]},\"src/lib/Path.sol\":{\"keccak256\":\"0xb22c562b5175d50dbcc2224325666090d985f052abdcfe275c8dfc884e34de61\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://27aeff27314476ab3c77313ae1f0c5b2442b86315f5ce741cb2150a87c3cbad3\",\"dweb:/ipfs/QmQNno2g1CJvjnH6ych4LuHr1UZDEZPACgYG4XvivxGrqV\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.23+commit.f704f362"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_assetManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"assetManager","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getWithdrawAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"guard","outputs":[{"internalType":"contract GuardV0","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialiseOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"isDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"performCall"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"contract GuardV0","name":"_guard","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"resetGuard"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"address","name":"_assetManager","type":"address"},{"internalType":"string","name":"notes","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"updateAssetManager"},{"inputs":[],"stateMutability":"view","type":"function","name":"withdrawAddress","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{"getWithdrawAddress()":{"notice":"Allow single withdrawal destination. Preferably multisig/DAO treasury address."},"initialiseOwnership(address)":{"notice":"Initialise vault and guard for a withdrawal destination."},"isDisabled()":{"notice":"Asset manager can no longer trade on this vault. Emergency pause set by the governance. Disable with updateAssetManager()."},"updateAssetManager(address,string)":{"notice":"Change the asset manager. Set to zero address to disable asset manager."}},"version":1}},"settings":{"remappings":["@gnosis.pm/=lib/","@openzeppelin/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/SimpleVaultV0.sol":"SimpleVaultV0"},"evmVersion":"paris","libraries":{}},"sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218","urls":["bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32","dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x287b55befed2961a7eabd7d7b1b2839cbca8a5b80ef8dcbb25ed3d4c2002c305","urls":["bzz-raw://bd39944e8fc06be6dbe2dd1d8449b5336e23c6a7ba3e8e9ae5ae0f37f35283f5","dweb:/ipfs/QmPV3FGYjVwvKSgAXKUN3r9T9GwniZz83CxBpM7vyj2G53"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0xa92e4fa126feb6907daa0513ddd816b2eb91f30a808de54f63c17d0e162c3439","urls":["bzz-raw://a367861093b74443b137564d3f3c472f70bcf114739e62059c939f25e315706c","dweb:/ipfs/Qmd7JMpcxD9RuQjK3uM3EzJUgSqdN8vzp8eytEiuwxQJ6h"],"license":"MIT"},"src/GuardV0.sol":{"keccak256":"0x90d2bfbede62f7e44ee960e4ccce6c558c0f745e2969bfcab8e04c11e1c1bd1e","urls":["bzz-raw://7b1ce9e9aea413f26dade35a093ef3324f12c72067a93d062d5959aaa85bc87d","dweb:/ipfs/QmVUnaMWkP2mNHBoxTSt5x1w75vsGzT2knz1XskgZACQyf"],"license":null},"src/GuardV0Base.sol":{"keccak256":"0xd1d74d7ce12aeb499be7f8b827c9c1ee17a7a8e646788db81f22dbb9d43f94f8","urls":["bzz-raw://b262a2e05ccac31379c5494936db83a6c6a82357966c1210170fe693c0c82786","dweb:/ipfs/QmRAn9TqMjzrre7gPe9WhLneHEpPcQgu4CAjqG79B7XX1t"],"license":null},"src/IGuard.sol":{"keccak256":"0xcb7ae06b3f3406e29c4012a1ba0ff81a8d30e6e760c15241e9182069c34db1c4","urls":["bzz-raw://2ef7e5cc3383a1439396e6c9ff0821b60e461c502d90d83b81b104ad88362f6a","dweb:/ipfs/QmXQWP9shBmdD219btryxgfhY3RExjASgofb41SpAGdWhW"],"license":null},"src/SimpleVaultV0.sol":{"keccak256":"0x28de4090f998d49a9e829c2bbf4d18f68774c2e0df71d9347f7d28a633fa8358","urls":["bzz-raw://f859db4a725bc09d1556103b93ae48c166b74482d7c5417a22a6e3088125f1e4","dweb:/ipfs/QmcyuWDou6L57FVsid9dbfqq3uDqo3iYrDyiEAiTpo1EBM"],"license":null},"src/lib/BytesLib.sol":{"keccak256":"0x7446c0f0de6eb147f0f3e40b3a72e39d02a951e8c453437dcc6b3c06007bc62a","urls":["bzz-raw://1b2b64668ea4287dfe75e1029fef387b0e3ae191b784d1bc5be01edac6d1d5c5","dweb:/ipfs/Qma3zAe3Svez1kdGc5F356m9tRjCDg8F8tAocbd5Qk13PE"],"license":"Unlicense"},"src/lib/Path.sol":{"keccak256":"0xb22c562b5175d50dbcc2224325666090d985f052abdcfe275c8dfc884e34de61","urls":["bzz-raw://27aeff27314476ab3c77313ae1f0c5b2442b86315f5ce741cb2150a87c3cbad3","dweb:/ipfs/QmQNno2g1CJvjnH6ych4LuHr1UZDEZPACgYG4XvivxGrqV"],"license":"GPL-2.0-or-later"}},"version":1},"id":6} \ No newline at end of file diff --git a/tests/guard/test_guard_simple_vault_uniswap_v2.py b/tests/guard/test_guard_simple_vault_uniswap_v2.py index 65f65b6b..944ae886 100644 --- a/tests/guard/test_guard_simple_vault_uniswap_v2.py +++ b/tests/guard/test_guard_simple_vault_uniswap_v2.py @@ -266,7 +266,6 @@ def test_guard_token_in_not_approved( target, call_data = encode_simple_vault_transaction(trade_call) vault.functions.performCall(target, call_data).transact({"from": asset_manager}) - def test_guard_token_in_not_approved( uniswap_v2: UniswapV2Deployment, weth_usdc_pair: PairDetails, @@ -458,3 +457,49 @@ def test_guard_third_party_trade( with pytest.raises(TransactionFailed, match="Sender not allowed"): target, call_data = encode_simple_vault_transaction(trade_call) vault.functions.performCall(target, call_data).transact({"from": third_party}) + + +def test_guard_can_trade_any_asset_uniswap_v2( + web3: Web3, + uniswap_v2: UniswapV2Deployment, + weth_usdc_pair: PairDetails, + owner: str, + asset_manager: str, + deployer: str, + weth: Contract, + usdc: Contract, +): + """After whitelist removed, we can trade any asset.""" + weth = uniswap_v2.weth + vault = deploy_contract(web3, "guard/SimpleVaultV0.json", deployer, asset_manager) + vault.functions.initialiseOwnership(owner).transact({"from": deployer}) + + guard = get_deployed_contract(web3, "guard/GuardV0.json", vault.functions.guard().call()) + guard.functions.whitelistUniswapV2Router(uniswap_v2.router.address, "Allow Uniswap v2").transact({"from": owner}) + guard.functions.setAnyAssetAllowed(True, "Allow any asset").transact({"from": owner}) + + usdc_amount = 10_000 * 10**6 + usdc.functions.transfer(vault.address, usdc_amount).transact({"from": deployer}) + + path = [usdc.address, weth.address] + + approve_call = usdc.functions.approve( + uniswap_v2.router.address, + usdc_amount, + ) + + target, call_data = encode_simple_vault_transaction(approve_call) + vault.functions.performCall(target, call_data).transact({"from": asset_manager}) + + trade_call = uniswap_v2.router.functions.swapExactTokensForTokens( + usdc_amount, + 0, + path, + vault.address, + FOREVER_DEADLINE, + ) + + target, call_data = encode_simple_vault_transaction(trade_call) + vault.functions.performCall(target, call_data).transact({"from": asset_manager}) + + assert weth.functions.balanceOf(vault.address).call() == 3696700037078235076 \ No newline at end of file From 0f7a0ae9a842d83d3b755d711e4b4bf3fde87c65 Mon Sep 17 00:00:00 2001 From: Mikko Ohtamaa Date: Wed, 1 Jan 2025 21:57:50 +0100 Subject: [PATCH 2/2] Try both ways --- .../test_guard_simple_vault_uniswap_v2.py | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/tests/guard/test_guard_simple_vault_uniswap_v2.py b/tests/guard/test_guard_simple_vault_uniswap_v2.py index 944ae886..f2810545 100644 --- a/tests/guard/test_guard_simple_vault_uniswap_v2.py +++ b/tests/guard/test_guard_simple_vault_uniswap_v2.py @@ -483,6 +483,10 @@ def test_guard_can_trade_any_asset_uniswap_v2( path = [usdc.address, weth.address] + # + # Buy WETH + # + approve_call = usdc.functions.approve( uniswap_v2.router.address, usdc_amount, @@ -502,4 +506,27 @@ def test_guard_can_trade_any_asset_uniswap_v2( target, call_data = encode_simple_vault_transaction(trade_call) vault.functions.performCall(target, call_data).transact({"from": asset_manager}) - assert weth.functions.balanceOf(vault.address).call() == 3696700037078235076 \ No newline at end of file + weth_amount = 3696700037078235076 + assert weth.functions.balanceOf(vault.address).call() == weth_amount + + # + # Sell it back + # + + approve_call = weth.functions.approve( + uniswap_v2.router.address, + weth_amount, + ) + target, call_data = encode_simple_vault_transaction(approve_call) + vault.functions.performCall(target, call_data).transact({"from": asset_manager}) + + trade_call = uniswap_v2.router.functions.swapExactTokensForTokens( + weth_amount, + 0, + [weth.address, usdc.address], + vault.address, + FOREVER_DEADLINE, + ) + + target, call_data = encode_simple_vault_transaction(trade_call) + vault.functions.performCall(target, call_data).transact({"from": asset_manager})