Files
smom-dbis-138/artifacts/contracts/liquidity/PoolManager.sol/PoolManager.json
2026-03-02 12:14:09 -08:00

963 lines
48 KiB
JSON

{
"_format": "hh-sol-artifact-1",
"contractName": "PoolManager",
"sourceName": "contracts/liquidity/PoolManager.sol",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "AccessControlBadConfirmation",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "bytes32",
"name": "neededRole",
"type": "bytes32"
}
],
"name": "AccessControlUnauthorizedAccount",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "target",
"type": "address"
}
],
"name": "AddressEmptyCode",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "ERC1967InvalidImplementation",
"type": "error"
},
{
"inputs": [],
"name": "ERC1967NonPayable",
"type": "error"
},
{
"inputs": [],
"name": "FailedInnerCall",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"inputs": [],
"name": "UUPSUnauthorizedCallContext",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "slot",
"type": "bytes32"
}
],
"name": "UUPSUnsupportedProxiableUUID",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "token",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "provider",
"type": "address"
},
{
"indexed": false,
"internalType": "enum UniversalAssetRegistry.AssetType",
"name": "assetType",
"type": "uint8"
}
],
"name": "PoolCreated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "isHealthy",
"type": "bool"
},
{
"indexed": false,
"internalType": "string",
"name": "reason",
"type": "string"
}
],
"name": "PoolHealthChecked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newLiquidityUSD",
"type": "uint256"
}
],
"name": "PoolLiquidityUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "previousAdminRole",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "newAdminRole",
"type": "bytes32"
}
],
"name": "RoleAdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleGranted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleRevoked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "Upgraded",
"type": "event"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "POOL_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "UPGRADER_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "UPGRADE_INTERFACE_VERSION",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "allPools",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "assetRegistry",
"outputs": [
{
"internalType": "contract UniversalAssetRegistry",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "pool",
"type": "address"
}
],
"name": "checkPoolHealth",
"outputs": [
{
"internalType": "bool",
"name": "isHealthy",
"type": "bool"
},
{
"internalType": "string",
"name": "reason",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "curveProvider",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "dodoProvider",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getAllPools",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getPoolCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "pool",
"type": "address"
}
],
"name": "getPoolInfo",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"internalType": "address",
"name": "provider",
"type": "address"
},
{
"internalType": "address",
"name": "tokenA",
"type": "address"
},
{
"internalType": "address",
"name": "tokenB",
"type": "address"
},
{
"internalType": "uint256",
"name": "liquidityUSD",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "volume24h",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "createdAt",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lastUpdateTime",
"type": "uint256"
},
{
"internalType": "bool",
"name": "isActive",
"type": "bool"
}
],
"internalType": "struct PoolManager.PoolInfo",
"name": "",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "getPoolsForToken",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"internalType": "address",
"name": "provider",
"type": "address"
},
{
"internalType": "address",
"name": "tokenA",
"type": "address"
},
{
"internalType": "address",
"name": "tokenB",
"type": "address"
},
{
"internalType": "uint256",
"name": "liquidityUSD",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "volume24h",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "createdAt",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lastUpdateTime",
"type": "uint256"
},
{
"internalType": "bool",
"name": "isActive",
"type": "bool"
}
],
"internalType": "struct PoolManager.PoolInfo[]",
"name": "",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleAdmin",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_assetRegistry",
"type": "address"
},
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "enum UniversalAssetRegistry.AssetType",
"name": "assetType",
"type": "uint8"
}
],
"name": "onAssetRegistered",
"outputs": [
{
"internalType": "address",
"name": "pool",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "poolRegistry",
"outputs": [
{
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"internalType": "address",
"name": "provider",
"type": "address"
},
{
"internalType": "address",
"name": "tokenA",
"type": "address"
},
{
"internalType": "address",
"name": "tokenB",
"type": "address"
},
{
"internalType": "uint256",
"name": "liquidityUSD",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "volume24h",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "createdAt",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lastUpdateTime",
"type": "uint256"
},
{
"internalType": "bool",
"name": "isActive",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "proxiableUUID",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"internalType": "address",
"name": "provider",
"type": "address"
},
{
"internalType": "address",
"name": "tokenA",
"type": "address"
},
{
"internalType": "address",
"name": "tokenB",
"type": "address"
},
{
"internalType": "uint256",
"name": "liquidityUSD",
"type": "uint256"
}
],
"name": "registerPool",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "callerConfirmation",
"type": "address"
}
],
"name": "renounceRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_dodoProvider",
"type": "address"
},
{
"internalType": "address",
"name": "_uniswapV3Provider",
"type": "address"
},
{
"internalType": "address",
"name": "_curveProvider",
"type": "address"
}
],
"name": "setProviders",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "tokenPools",
"outputs": [
{
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"internalType": "address",
"name": "provider",
"type": "address"
},
{
"internalType": "address",
"name": "tokenA",
"type": "address"
},
{
"internalType": "address",
"name": "tokenB",
"type": "address"
},
{
"internalType": "uint256",
"name": "liquidityUSD",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "volume24h",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "createdAt",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lastUpdateTime",
"type": "uint256"
},
{
"internalType": "bool",
"name": "isActive",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "uniswapV3Provider",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "pool",
"type": "address"
},
{
"internalType": "uint256",
"name": "liquidityUSD",
"type": "uint256"
}
],
"name": "updatePoolLiquidity",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newImplementation",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "upgradeToAndCall",
"outputs": [],
"stateMutability": "payable",
"type": "function"
}
],
"bytecode": "0x60a080604052346100cc57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c166100bd57506001600160401b036002600160401b031982821601610078575b604051611adb90816100d2823960805181818161079d015261087d0152f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1388080610059565b63f92ee8a960e01b8152600490fd5b600080fdfe608060408181526004918236101561001657600080fd5b600092833560e01c91826301ffc9a7146110775750816306bfa93814610ff4578163162f37fa14610eff5781631bad077614610e6e5781631e8a005014610e45578163248a9ca314610e0d5781632f2ff15d14610de3578163306af95514610d1d57816336568abe14610cd75781633c29777914610cae57816341d1de9714610c6d578163485cc95514610ac75781634f1ef2861461080157816352d1902d1461078857816364fa150c146107475781638eec5d701461072857816391d14854146106d4578163979d7e86146106ac578163a217fddf14610691578163aa967fe714610644578163ad3cb1cc146105ff578163b8f6dba7146105c4578163d547741f14610577578163d88ff1f4146104af578163edf7ae2114610433578163ee59b8131461027e578163f0144727146101cd578163f34782ff146101a1575063f72c0d8b1461016457600080fd5b3461019d578160031936011261019d57602090517f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e38152f35b5080fd5b9050346101c957826003193601126101c9575490516001600160a01b03909116815260209150f35b8280fd5b9050346101c95760603660031901126101c9576101e86110ca565b916101f16110e5565b916101fa6110fb565b91858052600080516020611a8683398151915260205280862033875260205260ff818720541615610261575060018060a01b03928391826bffffffffffffffffffffffff60a01b961686825416179055168360055416176005551690600654161760065580f35b9085604492519163e2517d3f60e01b835233908301526024820152fd5b919050346101c95760a03660031901126101c95761029a6110ca565b916102a36110e5565b6102ab6110fb565b906064359360018060a01b039586861680960361042f5786906102cc611634565b169485156103fd578588526020936002855260ff6008848b200154166103c5578790818451956102fb87611234565b898752168686015216808385015281606085015260843560808501528860a08501524260c08501524260e085015260016101008501528689526002855261034484848b20611554565b8089526001855261035784848b206115ef565b81036103ab575b5050505060035490600160401b821015610398575080600161038392016003556111fd565b909283549160031b92831b921b191617905580f35b634e487b7160e01b855260419052602484fd5b6103bc9360019189525286206115ef565b3880808061035e565b825162461bcd60e51b81528087018690526012602482015271105b1c9958591e481c9959da5cdd195c995960721b6044820152606490fd5b815162461bcd60e51b8152602081870152600c60248201526b5a65726f206164647265737360a01b6044820152606490fd5b8780fd5b83833461019d57602036600319011261019d576001600160a01b03916104ab919081908461045f6110ca565b1681526002602052208381541693806001830154169581600284015416916003840154169083015460058401549160068501549360ff60086007880154970154169651998a998a6111a9565b0390f35b8284346105745780600319360112610574579080519182906003549182855260208095018093600384527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90845b8181106105575750505081610513910382611283565b83519485948186019282875251809352850193925b82811061053757505050500390f35b83516001600160a01b031685528695509381019392810192600101610528565b82546001600160a01b0316845292880192600192830192016104fd565b80fd5b919050346101c957806003193601126101c9576105c091356105bb600161059c6110e5565b93838752600080516020611a86833981519152602052862001546116ae565b61193e565b5080f35b50503461019d578160031936011261019d57602090517f24e583e35a20f9ecfc1572e7cb66bcc18ad3cd1650ec40dbf6ad2290e553a9fa8152f35b50503461019d578160031936011261019d5780516104ab9161062082611267565b60058252640352e302e360dc1b6020830152519182916020835260208301906112c1565b50503461019d578060031936011261019d5761065e6110ca565b60243592600a84101561057457506020926106809161067b611634565b611491565b90516001600160a01b039091168152f35b50503461019d578160031936011261019d5751908152602090f35b50503461019d578160031936011261019d57905490516001600160a01b039091168152602090f35b9050346101c957816003193601126101c9578160209360ff926106f56110e5565b90358252600080516020611a8683398151915286528282206001600160a01b039091168252855220549151911615158152f35b50503461019d578160031936011261019d576020906003549051908152f35b82843461057457602036600319011261057457506104ab61076e6107696110ca565b61137b565b8392919251938493151584528060208501528301906112c1565b828434610574578060031936011261057457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036107f457602090517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b5163703e46dd60e11b8152fd5b918091506003193601126101c9576108176110ca565b90602493843567ffffffffffffffff811161019d573660238201121561019d5780850135610844816112a5565b9461085185519687611283565b81865260209182870193368a8383010111610ac3578186928b8693018737880101526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116308114908115610a95575b50610a85577f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3808652600080516020611a868339815191528452868620338752845260ff878720541615610a68575081169585516352d1902d60e01b815283818a818b5afa869181610a35575b50610932575050505050505191634c9c8ce360e01b8352820152fd5b9088888894938c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91828103610a205750853b15610a0c575080546001600160a01b031916821790558451889392917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a28251156109ee5750506105c09582915190845af4913d156109e4573d6109d66109cd826112a5565b92519283611283565b81528581943d92013e611a02565b5060609250611a02565b955095505050505034610a0057505080f35b63b398979f60e01b8152fd5b8651634c9c8ce360e01b8152808501849052fd5b8751632a87526960e21b815280860191909152fd5b9091508481813d8311610a61575b610a4d8183611283565b81010312610a5d57519038610916565b8680fd5b503d610a43565b865163e2517d3f60e01b815233818b0152808b0191909152604490fd5b855163703e46dd60e11b81528890fd5b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54161415386108a9565b8580fd5b9050346101c957816003193601126101c957610ae16110ca565b610ae96110e5565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009283549260ff84871c16159367ffffffffffffffff811680159081610c65575b6001149081610c5b575b159081610c52575b50610c425767ffffffffffffffff198116600117865584610c23575b50610b616119c1565b610b696119c1565b6001600160a01b0316908115610bf0575085546001600160a01b031916178555610ba690610b96816116e1565b50610ba08161176f565b5061181f565b50610baf578280f35b805468ff00000000000000001916905551600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a138808280f35b606490602087519162461bcd60e51b8352820152600d60248201526c5a65726f20726567697374727960981b6044820152fd5b68ffffffffffffffffff19166801000000000000000117855538610b58565b865163f92ee8a960e01b81528390fd5b90501538610b3c565b303b159150610b34565b869150610b2a565b9050346101c95760203660031901126101c95735916003548310156105745750610c986020926111fd565b60018060a01b0391549060031b1c169051908152f35b50503461019d578160031936011261019d5760055490516001600160a01b039091168152602090f35b83833461019d578060031936011261019d57610cf16110e5565b90336001600160a01b03831603610d0e57506105c091923561193e565b5163334bd91960e11b81528390fd5b919050346101c957806003193601126101c957610d386110ca565b9060243591610d45611634565b6001600160a01b031680855260026020528185206008015490939060ff1615610dab57916020917fe5c4f68aee87bf74b03a8dd0c4b59b070b6122c336fcc54a0c5b4c13fe23d53b9385875260028452828288209182015560074291015551908152a280f35b6020606492519162461bcd60e51b83528201526013602482015272141bdbdb081b9bdd081c9959da5cdd195c9959606a1b6044820152fd5b919050346101c957806003193601126101c9576105c09135610e08600161059c6110e5565b6118c9565b9050346101c95760203660031901126101c95781602093600192358152600080516020611a8683398151915285522001549051908152f35b50503461019d578160031936011261019d5760065490516001600160a01b039091168152602090f35b83833461019d578060031936011261019d57610e886110ca565b6001600160a01b0390811683526001602052818320805491936024359283101561057457506104ab9291610ebb91611177565b508381541693806001830154169581600284015416916003840154169083015460058401549160068501549360ff60086007880154970154169651998a998a6111a9565b828434610574576020928360031936011261019d576001600160a01b03610f246110ca565b168252600193600181528383209283549267ffffffffffffffff8411610fe1575084928692845191610f5b828260051b0184611283565b8083528183018097855282852085915b838310610fb857505050508451948186019282875251809352850195925b828110610f965785870386f35b909192938261012088610fab849a8951611111565b0197950193929101610f89565b96600985829b99610fcc859a98999a611301565b81520192019201919098969895949395610f6b565b634e487b7160e01b825260419052602490fd5b50503461019d57602036600319011261019d5761107561106c826101209461101a6110ca565b81610100845161102981611234565b82815282602082015282868201528260608201528260808201528260a08201528260c08201528260e0820152015260018060a01b03168152600260205220611301565b91518092611111565bf35b8491346101c95760203660031901126101c9573563ffffffff60e01b81168091036101c95760209250637965db0b60e01b81149081156110b9575b5015158152f35b6301ffc9a760e01b149050836110b2565b600435906001600160a01b03821682036110e057565b600080fd5b602435906001600160a01b03821682036110e057565b604435906001600160a01b03821682036110e057565b60018060a01b0380825116835280602083015116602084015280604083015116604084015260608201511660608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e0830152610100809101511515910152565b8054821015611193576000526009602060002091020190600090565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0391821681529181166020830152918216604082015291166060820152608081019190915260a081019190915260c081019190915260e08101919091529015156101008201526101200190565b6003548110156111935760036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0190600090565b610120810190811067ffffffffffffffff82111761125157604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761125157604052565b90601f8019910116810190811067ffffffffffffffff82111761125157604052565b67ffffffffffffffff811161125157601f01601f191660200190565b919082519283825260005b8481106112ed575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016112cc565b9060405161130e81611234565b82546001600160a01b039081168252600184015481166020830152600284015481166040830152600384015416606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260089092015460ff161515610100830152565b6001600160a01b0316600090815260026020526040812061139b90611301565b6101008101511561146657683635c9adc5dea000006080820151106114325760e00151420342811161141e5762093a80106113f757506001906040516113e081611267565b60078152664865616c74687960c81b602082015290565b9060405161140481611267565b600a8152695374616c65206461746160b01b602082015290565b634e487b7160e01b82526011600452602482fd5b509060405161144081611267565b6016815275496e73756666696369656e74206c697175696469747960501b602082015290565b509060405161147481611267565b600d81526c506f6f6c20696e61637469766560981b602082015290565b600a8210158061150157600783148015611546575b81901561151757506000925b6004546040516001600160a01b0391821681529093909261150157836040917f645ee41665486bc487a04a91a2bd296d2d2395cabf7747b152436dd15f9d4f8f9360208601521693851692a390565b634e487b7160e01b600052602160045260246000fd5b6115015782158015611539575b15611531576000926114b2565b505050600090565b5050600060088314611524565b5060009050600183146114a6565b60086101009160018060a01b03808551166bffffffffffffffffffffffff60a01b90818454161783556001830182602088015116828254161790556002830182604088015116828254161790556003830191606087015116908254161790556080840151600482015560a0840151600582015560c0840151600682015560e0840151600782015501910151151560ff80198354169116179055565b8054600160401b8110156112515761160c91600182018155611177565b91909161161e5761161c91611554565b565b634e487b7160e01b600052600060045260246000fd5b3360009081527faffd1732687094f1280c3f66d1d5b6816ab020975386701bbf88fe57f2f2644460205260409020547f24e583e35a20f9ecfc1572e7cb66bcc18ad3cd1650ec40dbf6ad2290e553a9fa9060ff16156116905750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b80600052600080516020611a8683398151915260205260406000203360005260205260ff60406000205416156116905750565b6001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812054909190600080516020611a868339815191529060ff1661176a578280526020526040822081835260205260408220600160ff198254161790553391600080516020611a668339815191528180a4600190565b505090565b6001600160a01b031660008181527faffd1732687094f1280c3f66d1d5b6816ab020975386701bbf88fe57f2f2644460205260408120549091907f24e583e35a20f9ecfc1572e7cb66bcc18ad3cd1650ec40dbf6ad2290e553a9fa90600080516020611a868339815191529060ff16611819578184526020526040832082845260205260408320600160ff19825416179055600080516020611a66833981519152339380a4600190565b50505090565b6001600160a01b031660008181527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a860205260408120549091907f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e390600080516020611a868339815191529060ff16611819578184526020526040832082845260205260408320600160ff19825416179055600080516020611a66833981519152339380a4600190565b90600091808352600080516020611a8683398151915280602052604084209260018060a01b03169283855260205260ff60408520541615600014611819578184526020526040832082845260205260408320600160ff19825416179055600080516020611a66833981519152339380a4600190565b90600091808352600080516020611a8683398151915280602052604084209260018060a01b03169283855260205260ff60408520541660001461181957818452602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c16156119f057565b604051631afcd79f60e31b8152600490fd5b90611a295750805115611a1757805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580611a5c575b611a3a575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15611a3256fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212204c6d71da038f778cc18f2c1936626663a581c2af2eb9c9004fde970d6f162c4964736f6c63430008160033",
"deployedBytecode": "0x608060408181526004918236101561001657600080fd5b600092833560e01c91826301ffc9a7146110775750816306bfa93814610ff4578163162f37fa14610eff5781631bad077614610e6e5781631e8a005014610e45578163248a9ca314610e0d5781632f2ff15d14610de3578163306af95514610d1d57816336568abe14610cd75781633c29777914610cae57816341d1de9714610c6d578163485cc95514610ac75781634f1ef2861461080157816352d1902d1461078857816364fa150c146107475781638eec5d701461072857816391d14854146106d4578163979d7e86146106ac578163a217fddf14610691578163aa967fe714610644578163ad3cb1cc146105ff578163b8f6dba7146105c4578163d547741f14610577578163d88ff1f4146104af578163edf7ae2114610433578163ee59b8131461027e578163f0144727146101cd578163f34782ff146101a1575063f72c0d8b1461016457600080fd5b3461019d578160031936011261019d57602090517f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e38152f35b5080fd5b9050346101c957826003193601126101c9575490516001600160a01b03909116815260209150f35b8280fd5b9050346101c95760603660031901126101c9576101e86110ca565b916101f16110e5565b916101fa6110fb565b91858052600080516020611a8683398151915260205280862033875260205260ff818720541615610261575060018060a01b03928391826bffffffffffffffffffffffff60a01b961686825416179055168360055416176005551690600654161760065580f35b9085604492519163e2517d3f60e01b835233908301526024820152fd5b919050346101c95760a03660031901126101c95761029a6110ca565b916102a36110e5565b6102ab6110fb565b906064359360018060a01b039586861680960361042f5786906102cc611634565b169485156103fd578588526020936002855260ff6008848b200154166103c5578790818451956102fb87611234565b898752168686015216808385015281606085015260843560808501528860a08501524260c08501524260e085015260016101008501528689526002855261034484848b20611554565b8089526001855261035784848b206115ef565b81036103ab575b5050505060035490600160401b821015610398575080600161038392016003556111fd565b909283549160031b92831b921b191617905580f35b634e487b7160e01b855260419052602484fd5b6103bc9360019189525286206115ef565b3880808061035e565b825162461bcd60e51b81528087018690526012602482015271105b1c9958591e481c9959da5cdd195c995960721b6044820152606490fd5b815162461bcd60e51b8152602081870152600c60248201526b5a65726f206164647265737360a01b6044820152606490fd5b8780fd5b83833461019d57602036600319011261019d576001600160a01b03916104ab919081908461045f6110ca565b1681526002602052208381541693806001830154169581600284015416916003840154169083015460058401549160068501549360ff60086007880154970154169651998a998a6111a9565b0390f35b8284346105745780600319360112610574579080519182906003549182855260208095018093600384527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90845b8181106105575750505081610513910382611283565b83519485948186019282875251809352850193925b82811061053757505050500390f35b83516001600160a01b031685528695509381019392810192600101610528565b82546001600160a01b0316845292880192600192830192016104fd565b80fd5b919050346101c957806003193601126101c9576105c091356105bb600161059c6110e5565b93838752600080516020611a86833981519152602052862001546116ae565b61193e565b5080f35b50503461019d578160031936011261019d57602090517f24e583e35a20f9ecfc1572e7cb66bcc18ad3cd1650ec40dbf6ad2290e553a9fa8152f35b50503461019d578160031936011261019d5780516104ab9161062082611267565b60058252640352e302e360dc1b6020830152519182916020835260208301906112c1565b50503461019d578060031936011261019d5761065e6110ca565b60243592600a84101561057457506020926106809161067b611634565b611491565b90516001600160a01b039091168152f35b50503461019d578160031936011261019d5751908152602090f35b50503461019d578160031936011261019d57905490516001600160a01b039091168152602090f35b9050346101c957816003193601126101c9578160209360ff926106f56110e5565b90358252600080516020611a8683398151915286528282206001600160a01b039091168252855220549151911615158152f35b50503461019d578160031936011261019d576020906003549051908152f35b82843461057457602036600319011261057457506104ab61076e6107696110ca565b61137b565b8392919251938493151584528060208501528301906112c1565b828434610574578060031936011261057457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036107f457602090517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b5163703e46dd60e11b8152fd5b918091506003193601126101c9576108176110ca565b90602493843567ffffffffffffffff811161019d573660238201121561019d5780850135610844816112a5565b9461085185519687611283565b81865260209182870193368a8383010111610ac3578186928b8693018737880101526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116308114908115610a95575b50610a85577f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3808652600080516020611a868339815191528452868620338752845260ff878720541615610a68575081169585516352d1902d60e01b815283818a818b5afa869181610a35575b50610932575050505050505191634c9c8ce360e01b8352820152fd5b9088888894938c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91828103610a205750853b15610a0c575080546001600160a01b031916821790558451889392917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a28251156109ee5750506105c09582915190845af4913d156109e4573d6109d66109cd826112a5565b92519283611283565b81528581943d92013e611a02565b5060609250611a02565b955095505050505034610a0057505080f35b63b398979f60e01b8152fd5b8651634c9c8ce360e01b8152808501849052fd5b8751632a87526960e21b815280860191909152fd5b9091508481813d8311610a61575b610a4d8183611283565b81010312610a5d57519038610916565b8680fd5b503d610a43565b865163e2517d3f60e01b815233818b0152808b0191909152604490fd5b855163703e46dd60e11b81528890fd5b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54161415386108a9565b8580fd5b9050346101c957816003193601126101c957610ae16110ca565b610ae96110e5565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009283549260ff84871c16159367ffffffffffffffff811680159081610c65575b6001149081610c5b575b159081610c52575b50610c425767ffffffffffffffff198116600117865584610c23575b50610b616119c1565b610b696119c1565b6001600160a01b0316908115610bf0575085546001600160a01b031916178555610ba690610b96816116e1565b50610ba08161176f565b5061181f565b50610baf578280f35b805468ff00000000000000001916905551600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a138808280f35b606490602087519162461bcd60e51b8352820152600d60248201526c5a65726f20726567697374727960981b6044820152fd5b68ffffffffffffffffff19166801000000000000000117855538610b58565b865163f92ee8a960e01b81528390fd5b90501538610b3c565b303b159150610b34565b869150610b2a565b9050346101c95760203660031901126101c95735916003548310156105745750610c986020926111fd565b60018060a01b0391549060031b1c169051908152f35b50503461019d578160031936011261019d5760055490516001600160a01b039091168152602090f35b83833461019d578060031936011261019d57610cf16110e5565b90336001600160a01b03831603610d0e57506105c091923561193e565b5163334bd91960e11b81528390fd5b919050346101c957806003193601126101c957610d386110ca565b9060243591610d45611634565b6001600160a01b031680855260026020528185206008015490939060ff1615610dab57916020917fe5c4f68aee87bf74b03a8dd0c4b59b070b6122c336fcc54a0c5b4c13fe23d53b9385875260028452828288209182015560074291015551908152a280f35b6020606492519162461bcd60e51b83528201526013602482015272141bdbdb081b9bdd081c9959da5cdd195c9959606a1b6044820152fd5b919050346101c957806003193601126101c9576105c09135610e08600161059c6110e5565b6118c9565b9050346101c95760203660031901126101c95781602093600192358152600080516020611a8683398151915285522001549051908152f35b50503461019d578160031936011261019d5760065490516001600160a01b039091168152602090f35b83833461019d578060031936011261019d57610e886110ca565b6001600160a01b0390811683526001602052818320805491936024359283101561057457506104ab9291610ebb91611177565b508381541693806001830154169581600284015416916003840154169083015460058401549160068501549360ff60086007880154970154169651998a998a6111a9565b828434610574576020928360031936011261019d576001600160a01b03610f246110ca565b168252600193600181528383209283549267ffffffffffffffff8411610fe1575084928692845191610f5b828260051b0184611283565b8083528183018097855282852085915b838310610fb857505050508451948186019282875251809352850195925b828110610f965785870386f35b909192938261012088610fab849a8951611111565b0197950193929101610f89565b96600985829b99610fcc859a98999a611301565b81520192019201919098969895949395610f6b565b634e487b7160e01b825260419052602490fd5b50503461019d57602036600319011261019d5761107561106c826101209461101a6110ca565b81610100845161102981611234565b82815282602082015282868201528260608201528260808201528260a08201528260c08201528260e0820152015260018060a01b03168152600260205220611301565b91518092611111565bf35b8491346101c95760203660031901126101c9573563ffffffff60e01b81168091036101c95760209250637965db0b60e01b81149081156110b9575b5015158152f35b6301ffc9a760e01b149050836110b2565b600435906001600160a01b03821682036110e057565b600080fd5b602435906001600160a01b03821682036110e057565b604435906001600160a01b03821682036110e057565b60018060a01b0380825116835280602083015116602084015280604083015116604084015260608201511660608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e0830152610100809101511515910152565b8054821015611193576000526009602060002091020190600090565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0391821681529181166020830152918216604082015291166060820152608081019190915260a081019190915260c081019190915260e08101919091529015156101008201526101200190565b6003548110156111935760036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0190600090565b610120810190811067ffffffffffffffff82111761125157604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761125157604052565b90601f8019910116810190811067ffffffffffffffff82111761125157604052565b67ffffffffffffffff811161125157601f01601f191660200190565b919082519283825260005b8481106112ed575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016112cc565b9060405161130e81611234565b82546001600160a01b039081168252600184015481166020830152600284015481166040830152600384015416606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260089092015460ff161515610100830152565b6001600160a01b0316600090815260026020526040812061139b90611301565b6101008101511561146657683635c9adc5dea000006080820151106114325760e00151420342811161141e5762093a80106113f757506001906040516113e081611267565b60078152664865616c74687960c81b602082015290565b9060405161140481611267565b600a8152695374616c65206461746160b01b602082015290565b634e487b7160e01b82526011600452602482fd5b509060405161144081611267565b6016815275496e73756666696369656e74206c697175696469747960501b602082015290565b509060405161147481611267565b600d81526c506f6f6c20696e61637469766560981b602082015290565b600a8210158061150157600783148015611546575b81901561151757506000925b6004546040516001600160a01b0391821681529093909261150157836040917f645ee41665486bc487a04a91a2bd296d2d2395cabf7747b152436dd15f9d4f8f9360208601521693851692a390565b634e487b7160e01b600052602160045260246000fd5b6115015782158015611539575b15611531576000926114b2565b505050600090565b5050600060088314611524565b5060009050600183146114a6565b60086101009160018060a01b03808551166bffffffffffffffffffffffff60a01b90818454161783556001830182602088015116828254161790556002830182604088015116828254161790556003830191606087015116908254161790556080840151600482015560a0840151600582015560c0840151600682015560e0840151600782015501910151151560ff80198354169116179055565b8054600160401b8110156112515761160c91600182018155611177565b91909161161e5761161c91611554565b565b634e487b7160e01b600052600060045260246000fd5b3360009081527faffd1732687094f1280c3f66d1d5b6816ab020975386701bbf88fe57f2f2644460205260409020547f24e583e35a20f9ecfc1572e7cb66bcc18ad3cd1650ec40dbf6ad2290e553a9fa9060ff16156116905750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b80600052600080516020611a8683398151915260205260406000203360005260205260ff60406000205416156116905750565b6001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040812054909190600080516020611a868339815191529060ff1661176a578280526020526040822081835260205260408220600160ff198254161790553391600080516020611a668339815191528180a4600190565b505090565b6001600160a01b031660008181527faffd1732687094f1280c3f66d1d5b6816ab020975386701bbf88fe57f2f2644460205260408120549091907f24e583e35a20f9ecfc1572e7cb66bcc18ad3cd1650ec40dbf6ad2290e553a9fa90600080516020611a868339815191529060ff16611819578184526020526040832082845260205260408320600160ff19825416179055600080516020611a66833981519152339380a4600190565b50505090565b6001600160a01b031660008181527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a860205260408120549091907f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e390600080516020611a868339815191529060ff16611819578184526020526040832082845260205260408320600160ff19825416179055600080516020611a66833981519152339380a4600190565b90600091808352600080516020611a8683398151915280602052604084209260018060a01b03169283855260205260ff60408520541615600014611819578184526020526040832082845260205260408320600160ff19825416179055600080516020611a66833981519152339380a4600190565b90600091808352600080516020611a8683398151915280602052604084209260018060a01b03169283855260205260ff60408520541660001461181957818452602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c16156119f057565b604051631afcd79f60e31b8152600490fd5b90611a295750805115611a1757805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580611a5c575b611a3a575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15611a3256fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212204c6d71da038f778cc18f2c1936626663a581c2af2eb9c9004fde970d6f162c4964736f6c63430008160033",
"linkReferences": {},
"deployedLinkReferences": {}
}