{ "_format": "hh-sol-artifact-1", "contractName": "ReserveSystem", "sourceName": "contracts/reserve/ReserveSystem.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "admin", "type": "address" } ], "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": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sourceAsset", "type": "address" }, { "indexed": true, "internalType": "address", "name": "targetAsset", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "sourceAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "targetAmount", "type": "uint256" }, { "indexed": true, "internalType": "bytes32", "name": "conversionId", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "fees", "type": "uint256" } ], "name": "ConversionExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "asset", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "PriceFeedUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "asset", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": true, "internalType": "bytes32", "name": "redemptionId", "type": "bytes32" } ], "name": "RedemptionExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "asset", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "depositor", "type": "address" }, { "indexed": true, "internalType": "bytes32", "name": "reserveId", "type": "bytes32" } ], "name": "ReserveDeposited", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "asset", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": true, "internalType": "bytes32", "name": "reserveId", "type": "bytes32" } ], "name": "ReserveWithdrawn", "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" }, { "inputs": [], "name": "BASE_FEE_BPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "CONVERSION_OPERATOR_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "LARGE_TRANSACTION_FEE_BPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "LARGE_TRANSACTION_THRESHOLD", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_SLIPPAGE_BPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PRICE_FEED_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PRICE_STALENESS_THRESHOLD", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "RESERVE_MANAGER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SLIPPAGE_FEE_BPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "asset", "type": "address" }, { "internalType": "bool", "name": "isLiquid", "type": "bool" } ], "name": "addSupportedAsset", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sourceAsset", "type": "address" }, { "internalType": "address", "name": "targetAsset", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "calculateConversion", "outputs": [ { "internalType": "uint256", "name": "targetAmount", "type": "uint256" }, { "internalType": "uint256", "name": "fees", "type": "uint256" }, { "internalType": "address[]", "name": "path", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "conversionIds", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "conversions", "outputs": [ { "internalType": "address", "name": "sourceAsset", "type": "address" }, { "internalType": "address", "name": "targetAsset", "type": "address" }, { "internalType": "uint256", "name": "sourceAmount", "type": "uint256" }, { "internalType": "uint256", "name": "targetAmount", "type": "uint256" }, { "internalType": "uint256", "name": "fees", "type": "uint256" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sourceAsset", "type": "address" }, { "internalType": "address", "name": "targetAsset", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "convertAssets", "outputs": [ { "internalType": "bytes32", "name": "conversionId", "type": "bytes32" }, { "internalType": "uint256", "name": "targetAmount", "type": "uint256" }, { "internalType": "uint256", "name": "fees", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "asset", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "depositReserve", "outputs": [ { "internalType": "bytes32", "name": "reserveId", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sourceAsset", "type": "address" }, { "internalType": "address", "name": "targetAsset", "type": "address" } ], "name": "getConversionPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "asset", "type": "address" } ], "name": "getPrice", "outputs": [ { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "asset", "type": "address" } ], "name": "getReserveBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "reserveId", "type": "bytes32" } ], "name": "getReserveById", "outputs": [ { "internalType": "address", "name": "asset", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getSupportedAssets", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "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": "", "type": "address" } ], "name": "isLiquidAsset", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "isSupportedAsset", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "priceFeeds", "outputs": [ { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "internalType": "bool", "name": "isValid", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "asset", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "redeem", "outputs": [ { "internalType": "bytes32", "name": "redemptionId", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "asset", "type": "address" } ], "name": "removeSupportedAsset", "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": "address", "name": "", "type": "address" } ], "name": "reserveBalances", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "reserveIds", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "reserves", "outputs": [ { "internalType": "address", "name": "asset", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "lastUpdated", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "supportedAssets", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "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": "asset", "type": "address" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "updatePriceFeed", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "asset", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "withdrawReserve", "outputs": [ { "internalType": "bytes32", "name": "reserveId", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x6080346200009857601f6200224838819003918201601f19168301916001600160401b038311848410176200009d578084926020946040528339810103126200009857516001600160a01b038116810362000098576200008790600180556200006881620000b3565b50620000748162000133565b506200008081620001d5565b5062000272565b50604051611f189081620003108239f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b031660008181527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604081205490919060ff166200012f57818052816020526040822081835260205260408220600160ff198254161790553391600080516020620022288339815191528180a4600190565b5090565b6001600160a01b031660008181527fd366d1016677454f50e3558699950248ecb35813183c5b59022a7723e84956c660205260408120549091907fcc938097bd07c9f1619d5e95c26b457140e80b889795c7c1cbd51a28005e02ac9060ff16620001d057808352826020526040832082845260205260408320600160ff1982541617905560008051602062002228833981519152339380a4600190565b505090565b6001600160a01b031660008181527f66dcfc97608f9f18f8688baac638322c3e7e7a48547e291cc7a0517cf1eb3f0560205260408120549091907fda2b0f370bd2974923a71e73c465a6368d3708f6b738cc46b9a1ac650e1de0109060ff16620001d057808352826020526040832082845260205260408320600160ff1982541617905560008051602062002228833981519152339380a4600190565b6001600160a01b031660008181527f63c67d7a1203ec769008e0b4eb0f3b80d118a27fe8671c3cb7b07bf5f05fe6bd60205260408120549091907f933de1eea1e506159851d6a102568bb76240c15db448b4736be6fc8d8ce380a29060ff16620001d057808352826020526040832082845260205260408320600160ff1982541617905560008051602062002228833981519152339380a460019056fe608060408181526004918236101561001657600080fd5b600092833560e01c918262bbf1e4146113ce5750816301ffc9a7146113785781630d013755146107b357816314177107146111a2578163143b2deb1461116757816315226b5414610cd85781631c46bc6f146111275781631d8d7c66146110335781632013b1ce14610fe6578163248a9ca314610fbc5781632f2ff15d14610f9257816336568abe14610f4c57816341976e0914610f1c5781634cd452ba14610ee15781635c833bfd14610dd457816366b51da514610d985781636f60c96414610d2c57816379aa23ad14610d105781637e2fb9f414610cd857816381693d2714610cb3578163892b4f0814610ab15781638d169f4214610a6357816391d1485414610a1d5781639be918e6146109df5781639dcb511a1461098a578163a1547d1114610911578163a217fddf146108f6578163c5f87257146108bb578163c68dbb3714610864578163d547741f14610825578163deb06d4d146107b8578163e229cd76146107b3578163e23a6a2514610714578163e5406dbf146106df578163e88791db146106c3578163ed8b742b1461022157508063f25b9caa146102065763f84ef0f5146101c657600080fd5b346102025760203660031901126102025760209160ff9082906001600160a01b036101ef611434565b168152600a855220541690519015158152f35b5080fd5b503461020257816003193601126102025760209051601e8152f35b8284346106c05761023136611494565b7f933de1eea1e506159851d6a102568bb76240c15db448b4736be6fc8d8ce380a294929490818552602091858352848620338752835260ff8587205416156106a2575061027c611bba565b6001600160a01b0390868216906102948215156117df565b828516926102a384151561182a565b6102ae82151561166c565b8288526009855260ff87892054161561064f578388526009855260ff8789205416156105fc576102df82878b611895565b9099919786835260028852888a842054106105a65761030085303389611d11565b85835260028852898320610315868254611a5a565b90558683526002885289832061032c8a8254611710565b9055610339893389611bdd565b6008548560488c519e8f908c8201956001600160601b0319809260601b16875260601b16603482015201528c60684291015260888d015260888c5260c08c019167ffffffffffffffff918d84108385111761059357838c528d5190209c6101a081018481108482111761057f578f908f8f918f8f928f918f928f908f95938f948f9d9c9b8f946007956101809388525260e0810197885261010081019889526101208101998a5261014081019a8b5261016081019c8d52019c8d42905252528b209951166001600160601b0360a01b90818b5416178a558b60018b0192511690825416179055516002880155516003870155519085015560058401905195865192831161057f57600160401b9687841161056a578b908354858555808610610542575b50019186528a862090865b84811061052e575050505050600690519101556008549182101561051b5760018201806008558210156105085760609a5089949392857f0e1e1a1d3b4eef7481e00a3e7282f9d2f96279566fc476c86bb408a11042bec59360088e94527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155885190815287878201528989820152a4600180558251948552840152820152f35b634e487b7160e01b815260328b52602490fd5b634e487b7160e01b815260418b52602490fd5b8351821683820155928c0192600101610467565b84895285838a2091820191015b81811061055c575061045c565b8981558e935060010161054f565b508f866041602492634e487b7160e01b835252fd5b8f866041602492634e487b7160e01b835252fd5b634e487b7160e01b855260418f52602485fd5b895162461bcd60e51b8152808e01899052602a60248201527f5265736572766553797374656d3a20696e73756666696369656e7420746172676044820152696574207265736572766560b01b6064820152608490fd5b865162461bcd60e51b8152808b01869052602760248201527f5265736572766553797374656d3a20756e737570706f727465642074617267656044820152661d08185cdcd95d60ca1b6064820152608490fd5b865162461bcd60e51b8152808b01869052602760248201527f5265736572766553797374656d3a20756e737570706f7274656420736f7572636044820152661948185cdcd95d60ca1b6064820152608490fd5b845163e2517d3f60e01b815233818a01526024810191909152604490fd5b80fd5b50503461020257816003193601126102025760209051600a8152f35b505034610202578160031936011261020257610710906106fd611a67565b90519182916020835260208301906114c9565b0390f35b50503461020257806003193601126102025761072e611434565b9060243580151581036107af5761078991610747611ae0565b6001600160a01b03841661075c811515611506565b85526009602052808520600160ff19825416179055600a60205284209060ff801983541691151516179055565b61079a610794611a67565b82611d6a565b156107a3575080f35b6107ac90611552565b80f35b8380fd5b611413565b91905034610821576020366003190112610821578060c0938335815260076020522060018060a01b0392838254169360018301541692600283015490600660038501549385015494015494815196875260208701528501526060840152608083015260a0820152f35b8280fd5b91905034610821578060031936011261082157610860913561085b600161084a61144a565b938387528660205286200154611b94565b611c9c565b5080f35b90503461082157602036600319011261082157356006548110156108215760066020935260018060a01b03907ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0154169051908152f35b505034610202578160031936011261020257602090517fcc938097bd07c9f1619d5e95c26b457140e80b889795c7c1cbd51a28005e02ac8152f35b50503461020257816003193601126102025751908152602090f35b8284346106c057816003193601126106c05761092b611434565b9061094761094061093a61144a565b9361178f565b509261178f565b5090670de0b6b3a764000091828102928184041490151715610977576020846109708585611875565b9051908152f35b634e487b7160e01b815260118552602490fd5b5050346102025760203660031901126102025760609181906001600160a01b036109b2611434565b1681526005602052209081549160ff60026001830154920154169082519384526020840152151590820152f35b5050346102025760203660031901126102025760209160ff9082906001600160a01b03610a0a611434565b1681526009855220541690519015158152f35b9050346108215781600319360112610821578160209360ff92610a3e61144a565b903582528186528282206001600160a01b039091168252855220549151911615158152f35b9050346108215760203660031901126108215735600854811015610821576008602093527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301549051908152f35b838334610202578060031936011261020257610acb611434565b9260243590610ad8611b38565b610ae0611bba565b6001600160a01b039385851691610af8831515611506565b610b0384151561166c565b8282526020966009885260ff868420541615610c7257610b2585303387611d11565b8154865160609290921b6bffffffffffffffffffffffff191689830190815260148101879052426034820152605481019190915290610b7181607484015b03601f1981018352826115fe565b519020956002865191610b83836115e2565b858352898301878152888401914283528a875260038c528987209451166001600160601b0360a01b85541617845551600184015551910155805490600160401b821015610c5f5760018201808255821015610c4c5750859392918486927f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01558281526002885220610c16838254611a5a565b905583519182527fd8f23c61d65e9e0381bb80b169c5cd40eb8756fc62b275244d76ded8e24a1861863393a46001805551908152f35b634e487b7160e01b835260329052602482fd5b634e487b7160e01b835260419052602482fd5b606482898089519262461bcd60e51b845283015260248201527f5265736572766553797374656d3a20756e737570706f727465642061737365746044820152fd5b5050346102025781600319360112610202576020905169d3c21bcecceda10000008152f35b5050346102025760203660031901126102025760209181906001600160a01b03610d00611434565b1681526002845220549051908152f35b5050346102025781600319360112610202576020905160058152f35b9050346108215760203660031901126108215791819235815260036020522090610710815191610d5b836115e2565b83546001600160a01b0316808452600185015460208086018290526002909601549483019490945290519081529283019190915281906040820190565b8284346106c057506060610710610db7610db136611494565b91611895565b9193909480519586958652602086015284015260608301906114c9565b8284346106c0576020917ffda76e43c77f9fd19784eddb10995f5e983ef8f7c25b107110f80038839006fa8392610e0a36611460565b91610e16949194611b38565b610e1e611bba565b6001600160a01b0381811693610e88918791908990610e3e881515611506565b821697610e4c891515611620565b610e5784151561166c565b87815260028c52610e6d848383205410156116b8565b87815260028c5220610e80838254611710565b905585611bdd565b600854865160609290921b6bffffffffffffffffffffffff191688830190815260148101879052426034820152605481019190915290610ecb8160748401610b63565b5190209586948651908152a46001805551908152f35b505034610202578160031936011261020257602090517f933de1eea1e506159851d6a102568bb76240c15db448b4736be6fc8d8ce380a28152f35b8284346106c05760203660031901126106c05750610f40610f3b611434565b61178f565b82519182526020820152f35b838334610202578060031936011261020257610f6661144a565b90336001600160a01b03831603610f835750610860919235611c9c565b5163334bd91960e11b81528390fd5b919050346108215780600319360112610821576108609135610fb7600161084a61144a565b611c1e565b90503461082157602036600319011261082157816020936001923581528085522001549051908152f35b9050346108215760203660031901126108215780359080548210156107af57602093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01549051908152f35b8284346106c057906020928392610b637fdd3fb99431df38f9f0a92a0798e6a95f09390fa5d35f89e1e0ed3847aa28bd4b610ecb61107036611460565b949192909661107d611b38565b611085611bba565b6001600160a01b03848116966110ef918a91908c906110a58b1515611506565b82169a6110b38c1515611620565b6110be84151561166c565b8a815260028f526110d4848383205410156116b8565b8a815260028f52206110e7838254611710565b905588611bdd565b5488519283918b8301958a429188929091607494926001600160601b03199060601b1684526014840152603483015260548201520190565b50503461020257602036600319011261020257611142611434565b61114a611ae0565b6001600160a01b0316825260096020528120805460ff1916905580f35b505034610202578160031936011261020257602090517fda2b0f370bd2974923a71e73c465a6368d3708f6b738cc46b9a1ac650e1de0108152f35b83915034610202576060366003190112610202576111be611434565b926024356044357fda2b0f370bd2974923a71e73c465a6368d3708f6b738cc46b9a1ac650e1de010808652602090868252848720338852825260ff85882054161561135a57506001600160a01b0387169461121a861515611506565b8315611319574283116112d857508596857f7f0087464ace68eb51ed07d9daf1bd00eb6e1d36e4889a096a0eaf702f7af558969752600982528488209081549160ff8316156112be575b5050506112b28451611275816115e2565b848152600283820185815287830190600182528a8c5260058652888c209351845551600184015551151591019060ff801983541691151516179055565b8351928352820152a280f35b60016112d09360ff1916179055611552565b878080611264565b60649185519162461bcd60e51b8352820152601f60248201527f5265736572766553797374656d3a206675747572652074696d657374616d70006044820152fd5b60649185519162461bcd60e51b8352820152601960248201527f5265736572766553797374656d3a207a65726f207072696365000000000000006044820152fd5b845163e2517d3f60e01b815233818801526024810191909152604490fd5b90503461082157602036600319011261082157359063ffffffff60e01b82168092036108215760209250637965db0b60e01b82149182156113bd575b50519015158152f35b6301ffc9a760e01b149150386113b4565b929150346107af5760203660031901126107af5760609382913581526003602052209060018060a01b0382541691600260018201549101549284526020840152820152f35b3461142f57600036600319011261142f57602060405160328152f35b600080fd5b600435906001600160a01b038216820361142f57565b602435906001600160a01b038216820361142f57565b606090600319011261142f576001600160a01b03600435818116810361142f579160243591604435908116810361142f5790565b606090600319011261142f576001600160a01b0390600435828116810361142f5791602435908116810361142f579060443590565b90815180825260208080930193019160005b8281106114e9575050505090565b83516001600160a01b0316855293810193928101926001016114db565b1561150d57565b60405162461bcd60e51b815260206004820152601b60248201527f5265736572766553797374656d3a207a65726f206164647265737300000000006044820152606490fd5b600654600160401b8110156115cc5760018101806006558110156115b65760066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b03909216919091179055565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176115cc57604052565b90601f8019910116810190811067ffffffffffffffff8211176115cc57604052565b1561162757565b60405162461bcd60e51b815260206004820152601d60248201527f5265736572766553797374656d3a207a65726f20726563697069656e740000006044820152606490fd5b1561167357565b60405162461bcd60e51b815260206004820152601a60248201527f5265736572766553797374656d3a207a65726f20616d6f756e740000000000006044820152606490fd5b156116bf57565b60405162461bcd60e51b815260206004820152602360248201527f5265736572766553797374656d3a20696e73756666696369656e74207265736560448201526272766560e81b6064820152608490fd5b9190820391821161171d57565b634e487b7160e01b600052601160045260246000fd5b1561173a57565b60405162461bcd60e51b815260206004820152602760248201527f5265736572766553797374656d3a2070726963652066656564206e6f7420617660448201526661696c61626c6560c81b6064820152608490fd5b60018060a01b031660005260056020526040600020906040516117b1816115e2565b825481526117d960ff6002600186015495602085019687520154161515806040840152611733565b51915190565b156117e657565b606460405162461bcd60e51b815260206004820152602060248201527f5265736572766553797374656d3a207a65726f20736f757263652061737365746044820152fd5b1561183157565b606460405162461bcd60e51b815260206004820152602060248201527f5265736572766553797374656d3a207a65726f207461726765742061737365746044820152fd5b811561187f570490565b634e487b7160e01b600052601260045260246000fd5b926001600160a01b03808516939192906118b08515156117df565b8116946118be86151561182a565b6118de6118f9601e6118d6861594610f3b861561166c565b93909561178f565b92909380151580611a51575b6118f390611733565b42611710565b11611a025761190a601e9142611710565b116119b35780840293840414171561171d5761192591611875565b600a8102811590828104600a1482171561171d5761271060009169d3c21bcecceda1000000851015611994575b61195d935004611a5a565b936040519361196b856115e2565b600285526020850160403682378551156115b657528351600110156115b6576040840152929190565b91506005840292848404600514171561171d578061195d930491611952565b60405162461bcd60e51b815260206004820152602160248201527f5265736572766553797374656d3a207374616c652074617267657420707269636044820152606560f81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602160248201527f5265736572766553797374656d3a207374616c6520736f7572636520707269636044820152606560f81b6064820152608490fd5b508315156118ea565b9190820180921161171d57565b6040519060065480835282602091602082019060066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f936000905b828210611abd57505050611abb925003836115fe565b565b85546001600160a01b031684526001958601958895509381019390910190611aa5565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604081205460ff1615611b1a5750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b3360009081527fd366d1016677454f50e3558699950248ecb35813183c5b59022a7723e84956c660205260409020547fcc938097bd07c9f1619d5e95c26b457140e80b889795c7c1cbd51a28005e02ac9060ff1615611b1a5750565b80600052600060205260406000203360005260205260ff6040600020541615611b1a5750565b600260015414611bcb576002600155565b604051633ee5aeb560e01b8152600490fd5b60405163a9059cbb60e01b60208201526001600160a01b03929092166024830152604480830193909352918152611abb91611c196064836115fe565b611dab565b9060009180835282602052604083209160018060a01b03169182845260205260ff60408420541615600014611c9757808352826020526040832082845260205260408320600160ff198254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b505090565b9060009180835282602052604083209160018060a01b03169182845260205260ff604084205416600014611c975780835282602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b6040516323b872dd60e01b60208201526001600160a01b03928316602482015292909116604483015260648083019390935291815260a081019181831067ffffffffffffffff8411176115cc57611abb92604052611dab565b60005b8251811015611da357600581901b8301602001516001600160a01b03838116911614611d9b57600101611d6d565b505050600190565b505050600090565b60018060a01b031690600080826020829451910182865af13d15611e73573d9067ffffffffffffffff8211611e5f5790611e079160405191611df76020601f19601f84011601846115fe565b82523d84602084013e5b84611e7f565b908151918215159283611e37575b505050611e1f5750565b60249060405190635274afe760e01b82526004820152fd5b8192935090602091810103126102025760200151908115918215036106c05750388080611e15565b634e487b7160e01b83526041600452602483fd5b611e0790606090611e01565b90611ea65750805115611e9457805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580611ed9575b611eb7575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15611eaf56fea2646970667358221220ee589082490484b247011604bffb58af3bc6b3bb1c809474a1ab7cf7917f74fd64736f6c634300081600332f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", "deployedBytecode": "0x608060408181526004918236101561001657600080fd5b600092833560e01c918262bbf1e4146113ce5750816301ffc9a7146113785781630d013755146107b357816314177107146111a2578163143b2deb1461116757816315226b5414610cd85781631c46bc6f146111275781631d8d7c66146110335781632013b1ce14610fe6578163248a9ca314610fbc5781632f2ff15d14610f9257816336568abe14610f4c57816341976e0914610f1c5781634cd452ba14610ee15781635c833bfd14610dd457816366b51da514610d985781636f60c96414610d2c57816379aa23ad14610d105781637e2fb9f414610cd857816381693d2714610cb3578163892b4f0814610ab15781638d169f4214610a6357816391d1485414610a1d5781639be918e6146109df5781639dcb511a1461098a578163a1547d1114610911578163a217fddf146108f6578163c5f87257146108bb578163c68dbb3714610864578163d547741f14610825578163deb06d4d146107b8578163e229cd76146107b3578163e23a6a2514610714578163e5406dbf146106df578163e88791db146106c3578163ed8b742b1461022157508063f25b9caa146102065763f84ef0f5146101c657600080fd5b346102025760203660031901126102025760209160ff9082906001600160a01b036101ef611434565b168152600a855220541690519015158152f35b5080fd5b503461020257816003193601126102025760209051601e8152f35b8284346106c05761023136611494565b7f933de1eea1e506159851d6a102568bb76240c15db448b4736be6fc8d8ce380a294929490818552602091858352848620338752835260ff8587205416156106a2575061027c611bba565b6001600160a01b0390868216906102948215156117df565b828516926102a384151561182a565b6102ae82151561166c565b8288526009855260ff87892054161561064f578388526009855260ff8789205416156105fc576102df82878b611895565b9099919786835260028852888a842054106105a65761030085303389611d11565b85835260028852898320610315868254611a5a565b90558683526002885289832061032c8a8254611710565b9055610339893389611bdd565b6008548560488c519e8f908c8201956001600160601b0319809260601b16875260601b16603482015201528c60684291015260888d015260888c5260c08c019167ffffffffffffffff918d84108385111761059357838c528d5190209c6101a081018481108482111761057f578f908f8f918f8f928f918f928f908f95938f948f9d9c9b8f946007956101809388525260e0810197885261010081019889526101208101998a5261014081019a8b5261016081019c8d52019c8d42905252528b209951166001600160601b0360a01b90818b5416178a558b60018b0192511690825416179055516002880155516003870155519085015560058401905195865192831161057f57600160401b9687841161056a578b908354858555808610610542575b50019186528a862090865b84811061052e575050505050600690519101556008549182101561051b5760018201806008558210156105085760609a5089949392857f0e1e1a1d3b4eef7481e00a3e7282f9d2f96279566fc476c86bb408a11042bec59360088e94527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155885190815287878201528989820152a4600180558251948552840152820152f35b634e487b7160e01b815260328b52602490fd5b634e487b7160e01b815260418b52602490fd5b8351821683820155928c0192600101610467565b84895285838a2091820191015b81811061055c575061045c565b8981558e935060010161054f565b508f866041602492634e487b7160e01b835252fd5b8f866041602492634e487b7160e01b835252fd5b634e487b7160e01b855260418f52602485fd5b895162461bcd60e51b8152808e01899052602a60248201527f5265736572766553797374656d3a20696e73756666696369656e7420746172676044820152696574207265736572766560b01b6064820152608490fd5b865162461bcd60e51b8152808b01869052602760248201527f5265736572766553797374656d3a20756e737570706f727465642074617267656044820152661d08185cdcd95d60ca1b6064820152608490fd5b865162461bcd60e51b8152808b01869052602760248201527f5265736572766553797374656d3a20756e737570706f7274656420736f7572636044820152661948185cdcd95d60ca1b6064820152608490fd5b845163e2517d3f60e01b815233818a01526024810191909152604490fd5b80fd5b50503461020257816003193601126102025760209051600a8152f35b505034610202578160031936011261020257610710906106fd611a67565b90519182916020835260208301906114c9565b0390f35b50503461020257806003193601126102025761072e611434565b9060243580151581036107af5761078991610747611ae0565b6001600160a01b03841661075c811515611506565b85526009602052808520600160ff19825416179055600a60205284209060ff801983541691151516179055565b61079a610794611a67565b82611d6a565b156107a3575080f35b6107ac90611552565b80f35b8380fd5b611413565b91905034610821576020366003190112610821578060c0938335815260076020522060018060a01b0392838254169360018301541692600283015490600660038501549385015494015494815196875260208701528501526060840152608083015260a0820152f35b8280fd5b91905034610821578060031936011261082157610860913561085b600161084a61144a565b938387528660205286200154611b94565b611c9c565b5080f35b90503461082157602036600319011261082157356006548110156108215760066020935260018060a01b03907ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0154169051908152f35b505034610202578160031936011261020257602090517fcc938097bd07c9f1619d5e95c26b457140e80b889795c7c1cbd51a28005e02ac8152f35b50503461020257816003193601126102025751908152602090f35b8284346106c057816003193601126106c05761092b611434565b9061094761094061093a61144a565b9361178f565b509261178f565b5090670de0b6b3a764000091828102928184041490151715610977576020846109708585611875565b9051908152f35b634e487b7160e01b815260118552602490fd5b5050346102025760203660031901126102025760609181906001600160a01b036109b2611434565b1681526005602052209081549160ff60026001830154920154169082519384526020840152151590820152f35b5050346102025760203660031901126102025760209160ff9082906001600160a01b03610a0a611434565b1681526009855220541690519015158152f35b9050346108215781600319360112610821578160209360ff92610a3e61144a565b903582528186528282206001600160a01b039091168252855220549151911615158152f35b9050346108215760203660031901126108215735600854811015610821576008602093527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301549051908152f35b838334610202578060031936011261020257610acb611434565b9260243590610ad8611b38565b610ae0611bba565b6001600160a01b039385851691610af8831515611506565b610b0384151561166c565b8282526020966009885260ff868420541615610c7257610b2585303387611d11565b8154865160609290921b6bffffffffffffffffffffffff191689830190815260148101879052426034820152605481019190915290610b7181607484015b03601f1981018352826115fe565b519020956002865191610b83836115e2565b858352898301878152888401914283528a875260038c528987209451166001600160601b0360a01b85541617845551600184015551910155805490600160401b821015610c5f5760018201808255821015610c4c5750859392918486927f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01558281526002885220610c16838254611a5a565b905583519182527fd8f23c61d65e9e0381bb80b169c5cd40eb8756fc62b275244d76ded8e24a1861863393a46001805551908152f35b634e487b7160e01b835260329052602482fd5b634e487b7160e01b835260419052602482fd5b606482898089519262461bcd60e51b845283015260248201527f5265736572766553797374656d3a20756e737570706f727465642061737365746044820152fd5b5050346102025781600319360112610202576020905169d3c21bcecceda10000008152f35b5050346102025760203660031901126102025760209181906001600160a01b03610d00611434565b1681526002845220549051908152f35b5050346102025781600319360112610202576020905160058152f35b9050346108215760203660031901126108215791819235815260036020522090610710815191610d5b836115e2565b83546001600160a01b0316808452600185015460208086018290526002909601549483019490945290519081529283019190915281906040820190565b8284346106c057506060610710610db7610db136611494565b91611895565b9193909480519586958652602086015284015260608301906114c9565b8284346106c0576020917ffda76e43c77f9fd19784eddb10995f5e983ef8f7c25b107110f80038839006fa8392610e0a36611460565b91610e16949194611b38565b610e1e611bba565b6001600160a01b0381811693610e88918791908990610e3e881515611506565b821697610e4c891515611620565b610e5784151561166c565b87815260028c52610e6d848383205410156116b8565b87815260028c5220610e80838254611710565b905585611bdd565b600854865160609290921b6bffffffffffffffffffffffff191688830190815260148101879052426034820152605481019190915290610ecb8160748401610b63565b5190209586948651908152a46001805551908152f35b505034610202578160031936011261020257602090517f933de1eea1e506159851d6a102568bb76240c15db448b4736be6fc8d8ce380a28152f35b8284346106c05760203660031901126106c05750610f40610f3b611434565b61178f565b82519182526020820152f35b838334610202578060031936011261020257610f6661144a565b90336001600160a01b03831603610f835750610860919235611c9c565b5163334bd91960e11b81528390fd5b919050346108215780600319360112610821576108609135610fb7600161084a61144a565b611c1e565b90503461082157602036600319011261082157816020936001923581528085522001549051908152f35b9050346108215760203660031901126108215780359080548210156107af57602093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01549051908152f35b8284346106c057906020928392610b637fdd3fb99431df38f9f0a92a0798e6a95f09390fa5d35f89e1e0ed3847aa28bd4b610ecb61107036611460565b949192909661107d611b38565b611085611bba565b6001600160a01b03848116966110ef918a91908c906110a58b1515611506565b82169a6110b38c1515611620565b6110be84151561166c565b8a815260028f526110d4848383205410156116b8565b8a815260028f52206110e7838254611710565b905588611bdd565b5488519283918b8301958a429188929091607494926001600160601b03199060601b1684526014840152603483015260548201520190565b50503461020257602036600319011261020257611142611434565b61114a611ae0565b6001600160a01b0316825260096020528120805460ff1916905580f35b505034610202578160031936011261020257602090517fda2b0f370bd2974923a71e73c465a6368d3708f6b738cc46b9a1ac650e1de0108152f35b83915034610202576060366003190112610202576111be611434565b926024356044357fda2b0f370bd2974923a71e73c465a6368d3708f6b738cc46b9a1ac650e1de010808652602090868252848720338852825260ff85882054161561135a57506001600160a01b0387169461121a861515611506565b8315611319574283116112d857508596857f7f0087464ace68eb51ed07d9daf1bd00eb6e1d36e4889a096a0eaf702f7af558969752600982528488209081549160ff8316156112be575b5050506112b28451611275816115e2565b848152600283820185815287830190600182528a8c5260058652888c209351845551600184015551151591019060ff801983541691151516179055565b8351928352820152a280f35b60016112d09360ff1916179055611552565b878080611264565b60649185519162461bcd60e51b8352820152601f60248201527f5265736572766553797374656d3a206675747572652074696d657374616d70006044820152fd5b60649185519162461bcd60e51b8352820152601960248201527f5265736572766553797374656d3a207a65726f207072696365000000000000006044820152fd5b845163e2517d3f60e01b815233818801526024810191909152604490fd5b90503461082157602036600319011261082157359063ffffffff60e01b82168092036108215760209250637965db0b60e01b82149182156113bd575b50519015158152f35b6301ffc9a760e01b149150386113b4565b929150346107af5760203660031901126107af5760609382913581526003602052209060018060a01b0382541691600260018201549101549284526020840152820152f35b3461142f57600036600319011261142f57602060405160328152f35b600080fd5b600435906001600160a01b038216820361142f57565b602435906001600160a01b038216820361142f57565b606090600319011261142f576001600160a01b03600435818116810361142f579160243591604435908116810361142f5790565b606090600319011261142f576001600160a01b0390600435828116810361142f5791602435908116810361142f579060443590565b90815180825260208080930193019160005b8281106114e9575050505090565b83516001600160a01b0316855293810193928101926001016114db565b1561150d57565b60405162461bcd60e51b815260206004820152601b60248201527f5265736572766553797374656d3a207a65726f206164647265737300000000006044820152606490fd5b600654600160401b8110156115cc5760018101806006558110156115b65760066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b03909216919091179055565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176115cc57604052565b90601f8019910116810190811067ffffffffffffffff8211176115cc57604052565b1561162757565b60405162461bcd60e51b815260206004820152601d60248201527f5265736572766553797374656d3a207a65726f20726563697069656e740000006044820152606490fd5b1561167357565b60405162461bcd60e51b815260206004820152601a60248201527f5265736572766553797374656d3a207a65726f20616d6f756e740000000000006044820152606490fd5b156116bf57565b60405162461bcd60e51b815260206004820152602360248201527f5265736572766553797374656d3a20696e73756666696369656e74207265736560448201526272766560e81b6064820152608490fd5b9190820391821161171d57565b634e487b7160e01b600052601160045260246000fd5b1561173a57565b60405162461bcd60e51b815260206004820152602760248201527f5265736572766553797374656d3a2070726963652066656564206e6f7420617660448201526661696c61626c6560c81b6064820152608490fd5b60018060a01b031660005260056020526040600020906040516117b1816115e2565b825481526117d960ff6002600186015495602085019687520154161515806040840152611733565b51915190565b156117e657565b606460405162461bcd60e51b815260206004820152602060248201527f5265736572766553797374656d3a207a65726f20736f757263652061737365746044820152fd5b1561183157565b606460405162461bcd60e51b815260206004820152602060248201527f5265736572766553797374656d3a207a65726f207461726765742061737365746044820152fd5b811561187f570490565b634e487b7160e01b600052601260045260246000fd5b926001600160a01b03808516939192906118b08515156117df565b8116946118be86151561182a565b6118de6118f9601e6118d6861594610f3b861561166c565b93909561178f565b92909380151580611a51575b6118f390611733565b42611710565b11611a025761190a601e9142611710565b116119b35780840293840414171561171d5761192591611875565b600a8102811590828104600a1482171561171d5761271060009169d3c21bcecceda1000000851015611994575b61195d935004611a5a565b936040519361196b856115e2565b600285526020850160403682378551156115b657528351600110156115b6576040840152929190565b91506005840292848404600514171561171d578061195d930491611952565b60405162461bcd60e51b815260206004820152602160248201527f5265736572766553797374656d3a207374616c652074617267657420707269636044820152606560f81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602160248201527f5265736572766553797374656d3a207374616c6520736f7572636520707269636044820152606560f81b6064820152608490fd5b508315156118ea565b9190820180921161171d57565b6040519060065480835282602091602082019060066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f936000905b828210611abd57505050611abb925003836115fe565b565b85546001600160a01b031684526001958601958895509381019390910190611aa5565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604081205460ff1615611b1a5750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b3360009081527fd366d1016677454f50e3558699950248ecb35813183c5b59022a7723e84956c660205260409020547fcc938097bd07c9f1619d5e95c26b457140e80b889795c7c1cbd51a28005e02ac9060ff1615611b1a5750565b80600052600060205260406000203360005260205260ff6040600020541615611b1a5750565b600260015414611bcb576002600155565b604051633ee5aeb560e01b8152600490fd5b60405163a9059cbb60e01b60208201526001600160a01b03929092166024830152604480830193909352918152611abb91611c196064836115fe565b611dab565b9060009180835282602052604083209160018060a01b03169182845260205260ff60408420541615600014611c9757808352826020526040832082845260205260408320600160ff198254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b505090565b9060009180835282602052604083209160018060a01b03169182845260205260ff604084205416600014611c975780835282602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b6040516323b872dd60e01b60208201526001600160a01b03928316602482015292909116604483015260648083019390935291815260a081019181831067ffffffffffffffff8411176115cc57611abb92604052611dab565b60005b8251811015611da357600581901b8301602001516001600160a01b03838116911614611d9b57600101611d6d565b505050600190565b505050600090565b60018060a01b031690600080826020829451910182865af13d15611e73573d9067ffffffffffffffff8211611e5f5790611e079160405191611df76020601f19601f84011601846115fe565b82523d84602084013e5b84611e7f565b908151918215159283611e37575b505050611e1f5750565b60249060405190635274afe760e01b82526004820152fd5b8192935090602091810103126102025760200151908115918215036106c05750388080611e15565b634e487b7160e01b83526041600452602483fd5b611e0790606090611e01565b90611ea65750805115611e9457805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580611ed9575b611eb7575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15611eaf56fea2646970667358221220ee589082490484b247011604bffb58af3bc6b3bb1c809474a1ab7cf7917f74fd64736f6c63430008160033", "linkReferences": {}, "deployedLinkReferences": {} }