From b86357afb01728c51a6b5ebe5afb4dd3f0f9ed57 Mon Sep 17 00:00:00 2001 From: Melvillian Date: Fri, 21 Nov 2025 17:13:35 -0500 Subject: [PATCH] update flashtestation logic to use new workload ID computation To account for a bug in the xfam and tdAttributes bitmasking logic, we changed the way the workload ID is calculated in the BlockBuilderPolicy. That PR is here: https://github.com/flashbots/flashtestations/pull/53 This means the workload ID calculation needs to change in any upstream services, which includes op-rbuilder. I've made the same change that I made in the solidity contract here in the attestation.rs logic where op-rbuilder calculates the workload ID. The tests have been updated to use the new correct workload ID, which I obtained by running the BlockBuilderPolicy:workloadIdForTDRegistration function on the same TEE registration that is used in the tests. --- .../src/flashtestations/attestation.rs | 28 +- .../contracts/BlockBuilderPolicy.json | 10287 +++++++++++++++- crates/op-rbuilder/src/tests/framework/mod.rs | 2 +- 3 files changed, 10258 insertions(+), 59 deletions(-) diff --git a/crates/op-rbuilder/src/flashtestations/attestation.rs b/crates/op-rbuilder/src/flashtestations/attestation.rs index 6af5cc24..df712f98 100644 --- a/crates/op-rbuilder/src/flashtestations/attestation.rs +++ b/crates/op-rbuilder/src/flashtestations/attestation.rs @@ -9,13 +9,6 @@ const DEBUG_QUOTE_SERVICE_URL: &str = "http://ns31695324.ip-141-94-163.eu:10080/ const HEADER_LENGTH: usize = 48; const TD_REPORT10_LENGTH: usize = 584; -// TDX workload constants -const TD_XFAM_FPU: u64 = 0x0000000000000001; -const TD_XFAM_SSE: u64 = 0x0000000000000002; -const TD_TDATTRS_VE_DISABLED: u64 = 0x0000000010000000; -const TD_TDATTRS_PKS: u64 = 0x0000000040000000; -const TD_TDATTRS_KL: u64 = 0x0000000080000000; - // TD10ReportBody field offsets // These offsets correspond to the Solidity parseRawReportBody implementation const OFFSET_TD_ATTRIBUTES: usize = 120; @@ -186,23 +179,6 @@ pub fn parse_report_body(raw_quote: &[u8]) -> eyre::Result { /// This corresponds to QuoteParser.parseV4VerifierOutput in Solidity implementation /// The workload ID uniquely identifies a TEE workload based on its measurement registers pub fn compute_workload_id_from_parsed(parsed: &ParsedQuote) -> [u8; 32] { - // Apply transformations as per the Solidity implementation - // expectedXfamBits = TD_XFAM_FPU | TD_XFAM_SSE - let expected_xfam_bits = TD_XFAM_FPU | TD_XFAM_SSE; - - // ignoredTdAttributesBitmask = TD_TDATTRS_VE_DISABLED | TD_TDATTRS_PKS | TD_TDATTRS_KL - let ignored_td_attributes_bitmask = TD_TDATTRS_VE_DISABLED | TD_TDATTRS_PKS | TD_TDATTRS_KL; - - // Transform xFAM: xFAM ^ expectedXfamBits - let transformed_xfam = parsed.xfam ^ expected_xfam_bits; - - // Transform tdAttributes: tdAttributes & ~ignoredTdAttributesBitmask - let transformed_td_attributes = parsed.td_attributes & !ignored_td_attributes_bitmask; - - // Convert transformed values to bytes (big-endian, to match Solidity bytes8) - let xfam_bytes = transformed_xfam.to_be_bytes(); - let td_attributes_bytes = transformed_td_attributes.to_be_bytes(); - // Concatenate all fields let mut concatenated = Vec::new(); concatenated.extend_from_slice(&parsed.mr_td); @@ -211,8 +187,8 @@ pub fn compute_workload_id_from_parsed(parsed: &ParsedQuote) -> [u8; 32] { concatenated.extend_from_slice(&parsed.rt_mr2); concatenated.extend_from_slice(&parsed.rt_mr3); concatenated.extend_from_slice(&parsed.mr_config_id); - concatenated.extend_from_slice(&xfam_bytes); - concatenated.extend_from_slice(&td_attributes_bytes); + concatenated.extend_from_slice(&parsed.xfam.to_be_bytes()); + concatenated.extend_from_slice(&parsed.td_attributes.to_be_bytes()); // Compute keccak256 hash let mut hasher = Keccak256::new(); diff --git a/crates/op-rbuilder/src/tests/framework/artifacts/contracts/BlockBuilderPolicy.json b/crates/op-rbuilder/src/tests/framework/artifacts/contracts/BlockBuilderPolicy.json index 6d95e833..b661a1b2 100644 --- a/crates/op-rbuilder/src/tests/framework/artifacts/contracts/BlockBuilderPolicy.json +++ b/crates/op-rbuilder/src/tests/framework/artifacts/contracts/BlockBuilderPolicy.json @@ -5,7 +5,11 @@ "name": "UPGRADE_INTERFACE_VERSION", "inputs": [], "outputs": [ - { "name": "", "type": "string", "internalType": "string" } + { + "name": "", + "type": "string", + "internalType": "string" + } ], "stateMutability": "view" }, @@ -14,7 +18,11 @@ "name": "VERIFY_BLOCK_BUILDER_PROOF_TYPEHASH", "inputs": [], "outputs": [ - { "name": "", "type": "bytes32", "internalType": "bytes32" } + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } ], "stateMutability": "view" }, @@ -45,7 +53,11 @@ "type": "function", "name": "computeStructHash", "inputs": [ - { "name": "version", "type": "uint8", "internalType": "uint8" }, + { + "name": "version", + "type": "uint8", + "internalType": "uint8" + }, { "name": "blockContentHash", "type": "bytes32", @@ -58,7 +70,11 @@ } ], "outputs": [ - { "name": "", "type": "bytes32", "internalType": "bytes32" } + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } ], "stateMutability": "pure" }, @@ -67,7 +83,11 @@ "name": "domainSeparator", "inputs": [], "outputs": [ - { "name": "", "type": "bytes32", "internalType": "bytes32" } + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } ], "stateMutability": "view" }, @@ -81,7 +101,11 @@ "type": "bytes1", "internalType": "bytes1" }, - { "name": "name", "type": "string", "internalType": "string" }, + { + "name": "name", + "type": "string", + "internalType": "string" + }, { "name": "version", "type": "string", @@ -121,7 +145,11 @@ } ], "outputs": [ - { "name": "", "type": "bytes32", "internalType": "bytes32" } + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } ], "stateMutability": "view" }, @@ -185,8 +213,16 @@ } ], "outputs": [ - { "name": "allowed", "type": "bool", "internalType": "bool" }, - { "name": "", "type": "bytes32", "internalType": "WorkloadId" } + { + "name": "allowed", + "type": "bool", + "internalType": "bool" + }, + { + "name": "", + "type": "bytes32", + "internalType": "WorkloadId" + } ], "stateMutability": "view" }, @@ -214,7 +250,11 @@ "name": "owner", "inputs": [], "outputs": [ - { "name": "", "type": "address", "internalType": "address" } + { + "name": "", + "type": "address", + "internalType": "address" + } ], "stateMutability": "view" }, @@ -222,7 +262,11 @@ "type": "function", "name": "permitVerifyBlockBuilderProof", "inputs": [ - { "name": "version", "type": "uint8", "internalType": "uint8" }, + { + "name": "version", + "type": "uint8", + "internalType": "uint8" + }, { "name": "blockContentHash", "type": "bytes32", @@ -247,7 +291,11 @@ "name": "proxiableUUID", "inputs": [], "outputs": [ - { "name": "", "type": "bytes32", "internalType": "bytes32" } + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } ], "stateMutability": "view" }, @@ -256,7 +304,11 @@ "name": "registry", "inputs": [], "outputs": [ - { "name": "", "type": "address", "internalType": "address" } + { + "name": "", + "type": "address", + "internalType": "address" + } ], "stateMutability": "view" }, @@ -302,7 +354,11 @@ "type": "address", "internalType": "address" }, - { "name": "data", "type": "bytes", "internalType": "bytes" } + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } ], "outputs": [], "stateMutability": "payable" @@ -311,7 +367,11 @@ "type": "function", "name": "verifyBlockBuilderProof", "inputs": [ - { "name": "version", "type": "uint8", "internalType": "uint8" }, + { + "name": "version", + "type": "uint8", + "internalType": "uint8" + }, { "name": "blockContentHash", "type": "bytes32", @@ -436,7 +496,11 @@ } ], "outputs": [ - { "name": "", "type": "bytes32", "internalType": "WorkloadId" } + { + "name": "", + "type": "bytes32", + "internalType": "WorkloadId" + } ], "stateMutability": "pure" }, @@ -578,7 +642,11 @@ } ] }, - { "type": "error", "name": "ECDSAInvalidSignature", "inputs": [] }, + { + "type": "error", + "name": "ECDSAInvalidSignature", + "inputs": [] + }, { "type": "error", "name": "ECDSAInvalidSignatureLength", @@ -594,7 +662,11 @@ "type": "error", "name": "ECDSAInvalidSignatureS", "inputs": [ - { "name": "s", "type": "bytes32", "internalType": "bytes32" } + { + "name": "s", + "type": "bytes32", + "internalType": "bytes32" + } ] }, { @@ -608,11 +680,31 @@ } ] }, - { "type": "error", "name": "ERC1967NonPayable", "inputs": [] }, - { "type": "error", "name": "EmptyCommitHash", "inputs": [] }, - { "type": "error", "name": "EmptySourceLocators", "inputs": [] }, - { "type": "error", "name": "FailedCall", "inputs": [] }, - { "type": "error", "name": "InvalidInitialization", "inputs": [] }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "EmptyCommitHash", + "inputs": [] + }, + { + "type": "error", + "name": "EmptySourceLocators", + "inputs": [] + }, + { + "type": "error", + "name": "FailedCall", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, { "type": "error", "name": "InvalidNonce", @@ -629,8 +721,16 @@ } ] }, - { "type": "error", "name": "InvalidRegistry", "inputs": [] }, - { "type": "error", "name": "NotInitializing", "inputs": [] }, + { + "type": "error", + "name": "InvalidRegistry", + "inputs": [] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, { "type": "error", "name": "OwnableInvalidOwner", @@ -662,7 +762,11 @@ "type": "error", "name": "UUPSUnsupportedProxiableUUID", "inputs": [ - { "name": "slot", "type": "bytes32", "internalType": "bytes32" } + { + "name": "slot", + "type": "bytes32", + "internalType": "bytes32" + } ] }, { @@ -676,12 +780,10131 @@ } ] }, - { "type": "error", "name": "WorkloadAlreadyInPolicy", "inputs": [] }, - { "type": "error", "name": "WorkloadNotInPolicy", "inputs": [] } + { + "type": "error", + "name": "WorkloadAlreadyInPolicy", + "inputs": [] + }, + { + "type": "error", + "name": "WorkloadNotInPolicy", + "inputs": [] + } ], "bytecode": { - "object": "0x60a0806040523460295730608052613263908161002e8239608051818181610a3801526110790152f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80632dd8abfe14611e4c578063485cc955146116b05780634d37fc7a146113365780634f1ef286146110105780634f3a415a14610ab057806352d1902d146109f35780635c40e542146109095780636931164e146108cd578063715018a6146107f3578063730169231461079b5780637b1039991461074a5780637dec71a9146106f95780637ecebe001461069657806384b0196e146104f15780638da5cb5b14610481578063abd45d21146102fc578063ad3cb1cc1461027b578063b33d59da14610237578063d2753561146101e8578063f2fde38b1461019f5763f698da2514610100575f80fd5b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57602061013861310e565b610140613178565b60405190838201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261019060c082612063565b519020604051908152f35b5f80fd5b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576101e66101d9611feb565b6101e1612d2c565b612b6a565b005b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576040610229610224611feb565b6127d1565b825191151582526020820152f35b3461019b5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576101e6610271611fad565b6024359033612c57565b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576102f86040516102ba604082612063565b600581527f352e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061215f565b0390f35b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576060602060405161033b81612047565b82815201526004355f525f60205260405f2060016040519161035c83612047565b61036581612695565b835201805461037381612349565b916103816040519384612063565b81835260208301905f5260205f205f915b838310610464576103c1868660208201908152604051928392602084525160406020850152606084019061215f565b9051907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838203016040840152815180825260208201916020808360051b8301019401925f915b8383106104155786860387f35b919395509193602080610452837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08660019603018752895161215f565b97019301930190928695949293610408565b60016020819261047385612695565b815201920192019190610392565b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10054158061066d575b1561060f576105b36105586124b1565b6105606125c2565b60206105c1604051926105738385612063565b5f84525f3681376040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e08588015260e087019061215f565b90858203604087015261215f565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b8281106105f857505050500390f35b8351855286955093810193928101926001016105e9565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610548565b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5773ffffffffffffffffffffffffffffffffffffffff6106e2611feb565b165f526002602052602060405f2054604051908152f35b3461019b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576020610742610735611fad565b6044359060243590612463565b604051908152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760206040517f93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc8152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57610829612d2c565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760206107426004356123c6565b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57600435610943612d2c565b805f525f60205261095760405f20546122f8565b156109cb57805f525f602052600160405f2061097281612377565b018054905f8155816109a6575b827f56c387a9be1bf0e0e4f852c577a225db98e8253ad401d1b4ea73926f27d6af095f80a2005b5f5260205f20908101905b8181101561097f57806109c5600192612377565b016109b1565b7f22faf042000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610a885760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461019b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760043560243567ffffffffffffffff811161019b57610b02903690600401611fbd565b919060443567ffffffffffffffff811161019b573660238201121561019b5780600401359167ffffffffffffffff831161019b5760248360051b8301019036821161019b57610b4f612d2c565b8515610fe8578315610fc057845f525f602052610b6f60405f20546122f8565b610f9857610b8b9060405196610b8488612047565b36916120de565b8552610b9683612349565b92610ba46040519485612063565b83526024820191602084015b828410610f57575050505060208301908152815f525f60205260405f20925192835167ffffffffffffffff8111610e2057610beb82546122f8565b601f8111610f27575b506020601f8211600114610e85579080610c469260019596975f92610e7a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b81555b019051805190680100000000000000008211610e20578254828455808310610e4d575b50602001915f5260205f20915f905b828210610ca957847fcbb92e241e191fed6d0b0da0a918c7dcf595e77d868e2e3bf9e6b0b91589c7ad5f80a2005b805180519067ffffffffffffffff8211610e2057610cc786546122f8565b601f8111610de5575b50602090601f8311600114610d3f5792610d25836001959460209487965f92610d345750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b87555b01940191019092610c7b565b015190508b80610c14565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0831691875f52815f20925f5b818110610dcd5750936020936001969387969383889510610d96575b505050811b018755610d28565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558a8080610d89565b92936020600181928786015181550195019301610d6d565b610e1090875f5260205f20601f850160051c81019160208610610e16575b601f0160051c0190612361565b87610cd0565b9091508190610e03565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b835f528260205f2091820191015b818110610e685750610c6c565b80610e74600192612377565b01610e5b565b015190508780610c14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0821695835f52815f20965f5b818110610f0f5750916001959697918487959410610ed8575b505050811b018155610c49565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055868080610ecb565b83830151895560019098019760209384019301610eb2565b610f5190835f5260205f20601f840160051c81019160208510610e1657601f0160051c0190612361565b85610bf4565b833567ffffffffffffffff811161019b5782013660438201121561019b57602091610f8d839236906044602482013591016120de565b815201930192610bb0565b7f72477348000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f6890d9d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f8423f262000000000000000000000000000000000000000000000000000000005f5260045ffd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57611042611feb565b60243567ffffffffffffffff811161019b57611062903690600401612114565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168030149081156112f4575b50610a88576110b1612d2c565b73ffffffffffffffffffffffffffffffffffffffff8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f91816112c0575b5061113157837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8592036112955750813b1561126a57807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115611239575f808360206101e695519101845af43d15611231573d91611215836120a4565b926112236040519485612063565b83523d5f602085013e6131bd565b6060916131bd565b50503461124257005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d6020116112ec575b816112dc60209383612063565b8101031261019b57519085611100565b3d91506112cf565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54161415836110a4565b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760043567ffffffffffffffff811161019b5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261019b57604051906113b08261200e565b8060040135801515810361019b578252602481013567ffffffffffffffff811161019b576113e49060043691840101612114565b6020830152604481013567ffffffffffffffff811161019b5781016101e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261019b57604051906114398261202a565b60048101357fffffffffffffffffffffffffffffffff000000000000000000000000000000008116810361019b578252602481013567ffffffffffffffff811161019b5761148d9060043691840101612114565b6020830152604481013567ffffffffffffffff811161019b576114b69060043691840101612114565b60408301526114c760648201612132565b60608301526114d860848201612132565b60808301526114e960a48201612132565b60a083015260c481013567ffffffffffffffff811161019b576115129060043691840101612114565b60c083015260e481013567ffffffffffffffff811161019b5761153b9060043691840101612114565b60e083015261010481013567ffffffffffffffff811161019b576115659060043691840101612114565b61010083015261012481013567ffffffffffffffff811161019b576115909060043691840101612114565b61012083015261014481013567ffffffffffffffff811161019b576115bb9060043691840101612114565b61014083015261016481013567ffffffffffffffff811161019b576115e69060043691840101612114565b61016083015261018481013567ffffffffffffffff811161019b576116119060043691840101612114565b6101808301526101a481013567ffffffffffffffff811161019b5761163c9060043691840101612114565b6101a08301526101c48101359067ffffffffffffffff821161019b5760046116679236920101612114565b6101c0820152604083015260648101359167ffffffffffffffff831161019b5760846107429261169f60209560043691840101612114565b6060840152013560808201526121a2565b3461019b5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576116e7611feb565b60243573ffffffffffffffffffffffffffffffffffffffff811680910361019b577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159267ffffffffffffffff821680159081611e44575b6001149081611e3a575b159081611e31575b50611e0957818460017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006117c19516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055611db4575b506117b9613028565b6101e1613028565b6117c9613028565b6040918251926117d98185612063565b601284527f426c6f636b4275696c646572506f6c696379000000000000000000000000000060208501528051936118108286612063565b600185527f31000000000000000000000000000000000000000000000000000000000000006020860152611842613028565b61184a613028565b80519067ffffffffffffffff8211610e20576118867fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102546122f8565b601f8111611d47575b50602090601f8311600114611c67576118dc92915f9183610e7a5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102555b835167ffffffffffffffff8111610e205761193a7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103546122f8565b601f8111611bfa575b50602094601f8211600114611b1c576119939293949582915f92611b115750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100555f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101558215611ae957827fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015551917f27fe5f0c1c3b1ed427cc63d0f05759ffdecf9aec9e18d31ef366fc8a6cb5dc3b5f80a2611a5857005b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2917fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005560018152a1005b7f11a1e697000000000000000000000000000000000000000000000000000000005f5260045ffd5b015190508680610c14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216957fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f52805f20915f5b888110611be257508360019596979810611bab575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103556119b6565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055858080611b7e565b91926020600181928685015181550194019201611b69565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f52611c61907f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f840160051c81019160208510610e1657601f0160051c0190612361565b85611943565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08316917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f52815f20925f5b818110611d2f5750908460019594939210611cf8575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102556118ff565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055868080611ccb565b92936020600181928786015181550195019301611cb5565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f52611dae907f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f850160051c81019160208610610e1657601f0160051c0190612361565b8661188f565b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055846117b0565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501585611759565b303b159150611751565b859150611747565b3461019b5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57611e83611fad565b602435604435916064359267ffffffffffffffff841161019b57611ed7611ed1611eb4611ee0963690600401611fbd565b9190611ec9611ec4868989612463565b6123c6565b9236916120de565b90612d98565b90959195612dd2565b73ffffffffffffffffffffffffffffffffffffffff841690815f52600260205260405f2054808203611f7f5750505f52600260205260405f20928354937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8514611f525760016101e695019055612c57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f06427aeb000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6004359060ff8216820361019b57565b9181601f8401121561019b5782359167ffffffffffffffff831161019b576020838186019501011161019b57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019b57565b60a0810190811067ffffffffffffffff821117610e2057604052565b6101e0810190811067ffffffffffffffff821117610e2057604052565b6040810190811067ffffffffffffffff821117610e2057604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610e2057604052565b67ffffffffffffffff8111610e2057601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926120ea826120a4565b916120f86040519384612063565b82948184528183011161019b578281602093845f960137010152565b9080601f8301121561019b5781602061212f933591016120de565b90565b35907fffffffffffffffff0000000000000000000000000000000000000000000000008216820361019b57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6040015160c081015190610140810151610160820151916101808101516101a082015160e08301519060a08401517fffffffffffffffff0000000000000000000000000000000000000000000000001678030000000000000000000000000000000000000000000000001893608001517fffffffff2fffffff00000000000000000000000000000000000000000000000016926040519687966020880199805160208192018c5e880160208101915f83528051926020849201905e016020015f815281516020819301825e015f815281516020819301825e015f815281516020819301825e015f815281516020819301825e01917fffffffffffffffff0000000000000000000000000000000000000000000000001682526008820152037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0810182526010016122f29082612063565b51902090565b90600182811c9216801561233f575b602083101461231257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691612307565b67ffffffffffffffff8111610e205760051b60200190565b81811061236c575050565b5f8155600101612361565b61238181546122f8565b908161238b575050565b81601f5f931160011461239d5750555b565b818352602083206123b991601f0160051c810190600101612361565b8082528160208120915555565b6042906123d161310e565b6123d9613178565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261242a60c082612063565b51902090604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b916040519160ff60208401947f93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc865216604084015260608301526080820152608081526122f260a082612063565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10254916124e3836122f8565b80835292600181169081156125855750600114612507575b61239b92500383612063565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b81831061256957505090602061239b928201016124fb565b6020919350806001915483858901015201910190918492612551565b6020925061239b9491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b8201016124fb565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10354916125f4836122f8565b808352926001811690811561258557506001146126175761239b92500383612063565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b81831061267957505090602061239b928201016124fb565b6020919350806001915483858901015201910190918492612661565b9060405191825f8254926126a8846122f8565b808452936001811690811561271157506001146126cd575b5061239b92500383612063565b90505f9291925260205f20905f915b8183106126f557505090602061239b928201015f6126c0565b60209193508060019154838589010152019101909184926126dc565b6020935061239b9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f6126c0565b5190811515820361019b57565b81601f8201121561019b57805190612775826120a4565b926127836040519485612063565b8284526020838301011161019b57815f9260208093018386015e8301015290565b51907fffffffffffffffff0000000000000000000000000000000000000000000000008216820361019b57565b5f73ffffffffffffffffffffffffffffffffffffffff602481600154169360405194859384927f727310620000000000000000000000000000000000000000000000000000000084521660048301525afa908115612b5f575f9161286c575b5080511561286557612841906121a2565b805f525f60205261285560405f20546122f8565b61286057505f905f90565b600191565b505f905f90565b90503d805f833e61287d8183612063565b81019060408183031261019b5761289381612751565b5060208101519067ffffffffffffffff821161019b57019060a08282031261019b57604051916128c28361200e565b6128cb81612751565b8352602081015167ffffffffffffffff811161019b57826128ed91830161275e565b6020840152604081015167ffffffffffffffff811161019b5781016101e08184031261019b57604051906129208261202a565b80517fffffffffffffffffffffffffffffffff000000000000000000000000000000008116810361019b578252602081015167ffffffffffffffff811161019b578461296d91830161275e565b6020830152604081015167ffffffffffffffff811161019b578461299291830161275e565b60408301526129a3606082016127a4565b60608301526129b4608082016127a4565b60808301526129c560a082016127a4565b60a083015260c081015167ffffffffffffffff811161019b57846129ea91830161275e565b60c083015260e081015167ffffffffffffffff811161019b5784612a0f91830161275e565b60e083015261010081015167ffffffffffffffff811161019b5784612a3591830161275e565b61010083015261012081015167ffffffffffffffff811161019b5784612a5c91830161275e565b61012083015261014081015167ffffffffffffffff811161019b5784612a8391830161275e565b61014083015261016081015167ffffffffffffffff811161019b5784612aaa91830161275e565b61016083015261018081015167ffffffffffffffff811161019b5784612ad191830161275e565b6101808301526101a081015167ffffffffffffffff811161019b5784612af891830161275e565b6101a08301526101c08101519067ffffffffffffffff821161019b57612b209185910161275e565b6101c08201526040840152606081015167ffffffffffffffff811161019b57608092612b4d91830161275e565b6060840152015160808201525f612830565b6040513d5f823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff168015612c2b5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b91612c6183612eaa565b929015612cea57827f3fa039a23466a52e08acb25376ac7d81de184fa6549ffffb2fc920c47cb623ed949260ff612ce59373ffffffffffffffffffffffffffffffffffffffff965f525f602052612cba60405f20612695565b936040519788971687526020870152166040850152606084015260a0608084015260a083019061215f565b0390a1565b73ffffffffffffffffffffffffffffffffffffffff847f4c547670000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612d6c57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b8151919060418303612dc857612dc19250602082015190606060408401519301515f1a9061307f565b9192909190565b50505f9160029190565b6004811015612e7d5780612de4575050565b60018103612e14577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b60028103612e4857507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600314612e525750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff600154166040517fa8af4ff500000000000000000000000000000000000000000000000000000000815260408160248173ffffffffffffffffffffffffffffffffffffffff8716958660048301525afa908115612b5f575f905f92612fe7575b5015612fde57815f52600360205260405f209160405193612f3f85612047565b60018454948587520154806020870152838515159182612fd4575b505015612f82575050505f525f602052612f7760405f20546122f8565b156128655751600191565b909250612f91919493506127d1565b93819291612fa0575b50509190565b60019060405192612fb084612047565b868452602084019182525f52600360205260405f2092518355519101555f80612f9a565b149050835f612f5a565b5050505f905f90565b9150506040813d604011613020575b8161300360409383612063565b8101031261019b57602061301682612751565b910151905f612f1f565b3d9150612ff6565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561305757565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411613103579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612b5f575f5173ffffffffffffffffffffffffffffffffffffffff8116156130f957905f905f90565b505f906001905f90565b5050505f9160039190565b6131166124b1565b8051908115613126576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156131535790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b6131806125c2565b8051908115613190576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156131535790565b906131fa57508051156131d257805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b8151158061324d575b61320b575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561320356fea164736f6c634300081c000a", - "sourceMap": "1951:12842:96:-:0;;;;;;;1171:4:51;1163:13;;1951:12842:96;;;;;;1163:13:51;1951:12842:96;;;;;;;;;;;;;;", + "object": "0x60a0806040523460295730608052613226908161002e8239608051818181610a3801526110790152f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80632dd8abfe14611e4c578063485cc955146116b05780634d37fc7a146113365780634f1ef286146110105780634f3a415a14610ab057806352d1902d146109f35780635c40e542146109095780636931164e146108cd578063715018a6146107f3578063730169231461079b5780637b1039991461074a5780637dec71a9146106f95780637ecebe001461069657806384b0196e146104f15780638da5cb5b14610481578063abd45d21146102fc578063ad3cb1cc1461027b578063b33d59da14610237578063d2753561146101e8578063f2fde38b1461019f5763f698da2514610100575f80fd5b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760206101386130d1565b61014061313b565b60405190838201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261019060c082612063565b519020604051908152f35b5f80fd5b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576101e66101d9611feb565b6101e1612cef565b612b2d565b005b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576040610229610224611feb565b612794565b825191151582526020820152f35b3461019b5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576101e6610271611fad565b6024359033612c1a565b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576102f86040516102ba604082612063565b600581527f352e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061215f565b0390f35b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576060602060405161033b81612047565b82815201526004355f525f60205260405f2060016040519161035c83612047565b61036581612658565b83520180546103738161230c565b916103816040519384612063565b81835260208301905f5260205f205f915b838310610464576103c1868660208201908152604051928392602084525160406020850152606084019061215f565b9051907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838203016040840152815180825260208201916020808360051b8301019401925f915b8383106104155786860387f35b919395509193602080610452837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08660019603018752895161215f565b97019301930190928695949293610408565b60016020819261047385612658565b815201920192019190610392565b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10054158061066d575b1561060f576105b3610558612474565b610560612585565b60206105c1604051926105738385612063565b5f84525f3681376040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e08588015260e087019061215f565b90858203604087015261215f565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b8281106105f857505050500390f35b8351855286955093810193928101926001016105e9565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610548565b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5773ffffffffffffffffffffffffffffffffffffffff6106e2611feb565b165f526002602052602060405f2054604051908152f35b3461019b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576020610742610735611fad565b6044359060243590612426565b604051908152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760206040517f93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc8152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57610829612cef565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576020610742600435612389565b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57600435610943612cef565b805f525f60205261095760405f20546122bb565b156109cb57805f525f602052600160405f206109728161233a565b018054905f8155816109a6575b827f56c387a9be1bf0e0e4f852c577a225db98e8253ad401d1b4ea73926f27d6af095f80a2005b5f5260205f20908101905b8181101561097f57806109c560019261233a565b016109b1565b7f22faf042000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610a885760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461019b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760043560243567ffffffffffffffff811161019b57610b02903690600401611fbd565b919060443567ffffffffffffffff811161019b573660238201121561019b5780600401359167ffffffffffffffff831161019b5760248360051b8301019036821161019b57610b4f612cef565b8515610fe8578315610fc057845f525f602052610b6f60405f20546122bb565b610f9857610b8b9060405196610b8488612047565b36916120de565b8552610b968361230c565b92610ba46040519485612063565b83526024820191602084015b828410610f57575050505060208301908152815f525f60205260405f20925192835167ffffffffffffffff8111610e2057610beb82546122bb565b601f8111610f27575b506020601f8211600114610e85579080610c469260019596975f92610e7a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b81555b019051805190680100000000000000008211610e20578254828455808310610e4d575b50602001915f5260205f20915f905b828210610ca957847fcbb92e241e191fed6d0b0da0a918c7dcf595e77d868e2e3bf9e6b0b91589c7ad5f80a2005b805180519067ffffffffffffffff8211610e2057610cc786546122bb565b601f8111610de5575b50602090601f8311600114610d3f5792610d25836001959460209487965f92610d345750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b87555b01940191019092610c7b565b015190508b80610c14565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0831691875f52815f20925f5b818110610dcd5750936020936001969387969383889510610d96575b505050811b018755610d28565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558a8080610d89565b92936020600181928786015181550195019301610d6d565b610e1090875f5260205f20601f850160051c81019160208610610e16575b601f0160051c0190612324565b87610cd0565b9091508190610e03565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b835f528260205f2091820191015b818110610e685750610c6c565b80610e7460019261233a565b01610e5b565b015190508780610c14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0821695835f52815f20965f5b818110610f0f5750916001959697918487959410610ed8575b505050811b018155610c49565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055868080610ecb565b83830151895560019098019760209384019301610eb2565b610f5190835f5260205f20601f840160051c81019160208510610e1657601f0160051c0190612324565b85610bf4565b833567ffffffffffffffff811161019b5782013660438201121561019b57602091610f8d839236906044602482013591016120de565b815201930192610bb0565b7f72477348000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f6890d9d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f8423f262000000000000000000000000000000000000000000000000000000005f5260045ffd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57611042611feb565b60243567ffffffffffffffff811161019b57611062903690600401612114565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168030149081156112f4575b50610a88576110b1612cef565b73ffffffffffffffffffffffffffffffffffffffff8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f91816112c0575b5061113157837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8592036112955750813b1561126a57807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115611239575f808360206101e695519101845af43d15611231573d91611215836120a4565b926112236040519485612063565b83523d5f602085013e613180565b606091613180565b50503461124257005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d6020116112ec575b816112dc60209383612063565b8101031261019b57519085611100565b3d91506112cf565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54161415836110a4565b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760043567ffffffffffffffff811161019b5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261019b57604051906113b08261200e565b8060040135801515810361019b578252602481013567ffffffffffffffff811161019b576113e49060043691840101612114565b6020830152604481013567ffffffffffffffff811161019b5781016101e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261019b57604051906114398261202a565b60048101357fffffffffffffffffffffffffffffffff000000000000000000000000000000008116810361019b578252602481013567ffffffffffffffff811161019b5761148d9060043691840101612114565b6020830152604481013567ffffffffffffffff811161019b576114b69060043691840101612114565b60408301526114c760648201612132565b60608301526114d860848201612132565b60808301526114e960a48201612132565b60a083015260c481013567ffffffffffffffff811161019b576115129060043691840101612114565b60c083015260e481013567ffffffffffffffff811161019b5761153b9060043691840101612114565b60e083015261010481013567ffffffffffffffff811161019b576115659060043691840101612114565b61010083015261012481013567ffffffffffffffff811161019b576115909060043691840101612114565b61012083015261014481013567ffffffffffffffff811161019b576115bb9060043691840101612114565b61014083015261016481013567ffffffffffffffff811161019b576115e69060043691840101612114565b61016083015261018481013567ffffffffffffffff811161019b576116119060043691840101612114565b6101808301526101a481013567ffffffffffffffff811161019b5761163c9060043691840101612114565b6101a08301526101c48101359067ffffffffffffffff821161019b5760046116679236920101612114565b6101c0820152604083015260648101359167ffffffffffffffff831161019b5760846107429261169f60209560043691840101612114565b6060840152013560808201526121a2565b3461019b5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576116e7611feb565b60243573ffffffffffffffffffffffffffffffffffffffff811680910361019b577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159267ffffffffffffffff821680159081611e44575b6001149081611e3a575b159081611e31575b50611e0957818460017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006117c19516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055611db4575b506117b9612feb565b6101e1612feb565b6117c9612feb565b6040918251926117d98185612063565b601284527f426c6f636b4275696c646572506f6c696379000000000000000000000000000060208501528051936118108286612063565b600185527f31000000000000000000000000000000000000000000000000000000000000006020860152611842612feb565b61184a612feb565b80519067ffffffffffffffff8211610e20576118867fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102546122bb565b601f8111611d47575b50602090601f8311600114611c67576118dc92915f9183610e7a5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102555b835167ffffffffffffffff8111610e205761193a7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103546122bb565b601f8111611bfa575b50602094601f8211600114611b1c576119939293949582915f92611b115750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100555f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101558215611ae957827fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015551917f27fe5f0c1c3b1ed427cc63d0f05759ffdecf9aec9e18d31ef366fc8a6cb5dc3b5f80a2611a5857005b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2917fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005560018152a1005b7f11a1e697000000000000000000000000000000000000000000000000000000005f5260045ffd5b015190508680610c14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216957fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f52805f20915f5b888110611be257508360019596979810611bab575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103556119b6565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055858080611b7e565b91926020600181928685015181550194019201611b69565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f52611c61907f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f840160051c81019160208510610e1657601f0160051c0190612324565b85611943565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08316917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f52815f20925f5b818110611d2f5750908460019594939210611cf8575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102556118ff565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055868080611ccb565b92936020600181928786015181550195019301611cb5565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f52611dae907f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f850160051c81019160208610610e1657601f0160051c0190612324565b8661188f565b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055846117b0565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501585611759565b303b159150611751565b859150611747565b3461019b5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57611e83611fad565b602435604435916064359267ffffffffffffffff841161019b57611ed7611ed1611eb4611ee0963690600401611fbd565b9190611ec9611ec4868989612426565b612389565b9236916120de565b90612d5b565b90959195612d95565b73ffffffffffffffffffffffffffffffffffffffff841690815f52600260205260405f2054808203611f7f5750505f52600260205260405f20928354937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8514611f525760016101e695019055612c1a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f06427aeb000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6004359060ff8216820361019b57565b9181601f8401121561019b5782359167ffffffffffffffff831161019b576020838186019501011161019b57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019b57565b60a0810190811067ffffffffffffffff821117610e2057604052565b6101e0810190811067ffffffffffffffff821117610e2057604052565b6040810190811067ffffffffffffffff821117610e2057604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610e2057604052565b67ffffffffffffffff8111610e2057601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926120ea826120a4565b916120f86040519384612063565b82948184528183011161019b578281602093845f960137010152565b9080601f8301121561019b5781602061212f933591016120de565b90565b35907fffffffffffffffff0000000000000000000000000000000000000000000000008216820361019b57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6040015160c081015190610140810151610160820151916101808101516101a082015160e08301519060a08401517fffffffffffffffff0000000000000000000000000000000000000000000000001693608001517fffffffffffffffff00000000000000000000000000000000000000000000000016926040519687966020880199805160208192018c5e880160208101915f83528051926020849201905e016020015f815281516020819301825e015f815281516020819301825e015f815281516020819301825e015f815281516020819301825e019182526008820152037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0810182526010016122b59082612063565b51902090565b90600182811c92168015612302575b60208310146122d557565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916122ca565b67ffffffffffffffff8111610e205760051b60200190565b81811061232f575050565b5f8155600101612324565b61234481546122bb565b908161234e575050565b81601f5f93116001146123605750555b565b8183526020832061237c91601f0160051c810190600101612324565b8082528160208120915555565b6042906123946130d1565b61239c61313b565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a081526123ed60c082612063565b51902090604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b916040519160ff60208401947f93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc865216604084015260608301526080820152608081526122b560a082612063565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10254916124a6836122bb565b808352926001811690811561254857506001146124ca575b61235e92500383612063565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b81831061252c57505090602061235e928201016124be565b6020919350806001915483858901015201910190918492612514565b6020925061235e9491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b8201016124be565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10354916125b7836122bb565b808352926001811690811561254857506001146125da5761235e92500383612063565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b81831061263c57505090602061235e928201016124be565b6020919350806001915483858901015201910190918492612624565b9060405191825f82549261266b846122bb565b80845293600181169081156126d45750600114612690575b5061235e92500383612063565b90505f9291925260205f20905f915b8183106126b857505090602061235e928201015f612683565b602091935080600191548385890101520191019091849261269f565b6020935061235e9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f612683565b5190811515820361019b57565b81601f8201121561019b57805190612738826120a4565b926127466040519485612063565b8284526020838301011161019b57815f9260208093018386015e8301015290565b51907fffffffffffffffff0000000000000000000000000000000000000000000000008216820361019b57565b5f73ffffffffffffffffffffffffffffffffffffffff602481600154169360405194859384927f727310620000000000000000000000000000000000000000000000000000000084521660048301525afa908115612b22575f9161282f575b5080511561282857612804906121a2565b805f525f60205261281860405f20546122bb565b61282357505f905f90565b600191565b505f905f90565b90503d805f833e6128408183612063565b81019060408183031261019b5761285681612714565b5060208101519067ffffffffffffffff821161019b57019060a08282031261019b57604051916128858361200e565b61288e81612714565b8352602081015167ffffffffffffffff811161019b57826128b0918301612721565b6020840152604081015167ffffffffffffffff811161019b5781016101e08184031261019b57604051906128e38261202a565b80517fffffffffffffffffffffffffffffffff000000000000000000000000000000008116810361019b578252602081015167ffffffffffffffff811161019b5784612930918301612721565b6020830152604081015167ffffffffffffffff811161019b5784612955918301612721565b604083015261296660608201612767565b606083015261297760808201612767565b608083015261298860a08201612767565b60a083015260c081015167ffffffffffffffff811161019b57846129ad918301612721565b60c083015260e081015167ffffffffffffffff811161019b57846129d2918301612721565b60e083015261010081015167ffffffffffffffff811161019b57846129f8918301612721565b61010083015261012081015167ffffffffffffffff811161019b5784612a1f918301612721565b61012083015261014081015167ffffffffffffffff811161019b5784612a46918301612721565b61014083015261016081015167ffffffffffffffff811161019b5784612a6d918301612721565b61016083015261018081015167ffffffffffffffff811161019b5784612a94918301612721565b6101808301526101a081015167ffffffffffffffff811161019b5784612abb918301612721565b6101a08301526101c08101519067ffffffffffffffff821161019b57612ae391859101612721565b6101c08201526040840152606081015167ffffffffffffffff811161019b57608092612b10918301612721565b6060840152015160808201525f6127f3565b6040513d5f823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff168015612bee5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b91612c2483612e6d565b929015612cad57827f3fa039a23466a52e08acb25376ac7d81de184fa6549ffffb2fc920c47cb623ed949260ff612ca89373ffffffffffffffffffffffffffffffffffffffff965f525f602052612c7d60405f20612658565b936040519788971687526020870152166040850152606084015260a0608084015260a083019061215f565b0390a1565b73ffffffffffffffffffffffffffffffffffffffff847f4c547670000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612d2f57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b8151919060418303612d8b57612d849250602082015190606060408401519301515f1a90613042565b9192909190565b50505f9160029190565b6004811015612e405780612da7575050565b60018103612dd7577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b60028103612e0b57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600314612e155750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff600154166040517fa8af4ff500000000000000000000000000000000000000000000000000000000815260408160248173ffffffffffffffffffffffffffffffffffffffff8716958660048301525afa908115612b22575f905f92612faa575b5015612fa157815f52600360205260405f209160405193612f0285612047565b60018454948587520154806020870152838515159182612f97575b505015612f45575050505f525f602052612f3a60405f20546122bb565b156128285751600191565b909250612f5491949350612794565b93819291612f63575b50509190565b60019060405192612f7384612047565b868452602084019182525f52600360205260405f2092518355519101555f80612f5d565b149050835f612f1d565b5050505f905f90565b9150506040813d604011612fe3575b81612fc660409383612063565b8101031261019b576020612fd982612714565b910151905f612ee2565b3d9150612fb9565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561301a57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116130c6579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612b22575f5173ffffffffffffffffffffffffffffffffffffffff8116156130bc57905f905f90565b505f906001905f90565b5050505f9160039190565b6130d9612474565b80519081156130e9576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156131165790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b613143612585565b8051908115613153576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156131165790565b906131bd575080511561319557602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580613210575b6131ce575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156131c656fea164736f6c634300081c000a", + "sourceMap": "2021:11391:71:-:0;;;;;;;1171:4:32;1163:13;;2021:11391:71;;;;;;1163:13:32;2021:11391:71;;;;;;;;;;;;;;", "linkReferences": {} - } -} + }, + "deployedBytecode": { + "object": "0x60806040526004361015610011575f80fd5b5f3560e01c80632dd8abfe14611e4c578063485cc955146116b05780634d37fc7a146113365780634f1ef286146110105780634f3a415a14610ab057806352d1902d146109f35780635c40e542146109095780636931164e146108cd578063715018a6146107f3578063730169231461079b5780637b1039991461074a5780637dec71a9146106f95780637ecebe001461069657806384b0196e146104f15780638da5cb5b14610481578063abd45d21146102fc578063ad3cb1cc1461027b578063b33d59da14610237578063d2753561146101e8578063f2fde38b1461019f5763f698da2514610100575f80fd5b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760206101386130d1565b61014061313b565b60405190838201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261019060c082612063565b519020604051908152f35b5f80fd5b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576101e66101d9611feb565b6101e1612cef565b612b2d565b005b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576040610229610224611feb565b612794565b825191151582526020820152f35b3461019b5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576101e6610271611fad565b6024359033612c1a565b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576102f86040516102ba604082612063565b600581527f352e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061215f565b0390f35b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576060602060405161033b81612047565b82815201526004355f525f60205260405f2060016040519161035c83612047565b61036581612658565b83520180546103738161230c565b916103816040519384612063565b81835260208301905f5260205f205f915b838310610464576103c1868660208201908152604051928392602084525160406020850152606084019061215f565b9051907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838203016040840152815180825260208201916020808360051b8301019401925f915b8383106104155786860387f35b919395509193602080610452837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08660019603018752895161215f565b97019301930190928695949293610408565b60016020819261047385612658565b815201920192019190610392565b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10054158061066d575b1561060f576105b3610558612474565b610560612585565b60206105c1604051926105738385612063565b5f84525f3681376040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e08588015260e087019061215f565b90858203604087015261215f565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b8281106105f857505050500390f35b8351855286955093810193928101926001016105e9565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610548565b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5773ffffffffffffffffffffffffffffffffffffffff6106e2611feb565b165f526002602052602060405f2054604051908152f35b3461019b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576020610742610735611fad565b6044359060243590612426565b604051908152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760206040517f93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc8152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57610829612cef565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576020610742600435612389565b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57600435610943612cef565b805f525f60205261095760405f20546122bb565b156109cb57805f525f602052600160405f206109728161233a565b018054905f8155816109a6575b827f56c387a9be1bf0e0e4f852c577a225db98e8253ad401d1b4ea73926f27d6af095f80a2005b5f5260205f20908101905b8181101561097f57806109c560019261233a565b016109b1565b7f22faf042000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610a885760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461019b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760043560243567ffffffffffffffff811161019b57610b02903690600401611fbd565b919060443567ffffffffffffffff811161019b573660238201121561019b5780600401359167ffffffffffffffff831161019b5760248360051b8301019036821161019b57610b4f612cef565b8515610fe8578315610fc057845f525f602052610b6f60405f20546122bb565b610f9857610b8b9060405196610b8488612047565b36916120de565b8552610b968361230c565b92610ba46040519485612063565b83526024820191602084015b828410610f57575050505060208301908152815f525f60205260405f20925192835167ffffffffffffffff8111610e2057610beb82546122bb565b601f8111610f27575b506020601f8211600114610e85579080610c469260019596975f92610e7a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b81555b019051805190680100000000000000008211610e20578254828455808310610e4d575b50602001915f5260205f20915f905b828210610ca957847fcbb92e241e191fed6d0b0da0a918c7dcf595e77d868e2e3bf9e6b0b91589c7ad5f80a2005b805180519067ffffffffffffffff8211610e2057610cc786546122bb565b601f8111610de5575b50602090601f8311600114610d3f5792610d25836001959460209487965f92610d345750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b87555b01940191019092610c7b565b015190508b80610c14565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0831691875f52815f20925f5b818110610dcd5750936020936001969387969383889510610d96575b505050811b018755610d28565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558a8080610d89565b92936020600181928786015181550195019301610d6d565b610e1090875f5260205f20601f850160051c81019160208610610e16575b601f0160051c0190612324565b87610cd0565b9091508190610e03565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b835f528260205f2091820191015b818110610e685750610c6c565b80610e7460019261233a565b01610e5b565b015190508780610c14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0821695835f52815f20965f5b818110610f0f5750916001959697918487959410610ed8575b505050811b018155610c49565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055868080610ecb565b83830151895560019098019760209384019301610eb2565b610f5190835f5260205f20601f840160051c81019160208510610e1657601f0160051c0190612324565b85610bf4565b833567ffffffffffffffff811161019b5782013660438201121561019b57602091610f8d839236906044602482013591016120de565b815201930192610bb0565b7f72477348000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f6890d9d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f8423f262000000000000000000000000000000000000000000000000000000005f5260045ffd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57611042611feb565b60243567ffffffffffffffff811161019b57611062903690600401612114565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168030149081156112f4575b50610a88576110b1612cef565b73ffffffffffffffffffffffffffffffffffffffff8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f91816112c0575b5061113157837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8592036112955750813b1561126a57807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115611239575f808360206101e695519101845af43d15611231573d91611215836120a4565b926112236040519485612063565b83523d5f602085013e613180565b606091613180565b50503461124257005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d6020116112ec575b816112dc60209383612063565b8101031261019b57519085611100565b3d91506112cf565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54161415836110a4565b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760043567ffffffffffffffff811161019b5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261019b57604051906113b08261200e565b8060040135801515810361019b578252602481013567ffffffffffffffff811161019b576113e49060043691840101612114565b6020830152604481013567ffffffffffffffff811161019b5781016101e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261019b57604051906114398261202a565b60048101357fffffffffffffffffffffffffffffffff000000000000000000000000000000008116810361019b578252602481013567ffffffffffffffff811161019b5761148d9060043691840101612114565b6020830152604481013567ffffffffffffffff811161019b576114b69060043691840101612114565b60408301526114c760648201612132565b60608301526114d860848201612132565b60808301526114e960a48201612132565b60a083015260c481013567ffffffffffffffff811161019b576115129060043691840101612114565b60c083015260e481013567ffffffffffffffff811161019b5761153b9060043691840101612114565b60e083015261010481013567ffffffffffffffff811161019b576115659060043691840101612114565b61010083015261012481013567ffffffffffffffff811161019b576115909060043691840101612114565b61012083015261014481013567ffffffffffffffff811161019b576115bb9060043691840101612114565b61014083015261016481013567ffffffffffffffff811161019b576115e69060043691840101612114565b61016083015261018481013567ffffffffffffffff811161019b576116119060043691840101612114565b6101808301526101a481013567ffffffffffffffff811161019b5761163c9060043691840101612114565b6101a08301526101c48101359067ffffffffffffffff821161019b5760046116679236920101612114565b6101c0820152604083015260648101359167ffffffffffffffff831161019b5760846107429261169f60209560043691840101612114565b6060840152013560808201526121a2565b3461019b5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576116e7611feb565b60243573ffffffffffffffffffffffffffffffffffffffff811680910361019b577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159267ffffffffffffffff821680159081611e44575b6001149081611e3a575b159081611e31575b50611e0957818460017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006117c19516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055611db4575b506117b9612feb565b6101e1612feb565b6117c9612feb565b6040918251926117d98185612063565b601284527f426c6f636b4275696c646572506f6c696379000000000000000000000000000060208501528051936118108286612063565b600185527f31000000000000000000000000000000000000000000000000000000000000006020860152611842612feb565b61184a612feb565b80519067ffffffffffffffff8211610e20576118867fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102546122bb565b601f8111611d47575b50602090601f8311600114611c67576118dc92915f9183610e7a5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102555b835167ffffffffffffffff8111610e205761193a7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103546122bb565b601f8111611bfa575b50602094601f8211600114611b1c576119939293949582915f92611b115750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100555f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101558215611ae957827fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015551917f27fe5f0c1c3b1ed427cc63d0f05759ffdecf9aec9e18d31ef366fc8a6cb5dc3b5f80a2611a5857005b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2917fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005560018152a1005b7f11a1e697000000000000000000000000000000000000000000000000000000005f5260045ffd5b015190508680610c14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216957fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f52805f20915f5b888110611be257508360019596979810611bab575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103556119b6565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055858080611b7e565b91926020600181928685015181550194019201611b69565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f52611c61907f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f840160051c81019160208510610e1657601f0160051c0190612324565b85611943565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08316917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f52815f20925f5b818110611d2f5750908460019594939210611cf8575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102556118ff565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055868080611ccb565b92936020600181928786015181550195019301611cb5565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f52611dae907f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f850160051c81019160208610610e1657601f0160051c0190612324565b8661188f565b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055846117b0565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501585611759565b303b159150611751565b859150611747565b3461019b5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57611e83611fad565b602435604435916064359267ffffffffffffffff841161019b57611ed7611ed1611eb4611ee0963690600401611fbd565b9190611ec9611ec4868989612426565b612389565b9236916120de565b90612d5b565b90959195612d95565b73ffffffffffffffffffffffffffffffffffffffff841690815f52600260205260405f2054808203611f7f5750505f52600260205260405f20928354937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8514611f525760016101e695019055612c1a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f06427aeb000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6004359060ff8216820361019b57565b9181601f8401121561019b5782359167ffffffffffffffff831161019b576020838186019501011161019b57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019b57565b60a0810190811067ffffffffffffffff821117610e2057604052565b6101e0810190811067ffffffffffffffff821117610e2057604052565b6040810190811067ffffffffffffffff821117610e2057604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610e2057604052565b67ffffffffffffffff8111610e2057601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926120ea826120a4565b916120f86040519384612063565b82948184528183011161019b578281602093845f960137010152565b9080601f8301121561019b5781602061212f933591016120de565b90565b35907fffffffffffffffff0000000000000000000000000000000000000000000000008216820361019b57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6040015160c081015190610140810151610160820151916101808101516101a082015160e08301519060a08401517fffffffffffffffff0000000000000000000000000000000000000000000000001693608001517fffffffffffffffff00000000000000000000000000000000000000000000000016926040519687966020880199805160208192018c5e880160208101915f83528051926020849201905e016020015f815281516020819301825e015f815281516020819301825e015f815281516020819301825e015f815281516020819301825e019182526008820152037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0810182526010016122b59082612063565b51902090565b90600182811c92168015612302575b60208310146122d557565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916122ca565b67ffffffffffffffff8111610e205760051b60200190565b81811061232f575050565b5f8155600101612324565b61234481546122bb565b908161234e575050565b81601f5f93116001146123605750555b565b8183526020832061237c91601f0160051c810190600101612324565b8082528160208120915555565b6042906123946130d1565b61239c61313b565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a081526123ed60c082612063565b51902090604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b916040519160ff60208401947f93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc865216604084015260608301526080820152608081526122b560a082612063565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10254916124a6836122bb565b808352926001811690811561254857506001146124ca575b61235e92500383612063565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b81831061252c57505090602061235e928201016124be565b6020919350806001915483858901015201910190918492612514565b6020925061235e9491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b8201016124be565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10354916125b7836122bb565b808352926001811690811561254857506001146125da5761235e92500383612063565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b81831061263c57505090602061235e928201016124be565b6020919350806001915483858901015201910190918492612624565b9060405191825f82549261266b846122bb565b80845293600181169081156126d45750600114612690575b5061235e92500383612063565b90505f9291925260205f20905f915b8183106126b857505090602061235e928201015f612683565b602091935080600191548385890101520191019091849261269f565b6020935061235e9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f612683565b5190811515820361019b57565b81601f8201121561019b57805190612738826120a4565b926127466040519485612063565b8284526020838301011161019b57815f9260208093018386015e8301015290565b51907fffffffffffffffff0000000000000000000000000000000000000000000000008216820361019b57565b5f73ffffffffffffffffffffffffffffffffffffffff602481600154169360405194859384927f727310620000000000000000000000000000000000000000000000000000000084521660048301525afa908115612b22575f9161282f575b5080511561282857612804906121a2565b805f525f60205261281860405f20546122bb565b61282357505f905f90565b600191565b505f905f90565b90503d805f833e6128408183612063565b81019060408183031261019b5761285681612714565b5060208101519067ffffffffffffffff821161019b57019060a08282031261019b57604051916128858361200e565b61288e81612714565b8352602081015167ffffffffffffffff811161019b57826128b0918301612721565b6020840152604081015167ffffffffffffffff811161019b5781016101e08184031261019b57604051906128e38261202a565b80517fffffffffffffffffffffffffffffffff000000000000000000000000000000008116810361019b578252602081015167ffffffffffffffff811161019b5784612930918301612721565b6020830152604081015167ffffffffffffffff811161019b5784612955918301612721565b604083015261296660608201612767565b606083015261297760808201612767565b608083015261298860a08201612767565b60a083015260c081015167ffffffffffffffff811161019b57846129ad918301612721565b60c083015260e081015167ffffffffffffffff811161019b57846129d2918301612721565b60e083015261010081015167ffffffffffffffff811161019b57846129f8918301612721565b61010083015261012081015167ffffffffffffffff811161019b5784612a1f918301612721565b61012083015261014081015167ffffffffffffffff811161019b5784612a46918301612721565b61014083015261016081015167ffffffffffffffff811161019b5784612a6d918301612721565b61016083015261018081015167ffffffffffffffff811161019b5784612a94918301612721565b6101808301526101a081015167ffffffffffffffff811161019b5784612abb918301612721565b6101a08301526101c08101519067ffffffffffffffff821161019b57612ae391859101612721565b6101c08201526040840152606081015167ffffffffffffffff811161019b57608092612b10918301612721565b6060840152015160808201525f6127f3565b6040513d5f823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff168015612bee5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b91612c2483612e6d565b929015612cad57827f3fa039a23466a52e08acb25376ac7d81de184fa6549ffffb2fc920c47cb623ed949260ff612ca89373ffffffffffffffffffffffffffffffffffffffff965f525f602052612c7d60405f20612658565b936040519788971687526020870152166040850152606084015260a0608084015260a083019061215f565b0390a1565b73ffffffffffffffffffffffffffffffffffffffff847f4c547670000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612d2f57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b8151919060418303612d8b57612d849250602082015190606060408401519301515f1a90613042565b9192909190565b50505f9160029190565b6004811015612e405780612da7575050565b60018103612dd7577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b60028103612e0b57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600314612e155750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff600154166040517fa8af4ff500000000000000000000000000000000000000000000000000000000815260408160248173ffffffffffffffffffffffffffffffffffffffff8716958660048301525afa908115612b22575f905f92612faa575b5015612fa157815f52600360205260405f209160405193612f0285612047565b60018454948587520154806020870152838515159182612f97575b505015612f45575050505f525f602052612f3a60405f20546122bb565b156128285751600191565b909250612f5491949350612794565b93819291612f63575b50509190565b60019060405192612f7384612047565b868452602084019182525f52600360205260405f2092518355519101555f80612f5d565b149050835f612f1d565b5050505f905f90565b9150506040813d604011612fe3575b81612fc660409383612063565b8101031261019b576020612fd982612714565b910151905f612ee2565b3d9150612fb9565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561301a57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116130c6579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612b22575f5173ffffffffffffffffffffffffffffffffffffffff8116156130bc57905f905f90565b505f906001905f90565b5050505f9160039190565b6130d9612474565b80519081156130e9576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156131165790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b613143612585565b8051908115613153576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156131165790565b906131bd575080511561319557602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580613210575b6131ce575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156131c656fea164736f6c634300081c000a", + "sourceMap": "2021:11391:71:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4107:92:35;4129:17;;:::i;:::-;4148:20;;:::i;:::-;2021:11391:71;;4107:92:35;;;;2021:11391:71;1959:95:35;2021:11391:71;;;1959:95:35;;2021:11391:71;1959:95:35;;;2021:11391:71;4170:13:35;1959:95;;;2021:11391:71;4193:4:35;1959:95;;;2021:11391:71;1959:95:35;4107:92;;;;;;:::i;:::-;2021:11391:71;4097:103:35;;2021:11391:71;;;;;;;;;;;;;;;;;;;;;2357:1:30;2021:11391:71;;:::i;:::-;2303:62:30;;:::i;:::-;2357:1;:::i;:::-;2021:11391:71;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;4428:16;2021:11391;;:::i;:::-;;;4407:10;;4428:16;:::i;2021:11391::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1280:65:30;2021:11391:71;;;;;;;;;;;;;;;;;;;2692:64:35;2021:11391:71;5647:18:35;:43;;;2021:11391:71;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;5835:13:35;2021:11391:71;;;;5870:4:35;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5647:43:35;2021:11391:71;5669:16:35;2021:11391:71;5669:21:35;5647:43;;2021:11391:71;;;;;;;;;;;;;;:::i;:::-;;;;3077:64;2021:11391;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;3007:23;2021:11391;;;;;;;;;;;;;;;;;;;;;;2361:90;2021:11391;;;;;;;;;;;;;;2303:62:30;;:::i;:::-;2021:11391:71;;1280:65:30;2021:11391:71;;;;1280:65:30;2021:11391:71;;3975:40:30;;;;2021:11391:71;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2303:62:30;;:::i;:::-;2021:11391:71;;;;;;;;;;;;:::i;:::-;12350:59;2021:11391;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;12537:38;;2021:11391;12537:38;;2021:11391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5090:6:32;2021:11391:71;5081:4:32;5073:23;5069:145;;2021:11391:71;;;811:66:41;2021:11391:71;;;5069:145:32;5174:29;2021:11391:71;5174:29:32;2021:11391:71;;5174:29:32;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2303:62:30;;:::i;:::-;11561:28:71;;2021:11391;;11627:25;;2021:11391;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11972:74;;;;2021:11391;11972:74;;2021:11391;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12062:34;;2021:11391;12062:34;;2021:11391;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;4667:6:32;2021:11391:71;4658:4:32;;4650:23;:120;;;;;2021:11391:71;4633:251:32;;;2303:62:30;;:::i;:::-;2021:11391:71;;;;;;;6131:52:32;;2021:11391:71;6131:52:32;2021:11391:71;6131:52:32;;;;2021:11391:71;;6131:52:32;;;2021:11391:71;-1:-1:-1;6127:437:32;;6493:60;;2021:11391:71;6493:60:32;2021:11391:71;;;;6493:60:32;6127:437;6225:40;811:66:41;6225:40:32;;;6221:120;;1748:29:41;;;:34;1744:119;;2021:11391:71;;811:66:41;2021:11391:71;;;811:66:41;2021:11391:71;2407:36:41;2021:11391:71;2407:36:41;;2021:11391:71;;2458:15:41;:11;;2021:11391:71;4065:25:48;;2021:11391:71;4107:55:48;4065:25;;;;;;;2021:11391:71;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;4107:55:48;:::i;2021:11391:71:-;;;4107:55:48;:::i;2454:148:41:-;6163:9;;;6159:70;;2021:11391:71;6159:70:41;6199:19;2021:11391:71;6199:19:41;2021:11391:71;;6199:19:41;1744:119;1805:47;2021:11391:71;1805:47:41;2021:11391:71;;;;1805:47:41;6221:120:32;6292:34;2021:11391:71;6292:34:32;2021:11391:71;;;;6292:34:32;6131:52;;;;2021:11391:71;6131:52:32;;2021:11391:71;6131:52:32;;;;;;2021:11391:71;6131:52:32;;;:::i;:::-;;;2021:11391:71;;;;;6131:52:32;;;;;;;-1:-1:-1;6131:52:32;;4650:120;2021:11391:71;;;811:66:41;2021:11391:71;;4728:42:32;;4650:120;;;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;3147:66:31;2021:11391:71;;;;;;4301:16:31;2021:11391:71;;;;4724:16:31;;:34;;;;2021:11391:71;4803:1:31;4788:16;:50;;;;2021:11391:71;4853:13:31;:30;;;;2021:11391:71;4849:91:31;;;2021:11391:71;;4803:1:31;2021:11391:71;6959:1:31;2021:11391:71;;;3147:66:31;2021:11391:71;4977:67:31;;2021:11391:71;6891:76:31;;;:::i;:::-;;;:::i;6959:1::-;6891:76;;:::i;:::-;2021:11391:71;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;4803:1:31;2021:11391:71;;;;;;;6891:76:31;;:::i;:::-;;;:::i;:::-;2021:11391:71;;;;;;;;;3652:7:35;2021:11391:71;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3652:7:35;2021:11391:71;;;;;;;;;;3676:10:35;2021:11391:71;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3676:10:35;2021:11391:71;;;2692:64:35;2021:11391:71;;3788:16:35;2021:11391:71;3897:23;;2021:11391;;;;4803:1:31;2021:11391:71;;;4803:1:31;2021:11391:71;;3986:22;;2021:11391;3986:22;;5064:101:31;;2021:11391:71;5064:101:31;2021:11391:71;5140:14:31;2021:11391:71;;3147:66:31;2021:11391:71;;3147:66:31;2021:11391:71;4803:1:31;2021:11391:71;;5140:14:31;2021:11391:71;;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;3676:10:35;2021:11391:71;;;;;;;;;;;;;;;4803:1:31;2021:11391:71;;;;;;;;;;;;;;3676:10:35;2021:11391:71;;;;;;;;;3676:10:35;2021:11391:71;;;;;;;;;;;;;;;;4803:1:31;2021:11391:71;;;;;;;;;;;;;;;;3676:10:35;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3652:7:35;2021:11391:71;;;;;;;;;;;;;;;;4803:1:31;2021:11391:71;;;;;;;;;;;;;;3652:7:35;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;4803:1:31;2021:11391:71;;;;;;;;;;;;;;;;3652:7:35;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;4977:67:31;2021:11391:71;;;;3147:66:31;2021:11391:71;4977:67:31;;;4849:91;4906:23;2021:11391:71;4906:23:31;2021:11391:71;;4906:23:31;4853:30;4870:13;;;4853:30;;;4788:50;4816:4;4808:25;:30;;-1:-1:-1;4788:50:31;;4724:34;;;-1:-1:-1;4724:34:31;;2021:11391:71;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;3871:27:55;2021:11391:71;;3927:8:55;2021:11391:71;;;;;;:::i;:::-;4772:51;;4752:72;4772:51;;;;;:::i;:::-;4752:72;:::i;:::-;2021:11391;;;;:::i;:::-;3871:27:55;;:::i;:::-;3927:8;;;;;:::i;:::-;2021:11391:71;;;;;;;4943:6;2021:11391;;;;;;4979:22;;;2021:11391;;;;;;4943:6;2021:11391;;;;;;;;;;;;;;;5199:16;2021:11391;;;;5199:16;:::i;2021:11391::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;:::o;10512:815::-;10793:29;;;:34;;;;10849:35;;;;;10906;;;;10963;;;;;11020;;;;11118:40;;;;11180:34;;;;2021:11391;;;11236:42;;;2021:11391;;;;10793:29;2021:11391;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10732:578;;10512:815;:::o;2021:11391::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::o;:::-;;;-1:-1:-1;2021:11391:71;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;12855:131::-;3993:249:56;12855:131:71;4129:17:35;;:::i;:::-;4148:20;;:::i;:::-;2021:11391:71;;4107:92:35;;;;2021:11391:71;1959:95:35;2021:11391:71;;;1959:95:35;;2021:11391:71;1959:95:35;;;2021:11391:71;4170:13:35;1959:95;;;2021:11391:71;4193:4:35;1959:95;;;2021:11391:71;1959:95:35;4107:92;;;;;;:::i;:::-;2021:11391:71;4097:103:35;;3993:249:56;2021:11391:71;3993:249:56;;;;;;;;;;;;;;12855:131:71;:::o;13032:229::-;;2021:11391;;13172:81;2021:11391;13172:81;;;2021:11391;2361:90;2021:11391;;;;;;;;;;;;;;;;13172:81;;;;;;:::i;2021:11391::-;;;;-1:-1:-1;2021:11391:71;6311:7:35;2021:11391:71;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;6311:7:35;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2021:11391:71;6696:10:35;2021:11391:71;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;6696:10:35;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;2021:11391:71;;;;;-1:-1:-1;2021:11391:71;;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;6750:906::-;-1:-1:-1;2021:11391:71;6999:60;2021:11391;7022:8;2021:11391;;;;;6999:60;;;;;2021:11391;6999:60;;2021:11391;6999:60;;;2021:11391;6999:60;;;;;;;-1:-1:-1;6999:60:71;;;6750:906;2021:11391;;;;7226:86;;7346:41;;;:::i;:::-;2021:11391;-1:-1:-1;2021:11391:71;-1:-1:-1;2021:11391:71;;;;-1:-1:-1;2021:11391:71;;;:::i;:::-;7472:133;;7615:34;-1:-1:-1;7615:34:71;-1:-1:-1;6750:906:71;:::o;7472:133::-;7022:8;;7569:25::o;7226:86::-;7267:34;-1:-1:-1;7267:34:71;-1:-1:-1;7267:34:71;:::o;6999:60::-;;;;;-1:-1:-1;6999:60:71;;;;;;:::i;:::-;;;2021:11391;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;6999:60;;;;2021:11391;;;-1:-1:-1;2021:11391:71;;;;;3405:215:30;2021:11391:71;;3489:22:30;;3485:91;;2021:11391:71;1280:65:30;2021:11391:71;;;;;;1280:65:30;2021:11391:71;;3975:40:30;3509:1;3975:40;;3405:215::o;3485:91::-;3534:31;3509:1;3534:31;3509:1;3534:31;2021:11391:71;;3509:1:30;3534:31;5648:1056:71;;5900:34;;;:::i;:::-;2021:11391;;;;;;6608:89;2021:11391;;;;;;;6552:17;2021:11391;6552:17;2021:11391;;;;6552:17;2021:11391;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6608:89;;;5648:1056::o;2021:11391::-;;;;;;;;;;;;2658:162:30;2021:11391:71;1280:65:30;2021:11391:71;;966:10:33;2717:23:30;2713:101;;2658:162::o;2713:101::-;2763:40;-1:-1:-1;2763:40:30;966:10:33;2763:40:30;2021:11391:71;;-1:-1:-1;2763:40:30;2129:778:55;2021:11391:71;;;2129:778:55;2319:2;2299:22;;2319:2;;2751:25;2535:196;;;;;;;;;;;;;;;-1:-1:-1;2535:196:55;2751:25;;:::i;:::-;2744:32;;;;;:::o;2295:606::-;2807:83;;2823:1;2807:83;2827:35;2807:83;;:::o;7280:532::-;2021:11391:71;;;;;;7366:29:55;;;7411:7;;:::o;7362:444::-;2021:11391:71;7462:38:55;;2021:11391:71;;7523:23:55;7375:20;7523:23;2021:11391:71;7375:20:55;7523:23;7458:348;7576:35;7567:44;;7576:35;;7634:46;;7375:20;7634:46;2021:11391:71;;;7375:20:55;7634:46;7563:243;7710:30;7701:39;7697:109;;7563:243;7280:532::o;7697:109::-;7763:32;7375:20;7763:32;2021:11391:71;;;7375:20:55;7763:32;2021:11391:71;;7375:20:55;2021:11391:71;;;;;7375:20:55;2021:11391:71;8892:1574;2021:11391;9107:8;2021:11391;;;;;9084:66;;2021:11391;;9084:66;2021:11391;;;;9084:66;;;;;2021:11391;9084:66;;;;;;;-1:-1:-1;;;9084:66:71;;;8892:1574;9164:8;;9160:73;;2021:11391;-1:-1:-1;2021:11391:71;9338:15;2021:11391;;;-1:-1:-1;2021:11391:71;;;;;;;;:::i;:::-;9107:8;2021:11391;;;;;;;;;;;;;9536:21;;;;:54;;;;8892:1574;-1:-1:-1;;9532:928:71;;;2021:11391;;;-1:-1:-1;2021:11391:71;-1:-1:-1;2021:11391:71;;;;-1:-1:-1;2021:11391:71;;;:::i;:::-;9709:64;2021:11391;;;9107:8;;9793:32::o;9532:928::-;10170:27;;;;;;;;;:::i;:::-;10212:195;;;;;;9532:928;10421:28;;;;:::o;10212:195::-;9107:8;2021:11391;;;;;;;:::i;:::-;;;;;10330:62;;2021:11391;;;-1:-1:-1;2021:11391:71;9338:15;2021:11391;;;-1:-1:-1;2021:11391:71;;;;;;;;;10212:195;;;;9536:54;9561:29;;-1:-1:-1;9536:54:71;;;;9160:73;9188:34;;;-1:-1:-1;9188:34:71;-1:-1:-1;9188:34:71;:::o;9084:66::-;;;;2021:11391;9084:66;;2021:11391;9084:66;;;;;;2021:11391;9084:66;;;:::i;:::-;;;2021:11391;;;;;;;;:::i;:::-;;;;9084:66;;;;;;;-1:-1:-1;9084:66:71;;7082:141:31;2021:11391:71;3147:66:31;2021:11391:71;;;;7148:18:31;7144:73;;7082:141::o;7144:73::-;7189:17;-1:-1:-1;7189:17:31;;-1:-1:-1;7189:17:31;5203:1551:55;;;6283:66;6270:79;;6266:164;;2021:11391:71;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;;;;;;6541:24:55;;;;;;;;;-1:-1:-1;6541:24:55;2021:11391:71;;;6579:20:55;6575:113;;6698:49;-1:-1:-1;6698:49:55;-1:-1:-1;5203:1551:55;:::o;6575:113::-;6615:62;-1:-1:-1;6615:62:55;6541:24;6615:62;-1:-1:-1;6615:62:55;:::o;6266:164::-;6365:54;;;6381:1;6365:54;6385:30;6365:54;;:::o;6928:687:35:-;2021:11391:71;;:::i;:::-;;;;7100:22:35;;;;2021:11391:71;;7145:22:35;7138:29;:::o;7096:513::-;-1:-1:-1;;2692:64:35;2021:11391:71;7473:15:35;;;;7508:17;:::o;7469:130::-;7564:20;7571:13;7564:20;:::o;7836:723::-;2021:11391:71;;:::i;:::-;;;;8017:25:35;;;;2021:11391:71;;8065:25:35;8058:32;:::o;8013:540::-;-1:-1:-1;;8377:16:35;2021:11391:71;8411:18:35;;;;8449:20;:::o;4437:582:48:-;;4609:8;;-1:-1:-1;2021:11391:71;;5690:21:48;:17;;5815:105;;;;;;5686:301;5957:19;5710:1;5957:19;;5710:1;5957:19;4605:408;2021:11391:71;;4857:22:48;:49;;;4605:408;4853:119;;4985:17;;:::o;4853:119::-;2021:11391:71;4933:24:48;;4878:1;4933:24;2021:11391:71;4933:24:48;2021:11391:71;;4878:1:48;4933:24;4857:49;4883:18;;;:23;4857:49;", + "linkReferences": {}, + "immutableReferences": { + "48412": [ + { + "start": 2616, + "length": 32 + }, + { + "start": 4217, + "length": 32 + } + ] + } + }, + "methodIdentifiers": { + "UPGRADE_INTERFACE_VERSION()": "ad3cb1cc", + "VERIFY_BLOCK_BUILDER_PROOF_TYPEHASH()": "73016923", + "addWorkloadToPolicy(bytes32,string,string[])": "4f3a415a", + "computeStructHash(uint8,bytes32,uint256)": "7dec71a9", + "domainSeparator()": "f698da25", + "eip712Domain()": "84b0196e", + "getHashedTypeDataV4(bytes32)": "6931164e", + "getWorkloadMetadata(bytes32)": "abd45d21", + "initialize(address,address)": "485cc955", + "isAllowedPolicy(address)": "d2753561", + "nonces(address)": "7ecebe00", + "owner()": "8da5cb5b", + "permitVerifyBlockBuilderProof(uint8,bytes32,uint256,bytes)": "2dd8abfe", + "proxiableUUID()": "52d1902d", + "registry()": "7b103999", + "removeWorkloadFromPolicy(bytes32)": "5c40e542", + "renounceOwnership()": "715018a6", + "transferOwnership(address)": "f2fde38b", + "upgradeToAndCall(address,bytes)": "4f1ef286", + "verifyBlockBuilderProof(uint8,bytes32)": "b33d59da", + "workloadIdForTDRegistration((bool,bytes,(bytes16,bytes,bytes,bytes8,bytes8,bytes8,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),bytes,bytes32))": "4d37fc7a" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyCommitHash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptySourceLocators\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provided\",\"type\":\"uint256\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRegistry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"UnauthorizedBlockBuilder\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WorkloadAlreadyInPolicy\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WorkloadNotInPolicy\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"workloadId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockContentHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"commitHash\",\"type\":\"string\"}],\"name\":\"BlockBuilderProofVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"registry\",\"type\":\"address\"}],\"name\":\"RegistrySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"workloadId\",\"type\":\"bytes32\"}],\"name\":\"WorkloadAddedToPolicy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"workloadId\",\"type\":\"bytes32\"}],\"name\":\"WorkloadRemovedFromPolicy\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERIFY_BLOCK_BUILDER_PROOF_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"WorkloadId\",\"name\":\"workloadId\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"commitHash\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"sourceLocators\",\"type\":\"string[]\"}],\"name\":\"addWorkloadToPolicy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"blockContentHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"computeStructHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"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\":[{\"internalType\":\"bytes32\",\"name\":\"structHash\",\"type\":\"bytes32\"}],\"name\":\"getHashedTypeDataV4\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"WorkloadId\",\"name\":\"workloadId\",\"type\":\"bytes32\"}],\"name\":\"getWorkloadMetadata\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"commitHash\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"sourceLocators\",\"type\":\"string[]\"}],\"internalType\":\"struct IBlockBuilderPolicy.WorkloadMetadata\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_registry\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teeAddress\",\"type\":\"address\"}],\"name\":\"isAllowedPolicy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"WorkloadId\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teeAddress\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"permitNonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"blockContentHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"eip712Sig\",\"type\":\"bytes\"}],\"name\":\"permitVerifyBlockBuilderProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"WorkloadId\",\"name\":\"workloadId\",\"type\":\"bytes32\"}],\"name\":\"removeWorkloadFromPolicy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"blockContentHash\",\"type\":\"bytes32\"}],\"name\":\"verifyBlockBuilderProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isValid\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"rawQuote\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes16\",\"name\":\"teeTcbSvn\",\"type\":\"bytes16\"},{\"internalType\":\"bytes\",\"name\":\"mrSeam\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"mrsignerSeam\",\"type\":\"bytes\"},{\"internalType\":\"bytes8\",\"name\":\"seamAttributes\",\"type\":\"bytes8\"},{\"internalType\":\"bytes8\",\"name\":\"tdAttributes\",\"type\":\"bytes8\"},{\"internalType\":\"bytes8\",\"name\":\"xFAM\",\"type\":\"bytes8\"},{\"internalType\":\"bytes\",\"name\":\"mrTd\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"mrConfigId\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"mrOwner\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"mrOwnerConfig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rtMr0\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rtMr1\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rtMr2\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rtMr3\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"reportData\",\"type\":\"bytes\"}],\"internalType\":\"struct TD10ReportBody\",\"name\":\"parsedReportBody\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"extendedRegistrationData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"quoteHash\",\"type\":\"bytes32\"}],\"internalType\":\"struct IFlashtestationRegistry.RegisteredTEE\",\"name\":\"registration\",\"type\":\"tuple\"}],\"name\":\"workloadIdForTDRegistration\",\"outputs\":[{\"internalType\":\"WorkloadId\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"BlockBuilderProofVerified(address,bytes32,uint8,bytes32,string)\":{\"params\":{\"blockContentHash\":\"The hash of the block content\",\"caller\":\"The address that called the verification function (TEE address)\",\"commitHash\":\"The git commit hash associated with the workload\",\"version\":\"The flashtestation protocol version used\",\"workloadId\":\"The workload identifier of the TEE\"}},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RegistrySet(address)\":{\"params\":{\"registry\":\"The address of the registry\"}},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"},\"WorkloadAddedToPolicy(bytes32)\":{\"params\":{\"workloadId\":\"The workload identifier\"}},\"WorkloadRemovedFromPolicy(bytes32)\":{\"params\":{\"workloadId\":\"The workload identifier\"}}},\"kind\":\"dev\",\"methods\":{\"addWorkloadToPolicy(bytes32,string,string[])\":{\"details\":\"The commitHash solves the following problem; The only way for a smart contract like BlockBuilderPolicy to verify that a TEE (identified by its workloadId) is running a specific piece of code (for instance, op-rbuilder) is to reproducibly build that workload onchain. This is prohibitively expensive, so instead we rely on a permissioned multisig (the owner of this contract) to add a commit hash to the policy whenever it adds a new workloadId. We're already relying on the owner to verify that the workloadId is valid, so we can also assume the owner will not add a commit hash that is not associated with the workloadId. If the owner did act maliciously, this can easily be determined offchain by an honest actor building the TEE image from the given commit hash, deriving the image's workloadId, and then comparing it to the workloadId stored on the policy that is associated with the commit hash. If the workloadId is different, this can be used to prove that the owner acted maliciously. In the honest case, this Policy serves as a source of truth for which source code of build software (i.e. the commit hash) is used to build the TEE image identified by the workloadId.\",\"params\":{\"commitHash\":\"The 40-character hexadecimal commit hash of the git repository whose source code is used to build the TEE image identified by the workloadId\",\"sourceLocators\":\"An array of URIs pointing to the source code\",\"workloadId\":\"The workload identifier\"}},\"computeStructHash(uint8,bytes32,uint256)\":{\"params\":{\"blockContentHash\":\"The hash of the block content\",\"nonce\":\"The nonce to use for the EIP-712 signature\",\"version\":\"The version of the flashtestation's protocol\"},\"returns\":{\"_0\":\"The struct hash for the EIP-712 signature\"}},\"domainSeparator()\":{\"details\":\"This is useful for when both onchain and offchain users want to compute the domain separator for the EIP-712 signature, and then use it to verify the signature\",\"returns\":{\"_0\":\"The domain separator for the EIP-712 signature\"}},\"eip712Domain()\":{\"details\":\"returns the fields and values that describe the domain separator used by this contract for EIP-712 signature.\"},\"getHashedTypeDataV4(bytes32)\":{\"params\":{\"structHash\":\"The struct hash for the EIP-712 signature\"},\"returns\":{\"_0\":\"The digest for the EIP-712 signature\"}},\"getWorkloadMetadata(bytes32)\":{\"details\":\"This is only updateable by governance (i.e. the owner) of the Policy contract Adding and removing a workload is O(1)\",\"params\":{\"workloadId\":\"The workload identifier to query\"},\"returns\":{\"_0\":\"The metadata associated with the workload\"}},\"initialize(address,address)\":{\"params\":{\"_initialOwner\":\"The address of the initial owner of the contract\",\"_registry\":\"The address of the registry contract\"}},\"isAllowedPolicy(address)\":{\"params\":{\"teeAddress\":\"The TEE-controlled address\"},\"returns\":{\"_1\":\"The workloadId of the TEE that is using an approved workload in the policy, or 0 if the TEE is not using an approved workload in the policy\",\"allowed\":\"True if the TEE is using an approved workload in the policy\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"permitVerifyBlockBuilderProof(uint8,bytes32,uint256,bytes)\":{\"details\":\"This function is useful if you do not want to deal with the operational difficulties of keeping your TEE-controlled addresses funded, but note that because of the larger number of function arguments, will cost more gas than the non-EIP-712 verifyBlockBuilderProof function\",\"params\":{\"blockContentHash\":\"The hash of the block content\",\"eip712Sig\":\"The EIP-712 signature of the verification message\",\"nonce\":\"The nonce to use for the EIP-712 signature\",\"version\":\"The version of the flashtestation's protocol used to generate the block builder proof\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"removeWorkloadFromPolicy(bytes32)\":{\"params\":{\"workloadId\":\"The workload identifier\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"verifyBlockBuilderProof(uint8,bytes32)\":{\"details\":\"If you do not want to deal with the operational difficulties of keeping your TEE-controlled addresses funded, you can use the permitVerifyBlockBuilderProof function instead which costs more gas, but allows any EOA to submit a block builder proof on behalf of a TEE\",\"params\":{\"blockContentHash\":\"The hash of the block content\",\"version\":\"The version of the flashtestation's protocol used to generate the block builder proof\"}},\"workloadIdForTDRegistration((bool,bytes,(bytes16,bytes,bytes,bytes8,bytes8,bytes8,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),bytes,bytes32))\":{\"details\":\"Think of the workload identifier as the version of the application for governance. The workloadId verifiably maps to a version of source code that builds the TEE VM image\",\"params\":{\"registration\":\"The registration data from a TEE device\"},\"returns\":{\"_0\":\"workloadId The computed workload identifier\"}}},\"stateVariables\":{\"__gap\":{\"details\":\"Storage gap to allow for future storage variable additions in upgradesThis reserves 46 storage slots (out of 50 total - 4 used for approvedWorkloads, registry, nonces, and cachedWorkloads)\"},\"approvedWorkloads\":{\"details\":\"This is only updateable by governance (i.e. the owner) of the Policy contract Adding and removing a workload is O(1). This means the critical `_cachedIsAllowedPolicy` function is O(1) since we can directly check if a workloadId exists in the mapping\"},\"cachedWorkloads\":{\"details\":\"Maps teeAddress to cached workload information for gas optimization\"}},\"title\":\"BlockBuilderPolicy\",\"version\":1},\"userdoc\":{\"errors\":{\"EmptyCommitHash()\":[{\"notice\":\"Emitted when the commit hash is empty\"}],\"EmptySourceLocators()\":[{\"notice\":\"Emitted when the source locators array is empty\"}],\"InvalidNonce(uint256,uint256)\":[{\"notice\":\"Emitted when the nonce is invalid\"}],\"InvalidRegistry()\":[{\"notice\":\"Emitted when the registry is the 0x0 address\"}],\"UnauthorizedBlockBuilder(address)\":[{\"notice\":\"Emitted when the address is not in the approvedWorkloads mapping\"}],\"WorkloadAlreadyInPolicy()\":[{\"notice\":\"Emitted when a workload to be added is already in the policy\"}],\"WorkloadNotInPolicy()\":[{\"notice\":\"Emitted when a workload to be removed is not in the policy\"}]},\"events\":{\"BlockBuilderProofVerified(address,bytes32,uint8,bytes32,string)\":{\"notice\":\"Emitted when a block builder proof is successfully verified\"},\"RegistrySet(address)\":{\"notice\":\"Emitted when the registry is set in the initializer\"},\"WorkloadAddedToPolicy(bytes32)\":{\"notice\":\"Emitted when a workload is added to the policy\"},\"WorkloadRemovedFromPolicy(bytes32)\":{\"notice\":\"Emitted when a workload is removed from the policy\"}},\"kind\":\"user\",\"methods\":{\"VERIFY_BLOCK_BUILDER_PROOF_TYPEHASH()\":{\"notice\":\"EIP-712 Typehash, used in the permitVerifyBlockBuilderProof function\"},\"addWorkloadToPolicy(bytes32,string,string[])\":{\"notice\":\"Add a workload to a policy (governance only)Only the owner of this contract can add workloads to the policy and it is the responsibility of the owner to ensure that the workload is valid otherwise the address associated with this workload has full power to do anything who's authorization is based on this policy\"},\"computeStructHash(uint8,bytes32,uint256)\":{\"notice\":\"Computes the struct hash for the EIP-712 signature\"},\"domainSeparator()\":{\"notice\":\"Returns the domain separator for the EIP-712 signature\"},\"getHashedTypeDataV4(bytes32)\":{\"notice\":\"Computes the digest for the EIP-712 signature\"},\"getWorkloadMetadata(bytes32)\":{\"notice\":\"Mapping from workloadId to its metadata (commit hash and source locators)\"},\"initialize(address,address)\":{\"notice\":\"Initializer to set the FlashtestationRegistry contract which verifies TEE quotes and the initial owner of the contract\"},\"isAllowedPolicy(address)\":{\"notice\":\"Check if this TEE-controlled address has registered a valid TEE workload with the registry, and if the workload is approved under this policy\"},\"nonces(address)\":{\"notice\":\"Tracks nonces for EIP-712 signatures to prevent replay attacks\"},\"permitVerifyBlockBuilderProof(uint8,bytes32,uint256,bytes)\":{\"notice\":\"Verify a block builder proof with a Flashtestation Transaction using EIP-712 signaturesThis function allows any EOA to submit a block builder proof on behalf of a TEEThe TEE must sign a proper EIP-712-formatted message, and the signer must match a TEE-controlled address whose associated workload is approved under this policy\"},\"registry()\":{\"notice\":\"Address of the FlashtestationRegistry contract that verifies TEE quotes\"},\"removeWorkloadFromPolicy(bytes32)\":{\"notice\":\"Remove a workload from a policy (governance only)\"},\"verifyBlockBuilderProof(uint8,bytes32)\":{\"notice\":\"Verify a block builder proof with a Flashtestation TransactionThis function will only succeed if the caller is a registered TEE-controlled address from an attested TEE and the TEE is running an approved block builder workload (see `addWorkloadToPolicy`)The blockContentHash is a keccak256 hash of a subset of the block header, as specified by the version. See the [flashtestations spec](https://github.com/flashbots/rollup-boost/blob/main/specs/flashtestations.md) for more details\"},\"workloadIdForTDRegistration((bool,bytes,(bytes16,bytes,bytes,bytes8,bytes8,bytes8,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),bytes,bytes32))\":{\"notice\":\"Application specific mapping of registration data to a workload identifier\"}},\"notice\":\"A reference implementation of a policy contract for the FlashtestationRegistryA Policy is a collection of related WorkloadIds. A Policy exists to specify which WorkloadIds are valid for a particular purpose, in this case for remote block building. It also exists to handle the problem that TEE workloads will need to change multiple times a year, either because of Intel DCAP Endorsement updates or updates to the TEE configuration (and thus its WorkloadId). Without Policies, consumer contracts that makes use of Flashtestations would need to be updated every time a TEE workload changes, which is a costly and error-prone process. Instead, consumer contracts need only check if a TEE address is allowed under any workload in a Policy, and the FlashtestationRegistry will handle the rest\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/BlockBuilderPolicy.sol\":\"BlockBuilderPolicy\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":44444444},\"remappings\":[\":@automata-network/on-chain-pccs/=lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":@sp1-contracts/=lib/automata-dcap-attestation/evm/lib/sp1-contracts/contracts/src/\",\":automata-dcap-attestation/=lib/automata-dcap-attestation/evm/\",\":automata-on-chain-pccs/=lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/\",\":ds-test/=lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":risc0-ethereum/=lib/automata-dcap-attestation/evm/lib/risc0-ethereum/\",\":risc0/=lib/automata-dcap-attestation/evm/lib/risc0-ethereum/contracts/src/\",\":solady/=lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/solady/src/\",\":solmate/=lib/solmate/\",\":sp1-contracts/=lib/automata-dcap-attestation/evm/lib/sp1-contracts/contracts/\"],\"viaIR\":true},\"sources\":{\"lib/automata-dcap-attestation/evm/contracts/types/CommonStruct.sol\":{\"keccak256\":\"0xc1968270cffd0b96268c9695d81647e707a6e1e7c1b851c1d6b1f9af6a88d4f2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d4e56c233fbb8e448961f5b847b92a8e725cc56ed9e0ad764d790f1cd4896245\",\"dweb:/ipfs/QmVoUKR62HT6DKaR3rNnNr5w1CmDSbrDriX41ycTAzKodz\"]},\"lib/automata-dcap-attestation/evm/contracts/types/Constants.sol\":{\"keccak256\":\"0xcfaac1552ee9277f6b0e4e38bdee7d2e07d1bdfe188c294c5c3f37f152b1d099\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89a8a55be811abd8cc8af234d489c64a84f08023061ade4e67dbbaf11468cdc4\",\"dweb:/ipfs/QmR1TWqBcAEFbtteg2xjVG4VJXeFVWoAQidR3jyWuaGpUf\"]},\"lib/automata-dcap-attestation/evm/contracts/types/V4Structs.sol\":{\"keccak256\":\"0x39726e2cc0de02e8b34c0da2e6885fa9d18b7905970b9745e5310fb12cde9dd4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddf5ab4f4188de35bb9c03137b207d56d69629283b9cb683eebdfafe7ff015ee\",\"dweb:/ipfs/QmTmYBmBEUbxMESjeaF6cSPMSK5P8hv16tDXTk78LXiKpz\"]},\"lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/solady/src/utils/DateTimeLib.sol\":{\"keccak256\":\"0x3945a985a34bc905beb149f7196f1dba021a60abc2f178ab2eb3a28ed4f94741\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://828a14ebcf4bd777c73ecbedd726819ac37c3b2e4fab7c8fe263f860db725f72\",\"dweb:/ipfs/QmNW32zDLCVjbGecmZvxAaSdmDudHQSsdrFfpMYX6baGAv\"]},\"lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/solady/src/utils/JSONParserLib.sol\":{\"keccak256\":\"0x8d4aeacf0459b28b40b63c9d331dc95cf7d751ca9961c83c89c1ad73b9b3cd81\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://42cc6de802e8c17668ae82518caa4c053e82f1884329d1d924fa7b9fccf5041f\",\"dweb:/ipfs/QmPGLfqWXDCjjcZ2VEG8kRwasGFxR4u62RpLLBuLqXy9wP\"]},\"lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/solady/src/utils/LibString.sol\":{\"keccak256\":\"0x74ec81acbea6db4afe149ab51e26961bcb801af42f7af98242be71b866066200\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16bb49824fcfa9667aeed0eb515fdefda1016225085cf78ed852078c67168229\",\"dweb:/ipfs/QmZ59xrx5QLSx5N5CiTLrfwsPKR7kpK4RRpiEWSMEpvDzQ\"]},\"lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/helpers/FmspcTcbHelper.sol\":{\"keccak256\":\"0x3041391dfb9e2dcb6ed27e9b89445a9206c5348da3f2753785c22c832878f226\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://883bd1cb7d425828b8b9c92052f16fbcc893e6cdd175e3616a99b857b723a808\",\"dweb:/ipfs/QmZWqGm2D9AFrxzAsad7xkLSKuH1NQb7VEdFKwJbumj8EU\"]},\"lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/helpers/X509Helper.sol\":{\"keccak256\":\"0x4b4a56e80792b64604975e52d1aad2e075bd49c94b36814aa6461fbd69b6a03e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ea019efcc3904401a694b5704d7cb219b20f7cc11a5d4268b0015628fb71713\",\"dweb:/ipfs/QmezJCskd9hVoERyUNk6Y9qK8oQxmen5HqasNgz8diyk6V\"]},\"lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/utils/Asn1Decode.sol\":{\"keccak256\":\"0xc7a6f959ce3d98244e28ff140c0f3eb5fae6349d93e250a49cbf9fdd0e7ac8e6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c0760856218edc38ead344bd2587118a2a72a23d0d410e57c7e48251f313e3c\",\"dweb:/ipfs/QmdNu9g5GWgEuS1ShgCqHckE1cSjfpt9LJb2t1A2CKAFfB\"]},\"lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/utils/BytesUtils.sol\":{\"keccak256\":\"0x9a9028cd3bc73fb8ff9404907c980df141fd06351f9ea79b32754d05cae25f85\",\"license\":\"BSD 2-Clause License\",\"urls\":[\"bzz-raw://eaf5b855f3013a40e5d6b62fd9a7b7077a06b1750fabc53b8514ba4cf0006bed\",\"dweb:/ipfs/QmXKHL2zH51od64bYa8pifwEQF8UzccPBE2x7K5uvq4JeQ\"]},\"lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/utils/DateTimeUtils.sol\":{\"keccak256\":\"0xee25670c66115185f0f0ab6070ade945faff8f75b502b70c2597a02868a02a4f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c08c26dbd2e3196b3e16f7b8d2daa29c472997a845d5dc731f3bf17b7784d02\",\"dweb:/ipfs/QmUMwg7SvYQpgwcnDkGM9vnau2SqoYzwsGcB8CM2MLZueP\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x574a7451e42724f7de29e2855c392a8a5020acd695169466a18459467d719d63\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5bc189f63b639ee173dd7b6fecc39baf7113bf161776aea22b34c57fdd1872ec\",\"dweb:/ipfs/QmZAf2VtjDLRULqjJkde6LNsxAg12tUqpPqgUQQZbAjgtZ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardTransientUpgradeable.sol\":{\"keccak256\":\"0x391a52a14dfcbe1a9ca16f1c052481de32242cf45714d92dab81be2a987e4bba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://248b69f99e0452696ce5a2c90aac5602f496e2a697dacd5510d050f0dc833a3c\",\"dweb:/ipfs/QmcYkMiFQhTs2AW5fmcV5a3XQAGdQBUz1Y2NQD4RvBrNTM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol\":{\"keccak256\":\"0x89374b2a634f0a9c08f5891b6ecce0179bc2e0577819c787ed3268ca428c2459\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f13d2572e5bdd55e483dfac069aac47603644071616a41fce699e94368e38c13\",\"dweb:/ipfs/QmfKeyNT6vyb99vJQatPZ88UyZgXNmAiHUXSWnaR1TPE11\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c\",\"dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0xfb223a85dd0b2175cfbbaa325a744e2cd74ecd17c3df2b77b0722f991d2725ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://84bf1dea0589ec49c8d15d559cc6d86ee493048a89b2d4adb60fbe705a3d89ae\",\"dweb:/ipfs/Qmd56n556d529wk2pRMhYhm5nhMDhviwereodDikjs68w1\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x82f757819bf2429a0d4db141b99a4bbe5039e4ef86dfb94e2e6d40577ed5b28b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37c30ed931e19fb71fdb806bb504cfdb9913b7127545001b64d4487783374422\",\"dweb:/ipfs/QmUBHpv4hm3ZmwJ4GH8BeVzK4mv41Q6vBbWXxn8HExPXza\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a\",\"dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d\",\"dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e\",\"dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol\":{\"keccak256\":\"0xac673fa1e374d9e6107504af363333e3e5f6344d2e83faf57d9bfd41d77cc946\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5982478dbbb218e9dd5a6e83f5c0e8d1654ddf20178484b43ef21dd2246809de\",\"dweb:/ipfs/QmaB1hS68n2kG8vTbt7EPEzmrGhkUbfiFyykGGLsAr9X22\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59\",\"dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"src/BlockBuilderPolicy.sol\":{\"keccak256\":\"0x7c3d3ba04441108b91651c8b9c4dee65b2c3bb7e71fc0a55f1d3bd08ad8635cb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://48d897893c99de682f4a44c3158f7bdf489c5d8557800906142cc300e2318806\",\"dweb:/ipfs/QmSjnpDXmwHcHei6dX6gQzMWUz3cZFF2JfKFH2yXnGQu3c\"]},\"src/FlashtestationRegistry.sol\":{\"keccak256\":\"0x7409a55e63172d86293b538b0dc0c55ff69c00b541f9b7a26709c8309cb194c2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e35b2e23522c9dcd0bfa45e5ea70d623f7a9fb61a353e00492f64a140a31eeab\",\"dweb:/ipfs/QmbaPWPRsrd42C79hgS4Nrx2mAba4rEzRqz8guFUAVM6js\"]},\"src/interfaces/IAttestation.sol\":{\"keccak256\":\"0x2171e821adc778a1d451e06df44f8efd56648425489f1032c52bb90dd2adedb8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://887140a9dfb7384d1dd7ae58001cc2e36fba193493ca89376b91be41b788b79a\",\"dweb:/ipfs/QmVH8KdzFFDtLipA3WvojpRMc2uSmGjKnCAdgwkLHVq6Lf\"]},\"src/interfaces/IBlockBuilderPolicy.sol\":{\"keccak256\":\"0x54a5fd427b7e2b926ff3f6eb361211f2a84a2c52fa8c641471e53b6bbe859d97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a8ca0f86c046fa571befee3dc0c8a839ec83d932d999c09fa3a701c8e842901\",\"dweb:/ipfs/QmP2pbZ1Xwhg2avcBxpsjL6vLGcS5vyoeqUDRq4xWNDKXw\"]},\"src/interfaces/IFlashtestationRegistry.sol\":{\"keccak256\":\"0xe21137526212ed0946cd655935b1d1efb214520047dfb84053ecc1bc00095db8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://589ad601f708e5e8b0c66760ea18b08fb028c61919f5d5222cf8916f1c283365\",\"dweb:/ipfs/QmPGsofEZJigrAcSwawQ8EyUtyv15RmRZ36L2j97H1G6tK\"]},\"src/utils/QuoteParser.sol\":{\"keccak256\":\"0xf8462661ddcf40037053c2f1527e8f56b12211ee2311fd6c3b8979ed392df702\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20a30b5ea00b46fff0d3624d5a4a04cad774457775ea362ed0d17cf1f454deeb\",\"dweb:/ipfs/QmbFB8yZdRj9j7id9ShHb7cxFFnKiaygLa6Abexa1b5tRG\"]}},\"version\":1}", + "metadata": { + "compiler": { + "version": "0.8.28+commit.7893614a" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "type": "error", + "name": "AddressEmptyCode" + }, + { + "inputs": [], + "type": "error", + "name": "ECDSAInvalidSignature" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "type": "error", + "name": "ECDSAInvalidSignatureLength" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "type": "error", + "name": "ECDSAInvalidSignatureS" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "type": "error", + "name": "ERC1967InvalidImplementation" + }, + { + "inputs": [], + "type": "error", + "name": "ERC1967NonPayable" + }, + { + "inputs": [], + "type": "error", + "name": "EmptyCommitHash" + }, + { + "inputs": [], + "type": "error", + "name": "EmptySourceLocators" + }, + { + "inputs": [], + "type": "error", + "name": "FailedCall" + }, + { + "inputs": [], + "type": "error", + "name": "InvalidInitialization" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "provided", + "type": "uint256" + } + ], + "type": "error", + "name": "InvalidNonce" + }, + { + "inputs": [], + "type": "error", + "name": "InvalidRegistry" + }, + { + "inputs": [], + "type": "error", + "name": "NotInitializing" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "type": "error", + "name": "OwnableInvalidOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "type": "error", + "name": "OwnableUnauthorizedAccount" + }, + { + "inputs": [], + "type": "error", + "name": "UUPSUnauthorizedCallContext" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "slot", + "type": "bytes32" + } + ], + "type": "error", + "name": "UUPSUnsupportedProxiableUUID" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "type": "error", + "name": "UnauthorizedBlockBuilder" + }, + { + "inputs": [], + "type": "error", + "name": "WorkloadAlreadyInPolicy" + }, + { + "inputs": [], + "type": "error", + "name": "WorkloadNotInPolicy" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "caller", + "type": "address", + "indexed": false + }, + { + "internalType": "bytes32", + "name": "workloadId", + "type": "bytes32", + "indexed": false + }, + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + }, + { + "internalType": "bytes32", + "name": "blockContentHash", + "type": "bytes32", + "indexed": false + }, + { + "internalType": "string", + "name": "commitHash", + "type": "string", + "indexed": false + } + ], + "type": "event", + "name": "BlockBuilderProofVerified", + "anonymous": false + }, + { + "inputs": [], + "type": "event", + "name": "EIP712DomainChanged", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "version", + "type": "uint64", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "registry", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "RegistrySet", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "Upgraded", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "workloadId", + "type": "bytes32", + "indexed": true + } + ], + "type": "event", + "name": "WorkloadAddedToPolicy", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "workloadId", + "type": "bytes32", + "indexed": true + } + ], + "type": "event", + "name": "WorkloadRemovedFromPolicy", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "VERIFY_BLOCK_BUILDER_PROOF_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [ + { + "internalType": "WorkloadId", + "name": "workloadId", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "commitHash", + "type": "string" + }, + { + "internalType": "string[]", + "name": "sourceLocators", + "type": "string[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "addWorkloadToPolicy" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "blockContentHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "computeStructHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "domainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "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[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "structHash", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getHashedTypeDataV4", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [ + { + "internalType": "WorkloadId", + "name": "workloadId", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getWorkloadMetadata", + "outputs": [ + { + "internalType": "struct IBlockBuilderPolicy.WorkloadMetadata", + "name": "", + "type": "tuple", + "components": [ + { + "internalType": "string", + "name": "commitHash", + "type": "string" + }, + { + "internalType": "string[]", + "name": "sourceLocators", + "type": "string[]" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + }, + { + "internalType": "address", + "name": "_registry", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "teeAddress", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isAllowedPolicy", + "outputs": [ + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + }, + { + "internalType": "WorkloadId", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "teeAddress", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "permitNonce", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "blockContentHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "eip712Sig", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "permitVerifyBlockBuilderProof" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "proxiableUUID", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "registry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "WorkloadId", + "name": "workloadId", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "removeWorkloadFromPolicy" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "upgradeToAndCall" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "blockContentHash", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "verifyBlockBuilderProof" + }, + { + "inputs": [ + { + "internalType": "struct IFlashtestationRegistry.RegisteredTEE", + "name": "registration", + "type": "tuple", + "components": [ + { + "internalType": "bool", + "name": "isValid", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "rawQuote", + "type": "bytes" + }, + { + "internalType": "struct TD10ReportBody", + "name": "parsedReportBody", + "type": "tuple", + "components": [ + { + "internalType": "bytes16", + "name": "teeTcbSvn", + "type": "bytes16" + }, + { + "internalType": "bytes", + "name": "mrSeam", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "mrsignerSeam", + "type": "bytes" + }, + { + "internalType": "bytes8", + "name": "seamAttributes", + "type": "bytes8" + }, + { + "internalType": "bytes8", + "name": "tdAttributes", + "type": "bytes8" + }, + { + "internalType": "bytes8", + "name": "xFAM", + "type": "bytes8" + }, + { + "internalType": "bytes", + "name": "mrTd", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "mrConfigId", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "mrOwner", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "mrOwnerConfig", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "rtMr0", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "rtMr1", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "rtMr2", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "rtMr3", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "reportData", + "type": "bytes" + } + ] + }, + { + "internalType": "bytes", + "name": "extendedRegistrationData", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "quoteHash", + "type": "bytes32" + } + ] + } + ], + "stateMutability": "pure", + "type": "function", + "name": "workloadIdForTDRegistration", + "outputs": [ + { + "internalType": "WorkloadId", + "name": "", + "type": "bytes32" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "addWorkloadToPolicy(bytes32,string,string[])": { + "details": "The commitHash solves the following problem; The only way for a smart contract like BlockBuilderPolicy to verify that a TEE (identified by its workloadId) is running a specific piece of code (for instance, op-rbuilder) is to reproducibly build that workload onchain. This is prohibitively expensive, so instead we rely on a permissioned multisig (the owner of this contract) to add a commit hash to the policy whenever it adds a new workloadId. We're already relying on the owner to verify that the workloadId is valid, so we can also assume the owner will not add a commit hash that is not associated with the workloadId. If the owner did act maliciously, this can easily be determined offchain by an honest actor building the TEE image from the given commit hash, deriving the image's workloadId, and then comparing it to the workloadId stored on the policy that is associated with the commit hash. If the workloadId is different, this can be used to prove that the owner acted maliciously. In the honest case, this Policy serves as a source of truth for which source code of build software (i.e. the commit hash) is used to build the TEE image identified by the workloadId.", + "params": { + "commitHash": "The 40-character hexadecimal commit hash of the git repository whose source code is used to build the TEE image identified by the workloadId", + "sourceLocators": "An array of URIs pointing to the source code", + "workloadId": "The workload identifier" + } + }, + "computeStructHash(uint8,bytes32,uint256)": { + "params": { + "blockContentHash": "The hash of the block content", + "nonce": "The nonce to use for the EIP-712 signature", + "version": "The version of the flashtestation's protocol" + }, + "returns": { + "_0": "The struct hash for the EIP-712 signature" + } + }, + "domainSeparator()": { + "details": "This is useful for when both onchain and offchain users want to compute the domain separator for the EIP-712 signature, and then use it to verify the signature", + "returns": { + "_0": "The domain separator for the EIP-712 signature" + } + }, + "eip712Domain()": { + "details": "returns the fields and values that describe the domain separator used by this contract for EIP-712 signature." + }, + "getHashedTypeDataV4(bytes32)": { + "params": { + "structHash": "The struct hash for the EIP-712 signature" + }, + "returns": { + "_0": "The digest for the EIP-712 signature" + } + }, + "getWorkloadMetadata(bytes32)": { + "details": "This is only updateable by governance (i.e. the owner) of the Policy contract Adding and removing a workload is O(1)", + "params": { + "workloadId": "The workload identifier to query" + }, + "returns": { + "_0": "The metadata associated with the workload" + } + }, + "initialize(address,address)": { + "params": { + "_initialOwner": "The address of the initial owner of the contract", + "_registry": "The address of the registry contract" + } + }, + "isAllowedPolicy(address)": { + "params": { + "teeAddress": "The TEE-controlled address" + }, + "returns": { + "_1": "The workloadId of the TEE that is using an approved workload in the policy, or 0 if the TEE is not using an approved workload in the policy", + "allowed": "True if the TEE is using an approved workload in the policy" + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "permitVerifyBlockBuilderProof(uint8,bytes32,uint256,bytes)": { + "details": "This function is useful if you do not want to deal with the operational difficulties of keeping your TEE-controlled addresses funded, but note that because of the larger number of function arguments, will cost more gas than the non-EIP-712 verifyBlockBuilderProof function", + "params": { + "blockContentHash": "The hash of the block content", + "eip712Sig": "The EIP-712 signature of the verification message", + "nonce": "The nonce to use for the EIP-712 signature", + "version": "The version of the flashtestation's protocol used to generate the block builder proof" + } + }, + "proxiableUUID()": { + "details": "Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier." + }, + "removeWorkloadFromPolicy(bytes32)": { + "params": { + "workloadId": "The workload identifier" + } + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgradeToAndCall(address,bytes)": { + "custom:oz-upgrades-unsafe-allow-reachable": "delegatecall", + "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event." + }, + "verifyBlockBuilderProof(uint8,bytes32)": { + "details": "If you do not want to deal with the operational difficulties of keeping your TEE-controlled addresses funded, you can use the permitVerifyBlockBuilderProof function instead which costs more gas, but allows any EOA to submit a block builder proof on behalf of a TEE", + "params": { + "blockContentHash": "The hash of the block content", + "version": "The version of the flashtestation's protocol used to generate the block builder proof" + } + }, + "workloadIdForTDRegistration((bool,bytes,(bytes16,bytes,bytes,bytes8,bytes8,bytes8,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),bytes,bytes32))": { + "details": "Think of the workload identifier as the version of the application for governance. The workloadId verifiably maps to a version of source code that builds the TEE VM image", + "params": { + "registration": "The registration data from a TEE device" + }, + "returns": { + "_0": "workloadId The computed workload identifier" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "VERIFY_BLOCK_BUILDER_PROOF_TYPEHASH()": { + "notice": "EIP-712 Typehash, used in the permitVerifyBlockBuilderProof function" + }, + "addWorkloadToPolicy(bytes32,string,string[])": { + "notice": "Add a workload to a policy (governance only)Only the owner of this contract can add workloads to the policy and it is the responsibility of the owner to ensure that the workload is valid otherwise the address associated with this workload has full power to do anything who's authorization is based on this policy" + }, + "computeStructHash(uint8,bytes32,uint256)": { + "notice": "Computes the struct hash for the EIP-712 signature" + }, + "domainSeparator()": { + "notice": "Returns the domain separator for the EIP-712 signature" + }, + "getHashedTypeDataV4(bytes32)": { + "notice": "Computes the digest for the EIP-712 signature" + }, + "getWorkloadMetadata(bytes32)": { + "notice": "Mapping from workloadId to its metadata (commit hash and source locators)" + }, + "initialize(address,address)": { + "notice": "Initializer to set the FlashtestationRegistry contract which verifies TEE quotes and the initial owner of the contract" + }, + "isAllowedPolicy(address)": { + "notice": "Check if this TEE-controlled address has registered a valid TEE workload with the registry, and if the workload is approved under this policy" + }, + "nonces(address)": { + "notice": "Tracks nonces for EIP-712 signatures to prevent replay attacks" + }, + "permitVerifyBlockBuilderProof(uint8,bytes32,uint256,bytes)": { + "notice": "Verify a block builder proof with a Flashtestation Transaction using EIP-712 signaturesThis function allows any EOA to submit a block builder proof on behalf of a TEEThe TEE must sign a proper EIP-712-formatted message, and the signer must match a TEE-controlled address whose associated workload is approved under this policy" + }, + "registry()": { + "notice": "Address of the FlashtestationRegistry contract that verifies TEE quotes" + }, + "removeWorkloadFromPolicy(bytes32)": { + "notice": "Remove a workload from a policy (governance only)" + }, + "verifyBlockBuilderProof(uint8,bytes32)": { + "notice": "Verify a block builder proof with a Flashtestation TransactionThis function will only succeed if the caller is a registered TEE-controlled address from an attested TEE and the TEE is running an approved block builder workload (see `addWorkloadToPolicy`)The blockContentHash is a keccak256 hash of a subset of the block header, as specified by the version. See the [flashtestations spec](https://github.com/flashbots/rollup-boost/blob/main/specs/flashtestations.md) for more details" + }, + "workloadIdForTDRegistration((bool,bytes,(bytes16,bytes,bytes,bytes8,bytes8,bytes8,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),bytes,bytes32))": { + "notice": "Application specific mapping of registration data to a workload identifier" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@automata-network/on-chain-pccs/=lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", + "@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/", + "@sp1-contracts/=lib/automata-dcap-attestation/evm/lib/sp1-contracts/contracts/src/", + "automata-dcap-attestation/=lib/automata-dcap-attestation/evm/", + "automata-on-chain-pccs/=lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/", + "ds-test/=lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/forge-std/lib/ds-test/src/", + "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", + "forge-std/=lib/forge-std/src/", + "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/", + "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/", + "risc0-ethereum/=lib/automata-dcap-attestation/evm/lib/risc0-ethereum/", + "risc0/=lib/automata-dcap-attestation/evm/lib/risc0-ethereum/contracts/src/", + "solady/=lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/solady/src/", + "solmate/=lib/solmate/", + "sp1-contracts/=lib/automata-dcap-attestation/evm/lib/sp1-contracts/contracts/" + ], + "optimizer": { + "enabled": true, + "runs": 44444444 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "src/BlockBuilderPolicy.sol": "BlockBuilderPolicy" + }, + "evmVersion": "prague", + "libraries": {}, + "viaIR": true + }, + "sources": { + "lib/automata-dcap-attestation/evm/contracts/types/CommonStruct.sol": { + "keccak256": "0xc1968270cffd0b96268c9695d81647e707a6e1e7c1b851c1d6b1f9af6a88d4f2", + "urls": [ + "bzz-raw://d4e56c233fbb8e448961f5b847b92a8e725cc56ed9e0ad764d790f1cd4896245", + "dweb:/ipfs/QmVoUKR62HT6DKaR3rNnNr5w1CmDSbrDriX41ycTAzKodz" + ], + "license": "MIT" + }, + "lib/automata-dcap-attestation/evm/contracts/types/Constants.sol": { + "keccak256": "0xcfaac1552ee9277f6b0e4e38bdee7d2e07d1bdfe188c294c5c3f37f152b1d099", + "urls": [ + "bzz-raw://89a8a55be811abd8cc8af234d489c64a84f08023061ade4e67dbbaf11468cdc4", + "dweb:/ipfs/QmR1TWqBcAEFbtteg2xjVG4VJXeFVWoAQidR3jyWuaGpUf" + ], + "license": "MIT" + }, + "lib/automata-dcap-attestation/evm/contracts/types/V4Structs.sol": { + "keccak256": "0x39726e2cc0de02e8b34c0da2e6885fa9d18b7905970b9745e5310fb12cde9dd4", + "urls": [ + "bzz-raw://ddf5ab4f4188de35bb9c03137b207d56d69629283b9cb683eebdfafe7ff015ee", + "dweb:/ipfs/QmTmYBmBEUbxMESjeaF6cSPMSK5P8hv16tDXTk78LXiKpz" + ], + "license": "MIT" + }, + "lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/solady/src/utils/DateTimeLib.sol": { + "keccak256": "0x3945a985a34bc905beb149f7196f1dba021a60abc2f178ab2eb3a28ed4f94741", + "urls": [ + "bzz-raw://828a14ebcf4bd777c73ecbedd726819ac37c3b2e4fab7c8fe263f860db725f72", + "dweb:/ipfs/QmNW32zDLCVjbGecmZvxAaSdmDudHQSsdrFfpMYX6baGAv" + ], + "license": "MIT" + }, + "lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/solady/src/utils/JSONParserLib.sol": { + "keccak256": "0x8d4aeacf0459b28b40b63c9d331dc95cf7d751ca9961c83c89c1ad73b9b3cd81", + "urls": [ + "bzz-raw://42cc6de802e8c17668ae82518caa4c053e82f1884329d1d924fa7b9fccf5041f", + "dweb:/ipfs/QmPGLfqWXDCjjcZ2VEG8kRwasGFxR4u62RpLLBuLqXy9wP" + ], + "license": "MIT" + }, + "lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/solady/src/utils/LibString.sol": { + "keccak256": "0x74ec81acbea6db4afe149ab51e26961bcb801af42f7af98242be71b866066200", + "urls": [ + "bzz-raw://16bb49824fcfa9667aeed0eb515fdefda1016225085cf78ed852078c67168229", + "dweb:/ipfs/QmZ59xrx5QLSx5N5CiTLrfwsPKR7kpK4RRpiEWSMEpvDzQ" + ], + "license": "MIT" + }, + "lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/helpers/FmspcTcbHelper.sol": { + "keccak256": "0x3041391dfb9e2dcb6ed27e9b89445a9206c5348da3f2753785c22c832878f226", + "urls": [ + "bzz-raw://883bd1cb7d425828b8b9c92052f16fbcc893e6cdd175e3616a99b857b723a808", + "dweb:/ipfs/QmZWqGm2D9AFrxzAsad7xkLSKuH1NQb7VEdFKwJbumj8EU" + ], + "license": "MIT" + }, + "lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/helpers/X509Helper.sol": { + "keccak256": "0x4b4a56e80792b64604975e52d1aad2e075bd49c94b36814aa6461fbd69b6a03e", + "urls": [ + "bzz-raw://7ea019efcc3904401a694b5704d7cb219b20f7cc11a5d4268b0015628fb71713", + "dweb:/ipfs/QmezJCskd9hVoERyUNk6Y9qK8oQxmen5HqasNgz8diyk6V" + ], + "license": "MIT" + }, + "lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/utils/Asn1Decode.sol": { + "keccak256": "0xc7a6f959ce3d98244e28ff140c0f3eb5fae6349d93e250a49cbf9fdd0e7ac8e6", + "urls": [ + "bzz-raw://7c0760856218edc38ead344bd2587118a2a72a23d0d410e57c7e48251f313e3c", + "dweb:/ipfs/QmdNu9g5GWgEuS1ShgCqHckE1cSjfpt9LJb2t1A2CKAFfB" + ], + "license": "MIT" + }, + "lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/utils/BytesUtils.sol": { + "keccak256": "0x9a9028cd3bc73fb8ff9404907c980df141fd06351f9ea79b32754d05cae25f85", + "urls": [ + "bzz-raw://eaf5b855f3013a40e5d6b62fd9a7b7077a06b1750fabc53b8514ba4cf0006bed", + "dweb:/ipfs/QmXKHL2zH51od64bYa8pifwEQF8UzccPBE2x7K5uvq4JeQ" + ], + "license": "BSD 2-Clause License" + }, + "lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/utils/DateTimeUtils.sol": { + "keccak256": "0xee25670c66115185f0f0ab6070ade945faff8f75b502b70c2597a02868a02a4f", + "urls": [ + "bzz-raw://5c08c26dbd2e3196b3e16f7b8d2daa29c472997a845d5dc731f3bf17b7784d02", + "dweb:/ipfs/QmUMwg7SvYQpgwcnDkGM9vnau2SqoYzwsGcB8CM2MLZueP" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a", + "urls": [ + "bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6", + "dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05", + "urls": [ + "bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08", + "dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol": { + "keccak256": "0x574a7451e42724f7de29e2855c392a8a5020acd695169466a18459467d719d63", + "urls": [ + "bzz-raw://5bc189f63b639ee173dd7b6fecc39baf7113bf161776aea22b34c57fdd1872ec", + "dweb:/ipfs/QmZAf2VtjDLRULqjJkde6LNsxAg12tUqpPqgUQQZbAjgtZ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397", + "urls": [ + "bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9", + "dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardTransientUpgradeable.sol": { + "keccak256": "0x391a52a14dfcbe1a9ca16f1c052481de32242cf45714d92dab81be2a987e4bba", + "urls": [ + "bzz-raw://248b69f99e0452696ce5a2c90aac5602f496e2a697dacd5510d050f0dc833a3c", + "dweb:/ipfs/QmcYkMiFQhTs2AW5fmcV5a3XQAGdQBUz1Y2NQD4RvBrNTM" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol": { + "keccak256": "0x89374b2a634f0a9c08f5891b6ecce0179bc2e0577819c787ed3268ca428c2459", + "urls": [ + "bzz-raw://f13d2572e5bdd55e483dfac069aac47603644071616a41fce699e94368e38c13", + "dweb:/ipfs/QmfKeyNT6vyb99vJQatPZ88UyZgXNmAiHUXSWnaR1TPE11" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol": { + "keccak256": "0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5", + "urls": [ + "bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c", + "dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol": { + "keccak256": "0xfb223a85dd0b2175cfbbaa325a744e2cd74ecd17c3df2b77b0722f991d2725ee", + "urls": [ + "bzz-raw://84bf1dea0589ec49c8d15d559cc6d86ee493048a89b2d4adb60fbe705a3d89ae", + "dweb:/ipfs/Qmd56n556d529wk2pRMhYhm5nhMDhviwereodDikjs68w1" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x82f757819bf2429a0d4db141b99a4bbe5039e4ef86dfb94e2e6d40577ed5b28b", + "urls": [ + "bzz-raw://37c30ed931e19fb71fdb806bb504cfdb9913b7127545001b64d4487783374422", + "dweb:/ipfs/QmUBHpv4hm3ZmwJ4GH8BeVzK4mv41Q6vBbWXxn8HExPXza" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol": { + "keccak256": "0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618", + "urls": [ + "bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a", + "dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b", + "urls": [ + "bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d", + "dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0", + "urls": [ + "bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f", + "dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol": { + "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", + "urls": [ + "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", + "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Panic.sol": { + "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a", + "urls": [ + "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a", + "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97", + "urls": [ + "bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b", + "dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Strings.sol": { + "keccak256": "0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4", + "urls": [ + "bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e", + "dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol": { + "keccak256": "0xac673fa1e374d9e6107504af363333e3e5f6344d2e83faf57d9bfd41d77cc946", + "urls": [ + "bzz-raw://5982478dbbb218e9dd5a6e83f5c0e8d1654ddf20178484b43ef21dd2246809de", + "dweb:/ipfs/QmaB1hS68n2kG8vTbt7EPEzmrGhkUbfiFyykGGLsAr9X22" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": { + "keccak256": "0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84", + "urls": [ + "bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9", + "dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol": { + "keccak256": "0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631", + "urls": [ + "bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59", + "dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/Math.sol": { + "keccak256": "0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6", + "urls": [ + "bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3", + "dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol": { + "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54", + "urls": [ + "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8", + "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol": { + "keccak256": "0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3", + "urls": [ + "bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03", + "dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ" + ], + "license": "MIT" + }, + "src/BlockBuilderPolicy.sol": { + "keccak256": "0x7c3d3ba04441108b91651c8b9c4dee65b2c3bb7e71fc0a55f1d3bd08ad8635cb", + "urls": [ + "bzz-raw://48d897893c99de682f4a44c3158f7bdf489c5d8557800906142cc300e2318806", + "dweb:/ipfs/QmSjnpDXmwHcHei6dX6gQzMWUz3cZFF2JfKFH2yXnGQu3c" + ], + "license": "MIT" + }, + "src/FlashtestationRegistry.sol": { + "keccak256": "0x7409a55e63172d86293b538b0dc0c55ff69c00b541f9b7a26709c8309cb194c2", + "urls": [ + "bzz-raw://e35b2e23522c9dcd0bfa45e5ea70d623f7a9fb61a353e00492f64a140a31eeab", + "dweb:/ipfs/QmbaPWPRsrd42C79hgS4Nrx2mAba4rEzRqz8guFUAVM6js" + ], + "license": "MIT" + }, + "src/interfaces/IAttestation.sol": { + "keccak256": "0x2171e821adc778a1d451e06df44f8efd56648425489f1032c52bb90dd2adedb8", + "urls": [ + "bzz-raw://887140a9dfb7384d1dd7ae58001cc2e36fba193493ca89376b91be41b788b79a", + "dweb:/ipfs/QmVH8KdzFFDtLipA3WvojpRMc2uSmGjKnCAdgwkLHVq6Lf" + ], + "license": "MIT" + }, + "src/interfaces/IBlockBuilderPolicy.sol": { + "keccak256": "0x54a5fd427b7e2b926ff3f6eb361211f2a84a2c52fa8c641471e53b6bbe859d97", + "urls": [ + "bzz-raw://4a8ca0f86c046fa571befee3dc0c8a839ec83d932d999c09fa3a701c8e842901", + "dweb:/ipfs/QmP2pbZ1Xwhg2avcBxpsjL6vLGcS5vyoeqUDRq4xWNDKXw" + ], + "license": "MIT" + }, + "src/interfaces/IFlashtestationRegistry.sol": { + "keccak256": "0xe21137526212ed0946cd655935b1d1efb214520047dfb84053ecc1bc00095db8", + "urls": [ + "bzz-raw://589ad601f708e5e8b0c66760ea18b08fb028c61919f5d5222cf8916f1c283365", + "dweb:/ipfs/QmPGsofEZJigrAcSwawQ8EyUtyv15RmRZ36L2j97H1G6tK" + ], + "license": "MIT" + }, + "src/utils/QuoteParser.sol": { + "keccak256": "0xf8462661ddcf40037053c2f1527e8f56b12211ee2311fd6c3b8979ed392df702", + "urls": [ + "bzz-raw://20a30b5ea00b46fff0d3624d5a4a04cad774457775ea362ed0d17cf1f454deeb", + "dweb:/ipfs/QmbFB8yZdRj9j7id9ShHb7cxFFnKiaygLa6Abexa1b5tRG" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 60637, + "contract": "src/BlockBuilderPolicy.sol:BlockBuilderPolicy", + "label": "approvedWorkloads", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_bytes32,t_struct(WorkloadMetadata)61869_storage)" + }, + { + "astId": 60640, + "contract": "src/BlockBuilderPolicy.sol:BlockBuilderPolicy", + "label": "registry", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 60645, + "contract": "src/BlockBuilderPolicy.sol:BlockBuilderPolicy", + "label": "nonces", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 60651, + "contract": "src/BlockBuilderPolicy.sol:BlockBuilderPolicy", + "label": "cachedWorkloads", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_struct(CachedWorkload)60611_storage)" + }, + { + "astId": 60656, + "contract": "src/BlockBuilderPolicy.sol:BlockBuilderPolicy", + "label": "__gap", + "offset": 0, + "slot": "4", + "type": "t_array(t_uint256)46_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_string_storage)dyn_storage": { + "encoding": "dynamic_array", + "label": "string[]", + "numberOfBytes": "32", + "base": "t_string_storage" + }, + "t_array(t_uint256)46_storage": { + "encoding": "inplace", + "label": "uint256[46]", + "numberOfBytes": "1472", + "base": "t_uint256" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(CachedWorkload)60611_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct CachedWorkload)", + "numberOfBytes": "32", + "value": "t_struct(CachedWorkload)60611_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_struct(WorkloadMetadata)61869_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata)", + "numberOfBytes": "32", + "value": "t_struct(WorkloadMetadata)61869_storage" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(CachedWorkload)60611_storage": { + "encoding": "inplace", + "label": "struct CachedWorkload", + "numberOfBytes": "64", + "members": [ + { + "astId": 60607, + "contract": "src/BlockBuilderPolicy.sol:BlockBuilderPolicy", + "label": "workloadId", + "offset": 0, + "slot": "0", + "type": "t_userDefinedValueType(WorkloadId)61861" + }, + { + "astId": 60610, + "contract": "src/BlockBuilderPolicy.sol:BlockBuilderPolicy", + "label": "quoteHash", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ] + }, + "t_struct(WorkloadMetadata)61869_storage": { + "encoding": "inplace", + "label": "struct IBlockBuilderPolicy.WorkloadMetadata", + "numberOfBytes": "64", + "members": [ + { + "astId": 61865, + "contract": "src/BlockBuilderPolicy.sol:BlockBuilderPolicy", + "label": "commitHash", + "offset": 0, + "slot": "0", + "type": "t_string_storage" + }, + { + "astId": 61868, + "contract": "src/BlockBuilderPolicy.sol:BlockBuilderPolicy", + "label": "sourceLocators", + "offset": 0, + "slot": "1", + "type": "t_array(t_string_storage)dyn_storage" + } + ] + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_userDefinedValueType(WorkloadId)61861": { + "encoding": "inplace", + "label": "WorkloadId", + "numberOfBytes": "32" + } + } + }, + "ast": { + "absolutePath": "src/BlockBuilderPolicy.sol", + "id": 61240, + "exportedSymbols": { + "BlockBuilderPolicy": [ + 61239 + ], + "CachedWorkload": [ + 60611 + ], + "ECDSA": [ + 52398 + ], + "EIP712Upgradeable": [ + 49049 + ], + "FlashtestationRegistry": [ + 61842 + ], + "IBlockBuilderPolicy": [ + 62049 + ], + "IFlashtestationRegistry": [ + 62267 + ], + "Initializable": [ + 48392 + ], + "OwnableUpgradeable": [ + 48124 + ], + "UUPSUpgradeable": [ + 48574 + ], + "WorkloadId": [ + 61861 + ] + }, + "nodeType": "SourceUnit", + "src": "32:13381:71", + "nodes": [ + { + "id": 60585, + "nodeType": "PragmaDirective", + "src": "32:23:71", + "nodes": [], + "literals": [ + "solidity", + "0.8", + ".28" + ] + }, + { + "id": 60587, + "nodeType": "ImportDirective", + "src": "57:96:71", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", + "file": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", + "nameLocation": "-1:-1:-1", + "scope": 61240, + "sourceUnit": 48393, + "symbolAliases": [ + { + "foreign": { + "id": 60586, + "name": "Initializable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48392, + "src": "65:13:71", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60589, + "nodeType": "ImportDirective", + "src": "154:100:71", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol", + "nameLocation": "-1:-1:-1", + "scope": 61240, + "sourceUnit": 48575, + "symbolAliases": [ + { + "foreign": { + "id": 60588, + "name": "UUPSUpgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48574, + "src": "162:15:71", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60591, + "nodeType": "ImportDirective", + "src": "255:101:71", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", + "nameLocation": "-1:-1:-1", + "scope": 61240, + "sourceUnit": 48125, + "symbolAliases": [ + { + "foreign": { + "id": 60590, + "name": "OwnableUpgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48124, + "src": "263:18:71", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60593, + "nodeType": "ImportDirective", + "src": "357:111:71", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol", + "nameLocation": "-1:-1:-1", + "scope": 61240, + "sourceUnit": 49050, + "symbolAliases": [ + { + "foreign": { + "id": 60592, + "name": "EIP712Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49049, + "src": "365:17:71", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60595, + "nodeType": "ImportDirective", + "src": "469:75:71", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol", + "file": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", + "nameLocation": "-1:-1:-1", + "scope": 61240, + "sourceUnit": 52399, + "symbolAliases": [ + { + "foreign": { + "id": 60594, + "name": "ECDSA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52398, + "src": "477:5:71", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60597, + "nodeType": "ImportDirective", + "src": "545:68:71", + "nodes": [], + "absolutePath": "src/FlashtestationRegistry.sol", + "file": "./FlashtestationRegistry.sol", + "nameLocation": "-1:-1:-1", + "scope": 61240, + "sourceUnit": 61843, + "symbolAliases": [ + { + "foreign": { + "id": 60596, + "name": "FlashtestationRegistry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61842, + "src": "553:22:71", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60599, + "nodeType": "ImportDirective", + "src": "614:81:71", + "nodes": [], + "absolutePath": "src/interfaces/IFlashtestationRegistry.sol", + "file": "./interfaces/IFlashtestationRegistry.sol", + "nameLocation": "-1:-1:-1", + "scope": 61240, + "sourceUnit": 62268, + "symbolAliases": [ + { + "foreign": { + "id": 60598, + "name": "IFlashtestationRegistry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62267, + "src": "622:23:71", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60602, + "nodeType": "ImportDirective", + "src": "696:85:71", + "nodes": [], + "absolutePath": "src/interfaces/IBlockBuilderPolicy.sol", + "file": "./interfaces/IBlockBuilderPolicy.sol", + "nameLocation": "-1:-1:-1", + "scope": 61240, + "sourceUnit": 62050, + "symbolAliases": [ + { + "foreign": { + "id": 60600, + "name": "IBlockBuilderPolicy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62049, + "src": "704:19:71", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 60601, + "name": "WorkloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61861, + "src": "725:10:71", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60611, + "nodeType": "StructDefinition", + "src": "944:208:71", + "nodes": [], + "canonicalName": "CachedWorkload", + "documentation": { + "id": 60603, + "nodeType": "StructuredDocumentation", + "src": "783:160:71", + "text": " @notice Cached workload information for gas optimization\n @dev Stores computed workloadId and associated quoteHash to avoid expensive recomputation" + }, + "members": [ + { + "constant": false, + "id": 60607, + "mutability": "mutable", + "name": "workloadId", + "nameLocation": "1032:10:71", + "nodeType": "VariableDeclaration", + "scope": 60611, + "src": "1021:21:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + }, + "typeName": { + "id": 60606, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60605, + "name": "WorkloadId", + "nameLocations": [ + "1021:10:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 61861, + "src": "1021:10:71" + }, + "referencedDeclaration": 61861, + "src": "1021:10:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60610, + "mutability": "mutable", + "name": "quoteHash", + "nameLocation": "1140:9:71", + "nodeType": "VariableDeclaration", + "scope": 60611, + "src": "1132:17:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 60609, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1132:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "name": "CachedWorkload", + "nameLocation": "951:14:71", + "scope": 61240, + "visibility": "public" + }, + { + "id": 61239, + "nodeType": "ContractDefinition", + "src": "2021:11391:71", + "nodes": [ + { + "id": 60625, + "nodeType": "UsingForDirective", + "src": "2169:24:71", + "nodes": [], + "global": false, + "libraryName": { + "id": 60623, + "name": "ECDSA", + "nameLocations": [ + "2175:5:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 52398, + "src": "2175:5:71" + }, + "typeName": { + "id": 60624, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2185:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + }, + { + "id": 60631, + "nodeType": "VariableDeclaration", + "src": "2291:160:71", + "nodes": [], + "baseFunctions": [ + 62048 + ], + "constant": true, + "documentation": { + "id": 60626, + "nodeType": "StructuredDocumentation", + "src": "2251:35:71", + "text": "@inheritdoc IBlockBuilderPolicy" + }, + "functionSelector": "73016923", + "mutability": "constant", + "name": "VERIFY_BLOCK_BUILDER_PROOF_TYPEHASH", + "nameLocation": "2315:35:71", + "scope": 61239, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 60627, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2291:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "566572696679426c6f636b4275696c64657250726f6f662875696e74382076657273696f6e2c6279746573333220626c6f636b436f6e74656e74486173682c75696e74323536206e6f6e636529", + "id": 60629, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2371:79:71", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc", + "typeString": "literal_string \"VerifyBlockBuilderProof(uint8 version,bytes32 blockContentHash,uint256 nonce)\"" + }, + "value": "VerifyBlockBuilderProof(uint8 version,bytes32 blockContentHash,uint256 nonce)" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc", + "typeString": "literal_string \"VerifyBlockBuilderProof(uint8 version,bytes32 blockContentHash,uint256 nonce)\"" + } + ], + "id": 60628, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "2361:9:71", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 60630, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2361:90:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "public" + }, + { + "id": 60637, + "nodeType": "VariableDeclaration", + "src": "2887:73:71", + "nodes": [], + "constant": false, + "documentation": { + "id": 60632, + "nodeType": "StructuredDocumentation", + "src": "2510:372:71", + "text": "@notice Mapping from workloadId to its metadata (commit hash and source locators)\n @dev This is only updateable by governance (i.e. the owner) of the Policy contract\n Adding and removing a workload is O(1).\n This means the critical `_cachedIsAllowedPolicy` function is O(1) since we can directly check if a workloadId exists\n in the mapping" + }, + "mutability": "mutable", + "name": "approvedWorkloads", + "nameLocation": "2943:17:71", + "scope": 61239, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", + "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata)" + }, + "typeName": { + "id": 60636, + "keyName": "workloadId", + "keyNameLocation": "2903:10:71", + "keyType": { + "id": 60633, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2895:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2887:47:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", + "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 60635, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60634, + "name": "WorkloadMetadata", + "nameLocations": [ + "2917:16:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 61869, + "src": "2917:16:71" + }, + "referencedDeclaration": 61869, + "src": "2917:16:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage_ptr", + "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata" + } + } + }, + "visibility": "private" + }, + { + "id": 60640, + "nodeType": "VariableDeclaration", + "src": "3007:23:71", + "nodes": [], + "baseFunctions": [ + 62034 + ], + "constant": false, + "documentation": { + "id": 60638, + "nodeType": "StructuredDocumentation", + "src": "2967:35:71", + "text": "@inheritdoc IBlockBuilderPolicy" + }, + "functionSelector": "7b103999", + "mutability": "mutable", + "name": "registry", + "nameLocation": "3022:8:71", + "scope": 61239, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 60639, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3007:7:71", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "id": 60645, + "nodeType": "VariableDeclaration", + "src": "3077:64:71", + "nodes": [], + "baseFunctions": [ + 62042 + ], + "constant": false, + "documentation": { + "id": 60641, + "nodeType": "StructuredDocumentation", + "src": "3037:35:71", + "text": "@inheritdoc IBlockBuilderPolicy" + }, + "functionSelector": "7ecebe00", + "mutability": "mutable", + "name": "nonces", + "nameLocation": "3135:6:71", + "scope": 61239, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "typeName": { + "id": 60644, + "keyName": "teeAddress", + "keyNameLocation": "3093:10:71", + "keyType": { + "id": 60642, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3085:7:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "3077:50:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueName": "permitNonce", + "valueNameLocation": "3115:11:71", + "valueType": { + "id": 60643, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3107:7:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "public" + }, + { + "id": 60651, + "nodeType": "VariableDeclaration", + "src": "3308:69:71", + "nodes": [], + "constant": false, + "documentation": { + "id": 60646, + "nodeType": "StructuredDocumentation", + "src": "3148:155:71", + "text": "@notice Cache of computed workloadIds to avoid expensive recomputation\n @dev Maps teeAddress to cached workload information for gas optimization" + }, + "mutability": "mutable", + "name": "cachedWorkloads", + "nameLocation": "3362:15:71", + "scope": 61239, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_CachedWorkload_$60611_storage_$", + "typeString": "mapping(address => struct CachedWorkload)" + }, + "typeName": { + "id": 60650, + "keyName": "teeAddress", + "keyNameLocation": "3324:10:71", + "keyType": { + "id": 60647, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3316:7:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "3308:45:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_CachedWorkload_$60611_storage_$", + "typeString": "mapping(address => struct CachedWorkload)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 60649, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60648, + "name": "CachedWorkload", + "nameLocations": [ + "3338:14:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 60611, + "src": "3338:14:71" + }, + "referencedDeclaration": 60611, + "src": "3338:14:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_CachedWorkload_$60611_storage_ptr", + "typeString": "struct CachedWorkload" + } + } + }, + "visibility": "private" + }, + { + "id": 60656, + "nodeType": "VariableDeclaration", + "src": "3600:17:71", + "nodes": [], + "constant": false, + "documentation": { + "id": 60652, + "nodeType": "StructuredDocumentation", + "src": "3384:211:71", + "text": "@dev Storage gap to allow for future storage variable additions in upgrades\n @dev This reserves 46 storage slots (out of 50 total - 4 used for approvedWorkloads, registry, nonces, and cachedWorkloads)" + }, + "mutability": "mutable", + "name": "__gap", + "nameLocation": "3612:5:71", + "scope": 61239, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$46_storage", + "typeString": "uint256[46]" + }, + "typeName": { + "baseType": { + "id": 60653, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3600:7:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60655, + "length": { + "hexValue": "3436", + "id": 60654, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3608:2:71", + "typeDescriptions": { + "typeIdentifier": "t_rational_46_by_1", + "typeString": "int_const 46" + }, + "value": "46" + }, + "nodeType": "ArrayTypeName", + "src": "3600:11:71", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$46_storage_ptr", + "typeString": "uint256[46]" + } + }, + "visibility": "internal" + }, + { + "id": 60699, + "nodeType": "FunctionDefinition", + "src": "3664:351:71", + "nodes": [], + "body": { + "id": 60698, + "nodeType": "Block", + "src": "3756:259:71", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 60668, + "name": "_initialOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60659, + "src": "3781:13:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 60667, + "name": "__Ownable_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 47984, + "src": "3766:14:71", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 60669, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3766:29:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60670, + "nodeType": "ExpressionStatement", + "src": "3766:29:71" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 60671, + "name": "__UUPSUpgradeable_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48446, + "src": "3805:22:71", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 60672, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3805:24:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60673, + "nodeType": "ExpressionStatement", + "src": "3805:24:71" + }, + { + "expression": { + "arguments": [ + { + "hexValue": "426c6f636b4275696c646572506f6c696379", + "id": 60675, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3853:20:71", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_cbeb49ca47be8803ce2a0d04c03e1532e2fe91bbb42a2a5d9922693dc31e4646", + "typeString": "literal_string \"BlockBuilderPolicy\"" + }, + "value": "BlockBuilderPolicy" + }, + { + "hexValue": "31", + "id": 60676, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3875:3:71", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", + "typeString": "literal_string \"1\"" + }, + "value": "1" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_cbeb49ca47be8803ce2a0d04c03e1532e2fe91bbb42a2a5d9922693dc31e4646", + "typeString": "literal_string \"BlockBuilderPolicy\"" + }, + { + "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", + "typeString": "literal_string \"1\"" + } + ], + "id": 60674, + "name": "__EIP712_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48762, + "src": "3839:13:71", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory,string memory)" + } + }, + "id": 60677, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3839:40:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60678, + "nodeType": "ExpressionStatement", + "src": "3839:40:71" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 60685, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 60680, + "name": "_registry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60661, + "src": "3897:9:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 60683, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3918:1:71", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 60682, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3910:7:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 60681, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3910:7:71", + "typeDescriptions": {} + } + }, + "id": 60684, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3910:10:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3897:23:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 60686, + "name": "InvalidRegistry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61900, + "src": "3922:15:71", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 60687, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3922:17:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 60679, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "3889:7:71", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 60688, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3889:51:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60689, + "nodeType": "ExpressionStatement", + "src": "3889:51:71" + }, + { + "expression": { + "id": 60692, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 60690, + "name": "registry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60640, + "src": "3951:8:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 60691, + "name": "_registry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60661, + "src": "3962:9:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3951:20:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 60693, + "nodeType": "ExpressionStatement", + "src": "3951:20:71" + }, + { + "eventCall": { + "arguments": [ + { + "id": 60695, + "name": "_registry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60661, + "src": "3998:9:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 60694, + "name": "RegistrySet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61884, + "src": "3986:11:71", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 60696, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3986:22:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60697, + "nodeType": "EmitStatement", + "src": "3981:27:71" + } + ] + }, + "baseFunctions": [ + 61932 + ], + "documentation": { + "id": 60657, + "nodeType": "StructuredDocumentation", + "src": "3624:35:71", + "text": "@inheritdoc IBlockBuilderPolicy" + }, + "functionSelector": "485cc955", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 60665, + "kind": "modifierInvocation", + "modifierName": { + "id": 60664, + "name": "initializer", + "nameLocations": [ + "3744:11:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48232, + "src": "3744:11:71" + }, + "nodeType": "ModifierInvocation", + "src": "3744:11:71" + } + ], + "name": "initialize", + "nameLocation": "3673:10:71", + "overrides": { + "id": 60663, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3735:8:71" + }, + "parameters": { + "id": 60662, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60659, + "mutability": "mutable", + "name": "_initialOwner", + "nameLocation": "3692:13:71", + "nodeType": "VariableDeclaration", + "scope": 60699, + "src": "3684:21:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 60658, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3684:7:71", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60661, + "mutability": "mutable", + "name": "_registry", + "nameLocation": "3715:9:71", + "nodeType": "VariableDeclaration", + "scope": 60699, + "src": "3707:17:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 60660, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3707:7:71", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3683:42:71" + }, + "returnParameters": { + "id": 60666, + "nodeType": "ParameterList", + "parameters": [], + "src": "3756:0:71" + }, + "scope": 61239, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 60709, + "nodeType": "FunctionDefinition", + "src": "4150:84:71", + "nodes": [], + "body": { + "id": 60708, + "nodeType": "Block", + "src": "4232:2:71", + "nodes": [], + "statements": [] + }, + "baseFunctions": [ + 48528 + ], + "documentation": { + "id": 60700, + "nodeType": "StructuredDocumentation", + "src": "4021:124:71", + "text": "@notice Restricts upgrades to owner only\n @param newImplementation The address of the new implementation contract" + }, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 60706, + "kind": "modifierInvocation", + "modifierName": { + "id": 60705, + "name": "onlyOwner", + "nameLocations": [ + "4222:9:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48019, + "src": "4222:9:71" + }, + "nodeType": "ModifierInvocation", + "src": "4222:9:71" + } + ], + "name": "_authorizeUpgrade", + "nameLocation": "4159:17:71", + "overrides": { + "id": 60704, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4213:8:71" + }, + "parameters": { + "id": 60703, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60702, + "mutability": "mutable", + "name": "newImplementation", + "nameLocation": "4185:17:71", + "nodeType": "VariableDeclaration", + "scope": 60709, + "src": "4177:25:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 60701, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4177:7:71", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4176:27:71" + }, + "returnParameters": { + "id": 60707, + "nodeType": "ParameterList", + "parameters": [], + "src": "4232:0:71" + }, + "scope": 61239, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 60726, + "nodeType": "FunctionDefinition", + "src": "4280:172:71", + "nodes": [], + "body": { + "id": 60725, + "nodeType": "Block", + "src": "4372:80:71", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 60719, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "4407:3:71", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 60720, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4411:6:71", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "4407:10:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 60721, + "name": "version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60712, + "src": "4419:7:71", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "id": 60722, + "name": "blockContentHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60714, + "src": "4428:16:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 60718, + "name": "_verifyBlockBuilderProof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60833, + "src": "4382:24:71", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint8_$_t_bytes32_$returns$__$", + "typeString": "function (address,uint8,bytes32)" + } + }, + "id": 60723, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4382:63:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60724, + "nodeType": "ExpressionStatement", + "src": "4382:63:71" + } + ] + }, + "baseFunctions": [ + 61940 + ], + "documentation": { + "id": 60710, + "nodeType": "StructuredDocumentation", + "src": "4240:35:71", + "text": "@inheritdoc IBlockBuilderPolicy" + }, + "functionSelector": "b33d59da", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "verifyBlockBuilderProof", + "nameLocation": "4289:23:71", + "overrides": { + "id": 60716, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4363:8:71" + }, + "parameters": { + "id": 60715, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60712, + "mutability": "mutable", + "name": "version", + "nameLocation": "4319:7:71", + "nodeType": "VariableDeclaration", + "scope": 60726, + "src": "4313:13:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 60711, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "4313:5:71", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60714, + "mutability": "mutable", + "name": "blockContentHash", + "nameLocation": "4336:16:71", + "nodeType": "VariableDeclaration", + "scope": 60726, + "src": "4328:24:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 60713, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4328:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4312:41:71" + }, + "returnParameters": { + "id": 60717, + "nodeType": "ParameterList", + "parameters": [], + "src": "4372:0:71" + }, + "scope": 61239, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 60784, + "nodeType": "FunctionDefinition", + "src": "4498:725:71", + "nodes": [], + "body": { + "id": 60783, + "nodeType": "Block", + "src": "4675:548:71", + "nodes": [], + "statements": [ + { + "assignments": [ + 60740 + ], + "declarations": [ + { + "constant": false, + "id": 60740, + "mutability": "mutable", + "name": "digest", + "nameLocation": "4743:6:71", + "nodeType": "VariableDeclaration", + "scope": 60783, + "src": "4735:14:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 60739, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4735:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 60748, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 60743, + "name": "version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60729, + "src": "4790:7:71", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "id": 60744, + "name": "blockContentHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60731, + "src": "4799:16:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 60745, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60733, + "src": "4817:5:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 60742, + "name": "computeStructHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61228, + "src": "4772:17:71", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$", + "typeString": "function (uint8,bytes32,uint256) pure returns (bytes32)" + } + }, + "id": 60746, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4772:51:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 60741, + "name": "getHashedTypeDataV4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61205, + "src": "4752:19:71", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", + "typeString": "function (bytes32) view returns (bytes32)" + } + }, + "id": 60747, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4752:72:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4735:89:71" + }, + { + "assignments": [ + 60750 + ], + "declarations": [ + { + "constant": false, + "id": 60750, + "mutability": "mutable", + "name": "teeAddress", + "nameLocation": "4842:10:71", + "nodeType": "VariableDeclaration", + "scope": 60783, + "src": "4834:18:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 60749, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4834:7:71", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 60755, + "initialValue": { + "arguments": [ + { + "id": 60753, + "name": "eip712Sig", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60735, + "src": "4870:9:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "expression": { + "id": 60751, + "name": "digest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60740, + "src": "4855:6:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 60752, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4862:7:71", + "memberName": "recover", + "nodeType": "MemberAccess", + "referencedDeclaration": 52154, + "src": "4855:14:71", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$attached_to$_t_bytes32_$", + "typeString": "function (bytes32,bytes memory) pure returns (address)" + } + }, + "id": 60754, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4855:25:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4834:46:71" + }, + { + "assignments": [ + 60757 + ], + "declarations": [ + { + "constant": false, + "id": 60757, + "mutability": "mutable", + "name": "expectedNonce", + "nameLocation": "4927:13:71", + "nodeType": "VariableDeclaration", + "scope": 60783, + "src": "4919:21:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60756, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4919:7:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60761, + "initialValue": { + "baseExpression": { + "id": 60758, + "name": "nonces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60645, + "src": "4943:6:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 60760, + "indexExpression": { + "id": 60759, + "name": "teeAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60750, + "src": "4950:10:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4943:18:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4919:42:71" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60765, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 60763, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60733, + "src": "4979:5:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 60764, + "name": "expectedNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60757, + "src": "4988:13:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4979:22:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 60767, + "name": "expectedNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60757, + "src": "5016:13:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 60768, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60733, + "src": "5031:5:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 60766, + "name": "InvalidNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61918, + "src": "5003:12:71", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", + "typeString": "function (uint256,uint256) pure returns (error)" + } + }, + "id": 60769, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5003:34:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 60762, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4971:7:71", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 60770, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4971:67:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60771, + "nodeType": "ExpressionStatement", + "src": "4971:67:71" + }, + { + "expression": { + "id": 60775, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "5080:20:71", + "subExpression": { + "baseExpression": { + "id": 60772, + "name": "nonces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60645, + "src": "5080:6:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 60774, + "indexExpression": { + "id": 60773, + "name": "teeAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60750, + "src": "5087:10:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5080:18:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60776, + "nodeType": "ExpressionStatement", + "src": "5080:20:71" + }, + { + "expression": { + "arguments": [ + { + "id": 60778, + "name": "teeAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60750, + "src": "5178:10:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 60779, + "name": "version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60729, + "src": "5190:7:71", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "id": 60780, + "name": "blockContentHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60731, + "src": "5199:16:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 60777, + "name": "_verifyBlockBuilderProof", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60833, + "src": "5153:24:71", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint8_$_t_bytes32_$returns$__$", + "typeString": "function (address,uint8,bytes32)" + } + }, + "id": 60781, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5153:63:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60782, + "nodeType": "ExpressionStatement", + "src": "5153:63:71" + } + ] + }, + "baseFunctions": [ + 61952 + ], + "documentation": { + "id": 60727, + "nodeType": "StructuredDocumentation", + "src": "4458:35:71", + "text": "@inheritdoc IBlockBuilderPolicy" + }, + "functionSelector": "2dd8abfe", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "permitVerifyBlockBuilderProof", + "nameLocation": "4507:29:71", + "overrides": { + "id": 60737, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4666:8:71" + }, + "parameters": { + "id": 60736, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60729, + "mutability": "mutable", + "name": "version", + "nameLocation": "4552:7:71", + "nodeType": "VariableDeclaration", + "scope": 60784, + "src": "4546:13:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 60728, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "4546:5:71", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60731, + "mutability": "mutable", + "name": "blockContentHash", + "nameLocation": "4577:16:71", + "nodeType": "VariableDeclaration", + "scope": 60784, + "src": "4569:24:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 60730, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4569:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60733, + "mutability": "mutable", + "name": "nonce", + "nameLocation": "4611:5:71", + "nodeType": "VariableDeclaration", + "scope": 60784, + "src": "4603:13:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60732, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4603:7:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60735, + "mutability": "mutable", + "name": "eip712Sig", + "nameLocation": "4641:9:71", + "nodeType": "VariableDeclaration", + "scope": 60784, + "src": "4626:24:71", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 60734, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4626:5:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4536:120:71" + }, + "returnParameters": { + "id": 60738, + "nodeType": "ParameterList", + "parameters": [], + "src": "4675:0:71" + }, + "scope": 61239, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 60833, + "nodeType": "FunctionDefinition", + "src": "5648:1056:71", + "nodes": [], + "body": { + "id": 60832, + "nodeType": "Block", + "src": "5752:952:71", + "nodes": [], + "statements": [ + { + "assignments": [ + 60795, + 60798 + ], + "declarations": [ + { + "constant": false, + "id": 60795, + "mutability": "mutable", + "name": "allowed", + "nameLocation": "5866:7:71", + "nodeType": "VariableDeclaration", + "scope": 60832, + "src": "5861:12:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 60794, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5861:4:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60798, + "mutability": "mutable", + "name": "workloadId", + "nameLocation": "5886:10:71", + "nodeType": "VariableDeclaration", + "scope": 60832, + "src": "5875:21:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + }, + "typeName": { + "id": 60797, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60796, + "name": "WorkloadId", + "nameLocations": [ + "5875:10:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 61861, + "src": "5875:10:71" + }, + "referencedDeclaration": 61861, + "src": "5875:10:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + }, + "visibility": "internal" + } + ], + "id": 60802, + "initialValue": { + "arguments": [ + { + "id": 60800, + "name": "teeAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60787, + "src": "5923:10:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 60799, + "name": "_cachedIsAllowedPolicy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61013, + "src": "5900:22:71", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "function (address) returns (bool,WorkloadId)" + } + }, + "id": 60801, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5900:34:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "tuple(bool,WorkloadId)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5860:74:71" + }, + { + "expression": { + "arguments": [ + { + "id": 60804, + "name": "allowed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60795, + "src": "5952:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [ + { + "id": 60806, + "name": "teeAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60787, + "src": "5986:10:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 60805, + "name": "UnauthorizedBlockBuilder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61911, + "src": "5961:24:71", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", + "typeString": "function (address) pure returns (error)" + } + }, + "id": 60807, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5961:36:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 60803, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "5944:7:71", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 60808, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5944:54:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60809, + "nodeType": "ExpressionStatement", + "src": "5944:54:71" + }, + { + "assignments": [ + 60811 + ], + "declarations": [ + { + "constant": false, + "id": 60811, + "mutability": "mutable", + "name": "workloadKey", + "nameLocation": "6472:11:71", + "nodeType": "VariableDeclaration", + "scope": 60832, + "src": "6464:19:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 60810, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6464:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 60816, + "initialValue": { + "arguments": [ + { + "id": 60814, + "name": "workloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60798, + "src": "6504:10:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + ], + "expression": { + "id": 60812, + "name": "WorkloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61861, + "src": "6486:10:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "type(WorkloadId)" + } + }, + "id": 60813, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "6497:6:71", + "memberName": "unwrap", + "nodeType": "MemberAccess", + "src": "6486:17:71", + "typeDescriptions": { + "typeIdentifier": "t_function_unwrap_pure$_t_userDefinedValueType$_WorkloadId_$61861_$returns$_t_bytes32_$", + "typeString": "function (WorkloadId) pure returns (bytes32)" + } + }, + "id": 60815, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6486:29:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6464:51:71" + }, + { + "assignments": [ + 60818 + ], + "declarations": [ + { + "constant": false, + "id": 60818, + "mutability": "mutable", + "name": "commitHash", + "nameLocation": "6539:10:71", + "nodeType": "VariableDeclaration", + "scope": 60832, + "src": "6525:24:71", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 60817, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "6525:6:71", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "id": 60823, + "initialValue": { + "expression": { + "baseExpression": { + "id": 60819, + "name": "approvedWorkloads", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60637, + "src": "6552:17:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", + "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata storage ref)" + } + }, + "id": 60821, + "indexExpression": { + "id": 60820, + "name": "workloadKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60811, + "src": "6570:11:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6552:30:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage", + "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata storage ref" + } + }, + "id": 60822, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6583:10:71", + "memberName": "commitHash", + "nodeType": "MemberAccess", + "referencedDeclaration": 61865, + "src": "6552:41:71", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6525:68:71" + }, + { + "eventCall": { + "arguments": [ + { + "id": 60825, + "name": "teeAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60787, + "src": "6634:10:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 60826, + "name": "workloadKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60811, + "src": "6646:11:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 60827, + "name": "version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60789, + "src": "6659:7:71", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "id": 60828, + "name": "blockContentHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60791, + "src": "6668:16:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 60829, + "name": "commitHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60818, + "src": "6686:10:71", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 60824, + "name": "BlockBuilderProofVerified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61897, + "src": "6608:25:71", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (address,bytes32,uint8,bytes32,string memory)" + } + }, + "id": 60830, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6608:89:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60831, + "nodeType": "EmitStatement", + "src": "6603:94:71" + } + ] + }, + "documentation": { + "id": 60785, + "nodeType": "StructuredDocumentation", + "src": "5229:414:71", + "text": "@notice Internal function to verify a block builder proof\n @dev This function is internal because it is only used by the permitVerifyBlockBuilderProof function\n and it is not needed to be called by other contracts\n @param teeAddress The TEE-controlled address\n @param version The version of the flashtestation's protocol\n @param blockContentHash The hash of the block content" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_verifyBlockBuilderProof", + "nameLocation": "5657:24:71", + "parameters": { + "id": 60792, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60787, + "mutability": "mutable", + "name": "teeAddress", + "nameLocation": "5690:10:71", + "nodeType": "VariableDeclaration", + "scope": 60833, + "src": "5682:18:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 60786, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5682:7:71", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60789, + "mutability": "mutable", + "name": "version", + "nameLocation": "5708:7:71", + "nodeType": "VariableDeclaration", + "scope": 60833, + "src": "5702:13:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 60788, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "5702:5:71", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60791, + "mutability": "mutable", + "name": "blockContentHash", + "nameLocation": "5725:16:71", + "nodeType": "VariableDeclaration", + "scope": 60833, + "src": "5717:24:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 60790, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5717:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "5681:61:71" + }, + "returnParameters": { + "id": 60793, + "nodeType": "ParameterList", + "parameters": [], + "src": "5752:0:71" + }, + "scope": 61239, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 60903, + "nodeType": "FunctionDefinition", + "src": "6750:906:71", + "nodes": [], + "body": { + "id": 60902, + "nodeType": "Block", + "src": "6851:805:71", + "nodes": [], + "statements": [ + { + "assignments": [ + null, + 60849 + ], + "declarations": [ + null, + { + "constant": false, + "id": 60849, + "mutability": "mutable", + "name": "registration", + "nameLocation": "6971:12:71", + "nodeType": "VariableDeclaration", + "scope": 60902, + "src": "6926:57:71", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", + "typeString": "struct IFlashtestationRegistry.RegisteredTEE" + }, + "typeName": { + "id": 60848, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60847, + "name": "IFlashtestationRegistry.RegisteredTEE", + "nameLocations": [ + "6926:23:71", + "6950:13:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 62069, + "src": "6926:37:71" + }, + "referencedDeclaration": 62069, + "src": "6926:37:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RegisteredTEE_$62069_storage_ptr", + "typeString": "struct IFlashtestationRegistry.RegisteredTEE" + } + }, + "visibility": "internal" + } + ], + "id": 60856, + "initialValue": { + "arguments": [ + { + "id": 60854, + "name": "teeAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60836, + "src": "7048:10:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [ + { + "id": 60851, + "name": "registry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60640, + "src": "7022:8:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 60850, + "name": "FlashtestationRegistry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61842, + "src": "6999:22:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FlashtestationRegistry_$61842_$", + "typeString": "type(contract FlashtestationRegistry)" + } + }, + "id": 60852, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6999:32:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_FlashtestationRegistry_$61842", + "typeString": "contract FlashtestationRegistry" + } + }, + "id": 60853, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7032:15:71", + "memberName": "getRegistration", + "nodeType": "MemberAccess", + "referencedDeclaration": 61657, + "src": "6999:48:71", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$_t_struct$_RegisteredTEE_$62069_memory_ptr_$", + "typeString": "function (address) view external returns (bool,struct IFlashtestationRegistry.RegisteredTEE memory)" + } + }, + "id": 60855, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6999:60:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_struct$_RegisteredTEE_$62069_memory_ptr_$", + "typeString": "tuple(bool,struct IFlashtestationRegistry.RegisteredTEE memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6923:136:71" + }, + { + "condition": { + "id": 60859, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "7230:21:71", + "subExpression": { + "expression": { + "id": 60857, + "name": "registration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60849, + "src": "7231:12:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", + "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" + } + }, + "id": 60858, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7244:7:71", + "memberName": "isValid", + "nodeType": "MemberAccess", + "referencedDeclaration": 62059, + "src": "7231:20:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 60868, + "nodeType": "IfStatement", + "src": "7226:86:71", + "trueBody": { + "id": 60867, + "nodeType": "Block", + "src": "7253:59:71", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 60860, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7275:5:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "arguments": [ + { + "hexValue": "30", + "id": 60863, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7298:1:71", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "expression": { + "id": 60861, + "name": "WorkloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61861, + "src": "7282:10:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "type(WorkloadId)" + } + }, + "id": 60862, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "7293:4:71", + "memberName": "wrap", + "nodeType": "MemberAccess", + "src": "7282:15:71", + "typeDescriptions": { + "typeIdentifier": "t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "function (bytes32) pure returns (WorkloadId)" + } + }, + "id": 60864, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7282:18:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + } + ], + "id": 60865, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "7274:27:71", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "tuple(bool,WorkloadId)" + } + }, + "functionReturnParameters": 60844, + "id": 60866, + "nodeType": "Return", + "src": "7267:34:71" + } + ] + } + }, + { + "assignments": [ + 60871 + ], + "declarations": [ + { + "constant": false, + "id": 60871, + "mutability": "mutable", + "name": "workloadId", + "nameLocation": "7333:10:71", + "nodeType": "VariableDeclaration", + "scope": 60902, + "src": "7322:21:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + }, + "typeName": { + "id": 60870, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60869, + "name": "WorkloadId", + "nameLocations": [ + "7322:10:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 61861, + "src": "7322:10:71" + }, + "referencedDeclaration": 61861, + "src": "7322:10:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + }, + "visibility": "internal" + } + ], + "id": 60875, + "initialValue": { + "arguments": [ + { + "id": 60873, + "name": "registration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60849, + "src": "7374:12:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", + "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", + "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" + } + ], + "id": 60872, + "name": "workloadIdForTDRegistration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61059, + "src": "7346:27:71", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_RegisteredTEE_$62069_memory_ptr_$returns$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "function (struct IFlashtestationRegistry.RegisteredTEE memory) pure returns (WorkloadId)" + } + }, + "id": 60874, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7346:41:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7322:65:71" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60888, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "arguments": [ + { + "expression": { + "baseExpression": { + "id": 60878, + "name": "approvedWorkloads", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60637, + "src": "7482:17:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", + "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata storage ref)" + } + }, + "id": 60883, + "indexExpression": { + "arguments": [ + { + "id": 60881, + "name": "workloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60871, + "src": "7518:10:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + ], + "expression": { + "id": 60879, + "name": "WorkloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61861, + "src": "7500:10:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "type(WorkloadId)" + } + }, + "id": 60880, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "7511:6:71", + "memberName": "unwrap", + "nodeType": "MemberAccess", + "src": "7500:17:71", + "typeDescriptions": { + "typeIdentifier": "t_function_unwrap_pure$_t_userDefinedValueType$_WorkloadId_$61861_$returns$_t_bytes32_$", + "typeString": "function (WorkloadId) pure returns (bytes32)" + } + }, + "id": 60882, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7500:29:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7482:48:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage", + "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata storage ref" + } + }, + "id": 60884, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7531:10:71", + "memberName": "commitHash", + "nodeType": "MemberAccess", + "referencedDeclaration": 61865, + "src": "7482:59:71", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + ], + "id": 60877, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7476:5:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 60876, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "7476:5:71", + "typeDescriptions": {} + } + }, + "id": 60885, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7476:66:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes storage pointer" + } + }, + "id": 60886, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7543:6:71", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "7476:73:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 60887, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7552:1:71", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "7476:77:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 60894, + "nodeType": "IfStatement", + "src": "7472:133:71", + "trueBody": { + "id": 60893, + "nodeType": "Block", + "src": "7555:50:71", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "74727565", + "id": 60889, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7577:4:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "id": 60890, + "name": "workloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60871, + "src": "7583:10:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + } + ], + "id": 60891, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "7576:18:71", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "tuple(bool,WorkloadId)" + } + }, + "functionReturnParameters": 60844, + "id": 60892, + "nodeType": "Return", + "src": "7569:25:71" + } + ] + } + }, + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 60895, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7623:5:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "arguments": [ + { + "hexValue": "30", + "id": 60898, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7646:1:71", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "expression": { + "id": 60896, + "name": "WorkloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61861, + "src": "7630:10:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "type(WorkloadId)" + } + }, + "id": 60897, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "7641:4:71", + "memberName": "wrap", + "nodeType": "MemberAccess", + "src": "7630:15:71", + "typeDescriptions": { + "typeIdentifier": "t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "function (bytes32) pure returns (WorkloadId)" + } + }, + "id": 60899, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7630:18:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + } + ], + "id": 60900, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "7622:27:71", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "tuple(bool,WorkloadId)" + } + }, + "functionReturnParameters": 60844, + "id": 60901, + "nodeType": "Return", + "src": "7615:34:71" + } + ] + }, + "baseFunctions": [ + 61963 + ], + "documentation": { + "id": 60834, + "nodeType": "StructuredDocumentation", + "src": "6710:35:71", + "text": "@inheritdoc IBlockBuilderPolicy" + }, + "functionSelector": "d2753561", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isAllowedPolicy", + "nameLocation": "6759:15:71", + "overrides": { + "id": 60838, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "6807:8:71" + }, + "parameters": { + "id": 60837, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60836, + "mutability": "mutable", + "name": "teeAddress", + "nameLocation": "6783:10:71", + "nodeType": "VariableDeclaration", + "scope": 60903, + "src": "6775:18:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 60835, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6775:7:71", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6774:20:71" + }, + "returnParameters": { + "id": 60844, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60840, + "mutability": "mutable", + "name": "allowed", + "nameLocation": "6830:7:71", + "nodeType": "VariableDeclaration", + "scope": 60903, + "src": "6825:12:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 60839, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6825:4:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60843, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 60903, + "src": "6839:10:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + }, + "typeName": { + "id": 60842, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60841, + "name": "WorkloadId", + "nameLocations": [ + "6839:10:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 61861, + "src": "6839:10:71" + }, + "referencedDeclaration": 61861, + "src": "6839:10:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + }, + "visibility": "internal" + } + ], + "src": "6824:26:71" + }, + "scope": 61239, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 61013, + "nodeType": "FunctionDefinition", + "src": "8892:1574:71", + "nodes": [], + "body": { + "id": 61012, + "nodeType": "Block", + "src": "8979:1487:71", + "nodes": [], + "statements": [ + { + "assignments": [ + 60915, + 60917 + ], + "declarations": [ + { + "constant": false, + "id": 60915, + "mutability": "mutable", + "name": "isValid", + "nameLocation": "9054:7:71", + "nodeType": "VariableDeclaration", + "scope": 61012, + "src": "9049:12:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 60914, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9049:4:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60917, + "mutability": "mutable", + "name": "quoteHash", + "nameLocation": "9071:9:71", + "nodeType": "VariableDeclaration", + "scope": 61012, + "src": "9063:17:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 60916, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9063:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 60924, + "initialValue": { + "arguments": [ + { + "id": 60922, + "name": "teeAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60906, + "src": "9139:10:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [ + { + "id": 60919, + "name": "registry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60640, + "src": "9107:8:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 60918, + "name": "FlashtestationRegistry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61842, + "src": "9084:22:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FlashtestationRegistry_$61842_$", + "typeString": "type(contract FlashtestationRegistry)" + } + }, + "id": 60920, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9084:32:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_FlashtestationRegistry_$61842", + "typeString": "contract FlashtestationRegistry" + } + }, + "id": 60921, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9117:21:71", + "memberName": "getRegistrationStatus", + "nodeType": "MemberAccess", + "referencedDeclaration": 61682, + "src": "9084:54:71", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$_t_bytes32_$", + "typeString": "function (address) view external returns (bool,bytes32)" + } + }, + "id": 60923, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9084:66:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes32_$", + "typeString": "tuple(bool,bytes32)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9048:102:71" + }, + { + "condition": { + "id": 60926, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "9164:8:71", + "subExpression": { + "id": 60925, + "name": "isValid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60915, + "src": "9165:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 60935, + "nodeType": "IfStatement", + "src": "9160:73:71", + "trueBody": { + "id": 60934, + "nodeType": "Block", + "src": "9174:59:71", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 60927, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9196:5:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "arguments": [ + { + "hexValue": "30", + "id": 60930, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9219:1:71", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "expression": { + "id": 60928, + "name": "WorkloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61861, + "src": "9203:10:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "type(WorkloadId)" + } + }, + "id": 60929, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "9214:4:71", + "memberName": "wrap", + "nodeType": "MemberAccess", + "src": "9203:15:71", + "typeDescriptions": { + "typeIdentifier": "t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "function (bytes32) pure returns (WorkloadId)" + } + }, + "id": 60931, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9203:18:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + } + ], + "id": 60932, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9195:27:71", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "tuple(bool,WorkloadId)" + } + }, + "functionReturnParameters": 60913, + "id": 60933, + "nodeType": "Return", + "src": "9188:34:71" + } + ] + } + }, + { + "assignments": [ + 60938 + ], + "declarations": [ + { + "constant": false, + "id": 60938, + "mutability": "mutable", + "name": "cached", + "nameLocation": "9329:6:71", + "nodeType": "VariableDeclaration", + "scope": 61012, + "src": "9307:28:71", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_CachedWorkload_$60611_memory_ptr", + "typeString": "struct CachedWorkload" + }, + "typeName": { + "id": 60937, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60936, + "name": "CachedWorkload", + "nameLocations": [ + "9307:14:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 60611, + "src": "9307:14:71" + }, + "referencedDeclaration": 60611, + "src": "9307:14:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_CachedWorkload_$60611_storage_ptr", + "typeString": "struct CachedWorkload" + } + }, + "visibility": "internal" + } + ], + "id": 60942, + "initialValue": { + "baseExpression": { + "id": 60939, + "name": "cachedWorkloads", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60651, + "src": "9338:15:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_CachedWorkload_$60611_storage_$", + "typeString": "mapping(address => struct CachedWorkload storage ref)" + } + }, + "id": 60941, + "indexExpression": { + "id": 60940, + "name": "teeAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60906, + "src": "9354:10:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9338:27:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_CachedWorkload_$60611_storage", + "typeString": "struct CachedWorkload storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9307:58:71" + }, + { + "assignments": [ + 60944 + ], + "declarations": [ + { + "constant": false, + "id": 60944, + "mutability": "mutable", + "name": "cachedWorkloadId", + "nameLocation": "9467:16:71", + "nodeType": "VariableDeclaration", + "scope": 61012, + "src": "9459:24:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 60943, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9459:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 60950, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 60947, + "name": "cached", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60938, + "src": "9504:6:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_CachedWorkload_$60611_memory_ptr", + "typeString": "struct CachedWorkload memory" + } + }, + "id": 60948, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9511:10:71", + "memberName": "workloadId", + "nodeType": "MemberAccess", + "referencedDeclaration": 60607, + "src": "9504:17:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + ], + "expression": { + "id": 60945, + "name": "WorkloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61861, + "src": "9486:10:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "type(WorkloadId)" + } + }, + "id": 60946, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "9497:6:71", + "memberName": "unwrap", + "nodeType": "MemberAccess", + "src": "9486:17:71", + "typeDescriptions": { + "typeIdentifier": "t_function_unwrap_pure$_t_userDefinedValueType$_WorkloadId_$61861_$returns$_t_bytes32_$", + "typeString": "function (WorkloadId) pure returns (bytes32)" + } + }, + "id": 60949, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9486:36:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9459:63:71" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 60958, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 60953, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 60951, + "name": "cachedWorkloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60944, + "src": "9536:16:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 60952, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9556:1:71", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "9536:21:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 60957, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 60954, + "name": "cached", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60938, + "src": "9561:6:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_CachedWorkload_$60611_memory_ptr", + "typeString": "struct CachedWorkload memory" + } + }, + "id": 60955, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9568:9:71", + "memberName": "quoteHash", + "nodeType": "MemberAccess", + "referencedDeclaration": 60610, + "src": "9561:16:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 60956, + "name": "quoteHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60917, + "src": "9581:9:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "9561:29:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "9536:54:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 61010, + "nodeType": "Block", + "src": "10031:429:71", + "statements": [ + { + "assignments": [ + 60986, + 60989 + ], + "declarations": [ + { + "constant": false, + "id": 60986, + "mutability": "mutable", + "name": "allowed", + "nameLocation": "10136:7:71", + "nodeType": "VariableDeclaration", + "scope": 61010, + "src": "10131:12:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 60985, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "10131:4:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60989, + "mutability": "mutable", + "name": "workloadId", + "nameLocation": "10156:10:71", + "nodeType": "VariableDeclaration", + "scope": 61010, + "src": "10145:21:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + }, + "typeName": { + "id": 60988, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60987, + "name": "WorkloadId", + "nameLocations": [ + "10145:10:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 61861, + "src": "10145:10:71" + }, + "referencedDeclaration": 61861, + "src": "10145:10:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + }, + "visibility": "internal" + } + ], + "id": 60993, + "initialValue": { + "arguments": [ + { + "id": 60991, + "name": "teeAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60906, + "src": "10186:10:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 60990, + "name": "isAllowedPolicy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60903, + "src": "10170:15:71", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "function (address) view returns (bool,WorkloadId)" + } + }, + "id": 60992, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10170:27:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "tuple(bool,WorkloadId)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10130:67:71" + }, + { + "condition": { + "id": 60994, + "name": "allowed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60986, + "src": "10216:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 61005, + "nodeType": "IfStatement", + "src": "10212:195:71", + "trueBody": { + "id": 61004, + "nodeType": "Block", + "src": "10225:182:71", + "statements": [ + { + "expression": { + "id": 61002, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 60995, + "name": "cachedWorkloads", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60651, + "src": "10300:15:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_CachedWorkload_$60611_storage_$", + "typeString": "mapping(address => struct CachedWorkload storage ref)" + } + }, + "id": 60997, + "indexExpression": { + "id": 60996, + "name": "teeAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60906, + "src": "10316:10:71", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "10300:27:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_CachedWorkload_$60611_storage", + "typeString": "struct CachedWorkload storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 60999, + "name": "workloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60989, + "src": "10358:10:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + }, + { + "id": 61000, + "name": "quoteHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60917, + "src": "10381:9:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 60998, + "name": "CachedWorkload", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60611, + "src": "10330:14:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_CachedWorkload_$60611_storage_ptr_$", + "typeString": "type(struct CachedWorkload storage pointer)" + } + }, + "id": 61001, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [ + "10346:10:71", + "10370:9:71" + ], + "names": [ + "workloadId", + "quoteHash" + ], + "nodeType": "FunctionCall", + "src": "10330:62:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_CachedWorkload_$60611_memory_ptr", + "typeString": "struct CachedWorkload memory" + } + }, + "src": "10300:92:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_CachedWorkload_$60611_storage", + "typeString": "struct CachedWorkload storage ref" + } + }, + "id": 61003, + "nodeType": "ExpressionStatement", + "src": "10300:92:71" + } + ] + } + }, + { + "expression": { + "components": [ + { + "id": 61006, + "name": "allowed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60986, + "src": "10429:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 61007, + "name": "workloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60989, + "src": "10438:10:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + } + ], + "id": 61008, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "10428:21:71", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "tuple(bool,WorkloadId)" + } + }, + "functionReturnParameters": 60913, + "id": 61009, + "nodeType": "Return", + "src": "10421:28:71" + } + ] + }, + "id": 61011, + "nodeType": "IfStatement", + "src": "9532:928:71", + "trueBody": { + "id": 60984, + "nodeType": "Block", + "src": "9592:433:71", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60968, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "arguments": [ + { + "expression": { + "baseExpression": { + "id": 60961, + "name": "approvedWorkloads", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60637, + "src": "9715:17:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", + "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata storage ref)" + } + }, + "id": 60963, + "indexExpression": { + "id": 60962, + "name": "cachedWorkloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60944, + "src": "9733:16:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9715:35:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage", + "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata storage ref" + } + }, + "id": 60964, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9751:10:71", + "memberName": "commitHash", + "nodeType": "MemberAccess", + "referencedDeclaration": 61865, + "src": "9715:46:71", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + ], + "id": 60960, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9709:5:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 60959, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "9709:5:71", + "typeDescriptions": {} + } + }, + "id": 60965, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9709:53:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes storage pointer" + } + }, + "id": 60966, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9763:6:71", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "9709:60:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 60967, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9772:1:71", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "9709:64:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 60982, + "nodeType": "Block", + "src": "9846:169:71", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 60975, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9974:5:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "arguments": [ + { + "hexValue": "30", + "id": 60978, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9997:1:71", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "expression": { + "id": 60976, + "name": "WorkloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61861, + "src": "9981:10:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "type(WorkloadId)" + } + }, + "id": 60977, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "9992:4:71", + "memberName": "wrap", + "nodeType": "MemberAccess", + "src": "9981:15:71", + "typeDescriptions": { + "typeIdentifier": "t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "function (bytes32) pure returns (WorkloadId)" + } + }, + "id": 60979, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9981:18:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + } + ], + "id": 60980, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9973:27:71", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "tuple(bool,WorkloadId)" + } + }, + "functionReturnParameters": 60913, + "id": 60981, + "nodeType": "Return", + "src": "9966:34:71" + } + ] + }, + "id": 60983, + "nodeType": "IfStatement", + "src": "9705:310:71", + "trueBody": { + "id": 60974, + "nodeType": "Block", + "src": "9775:65:71", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "74727565", + "id": 60969, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9801:4:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "expression": { + "id": 60970, + "name": "cached", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60938, + "src": "9807:6:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_CachedWorkload_$60611_memory_ptr", + "typeString": "struct CachedWorkload memory" + } + }, + "id": 60971, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9814:10:71", + "memberName": "workloadId", + "nodeType": "MemberAccess", + "referencedDeclaration": 60607, + "src": "9807:17:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + } + ], + "id": 60972, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9800:25:71", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "tuple(bool,WorkloadId)" + } + }, + "functionReturnParameters": 60913, + "id": 60973, + "nodeType": "Return", + "src": "9793:32:71" + } + ] + } + } + ] + } + } + ] + }, + "documentation": { + "id": 60904, + "nodeType": "StructuredDocumentation", + "src": "7662:1225:71", + "text": "@notice isAllowedPolicy but with caching to reduce gas costs\n @dev This function is only used by the verifyBlockBuilderProof function, which needs to be as efficient as possible\n because it is called onchain for every flashblock. The workloadId is cached to avoid expensive recomputation\n @dev A careful reader will notice that this function does not delete stale cache entries. It overwrites them\n if the underlying TEE registration is still valid. But for stale cache entries in every other scenario, the\n cache entry persists indefinitely. This is because every other instance results in a return value of (false, 0)\n to the caller (which is always the verifyBlockBuilderProof function) and it immediately reverts. This is an unfortunate\n consequence of our need to make this function as gas-efficient as possible, otherwise we would try to cleanup\n stale cache entries\n @param teeAddress The TEE-controlled address\n @return True if the TEE is using an approved workload in the policy\n @return The workloadId of the TEE that is using an approved workload in the policy, or 0 if\n the TEE is not using an approved workload in the policy" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_cachedIsAllowedPolicy", + "nameLocation": "8901:22:71", + "parameters": { + "id": 60907, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60906, + "mutability": "mutable", + "name": "teeAddress", + "nameLocation": "8932:10:71", + "nodeType": "VariableDeclaration", + "scope": 61013, + "src": "8924:18:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 60905, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8924:7:71", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "8923:20:71" + }, + "returnParameters": { + "id": 60913, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60909, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 61013, + "src": "8961:4:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 60908, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8961:4:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60912, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 61013, + "src": "8967:10:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + }, + "typeName": { + "id": 60911, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60910, + "name": "WorkloadId", + "nameLocations": [ + "8967:10:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 61861, + "src": "8967:10:71" + }, + "referencedDeclaration": 61861, + "src": "8967:10:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + }, + "visibility": "internal" + } + ], + "src": "8960:18:71" + }, + "scope": 61239, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "id": 61059, + "nodeType": "FunctionDefinition", + "src": "10512:815:71", + "nodes": [], + "body": { + "id": 61058, + "nodeType": "Block", + "src": "10686:641:71", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "expression": { + "expression": { + "id": 61030, + "name": "registration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61017, + "src": "10793:12:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", + "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" + } + }, + "id": 61031, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10806:16:71", + "memberName": "parsedReportBody", + "nodeType": "MemberAccess", + "referencedDeclaration": 62064, + "src": "10793:29:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TD10ReportBody_$163_memory_ptr", + "typeString": "struct TD10ReportBody memory" + } + }, + "id": 61032, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10823:4:71", + "memberName": "mrTd", + "nodeType": "MemberAccess", + "referencedDeclaration": 146, + "src": "10793:34:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "expression": { + "expression": { + "id": 61033, + "name": "registration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61017, + "src": "10849:12:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", + "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" + } + }, + "id": 61034, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10862:16:71", + "memberName": "parsedReportBody", + "nodeType": "MemberAccess", + "referencedDeclaration": 62064, + "src": "10849:29:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TD10ReportBody_$163_memory_ptr", + "typeString": "struct TD10ReportBody memory" + } + }, + "id": 61035, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10879:5:71", + "memberName": "rtMr0", + "nodeType": "MemberAccess", + "referencedDeclaration": 154, + "src": "10849:35:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "expression": { + "expression": { + "id": 61036, + "name": "registration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61017, + "src": "10906:12:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", + "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" + } + }, + "id": 61037, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10919:16:71", + "memberName": "parsedReportBody", + "nodeType": "MemberAccess", + "referencedDeclaration": 62064, + "src": "10906:29:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TD10ReportBody_$163_memory_ptr", + "typeString": "struct TD10ReportBody memory" + } + }, + "id": 61038, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10936:5:71", + "memberName": "rtMr1", + "nodeType": "MemberAccess", + "referencedDeclaration": 156, + "src": "10906:35:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "expression": { + "expression": { + "id": 61039, + "name": "registration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61017, + "src": "10963:12:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", + "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" + } + }, + "id": 61040, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10976:16:71", + "memberName": "parsedReportBody", + "nodeType": "MemberAccess", + "referencedDeclaration": 62064, + "src": "10963:29:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TD10ReportBody_$163_memory_ptr", + "typeString": "struct TD10ReportBody memory" + } + }, + "id": 61041, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10993:5:71", + "memberName": "rtMr2", + "nodeType": "MemberAccess", + "referencedDeclaration": 158, + "src": "10963:35:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "expression": { + "expression": { + "id": 61042, + "name": "registration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61017, + "src": "11020:12:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", + "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" + } + }, + "id": 61043, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11033:16:71", + "memberName": "parsedReportBody", + "nodeType": "MemberAccess", + "referencedDeclaration": 62064, + "src": "11020:29:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TD10ReportBody_$163_memory_ptr", + "typeString": "struct TD10ReportBody memory" + } + }, + "id": 61044, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11050:5:71", + "memberName": "rtMr3", + "nodeType": "MemberAccess", + "referencedDeclaration": 160, + "src": "11020:35:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "expression": { + "expression": { + "id": 61045, + "name": "registration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61017, + "src": "11118:12:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", + "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" + } + }, + "id": 61046, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11131:16:71", + "memberName": "parsedReportBody", + "nodeType": "MemberAccess", + "referencedDeclaration": 62064, + "src": "11118:29:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TD10ReportBody_$163_memory_ptr", + "typeString": "struct TD10ReportBody memory" + } + }, + "id": 61047, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11148:10:71", + "memberName": "mrConfigId", + "nodeType": "MemberAccess", + "referencedDeclaration": 148, + "src": "11118:40:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "expression": { + "expression": { + "id": 61048, + "name": "registration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61017, + "src": "11180:12:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", + "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" + } + }, + "id": 61049, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11193:16:71", + "memberName": "parsedReportBody", + "nodeType": "MemberAccess", + "referencedDeclaration": 62064, + "src": "11180:29:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TD10ReportBody_$163_memory_ptr", + "typeString": "struct TD10ReportBody memory" + } + }, + "id": 61050, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11210:4:71", + "memberName": "xFAM", + "nodeType": "MemberAccess", + "referencedDeclaration": 144, + "src": "11180:34:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes8", + "typeString": "bytes8" + } + }, + { + "expression": { + "expression": { + "id": 61051, + "name": "registration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61017, + "src": "11236:12:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", + "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" + } + }, + "id": 61052, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11249:16:71", + "memberName": "parsedReportBody", + "nodeType": "MemberAccess", + "referencedDeclaration": 62064, + "src": "11236:29:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TD10ReportBody_$163_memory_ptr", + "typeString": "struct TD10ReportBody memory" + } + }, + "id": 61053, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11266:12:71", + "memberName": "tdAttributes", + "nodeType": "MemberAccess", + "referencedDeclaration": 142, + "src": "11236:42:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes8", + "typeString": "bytes8" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes8", + "typeString": "bytes8" + }, + { + "typeIdentifier": "t_bytes8", + "typeString": "bytes8" + } + ], + "expression": { + "id": 61028, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "10759:5:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 61027, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "10759:5:71", + "typeDescriptions": {} + } + }, + "id": 61029, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10765:6:71", + "memberName": "concat", + "nodeType": "MemberAccess", + "src": "10759:12:71", + "typeDescriptions": { + "typeIdentifier": "t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 61054, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10759:537:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 61026, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "10732:9:71", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 61055, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10732:578:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 61024, + "name": "WorkloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61861, + "src": "10703:10:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "type(WorkloadId)" + } + }, + "id": 61025, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "10714:4:71", + "memberName": "wrap", + "nodeType": "MemberAccess", + "src": "10703:15:71", + "typeDescriptions": { + "typeIdentifier": "t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "function (bytes32) pure returns (WorkloadId)" + } + }, + "id": 61056, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10703:617:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + }, + "functionReturnParameters": 61023, + "id": 61057, + "nodeType": "Return", + "src": "10696:624:71" + } + ] + }, + "baseFunctions": [ + 61973 + ], + "documentation": { + "id": 61014, + "nodeType": "StructuredDocumentation", + "src": "10472:35:71", + "text": "@inheritdoc IBlockBuilderPolicy" + }, + "functionSelector": "4d37fc7a", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "workloadIdForTDRegistration", + "nameLocation": "10521:27:71", + "overrides": { + "id": 61019, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "10644:8:71" + }, + "parameters": { + "id": 61018, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61017, + "mutability": "mutable", + "name": "registration", + "nameLocation": "10594:12:71", + "nodeType": "VariableDeclaration", + "scope": 61059, + "src": "10549:57:71", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", + "typeString": "struct IFlashtestationRegistry.RegisteredTEE" + }, + "typeName": { + "id": 61016, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 61015, + "name": "IFlashtestationRegistry.RegisteredTEE", + "nameLocations": [ + "10549:23:71", + "10573:13:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 62069, + "src": "10549:37:71" + }, + "referencedDeclaration": 62069, + "src": "10549:37:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RegisteredTEE_$62069_storage_ptr", + "typeString": "struct IFlashtestationRegistry.RegisteredTEE" + } + }, + "visibility": "internal" + } + ], + "src": "10548:59:71" + }, + "returnParameters": { + "id": 61023, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61022, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 61059, + "src": "10670:10:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + }, + "typeName": { + "id": 61021, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 61020, + "name": "WorkloadId", + "nameLocations": [ + "10670:10:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 61861, + "src": "10670:10:71" + }, + "referencedDeclaration": 61861, + "src": "10670:10:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + }, + "visibility": "internal" + } + ], + "src": "10669:12:71" + }, + "scope": 61239, + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + }, + { + "id": 61131, + "nodeType": "FunctionDefinition", + "src": "11373:730:71", + "nodes": [], + "body": { + "id": 61130, + "nodeType": "Block", + "src": "11543:560:71", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 61081, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "arguments": [ + { + "id": 61077, + "name": "commitHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61065, + "src": "11567:10:71", + "typeDescriptions": { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + } + ], + "id": 61076, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "11561:5:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 61075, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "11561:5:71", + "typeDescriptions": {} + } + }, + "id": 61078, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11561:17:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + }, + "id": 61079, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11579:6:71", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "11561:24:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 61080, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11588:1:71", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "11561:28:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 61082, + "name": "EmptyCommitHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61921, + "src": "11591:15:71", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 61083, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11591:17:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 61074, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "11553:7:71", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 61084, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11553:56:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 61085, + "nodeType": "ExpressionStatement", + "src": "11553:56:71" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 61090, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 61087, + "name": "sourceLocators", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61068, + "src": "11627:14:71", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", + "typeString": "string calldata[] calldata" + } + }, + "id": 61088, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11642:6:71", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "11627:21:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 61089, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11651:1:71", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "11627:25:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 61091, + "name": "EmptySourceLocators", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61924, + "src": "11654:19:71", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 61092, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11654:21:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 61086, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "11619:7:71", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 61093, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11619:57:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 61094, + "nodeType": "ExpressionStatement", + "src": "11619:57:71" + }, + { + "assignments": [ + 61096 + ], + "declarations": [ + { + "constant": false, + "id": 61096, + "mutability": "mutable", + "name": "workloadKey", + "nameLocation": "11695:11:71", + "nodeType": "VariableDeclaration", + "scope": 61130, + "src": "11687:19:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 61095, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "11687:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 61101, + "initialValue": { + "arguments": [ + { + "id": 61099, + "name": "workloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61063, + "src": "11727:10:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + ], + "expression": { + "id": 61097, + "name": "WorkloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61861, + "src": "11709:10:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "type(WorkloadId)" + } + }, + "id": 61098, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "11720:6:71", + "memberName": "unwrap", + "nodeType": "MemberAccess", + "src": "11709:17:71", + "typeDescriptions": { + "typeIdentifier": "t_function_unwrap_pure$_t_userDefinedValueType$_WorkloadId_$61861_$returns$_t_bytes32_$", + "typeString": "function (WorkloadId) pure returns (bytes32)" + } + }, + "id": 61100, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11709:29:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11687:51:71" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 61112, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "arguments": [ + { + "expression": { + "baseExpression": { + "id": 61105, + "name": "approvedWorkloads", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60637, + "src": "11807:17:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", + "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata storage ref)" + } + }, + "id": 61107, + "indexExpression": { + "id": 61106, + "name": "workloadKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61096, + "src": "11825:11:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "11807:30:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage", + "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata storage ref" + } + }, + "id": 61108, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11838:10:71", + "memberName": "commitHash", + "nodeType": "MemberAccess", + "referencedDeclaration": 61865, + "src": "11807:41:71", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + ], + "id": 61104, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "11801:5:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 61103, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "11801:5:71", + "typeDescriptions": {} + } + }, + "id": 61109, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11801:48:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes storage pointer" + } + }, + "id": 61110, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11850:6:71", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "11801:55:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 61111, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11860:1:71", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "11801:60:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 61113, + "name": "WorkloadAlreadyInPolicy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61903, + "src": "11863:23:71", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 61114, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11863:25:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 61102, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "11793:7:71", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 61115, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11793:96:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 61116, + "nodeType": "ExpressionStatement", + "src": "11793:96:71" + }, + { + "expression": { + "id": 61124, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 61117, + "name": "approvedWorkloads", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60637, + "src": "11939:17:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", + "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata storage ref)" + } + }, + "id": 61119, + "indexExpression": { + "id": 61118, + "name": "workloadKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61096, + "src": "11957:11:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "11939:30:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage", + "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 61121, + "name": "commitHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61065, + "src": "12002:10:71", + "typeDescriptions": { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + } + }, + { + "id": 61122, + "name": "sourceLocators", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61068, + "src": "12030:14:71", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", + "typeString": "string calldata[] calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + }, + { + "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", + "typeString": "string calldata[] calldata" + } + ], + "id": 61120, + "name": "WorkloadMetadata", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61869, + "src": "11972:16:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_WorkloadMetadata_$61869_storage_ptr_$", + "typeString": "type(struct IBlockBuilderPolicy.WorkloadMetadata storage pointer)" + } + }, + "id": 61123, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [ + "11990:10:71", + "12014:14:71" + ], + "names": [ + "commitHash", + "sourceLocators" + ], + "nodeType": "FunctionCall", + "src": "11972:74:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_memory_ptr", + "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata memory" + } + }, + "src": "11939:107:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage", + "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata storage ref" + } + }, + "id": 61125, + "nodeType": "ExpressionStatement", + "src": "11939:107:71" + }, + { + "eventCall": { + "arguments": [ + { + "id": 61127, + "name": "workloadKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61096, + "src": "12084:11:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 61126, + "name": "WorkloadAddedToPolicy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61874, + "src": "12062:21:71", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$", + "typeString": "function (bytes32)" + } + }, + "id": 61128, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12062:34:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 61129, + "nodeType": "EmitStatement", + "src": "12057:39:71" + } + ] + }, + "baseFunctions": [ + 61985 + ], + "documentation": { + "id": 61060, + "nodeType": "StructuredDocumentation", + "src": "11333:35:71", + "text": "@inheritdoc IBlockBuilderPolicy" + }, + "functionSelector": "4f3a415a", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 61072, + "kind": "modifierInvocation", + "modifierName": { + "id": 61071, + "name": "onlyOwner", + "nameLocations": [ + "11529:9:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48019, + "src": "11529:9:71" + }, + "nodeType": "ModifierInvocation", + "src": "11529:9:71" + } + ], + "name": "addWorkloadToPolicy", + "nameLocation": "11382:19:71", + "overrides": { + "id": 61070, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "11512:8:71" + }, + "parameters": { + "id": 61069, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61063, + "mutability": "mutable", + "name": "workloadId", + "nameLocation": "11413:10:71", + "nodeType": "VariableDeclaration", + "scope": 61131, + "src": "11402:21:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + }, + "typeName": { + "id": 61062, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 61061, + "name": "WorkloadId", + "nameLocations": [ + "11402:10:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 61861, + "src": "11402:10:71" + }, + "referencedDeclaration": 61861, + "src": "11402:10:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 61065, + "mutability": "mutable", + "name": "commitHash", + "nameLocation": "11441:10:71", + "nodeType": "VariableDeclaration", + "scope": 61131, + "src": "11425:26:71", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string" + }, + "typeName": { + "id": 61064, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "11425:6:71", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 61068, + "mutability": "mutable", + "name": "sourceLocators", + "nameLocation": "11471:14:71", + "nodeType": "VariableDeclaration", + "scope": 61131, + "src": "11453:32:71", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", + "typeString": "string[]" + }, + "typeName": { + "baseType": { + "id": 61066, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "11453:6:71", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "id": 61067, + "nodeType": "ArrayTypeName", + "src": "11453:8:71", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr", + "typeString": "string[]" + } + }, + "visibility": "internal" + } + ], + "src": "11401:85:71" + }, + "returnParameters": { + "id": 61073, + "nodeType": "ParameterList", + "parameters": [], + "src": "11543:0:71" + }, + "scope": 61239, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 61173, + "nodeType": "FunctionDefinition", + "src": "12149:433:71", + "nodes": [], + "body": { + "id": 61172, + "nodeType": "Block", + "src": "12234:348:71", + "nodes": [], + "statements": [ + { + "assignments": [ + 61142 + ], + "declarations": [ + { + "constant": false, + "id": 61142, + "mutability": "mutable", + "name": "workloadKey", + "nameLocation": "12252:11:71", + "nodeType": "VariableDeclaration", + "scope": 61172, + "src": "12244:19:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 61141, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "12244:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 61147, + "initialValue": { + "arguments": [ + { + "id": 61145, + "name": "workloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61135, + "src": "12284:10:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + ], + "expression": { + "id": 61143, + "name": "WorkloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61861, + "src": "12266:10:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "type(WorkloadId)" + } + }, + "id": 61144, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "12277:6:71", + "memberName": "unwrap", + "nodeType": "MemberAccess", + "src": "12266:17:71", + "typeDescriptions": { + "typeIdentifier": "t_function_unwrap_pure$_t_userDefinedValueType$_WorkloadId_$61861_$returns$_t_bytes32_$", + "typeString": "function (WorkloadId) pure returns (bytes32)" + } + }, + "id": 61146, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12266:29:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12244:51:71" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 61158, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "arguments": [ + { + "expression": { + "baseExpression": { + "id": 61151, + "name": "approvedWorkloads", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60637, + "src": "12356:17:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", + "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata storage ref)" + } + }, + "id": 61153, + "indexExpression": { + "id": 61152, + "name": "workloadKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61142, + "src": "12374:11:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12356:30:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage", + "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata storage ref" + } + }, + "id": 61154, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12387:10:71", + "memberName": "commitHash", + "nodeType": "MemberAccess", + "referencedDeclaration": 61865, + "src": "12356:41:71", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + ], + "id": 61150, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "12350:5:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 61149, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "12350:5:71", + "typeDescriptions": {} + } + }, + "id": 61155, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12350:48:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes storage pointer" + } + }, + "id": 61156, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12399:6:71", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "12350:55:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 61157, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12408:1:71", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "12350:59:71", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 61159, + "name": "WorkloadNotInPolicy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61906, + "src": "12411:19:71", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", + "typeString": "function () pure returns (error)" + } + }, + "id": 61160, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12411:21:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_error", + "typeString": "error" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_error", + "typeString": "error" + } + ], + "id": 61148, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "12342:7:71", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", + "typeString": "function (bool,error) pure" + } + }, + "id": 61161, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12342:91:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 61162, + "nodeType": "ExpressionStatement", + "src": "12342:91:71" + }, + { + "expression": { + "id": 61166, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "12484:37:71", + "subExpression": { + "baseExpression": { + "id": 61163, + "name": "approvedWorkloads", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60637, + "src": "12491:17:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", + "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata storage ref)" + } + }, + "id": 61165, + "indexExpression": { + "id": 61164, + "name": "workloadKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61142, + "src": "12509:11:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "12491:30:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage", + "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata storage ref" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 61167, + "nodeType": "ExpressionStatement", + "src": "12484:37:71" + }, + { + "eventCall": { + "arguments": [ + { + "id": 61169, + "name": "workloadKey", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61142, + "src": "12563:11:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 61168, + "name": "WorkloadRemovedFromPolicy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61879, + "src": "12537:25:71", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$", + "typeString": "function (bytes32)" + } + }, + "id": 61170, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12537:38:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 61171, + "nodeType": "EmitStatement", + "src": "12532:43:71" + } + ] + }, + "baseFunctions": [ + 61992 + ], + "documentation": { + "id": 61132, + "nodeType": "StructuredDocumentation", + "src": "12109:35:71", + "text": "@inheritdoc IBlockBuilderPolicy" + }, + "functionSelector": "5c40e542", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 61139, + "kind": "modifierInvocation", + "modifierName": { + "id": 61138, + "name": "onlyOwner", + "nameLocations": [ + "12224:9:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48019, + "src": "12224:9:71" + }, + "nodeType": "ModifierInvocation", + "src": "12224:9:71" + } + ], + "name": "removeWorkloadFromPolicy", + "nameLocation": "12158:24:71", + "overrides": { + "id": 61137, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "12215:8:71" + }, + "parameters": { + "id": 61136, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61135, + "mutability": "mutable", + "name": "workloadId", + "nameLocation": "12194:10:71", + "nodeType": "VariableDeclaration", + "scope": 61173, + "src": "12183:21:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + }, + "typeName": { + "id": 61134, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 61133, + "name": "WorkloadId", + "nameLocations": [ + "12183:10:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 61861, + "src": "12183:10:71" + }, + "referencedDeclaration": 61861, + "src": "12183:10:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + }, + "visibility": "internal" + } + ], + "src": "12182:23:71" + }, + "returnParameters": { + "id": 61140, + "nodeType": "ParameterList", + "parameters": [], + "src": "12234:0:71" + }, + "scope": 61239, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 61192, + "nodeType": "FunctionDefinition", + "src": "12628:181:71", + "nodes": [], + "body": { + "id": 61191, + "nodeType": "Block", + "src": "12737:72:71", + "nodes": [], + "statements": [ + { + "expression": { + "baseExpression": { + "id": 61184, + "name": "approvedWorkloads", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60637, + "src": "12754:17:71", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", + "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata storage ref)" + } + }, + "id": 61189, + "indexExpression": { + "arguments": [ + { + "id": 61187, + "name": "workloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61177, + "src": "12790:10:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + ], + "expression": { + "id": 61185, + "name": "WorkloadId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61861, + "src": "12772:10:71", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", + "typeString": "type(WorkloadId)" + } + }, + "id": 61186, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "12783:6:71", + "memberName": "unwrap", + "nodeType": "MemberAccess", + "src": "12772:17:71", + "typeDescriptions": { + "typeIdentifier": "t_function_unwrap_pure$_t_userDefinedValueType$_WorkloadId_$61861_$returns$_t_bytes32_$", + "typeString": "function (WorkloadId) pure returns (bytes32)" + } + }, + "id": 61188, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12772:29:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12754:48:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage", + "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata storage ref" + } + }, + "functionReturnParameters": 61183, + "id": 61190, + "nodeType": "Return", + "src": "12747:55:71" + } + ] + }, + "baseFunctions": [ + 62002 + ], + "documentation": { + "id": 61174, + "nodeType": "StructuredDocumentation", + "src": "12588:35:71", + "text": "@inheritdoc IBlockBuilderPolicy" + }, + "functionSelector": "abd45d21", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getWorkloadMetadata", + "nameLocation": "12637:19:71", + "overrides": { + "id": 61179, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "12694:8:71" + }, + "parameters": { + "id": 61178, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61177, + "mutability": "mutable", + "name": "workloadId", + "nameLocation": "12668:10:71", + "nodeType": "VariableDeclaration", + "scope": 61192, + "src": "12657:21:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + }, + "typeName": { + "id": 61176, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 61175, + "name": "WorkloadId", + "nameLocations": [ + "12657:10:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 61861, + "src": "12657:10:71" + }, + "referencedDeclaration": 61861, + "src": "12657:10:71", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", + "typeString": "WorkloadId" + } + }, + "visibility": "internal" + } + ], + "src": "12656:23:71" + }, + "returnParameters": { + "id": 61183, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61182, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 61192, + "src": "12712:23:71", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_memory_ptr", + "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata" + }, + "typeName": { + "id": 61181, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 61180, + "name": "WorkloadMetadata", + "nameLocations": [ + "12712:16:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 61869, + "src": "12712:16:71" + }, + "referencedDeclaration": 61869, + "src": "12712:16:71", + "typeDescriptions": { + "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage_ptr", + "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata" + } + }, + "visibility": "internal" + } + ], + "src": "12711:25:71" + }, + "scope": 61239, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 61205, + "nodeType": "FunctionDefinition", + "src": "12855:131:71", + "nodes": [], + "body": { + "id": 61204, + "nodeType": "Block", + "src": "12934:52:71", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 61201, + "name": "structHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61195, + "src": "12968:10:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 61200, + "name": "_hashTypedDataV4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48851, + "src": "12951:16:71", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", + "typeString": "function (bytes32) view returns (bytes32)" + } + }, + "id": 61202, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12951:28:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 61199, + "id": 61203, + "nodeType": "Return", + "src": "12944:35:71" + } + ] + }, + "baseFunctions": [ + 62010 + ], + "documentation": { + "id": 61193, + "nodeType": "StructuredDocumentation", + "src": "12815:35:71", + "text": "@inheritdoc IBlockBuilderPolicy" + }, + "functionSelector": "6931164e", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getHashedTypeDataV4", + "nameLocation": "12864:19:71", + "parameters": { + "id": 61196, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61195, + "mutability": "mutable", + "name": "structHash", + "nameLocation": "12892:10:71", + "nodeType": "VariableDeclaration", + "scope": 61205, + "src": "12884:18:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 61194, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "12884:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "12883:20:71" + }, + "returnParameters": { + "id": 61199, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61198, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 61205, + "src": "12925:7:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 61197, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "12925:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "12924:9:71" + }, + "scope": 61239, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 61228, + "nodeType": "FunctionDefinition", + "src": "13032:229:71", + "nodes": [], + "body": { + "id": 61227, + "nodeType": "Block", + "src": "13145:116:71", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 61220, + "name": "VERIFY_BLOCK_BUILDER_PROOF_TYPEHASH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60631, + "src": "13183:35:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 61221, + "name": "version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61208, + "src": "13220:7:71", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "id": 61222, + "name": "blockContentHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61210, + "src": "13229:16:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 61223, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61212, + "src": "13247:5:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 61218, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "13172:3:71", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 61219, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "13176:6:71", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "13172:10:71", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 61224, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13172:81:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 61217, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "13162:9:71", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 61225, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13162:92:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 61216, + "id": 61226, + "nodeType": "Return", + "src": "13155:99:71" + } + ] + }, + "baseFunctions": [ + 62022 + ], + "documentation": { + "id": 61206, + "nodeType": "StructuredDocumentation", + "src": "12992:35:71", + "text": "@inheritdoc IBlockBuilderPolicy" + }, + "functionSelector": "7dec71a9", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "computeStructHash", + "nameLocation": "13041:17:71", + "parameters": { + "id": 61213, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61208, + "mutability": "mutable", + "name": "version", + "nameLocation": "13065:7:71", + "nodeType": "VariableDeclaration", + "scope": 61228, + "src": "13059:13:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 61207, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "13059:5:71", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 61210, + "mutability": "mutable", + "name": "blockContentHash", + "nameLocation": "13082:16:71", + "nodeType": "VariableDeclaration", + "scope": 61228, + "src": "13074:24:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 61209, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "13074:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 61212, + "mutability": "mutable", + "name": "nonce", + "nameLocation": "13108:5:71", + "nodeType": "VariableDeclaration", + "scope": 61228, + "src": "13100:13:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 61211, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13100:7:71", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13058:56:71" + }, + "returnParameters": { + "id": 61216, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61215, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 61228, + "src": "13136:7:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 61214, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "13136:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "13135:9:71" + }, + "scope": 61239, + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + }, + { + "id": 61238, + "nodeType": "FunctionDefinition", + "src": "13307:103:71", + "nodes": [], + "body": { + "id": 61237, + "nodeType": "Block", + "src": "13366:44:71", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 61234, + "name": "_domainSeparatorV4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48812, + "src": "13383:18:71", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", + "typeString": "function () view returns (bytes32)" + } + }, + "id": 61235, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13383:20:71", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 61233, + "id": 61236, + "nodeType": "Return", + "src": "13376:27:71" + } + ] + }, + "baseFunctions": [ + 62028 + ], + "documentation": { + "id": 61229, + "nodeType": "StructuredDocumentation", + "src": "13267:35:71", + "text": "@inheritdoc IBlockBuilderPolicy" + }, + "functionSelector": "f698da25", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "domainSeparator", + "nameLocation": "13316:15:71", + "parameters": { + "id": 61230, + "nodeType": "ParameterList", + "parameters": [], + "src": "13331:2:71" + }, + "returnParameters": { + "id": 61233, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61232, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 61238, + "src": "13357:7:71", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 61231, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "13357:7:71", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "13356:9:71" + }, + "scope": 61239, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 60613, + "name": "Initializable", + "nameLocations": [ + "2056:13:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48392, + "src": "2056:13:71" + }, + "id": 60614, + "nodeType": "InheritanceSpecifier", + "src": "2056:13:71" + }, + { + "baseName": { + "id": 60615, + "name": "UUPSUpgradeable", + "nameLocations": [ + "2075:15:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48574, + "src": "2075:15:71" + }, + "id": 60616, + "nodeType": "InheritanceSpecifier", + "src": "2075:15:71" + }, + { + "baseName": { + "id": 60617, + "name": "OwnableUpgradeable", + "nameLocations": [ + "2096:18:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48124, + "src": "2096:18:71" + }, + "id": 60618, + "nodeType": "InheritanceSpecifier", + "src": "2096:18:71" + }, + { + "baseName": { + "id": 60619, + "name": "EIP712Upgradeable", + "nameLocations": [ + "2120:17:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 49049, + "src": "2120:17:71" + }, + "id": 60620, + "nodeType": "InheritanceSpecifier", + "src": "2120:17:71" + }, + { + "baseName": { + "id": 60621, + "name": "IBlockBuilderPolicy", + "nameLocations": [ + "2143:19:71" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 62049, + "src": "2143:19:71" + }, + "id": 60622, + "nodeType": "InheritanceSpecifier", + "src": "2143:19:71" + } + ], + "canonicalName": "BlockBuilderPolicy", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 60612, + "nodeType": "StructuredDocumentation", + "src": "1154:866:71", + "text": " @title BlockBuilderPolicy\n @notice A reference implementation of a policy contract for the FlashtestationRegistry\n @notice A Policy is a collection of related WorkloadIds. A Policy exists to specify which\n WorkloadIds are valid for a particular purpose, in this case for remote block building. It also\n exists to handle the problem that TEE workloads will need to change multiple times a year, either because\n of Intel DCAP Endorsement updates or updates to the TEE configuration (and thus its WorkloadId). Without\n Policies, consumer contracts that makes use of Flashtestations would need to be updated every time a TEE workload\n changes, which is a costly and error-prone process. Instead, consumer contracts need only check if a TEE address\n is allowed under any workload in a Policy, and the FlashtestationRegistry will handle the rest" + }, + "fullyImplemented": true, + "linearizedBaseContracts": [ + 61239, + 62049, + 49049, + 49243, + 48124, + 48620, + 48574, + 49253, + 48392 + ], + "name": "BlockBuilderPolicy", + "nameLocation": "2030:18:71", + "scope": 61240, + "usedErrors": [ + 47960, + 47965, + 48141, + 48144, + 48419, + 48424, + 49311, + 49324, + 49971, + 50264, + 52061, + 52066, + 52071, + 61900, + 61903, + 61906, + 61911, + 61918, + 61921, + 61924 + ], + "usedEvents": [ + 47971, + 48149, + 49205, + 49223, + 61874, + 61879, + 61884, + 61897 + ] + } + ], + "license": "MIT" + }, + "id": 71 +} \ No newline at end of file diff --git a/crates/op-rbuilder/src/tests/framework/mod.rs b/crates/op-rbuilder/src/tests/framework/mod.rs index 554c01cb..b259215b 100644 --- a/crates/op-rbuilder/src/tests/framework/mod.rs +++ b/crates/op-rbuilder/src/tests/framework/mod.rs @@ -43,7 +43,7 @@ pub const TEE_DEBUG_ADDRESS: alloy_primitives::Address = alloy_primitives::address!("6Af149F267e1e62dFc431F2de6deeEC7224746f4"); pub const WORKLOAD_ID: B256 = - b256!("f724e7d117f5655cf33beefdfc7d31e930278fcb65cf6d1de632595e97ca82b2"); + b256!("952569f637f3f7e36cd8f5a7578ae4d03a1cb05ddaf33b35d3054464bb1c862e"); pub const SOURCE_LOCATORS: &[&str] = &[ "https://github.com/flashbots/flashbots-images/commit/53d431f58a0d1a76f6711518ef8d876ce8181fc2",