@openzeppelin/contracts-upgradeable
Version:
Secure Smart Contract library for Solidity
398 lines (397 loc) • 28.9 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "ERC2771ForwarderUpgradeable",
"sourceName": "contracts/metatx/ERC2771ForwarderUpgradeable.sol",
"abi": [
{
"inputs": [
{
"internalType": "uint48",
"name": "deadline",
"type": "uint48"
}
],
"name": "ERC2771ForwarderExpiredRequest",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "signer",
"type": "address"
},
{
"internalType": "address",
"name": "from",
"type": "address"
}
],
"name": "ERC2771ForwarderInvalidSigner",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "requestedValue",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "msgValue",
"type": "uint256"
}
],
"name": "ERC2771ForwarderMismatchedValue",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "target",
"type": "address"
},
{
"internalType": "address",
"name": "forwarder",
"type": "address"
}
],
"name": "ERC2771UntrustfulTarget",
"type": "error"
},
{
"inputs": [],
"name": "FailedCall",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "InsufficientBalance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256",
"name": "currentNonce",
"type": "uint256"
}
],
"name": "InvalidAccountNonce",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"anonymous": false,
"inputs": [],
"name": "EIP712DomainChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "signer",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bool",
"name": "success",
"type": "bool"
}
],
"name": "ExecutedForwardRequest",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"type": "event"
},
{
"inputs": [],
"name": "eip712Domain",
"outputs": [
{
"internalType": "bytes1",
"name": "fields",
"type": "bytes1"
},
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "string",
"name": "version",
"type": "string"
},
{
"internalType": "uint256",
"name": "chainId",
"type": "uint256"
},
{
"internalType": "address",
"name": "verifyingContract",
"type": "address"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
},
{
"internalType": "uint256[]",
"name": "extensions",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "gas",
"type": "uint256"
},
{
"internalType": "uint48",
"name": "deadline",
"type": "uint48"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"internalType": "struct ERC2771ForwarderUpgradeable.ForwardRequestData",
"name": "request",
"type": "tuple"
}
],
"name": "execute",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "gas",
"type": "uint256"
},
{
"internalType": "uint48",
"name": "deadline",
"type": "uint48"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"internalType": "struct ERC2771ForwarderUpgradeable.ForwardRequestData[]",
"name": "requests",
"type": "tuple[]"
},
{
"internalType": "address payable",
"name": "refundReceiver",
"type": "address"
}
],
"name": "executeBatch",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "name",
"type": "string"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "nonces",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "gas",
"type": "uint256"
},
{
"internalType": "uint48",
"name": "deadline",
"type": "uint48"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"internalType": "struct ERC2771ForwarderUpgradeable.ForwardRequestData",
"name": "request",
"type": "tuple"
}
],
"name": "verify",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x608060405234801561000f575f80fd5b506113638061001d5f395ff3fe608060405260043610610054575f3560e01c806319d8d38c146100585780637ecebe001461008c57806384b0196e146100ed578063ccf96b4a14610114578063df905caf14610129578063f62d18881461013c575b5f80fd5b348015610063575f80fd5b50610077610072366004610e20565b61015b565b60405190151581526020015b60405180910390f35b348015610097575f80fd5b506100df6100a6366004610e72565b6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052604090205490565b604051908152602001610083565b3480156100f8575f80fd5b5061010161018b565b6040516100839796959493929190610ed0565b610127610122366004610f67565b610239565b005b610127610137366004610e20565b610339565b348015610147575f80fd5b50610127610156366004610ffa565b610394565b5f805f80610168856104a1565b509250925092508280156101795750815b80156101825750805b95945050505050565b5f60608082808083815f8051602061130e83398151915280549091501580156101b657506001810154155b6101ff5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610207610523565b61020f6105e3565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6001600160a01b038116155f80805b858110156102f757868682818110610262576102626110a5565b905060200281019061027491906110b9565b6102829060400135846110d7565b92505f6102b288888481811061029a5761029a6110a5565b90506020028101906102ac91906110b9565b86610621565b9050806102ee578787838181106102cb576102cb6110a5565b90506020028101906102dd91906110b9565b6102eb9060400135846110d7565b92505b50600101610248565b50348214610321576040516370647f7960e01b8152600481018390523460248201526044016101f6565b801561033157610331848261081b565b505050505050565b8060400135341461036957604080516370647f7960e01b81529082013560048201523460248201526044016101f6565b610374816001610621565b6103915760405163d6bda27560e01b815260040160405180910390fd5b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156103d95750825b90505f8267ffffffffffffffff1660011480156103f55750303b155b905081158015610403575080155b156104215760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561044b57845460ff60401b1916600160401b1785555b610454866108ad565b831561033157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b5f805f805f806104b0876108d8565b90925090506104cd6104c86040890160208a01610e72565b610a4a565b426104de60a08a0160808b016110f6565b65ffffffffffff16101583801561051257506104fd60208a018a610e72565b6001600160a01b0316836001600160a01b0316145b919750955093509150509193509193565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f8051602061130e833981519152916105619061111b565b80601f016020809104026020016040519081016040528092919081815260200182805461058d9061111b565b80156105d85780601f106105af576101008083540402835291602001916105d8565b820191905f5260205f20905b8154815290600101906020018083116105bb57829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10380546060915f8051602061130e833981519152916105619061111b565b5f805f805f61062f876104a1565b935093509350935085156106f5578361067d576106526040880160208901610e72565b60405163d2650cd160e01b81526001600160a01b0390911660048201523060248201526044016101f6565b826106b65761069260a08801608089016110f6565b604051634a777ac560e11b815265ffffffffffff90911660048201526024016101f6565b816106f557806106c96020890189610e72565b604051636422d02b60e11b81526001600160a01b039283166004820152911660248201526044016101f6565b8380156106ff5750815b80156107085750825b15610811576001600160a01b0381165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260408120805460018101909155905060608801355f61076460408b0160208c01610e72565b905060408a01355f61077960a08d018d611153565b61078660208f018f610e72565b6040516020016107989392919061119d565b60405160208183030381529060405290505f805f83516020850186888af19a505a90506107c5818e610ac3565b604080518781528c151560208201526001600160a01b038916917f842fb24a83793558587a3dab2be7674da4a51d09c5542d6dd354e5d0ea70813c910160405180910390a25050505050505b5050505092915050565b804710156108455760405163cf47918160e01b8152476004820152602481018290526044016101f6565b5f80836001600160a01b0316836040515f6040518083038185875af1925050503d805f811461088f576040519150601f19603f3d011682016040523d82523d5f602084013e610894565b606091505b5091509150816108a7576108a781610adf565b50505050565b6108b5610b08565b61039181604051806040016040528060018152602001603160f81b815250610b53565b5f808080610a256108ec60c0870187611153565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610a1f92507f7f96328b83274ebc7c1cf4f7a3abda602b51a78b7fa1d86a2ce353d75e587cac9150610953905060208a018a610e72565b61096360408b0160208c01610e72565b60408b013560608c013561097d6100a660208f018f610e72565b8d608001602081019061099091906110f6565b8e8060a001906109a09190611153565b6040516109ae9291906111c3565b6040805191829003822060208301999099526001600160a01b0397881690820152959094166060860152608085019290925260a084015260c083015265ffffffffffff1660e08201526101008101919091526101200160405160208183030381529060405280519060200120610bb2565b90610be4565b5090925090505f816003811115610a3e57610a3e6111d2565b14959194509092505050565b6040513060248201525f90819060440160408051601f19818403018152919052602080820180516001600160e01b031663572b6c0560e01b17815282519293505f928392839290918391895afa92503d91505f519050828015610aae575060208210155b8015610ab957505f81115b9695505050505050565b610ad2603f60608301356111e6565b821015610adb57fe5b5050565b805115610aef5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610b5157604051631afcd79f60e31b815260040160405180910390fd5b565b610b5b610b08565b5f8051602061130e8339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610b948482611251565b5060038101610ba38382611251565b505f8082556001909101555050565b5f610bde610bbe610c2d565b8360405161190160f01b8152600281019290925260228201526042902090565b92915050565b5f805f8351604103610c1b576020840151604085015160608601515f1a610c0d88828585610c3b565b955095509550505050610c26565b505081515f91506002905b9250925092565b5f610c36610d03565b905090565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610c7457505f91506003905082610cf9565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610cc5573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116610cf057505f925060019150829050610cf9565b92505f91508190505b9450945094915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610d2d610d76565b610d35610dde565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f5f8051602061130e83398151915281610d8e610523565b805190915015610da657805160209091012092915050565b81548015610db5579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f8051602061130e83398151915281610df66105e3565b805190915015610e0e57805160209091012092915050565b60018201548015610db5579392505050565b5f60208284031215610e30575f80fd5b813567ffffffffffffffff811115610e46575f80fd5b820160e08185031215610e57575f80fd5b9392505050565b6001600160a01b0381168114610391575f80fd5b5f60208284031215610e82575f80fd5b8135610e5781610e5e565b5f81518084525f5b81811015610eb157602081850181015186830182015201610e95565b505f602082860101526020601f19601f83011685010191505092915050565b60ff60f81b881681525f602060e06020840152610ef060e084018a610e8d565b8381036040850152610f02818a610e8d565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b81811015610f5557835183529284019291840191600101610f39565b50909c9b505050505050505050505050565b5f805f60408486031215610f79575f80fd5b833567ffffffffffffffff80821115610f90575f80fd5b818601915086601f830112610fa3575f80fd5b813581811115610fb1575f80fd5b8760208260051b8501011115610fc5575f80fd5b60209283019550935050840135610fdb81610e5e565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561100a575f80fd5b813567ffffffffffffffff80821115611021575f80fd5b818401915084601f830112611034575f80fd5b81358181111561104657611046610fe6565b604051601f8201601f19908116603f0116810190838211818310171561106e5761106e610fe6565b81604052828152876020848701011115611086575f80fd5b826020860160208301375f928101602001929092525095945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f823560de198336030181126110cd575f80fd5b9190910192915050565b80820180821115610bde57634e487b7160e01b5f52601160045260245ffd5b5f60208284031215611106575f80fd5b813565ffffffffffff81168114610e57575f80fd5b600181811c9082168061112f57607f821691505b60208210810361114d57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f808335601e19843603018112611168575f80fd5b83018035915067ffffffffffffffff821115611182575f80fd5b602001915036819003821315611196575f80fd5b9250929050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b818382375f9101908152919050565b634e487b7160e01b5f52602160045260245ffd5b5f8261120057634e487b7160e01b5f52601260045260245ffd5b500490565b601f82111561124c57805f5260205f20601f840160051c8101602085101561122a5750805b601f840160051c820191505b81811015611249575f8155600101611236565b50505b505050565b815167ffffffffffffffff81111561126b5761126b610fe6565b61127f81611279845461111b565b84611205565b602080601f8311600181146112b2575f841561129b5750858301515b5f19600386901b1c1916600185901b178555610331565b5f85815260208120601f198616915b828110156112e0578886015182559484019460019091019084016112c1565b50858210156112fd57878501515f19600388901b60f8161c191681555b5050505050600190811b0190555056fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100a26469706673582212209dbf5cd776e8c5fbcb52abcb61417cac7b8f3dc1192ca21fd65f39ebbc69aed264736f6c63430008180033",
"deployedBytecode": "0x608060405260043610610054575f3560e01c806319d8d38c146100585780637ecebe001461008c57806384b0196e146100ed578063ccf96b4a14610114578063df905caf14610129578063f62d18881461013c575b5f80fd5b348015610063575f80fd5b50610077610072366004610e20565b61015b565b60405190151581526020015b60405180910390f35b348015610097575f80fd5b506100df6100a6366004610e72565b6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052604090205490565b604051908152602001610083565b3480156100f8575f80fd5b5061010161018b565b6040516100839796959493929190610ed0565b610127610122366004610f67565b610239565b005b610127610137366004610e20565b610339565b348015610147575f80fd5b50610127610156366004610ffa565b610394565b5f805f80610168856104a1565b509250925092508280156101795750815b80156101825750805b95945050505050565b5f60608082808083815f8051602061130e83398151915280549091501580156101b657506001810154155b6101ff5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610207610523565b61020f6105e3565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6001600160a01b038116155f80805b858110156102f757868682818110610262576102626110a5565b905060200281019061027491906110b9565b6102829060400135846110d7565b92505f6102b288888481811061029a5761029a6110a5565b90506020028101906102ac91906110b9565b86610621565b9050806102ee578787838181106102cb576102cb6110a5565b90506020028101906102dd91906110b9565b6102eb9060400135846110d7565b92505b50600101610248565b50348214610321576040516370647f7960e01b8152600481018390523460248201526044016101f6565b801561033157610331848261081b565b505050505050565b8060400135341461036957604080516370647f7960e01b81529082013560048201523460248201526044016101f6565b610374816001610621565b6103915760405163d6bda27560e01b815260040160405180910390fd5b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156103d95750825b90505f8267ffffffffffffffff1660011480156103f55750303b155b905081158015610403575080155b156104215760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561044b57845460ff60401b1916600160401b1785555b610454866108ad565b831561033157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b5f805f805f806104b0876108d8565b90925090506104cd6104c86040890160208a01610e72565b610a4a565b426104de60a08a0160808b016110f6565b65ffffffffffff16101583801561051257506104fd60208a018a610e72565b6001600160a01b0316836001600160a01b0316145b919750955093509150509193509193565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f8051602061130e833981519152916105619061111b565b80601f016020809104026020016040519081016040528092919081815260200182805461058d9061111b565b80156105d85780601f106105af576101008083540402835291602001916105d8565b820191905f5260205f20905b8154815290600101906020018083116105bb57829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10380546060915f8051602061130e833981519152916105619061111b565b5f805f805f61062f876104a1565b935093509350935085156106f5578361067d576106526040880160208901610e72565b60405163d2650cd160e01b81526001600160a01b0390911660048201523060248201526044016101f6565b826106b65761069260a08801608089016110f6565b604051634a777ac560e11b815265ffffffffffff90911660048201526024016101f6565b816106f557806106c96020890189610e72565b604051636422d02b60e11b81526001600160a01b039283166004820152911660248201526044016101f6565b8380156106ff5750815b80156107085750825b15610811576001600160a01b0381165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260408120805460018101909155905060608801355f61076460408b0160208c01610e72565b905060408a01355f61077960a08d018d611153565b61078660208f018f610e72565b6040516020016107989392919061119d565b60405160208183030381529060405290505f805f83516020850186888af19a505a90506107c5818e610ac3565b604080518781528c151560208201526001600160a01b038916917f842fb24a83793558587a3dab2be7674da4a51d09c5542d6dd354e5d0ea70813c910160405180910390a25050505050505b5050505092915050565b804710156108455760405163cf47918160e01b8152476004820152602481018290526044016101f6565b5f80836001600160a01b0316836040515f6040518083038185875af1925050503d805f811461088f576040519150601f19603f3d011682016040523d82523d5f602084013e610894565b606091505b5091509150816108a7576108a781610adf565b50505050565b6108b5610b08565b61039181604051806040016040528060018152602001603160f81b815250610b53565b5f808080610a256108ec60c0870187611153565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610a1f92507f7f96328b83274ebc7c1cf4f7a3abda602b51a78b7fa1d86a2ce353d75e587cac9150610953905060208a018a610e72565b61096360408b0160208c01610e72565b60408b013560608c013561097d6100a660208f018f610e72565b8d608001602081019061099091906110f6565b8e8060a001906109a09190611153565b6040516109ae9291906111c3565b6040805191829003822060208301999099526001600160a01b0397881690820152959094166060860152608085019290925260a084015260c083015265ffffffffffff1660e08201526101008101919091526101200160405160208183030381529060405280519060200120610bb2565b90610be4565b5090925090505f816003811115610a3e57610a3e6111d2565b14959194509092505050565b6040513060248201525f90819060440160408051601f19818403018152919052602080820180516001600160e01b031663572b6c0560e01b17815282519293505f928392839290918391895afa92503d91505f519050828015610aae575060208210155b8015610ab957505f81115b9695505050505050565b610ad2603f60608301356111e6565b821015610adb57fe5b5050565b805115610aef5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610b5157604051631afcd79f60e31b815260040160405180910390fd5b565b610b5b610b08565b5f8051602061130e8339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610b948482611251565b5060038101610ba38382611251565b505f8082556001909101555050565b5f610bde610bbe610c2d565b8360405161190160f01b8152600281019290925260228201526042902090565b92915050565b5f805f8351604103610c1b576020840151604085015160608601515f1a610c0d88828585610c3b565b955095509550505050610c26565b505081515f91506002905b9250925092565b5f610c36610d03565b905090565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610c7457505f91506003905082610cf9565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610cc5573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116610cf057505f925060019150829050610cf9565b92505f91508190505b9450945094915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610d2d610d76565b610d35610dde565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f5f8051602061130e83398151915281610d8e610523565b805190915015610da657805160209091012092915050565b81548015610db5579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f8051602061130e83398151915281610df66105e3565b805190915015610e0e57805160209091012092915050565b60018201548015610db5579392505050565b5f60208284031215610e30575f80fd5b813567ffffffffffffffff811115610e46575f80fd5b820160e08185031215610e57575f80fd5b9392505050565b6001600160a01b0381168114610391575f80fd5b5f60208284031215610e82575f80fd5b8135610e5781610e5e565b5f81518084525f5b81811015610eb157602081850181015186830182015201610e95565b505f602082860101526020601f19601f83011685010191505092915050565b60ff60f81b881681525f602060e06020840152610ef060e084018a610e8d565b8381036040850152610f02818a610e8d565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b81811015610f5557835183529284019291840191600101610f39565b50909c9b505050505050505050505050565b5f805f60408486031215610f79575f80fd5b833567ffffffffffffffff80821115610f90575f80fd5b818601915086601f830112610fa3575f80fd5b813581811115610fb1575f80fd5b8760208260051b8501011115610fc5575f80fd5b60209283019550935050840135610fdb81610e5e565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561100a575f80fd5b813567ffffffffffffffff80821115611021575f80fd5b818401915084601f830112611034575f80fd5b81358181111561104657611046610fe6565b604051601f8201601f19908116603f0116810190838211818310171561106e5761106e610fe6565b81604052828152876020848701011115611086575f80fd5b826020860160208301375f928101602001929092525095945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f823560de198336030181126110cd575f80fd5b9190910192915050565b80820180821115610bde57634e487b7160e01b5f52601160045260245ffd5b5f60208284031215611106575f80fd5b813565ffffffffffff81168114610e57575f80fd5b600181811c9082168061112f57607f821691505b60208210810361114d57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f808335601e19843603018112611168575f80fd5b83018035915067ffffffffffffffff821115611182575f80fd5b602001915036819003821315611196575f80fd5b9250929050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b818382375f9101908152919050565b634e487b7160e01b5f52602160045260245ffd5b5f8261120057634e487b7160e01b5f52601260045260245ffd5b500490565b601f82111561124c57805f5260205f20601f840160051c8101602085101561122a5750805b601f840160051c820191505b81811015611249575f8155600101611236565b50505b505050565b815167ffffffffffffffff81111561126b5761126b610fe6565b61127f81611279845461111b565b84611205565b602080601f8311600181146112b2575f841561129b5750858301515b5f19600386901b1c1916600185901b178555610331565b5f85815260208120601f198616915b828110156112e0578886015182559484019460019091019084016112c1565b50858210156112fd57878501515f19600388901b60f8161c191681555b5050505050600190811b0190555056fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100a26469706673582212209dbf5cd776e8c5fbcb52abcb61417cac7b8f3dc1192ca21fd65f39ebbc69aed264736f6c63430008180033",
"linkReferences": {},
"deployedLinkReferences": {}
}