@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": "0x608060405234801561000f575f80fd5b506113678061001d5f395ff3fe608060405260043610610054575f3560e01c806319d8d38c146100585780637ecebe001461008c57806384b0196e146100ed578063ccf96b4a14610114578063df905caf14610129578063f62d18881461013c575b5f80fd5b348015610063575f80fd5b50610077610072366004610e24565b61015b565b60405190151581526020015b60405180910390f35b348015610097575f80fd5b506100df6100a6366004610e76565b6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052604090205490565b604051908152602001610083565b3480156100f8575f80fd5b5061010161018b565b6040516100839796959493929190610ed4565b610127610122366004610f6b565b610239565b005b610127610137366004610e24565b610339565b348015610147575f80fd5b50610127610156366004610ffe565b610394565b5f805f806101688561048c565b509250925092508280156101795750815b80156101825750805b95945050505050565b5f60608082808083815f8051602061131283398151915280549091501580156101b657506001810154155b6101ff5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b61020761050e565b61020f6105ce565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6001600160a01b038116155f80805b858110156102f757868682818110610262576102626110a9565b905060200281019061027491906110bd565b6102829060400135846110db565b92505f6102b288888481811061029a5761029a6110a9565b90506020028101906102ac91906110bd565b8661060c565b9050806102ee578787838181106102cb576102cb6110a9565b90506020028101906102dd91906110bd565b6102eb9060400135846110db565b92505b50600101610248565b50348214610321576040516370647f7960e01b8152600481018390523460248201526044016101f6565b8015610331576103318482610806565b505050505050565b8060400135341461036957604080516370647f7960e01b81529082013560048201523460248201526044016101f6565b61037481600161060c565b6103915760405163d6bda27560e01b815260040160405180910390fd5b50565b5f61039d610898565b805490915060ff600160401b820416159067ffffffffffffffff165f811580156103c45750825b90505f8267ffffffffffffffff1660011480156103e05750303b155b9050811580156103ee575080155b1561040c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561043657845460ff60401b1916600160401b1785555b61043f866108c2565b831561033157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b5f805f805f8061049b876108ed565b90925090506104b86104b36040890160208a01610e76565b610a5f565b426104c960a08a0160808b016110fa565b65ffffffffffff1610158380156104fd57506104e860208a018a610e76565b6001600160a01b0316836001600160a01b0316145b919750955093509150509193509193565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f805160206113128339815191529161054c9061111f565b80601f01602080910402602001604051908101604052809291908181526020018280546105789061111f565b80156105c35780601f1061059a576101008083540402835291602001916105c3565b820191905f5260205f20905b8154815290600101906020018083116105a657829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10380546060915f805160206113128339815191529161054c9061111f565b5f805f805f61061a8761048c565b935093509350935085156106e057836106685761063d6040880160208901610e76565b60405163d2650cd160e01b81526001600160a01b0390911660048201523060248201526044016101f6565b826106a15761067d60a08801608089016110fa565b604051634a777ac560e11b815265ffffffffffff90911660048201526024016101f6565b816106e057806106b46020890189610e76565b604051636422d02b60e11b81526001600160a01b039283166004820152911660248201526044016101f6565b8380156106ea5750815b80156106f35750825b156107fc576001600160a01b0381165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260408120805460018101909155905060608801355f61074f60408b0160208c01610e76565b905060408a01355f61076460a08d018d611157565b61077160208f018f610e76565b604051602001610783939291906111a1565b60405160208183030381529060405290505f805f83516020850186888af19a505a90506107b0818e610ad8565b604080518781528c151560208201526001600160a01b038916917f842fb24a83793558587a3dab2be7674da4a51d09c5542d6dd354e5d0ea70813c910160405180910390a25050505050505b5050505092915050565b804710156108305760405163cf47918160e01b8152476004820152602481018290526044016101f6565b5f80836001600160a01b0316836040515f6040518083038185875af1925050503d805f811461087a576040519150601f19603f3d011682016040523d82523d5f602084013e61087f565b606091505b5091509150816108925761089281610af4565b50505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b6108ca610b1d565b61039181604051806040016040528060018152602001603160f81b815250610b44565b5f808080610a3a61090160c0870187611157565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610a3492507f7f96328b83274ebc7c1cf4f7a3abda602b51a78b7fa1d86a2ce353d75e587cac9150610968905060208a018a610e76565b61097860408b0160208c01610e76565b60408b013560608c01356109926100a660208f018f610e76565b8d60800160208101906109a591906110fa565b8e8060a001906109b59190611157565b6040516109c39291906111c7565b6040805191829003822060208301999099526001600160a01b0397881690820152959094166060860152608085019290925260a084015260c083015265ffffffffffff1660e08201526101008101919091526101200160405160208183030381529060405280519060200120610ba3565b90610bcf565b5090925090505f816003811115610a5357610a536111d6565b14959194509092505050565b6040513060248201525f90819060440160408051601f19818403018152919052602080820180516001600160e01b031663572b6c0560e01b17815282519293505f928392839290918391895afa92503d91505f519050828015610ac3575060208210155b8015610ace57505f81115b9695505050505050565b610ae7603f60608301356111ea565b821015610af057fe5b5050565b805115610b045780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b610b25610c18565b610b4257604051631afcd79f60e31b815260040160405180910390fd5b565b610b4c610b1d565b5f805160206113128339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610b858482611255565b5060038101610b948382611255565b505f8082556001909101555050565b5f6108bc610baf610c31565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f8351604103610c06576020840151604085015160608601515f1a610bf888828585610c3f565b955095509550505050610c11565b505081515f91506002905b9250925092565b5f610c21610898565b54600160401b900460ff16919050565b5f610c3a610d07565b905090565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610c7857505f91506003905082610cfd565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610cc9573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116610cf457505f925060019150829050610cfd565b92505f91508190505b9450945094915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610d31610d7a565b610d39610de2565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f5f8051602061131283398151915281610d9261050e565b805190915015610daa57805160209091012092915050565b81548015610db9579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f8051602061131283398151915281610dfa6105ce565b805190915015610e1257805160209091012092915050565b60018201548015610db9579392505050565b5f60208284031215610e34575f80fd5b813567ffffffffffffffff811115610e4a575f80fd5b820160e08185031215610e5b575f80fd5b9392505050565b6001600160a01b0381168114610391575f80fd5b5f60208284031215610e86575f80fd5b8135610e5b81610e62565b5f81518084525f5b81811015610eb557602081850181015186830182015201610e99565b505f602082860101526020601f19601f83011685010191505092915050565b60ff60f81b881681525f602060e06020840152610ef460e084018a610e91565b8381036040850152610f06818a610e91565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b81811015610f5957835183529284019291840191600101610f3d565b50909c9b505050505050505050505050565b5f805f60408486031215610f7d575f80fd5b833567ffffffffffffffff80821115610f94575f80fd5b818601915086601f830112610fa7575f80fd5b813581811115610fb5575f80fd5b8760208260051b8501011115610fc9575f80fd5b60209283019550935050840135610fdf81610e62565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561100e575f80fd5b813567ffffffffffffffff80821115611025575f80fd5b818401915084601f830112611038575f80fd5b81358181111561104a5761104a610fea565b604051601f8201601f19908116603f0116810190838211818310171561107257611072610fea565b8160405282815287602084870101111561108a575f80fd5b826020860160208301375f928101602001929092525095945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f823560de198336030181126110d1575f80fd5b9190910192915050565b808201808211156108bc57634e487b7160e01b5f52601160045260245ffd5b5f6020828403121561110a575f80fd5b813565ffffffffffff81168114610e5b575f80fd5b600181811c9082168061113357607f821691505b60208210810361115157634e487b7160e01b5f52602260045260245ffd5b50919050565b5f808335601e1984360301811261116c575f80fd5b83018035915067ffffffffffffffff821115611186575f80fd5b60200191503681900382131561119a575f80fd5b9250929050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b818382375f9101908152919050565b634e487b7160e01b5f52602160045260245ffd5b5f8261120457634e487b7160e01b5f52601260045260245ffd5b500490565b601f82111561125057805f5260205f20601f840160051c8101602085101561122e5750805b601f840160051c820191505b8181101561124d575f815560010161123a565b50505b505050565b815167ffffffffffffffff81111561126f5761126f610fea565b6112838161127d845461111f565b84611209565b602080601f8311600181146112b6575f841561129f5750858301515b5f19600386901b1c1916600185901b178555610331565b5f85815260208120601f198616915b828110156112e4578886015182559484019460019091019084016112c5565b508582101561130157878501515f19600388901b60f8161c191681555b5050505050600190811b0190555056fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100a2646970667358221220ad785a1d7023f6b4a7537541c33a231d6f69beeced36c2739ba1d0f59a60ddbd64736f6c63430008180033",
"deployedBytecode": "0x608060405260043610610054575f3560e01c806319d8d38c146100585780637ecebe001461008c57806384b0196e146100ed578063ccf96b4a14610114578063df905caf14610129578063f62d18881461013c575b5f80fd5b348015610063575f80fd5b50610077610072366004610e24565b61015b565b60405190151581526020015b60405180910390f35b348015610097575f80fd5b506100df6100a6366004610e76565b6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052604090205490565b604051908152602001610083565b3480156100f8575f80fd5b5061010161018b565b6040516100839796959493929190610ed4565b610127610122366004610f6b565b610239565b005b610127610137366004610e24565b610339565b348015610147575f80fd5b50610127610156366004610ffe565b610394565b5f805f806101688561048c565b509250925092508280156101795750815b80156101825750805b95945050505050565b5f60608082808083815f8051602061131283398151915280549091501580156101b657506001810154155b6101ff5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b61020761050e565b61020f6105ce565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6001600160a01b038116155f80805b858110156102f757868682818110610262576102626110a9565b905060200281019061027491906110bd565b6102829060400135846110db565b92505f6102b288888481811061029a5761029a6110a9565b90506020028101906102ac91906110bd565b8661060c565b9050806102ee578787838181106102cb576102cb6110a9565b90506020028101906102dd91906110bd565b6102eb9060400135846110db565b92505b50600101610248565b50348214610321576040516370647f7960e01b8152600481018390523460248201526044016101f6565b8015610331576103318482610806565b505050505050565b8060400135341461036957604080516370647f7960e01b81529082013560048201523460248201526044016101f6565b61037481600161060c565b6103915760405163d6bda27560e01b815260040160405180910390fd5b50565b5f61039d610898565b805490915060ff600160401b820416159067ffffffffffffffff165f811580156103c45750825b90505f8267ffffffffffffffff1660011480156103e05750303b155b9050811580156103ee575080155b1561040c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561043657845460ff60401b1916600160401b1785555b61043f866108c2565b831561033157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b5f805f805f8061049b876108ed565b90925090506104b86104b36040890160208a01610e76565b610a5f565b426104c960a08a0160808b016110fa565b65ffffffffffff1610158380156104fd57506104e860208a018a610e76565b6001600160a01b0316836001600160a01b0316145b919750955093509150509193509193565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f805160206113128339815191529161054c9061111f565b80601f01602080910402602001604051908101604052809291908181526020018280546105789061111f565b80156105c35780601f1061059a576101008083540402835291602001916105c3565b820191905f5260205f20905b8154815290600101906020018083116105a657829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10380546060915f805160206113128339815191529161054c9061111f565b5f805f805f61061a8761048c565b935093509350935085156106e057836106685761063d6040880160208901610e76565b60405163d2650cd160e01b81526001600160a01b0390911660048201523060248201526044016101f6565b826106a15761067d60a08801608089016110fa565b604051634a777ac560e11b815265ffffffffffff90911660048201526024016101f6565b816106e057806106b46020890189610e76565b604051636422d02b60e11b81526001600160a01b039283166004820152911660248201526044016101f6565b8380156106ea5750815b80156106f35750825b156107fc576001600160a01b0381165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260408120805460018101909155905060608801355f61074f60408b0160208c01610e76565b905060408a01355f61076460a08d018d611157565b61077160208f018f610e76565b604051602001610783939291906111a1565b60405160208183030381529060405290505f805f83516020850186888af19a505a90506107b0818e610ad8565b604080518781528c151560208201526001600160a01b038916917f842fb24a83793558587a3dab2be7674da4a51d09c5542d6dd354e5d0ea70813c910160405180910390a25050505050505b5050505092915050565b804710156108305760405163cf47918160e01b8152476004820152602481018290526044016101f6565b5f80836001600160a01b0316836040515f6040518083038185875af1925050503d805f811461087a576040519150601f19603f3d011682016040523d82523d5f602084013e61087f565b606091505b5091509150816108925761089281610af4565b50505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b6108ca610b1d565b61039181604051806040016040528060018152602001603160f81b815250610b44565b5f808080610a3a61090160c0870187611157565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610a3492507f7f96328b83274ebc7c1cf4f7a3abda602b51a78b7fa1d86a2ce353d75e587cac9150610968905060208a018a610e76565b61097860408b0160208c01610e76565b60408b013560608c01356109926100a660208f018f610e76565b8d60800160208101906109a591906110fa565b8e8060a001906109b59190611157565b6040516109c39291906111c7565b6040805191829003822060208301999099526001600160a01b0397881690820152959094166060860152608085019290925260a084015260c083015265ffffffffffff1660e08201526101008101919091526101200160405160208183030381529060405280519060200120610ba3565b90610bcf565b5090925090505f816003811115610a5357610a536111d6565b14959194509092505050565b6040513060248201525f90819060440160408051601f19818403018152919052602080820180516001600160e01b031663572b6c0560e01b17815282519293505f928392839290918391895afa92503d91505f519050828015610ac3575060208210155b8015610ace57505f81115b9695505050505050565b610ae7603f60608301356111ea565b821015610af057fe5b5050565b805115610b045780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b610b25610c18565b610b4257604051631afcd79f60e31b815260040160405180910390fd5b565b610b4c610b1d565b5f805160206113128339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610b858482611255565b5060038101610b948382611255565b505f8082556001909101555050565b5f6108bc610baf610c31565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f8351604103610c06576020840151604085015160608601515f1a610bf888828585610c3f565b955095509550505050610c11565b505081515f91506002905b9250925092565b5f610c21610898565b54600160401b900460ff16919050565b5f610c3a610d07565b905090565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610c7857505f91506003905082610cfd565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610cc9573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116610cf457505f925060019150829050610cfd565b92505f91508190505b9450945094915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610d31610d7a565b610d39610de2565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f5f8051602061131283398151915281610d9261050e565b805190915015610daa57805160209091012092915050565b81548015610db9579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f8051602061131283398151915281610dfa6105ce565b805190915015610e1257805160209091012092915050565b60018201548015610db9579392505050565b5f60208284031215610e34575f80fd5b813567ffffffffffffffff811115610e4a575f80fd5b820160e08185031215610e5b575f80fd5b9392505050565b6001600160a01b0381168114610391575f80fd5b5f60208284031215610e86575f80fd5b8135610e5b81610e62565b5f81518084525f5b81811015610eb557602081850181015186830182015201610e99565b505f602082860101526020601f19601f83011685010191505092915050565b60ff60f81b881681525f602060e06020840152610ef460e084018a610e91565b8381036040850152610f06818a610e91565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b81811015610f5957835183529284019291840191600101610f3d565b50909c9b505050505050505050505050565b5f805f60408486031215610f7d575f80fd5b833567ffffffffffffffff80821115610f94575f80fd5b818601915086601f830112610fa7575f80fd5b813581811115610fb5575f80fd5b8760208260051b8501011115610fc9575f80fd5b60209283019550935050840135610fdf81610e62565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561100e575f80fd5b813567ffffffffffffffff80821115611025575f80fd5b818401915084601f830112611038575f80fd5b81358181111561104a5761104a610fea565b604051601f8201601f19908116603f0116810190838211818310171561107257611072610fea565b8160405282815287602084870101111561108a575f80fd5b826020860160208301375f928101602001929092525095945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f823560de198336030181126110d1575f80fd5b9190910192915050565b808201808211156108bc57634e487b7160e01b5f52601160045260245ffd5b5f6020828403121561110a575f80fd5b813565ffffffffffff81168114610e5b575f80fd5b600181811c9082168061113357607f821691505b60208210810361115157634e487b7160e01b5f52602260045260245ffd5b50919050565b5f808335601e1984360301811261116c575f80fd5b83018035915067ffffffffffffffff821115611186575f80fd5b60200191503681900382131561119a575f80fd5b9250929050565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b818382375f9101908152919050565b634e487b7160e01b5f52602160045260245ffd5b5f8261120457634e487b7160e01b5f52601260045260245ffd5b500490565b601f82111561125057805f5260205f20601f840160051c8101602085101561122e5750805b601f840160051c820191505b8181101561124d575f815560010161123a565b50505b505050565b815167ffffffffffffffff81111561126f5761126f610fea565b6112838161127d845461111f565b84611209565b602080601f8311600181146112b6575f841561129f5750858301515b5f19600386901b1c1916600185901b178555610331565b5f85815260208120601f198616915b828110156112e4578886015182559484019460019091019084016112c5565b508582101561130157878501515f19600388901b60f8161c191681555b5050505050600190811b0190555056fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100a2646970667358221220ad785a1d7023f6b4a7537541c33a231d6f69beeced36c2739ba1d0f59a60ddbd64736f6c63430008180033",
"linkReferences": {},
"deployedLinkReferences": {}
}