diff --git a/specs/protocol/jovian/derivation.md b/specs/protocol/jovian/derivation.md index 8355096e5..03858b888 100644 --- a/specs/protocol/jovian/derivation.md +++ b/specs/protocol/jovian/derivation.md @@ -7,6 +7,9 @@ - [Network Upgrade Transactions](#network-upgrade-transactions) - [L1Block Deployment](#l1block-deployment) - [L1Block Proxy Update](#l1block-proxy-update) + - [GasPriceOracle Deployment](#gaspriceoracle-deployment) + - [GasPriceOracle Proxy Update](#gaspriceoracle-proxy-update) + - [GasPriceOracle Enable Jovian](#gaspriceoracle-enable-jovian) @@ -109,3 +112,117 @@ Verify `sourceHash`: cast keccak $(cast concat-hex 0x0000000000000000000000000000000000000000000000000000000000000002 $(cast keccak "Jovian: L1Block Proxy Update")) # 0x08447273a4fbce97bc8c515f97ac74efc461f6a4001553712f31ebc11288bad2 ``` + +### GasPriceOracle Deployment + + +The `GasPriceOracle` contract is deployed. + +A deposit transaction is derived with the following attributes: + +- `from`: `0x4210000000000000000000000000000000000006` +- `to`: `null` +- `mint`: `0` +- `value`: `0` +- `nonce`: `0` +- `gasLimit`: `1756783` +- `data`: `0x0x608060405234801561001057600080...` ([full bytecode](../../../specs/static/bytecode/jovian-gas-price-oracle-deployment.txt)) +- `sourceHash`: `0xd939cca6eca7bd0ee0c7e89f7e5b5cf7bf6f7afe7b6966bb45dfb95344b31545`, + computed with the "Upgrade-deposited" type, with `intent = "Jovian: GasPriceOracle Deployment"` + +This results in the Jovian GasPriceOracle contract being deployed to +`0x3Ba4007f5C922FBb33C454B41ea7a1f11E83df2C`, to verify: + +```bash +cast compute-address --nonce=0 0x4210000000000000000000000000000000000006 +Computed Address: 0x3Ba4007f5C922FBb33C454B41ea7a1f11E83df2C +``` + +Verify `sourceHash`: + +```bash +cast keccak $(cast concat-hex 0x0000000000000000000000000000000000000000000000000000000000000002 $(cast keccak "Jovian: GasPriceOracle Deployment")) +# 0xd939cca6eca7bd0ee0c7e89f7e5b5cf7bf6f7afe7b6966bb45dfb95344b31545 +``` + +Verify `data`: + +```bash +git checkout 134edb32991f408a3354caf3de8a68145437cfc9 +make build-contracts +jq -r ".bytecode.object" packages/contracts-bedrock/forge-artifacts/GasPriceOracle.sol/GasPriceOracle.json +``` + +This transaction MUST deploy a contract with the following code hash +`0xa7fd95526766fc3ba40ed64aa1b55ad051cb2930df64e11c4a848b81d3a8deaf`. + +To verify the code hash: + +```bash +git checkout 134edb32991f408a3354caf3de8a68145437cfc9 +make build-contracts +cast k $(jq -r ".deployedBytecode.object" packages/contracts-bedrock/forge-artifacts/GasPriceOracle.sol/GasPriceOracle.json) +``` + +### GasPriceOracle Proxy Update + +This transaction updates the GasPriceOracle Proxy ERC-1967 +implementation slot to point to the new GasPriceOracle deployment. + +A deposit transaction is derived with the following attributes: + +- `from`: `0x0000000000000000000000000000000000000000` +- `to`: `0x420000000000000000000000000000000000000F` (GasPriceOracle Proxy) +- `mint`: `0` +- `value`: `0` +- `gasLimit`: `50,000` +- `data`: `0x3659cfe60000000000000000000000003ba4007f5c922fbb33c454b41ea7a1f11e83df2c` +- `sourceHash`: `0x46b597e2d8346ed7749b46734074361e0b41a0ab9af7afda5bb4e367e072bcb8` + computed with the "Upgrade-deposited" type, with `intent = "Jovian: GasPriceOracle Proxy Update"` + +Verify data: + +```bash +cast concat-hex $(cast sig "upgradeTo(address)") $(cast abi-encode "upgradeTo(address)" 0x3Ba4007f5C922FBb33C454B41ea7a1f11E83df2C) +# 0x3659cfe60000000000000000000000003ba4007f5c922fbb33c454b41ea7a1f11e83df2c +``` + +Verify `sourceHash`: + +```bash +cast keccak $(cast concat-hex 0x0000000000000000000000000000000000000000000000000000000000000002 $(cast keccak "Jovian: GasPriceOracle Proxy Update")) +# 0x46b597e2d8346ed7749b46734074361e0b41a0ab9af7afda5bb4e367e072bcb8 +``` + +### GasPriceOracle Enable Jovian + +This transaction informs the GasPriceOracle to start using the Jovian operator fee formula. + +A deposit transaction is derived with the following attributes: + +- `from`: `0xDeaDDEaDDeAdDeAdDEAdDEaddeAddEAdDEAd0001` (Depositer Account) +- `to`: `0x420000000000000000000000000000000000000F` (Gas Price Oracle Proxy) +- `mint`: `0` +- `value`: `0` +- `gasLimit`: `90,000` +- `data`: `0xb3d72079` +- `sourceHash`: `0xe836db6a959371756f8941be3e962d000f7e12a32e49e2c9ca42ba177a92716c`, + computed with the "Upgrade-deposited" type, with `intent = "Jovian: Gas Price Oracle Set Jovian"` + +Verify data: + +```bash +cast sig "setJovian()" +# 0xb3d72079 +``` + +Verify `sourceHash`: + +```bash +cast keccak $(cast concat-hex 0x0000000000000000000000000000000000000000000000000000000000000002 $(cast keccak "Jovian: Gas Price Oracle Set Jovian")) +# 0xe836db6a959371756f8941be3e962d000f7e12a32e49e2c9ca42ba177a92716c +``` diff --git a/specs/protocol/jovian/exec-engine.md b/specs/protocol/jovian/exec-engine.md index 47585c0a8..634a1a6a7 100644 --- a/specs/protocol/jovian/exec-engine.md +++ b/specs/protocol/jovian/exec-engine.md @@ -11,6 +11,9 @@ - [DA Footprint Block Limit](#da-footprint-block-limit) - [Scalar loading](#scalar-loading) - [Rationale](#rationale-1) +- [Operator Fee](#operator-fee) + - [Fee Formula Update](#fee-formula-update) + - [Maximum value](#maximum-value) @@ -148,3 +151,28 @@ throttling: a mechanism which artificially constricts block building. This can c unnecessary losses for chain operators and a negative user experience (transaction inclusion delays, priority fee auctions). So hard-limiting a block's DA footprint in a way that also influences the base fee mitigates the aforementioned problems of policy-based solutions. + +## Operator Fee + +### Fee Formula Update + +Jovian updates the operator fee calculation so that higher fees may be charged. +Starting at the Jovian activation, the operator fee MUST be computed as: + +$$ +\text{operatorFee} = (\text{gas} \times \text{operatorFeeScalar} \times 100) + \text{operatorFeeConstant} +$$ + +The effective per-gas scalar applied is therefore `100 * operatorFeeScalar`. Otherwise, the data types and operator fee +semantics described in the [Isthmus spec](../isthmus/exec-engine.md#operator-fee) continue to apply. + +### Maximum value + +With the new formula, the operator fee's maximum value has 103 bits: + +$$ +\text{operatorFee}_{\text{max}} = (\text{uint64}_{\text{max}} \times \text{uint32}_{\text{max}} \times 100) + +\text{uint64}_{\text{max}} \approx 7.924660923989131 \times 10^{30} +$$ + +Implementations that use `uint256` for intermediate arithmetic do not need additional overflow checks. diff --git a/specs/protocol/jovian/overview.md b/specs/protocol/jovian/overview.md index 49b63f6d0..dd3503ff6 100644 --- a/specs/protocol/jovian/overview.md +++ b/specs/protocol/jovian/overview.md @@ -16,6 +16,7 @@ This document is not finalized and should be considered experimental. - [Minimum Base Fee](./exec-engine.md#minimum-base-fee) - [DA Footprint Limit](./exec-engine.md#da-footprint-limit) +- [Operator Fee](./exec-engine.md#operator-fee) ## Consensus Layer diff --git a/specs/static/bytecode/jovian-gas-price-oracle-deployment.txt b/specs/static/bytecode/jovian-gas-price-oracle-deployment.txt new file mode 100644 index 000000000..4d6d15c45 --- /dev/null +++ b/specs/static/bytecode/jovian-gas-price-oracle-deployment.txt @@ -0,0 +1 @@ +0x608060405234801561001057600080fd5b50611ec4806100206000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806368d5dca6116100e3578063c59859181161008c578063f45e65d811610066578063f45e65d8146102fc578063f820614014610304578063fe173b971461029357600080fd5b8063c5985918146102ce578063de26c4a1146102d6578063f1c7a58b146102e957600080fd5b8063960e3a23116100bd578063960e3a23146102a1578063b3d72079146102b3578063b54501bc146102bb57600080fd5b806368d5dca6146102765780636ef25c3a146102935780638e98b1061461029957600080fd5b80632e0f2625116101455780634ef6e2241161011f5780634ef6e22414610218578063519b4bd31461022557806354fd4d501461022d57600080fd5b80632e0f2625146101f6578063313ce567146101fe57806349948e0e1461020557600080fd5b806322b90ab31161017657806322b90ab3146101d1578063275aedd2146101db578063291b0383146101ee57600080fd5b80630c18c16214610192578063105d0b81146101ad575b600080fd5b61019a61030c565b6040519081526020015b60405180910390f35b6000546101c1906301000000900460ff1681565b60405190151581526020016101a4565b6101d961042d565b005b61019a6101e9366004611916565b6105b6565b6101d9610792565b61019a600681565b600661019a565b61019a61021336600461195e565b6109ba565b6000546101c19060ff1681565b61019a6109f7565b6102696040518060400160405280600581526020017f312e352e3000000000000000000000000000000000000000000000000000000081525081565b6040516101a49190611a2d565b61027e610a58565b60405163ffffffff90911681526020016101a4565b4861019a565b6101d9610add565b6000546101c190610100900460ff1681565b6101d9610cd7565b6000546101c19062010000900460ff1681565b61027e610ede565b61019a6102e436600461195e565b610f3f565b61019a6102f7366004611916565b611039565b61019a61110d565b61019a611200565b6000805460ff16156103a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f47617350726963654f7261636c653a206f76657268656164282920697320646560448201527f707265636174656400000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610404573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104289190611aa0565b905090565b3373deaddeaddeaddeaddeaddeaddeaddeaddead0001146104f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f47617350726963654f7261636c653a206f6e6c7920746865206465706f73697460448201527f6f72206163636f756e742063616e2073657420697345636f746f6e6520666c6160648201527f6700000000000000000000000000000000000000000000000000000000000000608482015260a40161039c565b60005460ff1615610589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f47617350726963654f7261636c653a2045636f746f6e6520616c72656164792060448201527f6163746976650000000000000000000000000000000000000000000000000000606482015260840161039c565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000805462010000900460ff166105cf57506000919050565b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16634d5d9a2a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610630573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106549190611ab9565b63ffffffff169050600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff166316d3bc7f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190611adf565b67ffffffffffffffff169050600060039054906101000a900460ff16156107535761074b82850285810484148615177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011761073e906064611b38565b8281019081106000031790565b949350505050565b61074b620f424083860286810485148715177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011761073e9190611b75565b3373deaddeaddeaddeaddeaddeaddeaddeaddead00011461085b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f47617350726963654f7261636c653a206f6e6c7920746865206465706f73697460448201527f6f72206163636f756e742063616e20736574206973497374686d757320666c6160648201527f6700000000000000000000000000000000000000000000000000000000000000608482015260a40161039c565b600054610100900460ff166108f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f47617350726963654f7261636c653a20497374686d75732063616e206f6e6c7960448201527f2062652061637469766174656420616674657220466a6f726400000000000000606482015260840161039c565b60005462010000900460ff161561098b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f47617350726963654f7261636c653a20497374686d757320616c72656164792060448201527f6163746976650000000000000000000000000000000000000000000000000000606482015260840161039c565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000179055565b60008054610100900460ff16156109da576109d482611261565b92915050565b60005460ff16156109ee576109d482611280565b6109d482611324565b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16635cf249696040518163ffffffff1660e01b8152600401602060405180830381865afa158015610404573d6000803e3d6000fd5b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff166368d5dca66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104289190611ab9565b3373deaddeaddeaddeaddeaddeaddeaddeaddead000114610b80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f47617350726963654f7261636c653a206f6e6c7920746865206465706f73697460448201527f6f72206163636f756e742063616e20736574206973466a6f726420666c616700606482015260840161039c565b60005460ff16610c12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f47617350726963654f7261636c653a20466a6f72642063616e206f6e6c79206260448201527f65206163746976617465642061667465722045636f746f6e6500000000000000606482015260840161039c565b600054610100900460ff1615610ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f47617350726963654f7261636c653a20466a6f726420616c726561647920616360448201527f7469766500000000000000000000000000000000000000000000000000000000606482015260840161039c565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b3373deaddeaddeaddeaddeaddeaddeaddeaddead000114610d7c57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f47617350726963654f7261636c653a206f6e6c7920746865206465706f73697460448201527f6f72206163636f756e742063616e207365742069734a6f7669616e20666c6167606482015260840161039c565b60005462010000900460ff16610e14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f47617350726963654f7261636c653a204a6f7669616e2063616e206f6e6c792060448201527f62652061637469766174656420616674657220497374686d7573000000000000606482015260840161039c565b6000546301000000900460ff1615610eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f47617350726963654f7261636c653a204a6f7669616e20616c7265616479206160448201527f6374697665000000000000000000000000000000000000000000000000000000606482015260840161039c565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff166301000000179055565b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663c59859186040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab9573d6000803e3d6000fd5b60008054610100900460ff1615610f8657620f4240610f71610f6084611478565b51610f6c906044611bb0565b611795565b610f7c906010611b38565b6109d49190611b75565b6000610f91836117f4565b60005490915060ff1615610fa55792915050565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110289190611aa0565b6110329082611bb0565b9392505050565b60008054610100900460ff166110d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f47617350726963654f7261636c653a206765744c314665655570706572426f7560448201527f6e64206f6e6c7920737570706f72747320466a6f726400000000000000000000606482015260840161039c565b60006110de836044611bb0565b905060006110ed60ff83611b75565b6110f79083611bb0565b611102906010611bb0565b905061074b81611884565b6000805460ff16156111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f47617350726963654f7261636c653a207363616c61722829206973206465707260448201527f6563617465640000000000000000000000000000000000000000000000000000606482015260840161039c565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16639e8c49666040518163ffffffff1660e01b8152600401602060405180830381865afa158015610404573d6000803e3d6000fd5b600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663f82061406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610404573d6000803e3d6000fd5b60006109d461126f83611478565b5161127b906044611bb0565b611884565b60008061128c836117f4565b905060006112986109f7565b6112a0610ede565b6112ab906010611bc8565b63ffffffff166112bb9190611b38565b905060006112c7611200565b6112cf610a58565b63ffffffff166112df9190611b38565b905060006112ed8284611bb0565b6112f79085611b38565b90506113056006600a611d14565b611310906010611b38565b61131a9082611b75565b9695505050505050565b600080611330836117f4565b9050600073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16639e8c49666040518163ffffffff1660e01b8152600401602060405180830381865afa158015611393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b79190611aa0565b6113bf6109f7565b73420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16638b239f736040518163ffffffff1660e01b8152600401602060405180830381865afa15801561141e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114429190611aa0565b61144c9085611bb0565b6114569190611b38565b6114609190611b38565b905061146e6006600a611d14565b61074b9082611b75565b6060611607565b818153600101919050565b600082840393505b838110156110325782810151828201511860001a1590930292600101611492565b825b602082106114ff5782516114ca601f8361147f565b52602092909201917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101906021016114b5565b8115611032578251611514600184038361147f565b520160010192915050565b60006001830392505b6101078210611560576115528360ff1661154d60fd61154d8760081c60e0018961147f565b61147f565b935061010682039150611528565b6007821061158d576115868360ff1661154d6007850361154d8760081c60e0018961147f565b9050611032565b61074b8360ff1661154d8560081c8560051b018761147f565b6115ff8282036115e36115d384600081518060001a8160011a60081b178160021a60101b17915050919050565b639e3779b90260131c611fff1690565b8060021b6040510182815160e01c1860e01b8151188152505050565b600101919050565b6180003860405139618000604051016020830180600d8551820103826002015b8181101561173a576000805b50508051604051600082901a600183901a60081b1760029290921a60101b91909117639e3779b9810260111c617ffc16909101805160e081811c878603811890911b9091189091528401908183039084841061168f57506116ca565b600184019350611fff82116116c4578251600081901a600182901a60081b1760029190911a60101b1781036116c457506116ca565b50611633565b8383106116d857505061173a565b600183039250858311156116f6576116f387878886036114b3565b96505b61170a60098501600385016003850161148a565b915061171787828461151f565b96505061172f8461172a868486016115a6565b6115a6565b915050809350611627565b505061174c83838488518501036114b3565b925050506040519150618000820180820391508183526020830160005b83811015611781578281015182820152602001611769565b506000920191825250602001604052919050565b6000806117a583620cc394611b38565b6117cf907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd763200611d20565b90506117df6064620f4240611d94565b8112156109d4576110326064620f4240611d94565b80516000908190815b818110156118775784818151811061181757611817611e50565b01602001517fff000000000000000000000000000000000000000000000000000000000000001660000361185757611850600484611bb0565b9250611865565b611862601084611bb0565b92505b8061186f81611e7f565b9150506117fd565b5061074b82610440611bb0565b60008061189083611795565b9050600061189c611200565b6118a4610a58565b63ffffffff166118b49190611b38565b6118bc6109f7565b6118c4610ede565b6118cf906010611bc8565b63ffffffff166118df9190611b38565b6118e99190611bb0565b90506118f760066002611b38565b61190290600a611d14565b61190c8284611b38565b61074b9190611b75565b60006020828403121561192857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561197057600080fd5b813567ffffffffffffffff8082111561198857600080fd5b818401915084601f83011261199c57600080fd5b8135818111156119ae576119ae61192f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156119f4576119f461192f565b81604052828152876020848701011115611a0d57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208083528351808285015260005b81811015611a5a57858101830151858201604001528201611a3e565b81811115611a6c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060208284031215611ab257600080fd5b5051919050565b600060208284031215611acb57600080fd5b815163ffffffff8116811461103257600080fd5b600060208284031215611af157600080fd5b815167ffffffffffffffff8116811461103257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611b7057611b70611b09565b500290565b600082611bab577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008219821115611bc357611bc3611b09565b500190565b600063ffffffff80831681851681830481118215151615611beb57611beb611b09565b02949350505050565b600181815b80851115611c4d57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115611c3357611c33611b09565b80851615611c4057918102915b93841c9390800290611bf9565b509250929050565b600082611c64575060016109d4565b81611c71575060006109d4565b8160018114611c875760028114611c9157611cad565b60019150506109d4565b60ff841115611ca257611ca2611b09565b50506001821b6109d4565b5060208310610133831016604e8410600b8410161715611cd0575081810a6109d4565b611cda8383611bf4565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115611d0c57611d0c611b09565b029392505050565b60006110328383611c55565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615611d5a57611d5a611b09565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615611d8e57611d8e611b09565b50500190565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615611dd557611dd5611b09565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615611e1057611e10611b09565b60008712925087820587128484161615611e2c57611e2c611b09565b87850587128184161615611e4257611e42611b09565b505050929093029392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611eb057611eb0611b09565b506001019056fea164736f6c634300080f000a