{"abi":[],"bytecode":{"object":"0x602c6032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c634300081a000a","sourceMap":"599:8922:58:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;599:8922:58;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c634300081a000a","sourceMap":"599:8922:58:-:0;;;;;;;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"LibPosition\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This library contains helper functions for working with the `Position` type.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/dispute/lib/LibPosition.sol\":\"LibPosition\"},\"evmVersion\":\"cancun\",\"libraries\":{\"src/tokamak-contracts/USDC/L2/tokamak-USDC/v2/FiatTokenV2_2.sol:SignatureChecker\":\"0x4200000000000000000000000000000000000776\"},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@openzeppelin/contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/\",\":@openzeppelin/contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":automate/=lib/automate/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts_v5.0.1/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":gelato/=lib/automate/contracts/\",\":hardhat/=lib/automate/node_modules/hardhat/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/\",\":openzeppelin-contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/\",\":prb-test/=lib/automate/lib/prb-test/src/\",\":prb/-est/=lib/automate/lib/prb-test/src/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"src/dispute/lib/LibPosition.sol\":{\"keccak256\":\"0x7c5f19f8f54f06de2ce1c6cdcc5c7af65ac405130a4066cdaf146ca315818241\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://06905e5ede94784e32748ad60557cb0b0829089d65430518e7042b80d2f64e2d\",\"dweb:/ipfs/QmeGKMmnFnow2VrRvTSPavCrToqQ3qDpEaR1tVoK6Hzg8K\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@openzeppelin/contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/","@openzeppelin/contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","automate/=lib/automate/contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts_v5.0.1/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","gelato/=lib/automate/contracts/","hardhat/=lib/automate/node_modules/hardhat/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/","openzeppelin-contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/","prb-test/=lib/automate/lib/prb-test/src/","prb/-est/=lib/automate/lib/prb-test/src/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/dispute/lib/LibPosition.sol":"LibPosition"},"evmVersion":"cancun","libraries":{"src/tokamak-contracts/USDC/L2/tokamak-USDC/v2/FiatTokenV2_2.sol:SignatureChecker":"0x4200000000000000000000000000000000000776"}},"sources":{"src/dispute/lib/LibPosition.sol":{"keccak256":"0x7c5f19f8f54f06de2ce1c6cdcc5c7af65ac405130a4066cdaf146ca315818241","urls":["bzz-raw://06905e5ede94784e32748ad60557cb0b0829089d65430518e7042b80d2f64e2d","dweb:/ipfs/QmeGKMmnFnow2VrRvTSPavCrToqQ3qDpEaR1tVoK6Hzg8K"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"userdoc":{"version":1,"kind":"user","notice":"This library contains helper functions for working with the `Position` type."},"devdoc":{"version":1,"kind":"dev","title":"LibPosition"},"ast":{"absolutePath":"src/dispute/lib/LibPosition.sol","id":54627,"exportedSymbols":{"LibPosition":[54626],"Position":[54413]},"nodeType":"SourceUnit","src":"32:9490:58","nodes":[{"id":54407,"nodeType":"PragmaDirective","src":"32:24:58","nodes":[],"literals":["solidity","^","0.8",".15"]},{"id":54411,"nodeType":"UsingForDirective","src":"58:38:58","nodes":[],"global":true,"libraryName":{"id":54408,"name":"LibPosition","nameLocations":["64:11:58"],"nodeType":"IdentifierPath","referencedDeclaration":54626,"src":"64:11:58"},"typeName":{"id":54410,"nodeType":"UserDefinedTypeName","pathNode":{"id":54409,"name":"Position","nameLocations":["80:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"80:8:58"},"referencedDeclaration":54413,"src":"80:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}}},{"id":54413,"nodeType":"UserDefinedValueTypeDefinition","src":"460:25:58","nodes":[],"canonicalName":"Position","name":"Position","nameLocation":"465:8:58","underlyingType":{"id":54412,"name":"uint128","nodeType":"ElementaryTypeName","src":"477:7:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}},{"id":54626,"nodeType":"ContractDefinition","src":"599:8922:58","nodes":[{"id":54418,"nodeType":"VariableDeclaration","src":"811:49:58","nodes":[],"constant":true,"documentation":{"id":54415,"nodeType":"StructuredDocumentation","src":"625:181:58","text":"@notice the `MAX_POSITION_BITLEN` is the number of bits that the `Position` type, and the implementation of\n         its behavior within this library, can safely support."},"mutability":"constant","name":"MAX_POSITION_BITLEN","nameLocation":"835:19:58","scope":54626,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":54416,"name":"uint8","nodeType":"ElementaryTypeName","src":"811:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"313236","id":54417,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"857:3:58","typeDescriptions":{"typeIdentifier":"t_rational_126_by_1","typeString":"int_const 126"},"value":"126"},"visibility":"internal"},{"id":54431,"nodeType":"FunctionDefinition","src":"1116:241:58","nodes":[],"body":{"id":54430,"nodeType":"Block","src":"1210:147:58","nodes":[],"statements":[{"AST":{"nativeSrc":"1229:122:58","nodeType":"YulBlock","src":"1229:122:58","statements":[{"nativeSrc":"1294:47:58","nodeType":"YulAssignment","src":"1294:47:58","value":{"arguments":[{"arguments":[{"name":"_depth","nativeSrc":"1315:6:58","nodeType":"YulIdentifier","src":"1315:6:58"},{"kind":"number","nativeSrc":"1323:1:58","nodeType":"YulLiteral","src":"1323:1:58","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"1311:3:58","nodeType":"YulIdentifier","src":"1311:3:58"},"nativeSrc":"1311:14:58","nodeType":"YulFunctionCall","src":"1311:14:58"},{"name":"_indexAtDepth","nativeSrc":"1327:13:58","nodeType":"YulIdentifier","src":"1327:13:58"}],"functionName":{"name":"add","nativeSrc":"1307:3:58","nodeType":"YulIdentifier","src":"1307:3:58"},"nativeSrc":"1307:34:58","nodeType":"YulFunctionCall","src":"1307:34:58"},"variableNames":[{"name":"position_","nativeSrc":"1294:9:58","nodeType":"YulIdentifier","src":"1294:9:58"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":54421,"isOffset":false,"isSlot":false,"src":"1315:6:58","valueSize":1},{"declaration":54423,"isOffset":false,"isSlot":false,"src":"1327:13:58","valueSize":1},{"declaration":54427,"isOffset":false,"isSlot":false,"src":"1294:9:58","valueSize":1}],"id":54429,"nodeType":"InlineAssembly","src":"1220:131:58"}]},"documentation":{"id":54419,"nodeType":"StructuredDocumentation","src":"867:244:58","text":"@notice Computes a generalized index (2^{depth} + indexAtDepth).\n @param _depth The depth of the position.\n @param _indexAtDepth The index at the depth of the position.\n @return position_ The computed generalized index."},"implemented":true,"kind":"function","modifiers":[],"name":"wrap","nameLocation":"1125:4:58","parameters":{"id":54424,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54421,"mutability":"mutable","name":"_depth","nameLocation":"1136:6:58","nodeType":"VariableDeclaration","scope":54431,"src":"1130:12:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":54420,"name":"uint8","nodeType":"ElementaryTypeName","src":"1130:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":54423,"mutability":"mutable","name":"_indexAtDepth","nameLocation":"1152:13:58","nodeType":"VariableDeclaration","scope":54431,"src":"1144:21:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54422,"name":"uint128","nodeType":"ElementaryTypeName","src":"1144:7:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1129:37:58"},"returnParameters":{"id":54428,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54427,"mutability":"mutable","name":"position_","nameLocation":"1199:9:58","nodeType":"VariableDeclaration","scope":54431,"src":"1190:18:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54426,"nodeType":"UserDefinedTypeName","pathNode":{"id":54425,"name":"Position","nameLocations":["1190:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"1190:8:58"},"referencedDeclaration":54413,"src":"1190:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"}],"src":"1189:20:58"},"scope":54626,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":54442,"nodeType":"FunctionDefinition","src":"1628:1076:58","nodes":[],"body":{"id":54441,"nodeType":"Block","src":"1700:1004:58","nodes":[],"statements":[{"AST":{"nativeSrc":"1811:887:58","nodeType":"YulBlock","src":"1811:887:58","statements":[{"nativeSrc":"1825:76:58","nodeType":"YulAssignment","src":"1825:76:58","value":{"arguments":[{"name":"depth_","nativeSrc":"1838:6:58","nodeType":"YulIdentifier","src":"1838:6:58"},{"arguments":[{"kind":"number","nativeSrc":"1850:1:58","nodeType":"YulLiteral","src":"1850:1:58","type":"","value":"6"},{"arguments":[{"kind":"number","nativeSrc":"1856:18:58","nodeType":"YulLiteral","src":"1856:18:58","type":"","value":"0xffffffffffffffff"},{"arguments":[{"name":"depth_","nativeSrc":"1880:6:58","nodeType":"YulIdentifier","src":"1880:6:58"},{"name":"_position","nativeSrc":"1888:9:58","nodeType":"YulIdentifier","src":"1888:9:58"}],"functionName":{"name":"shr","nativeSrc":"1876:3:58","nodeType":"YulIdentifier","src":"1876:3:58"},"nativeSrc":"1876:22:58","nodeType":"YulFunctionCall","src":"1876:22:58"}],"functionName":{"name":"lt","nativeSrc":"1853:2:58","nodeType":"YulIdentifier","src":"1853:2:58"},"nativeSrc":"1853:46:58","nodeType":"YulFunctionCall","src":"1853:46:58"}],"functionName":{"name":"shl","nativeSrc":"1846:3:58","nodeType":"YulIdentifier","src":"1846:3:58"},"nativeSrc":"1846:54:58","nodeType":"YulFunctionCall","src":"1846:54:58"}],"functionName":{"name":"or","nativeSrc":"1835:2:58","nodeType":"YulIdentifier","src":"1835:2:58"},"nativeSrc":"1835:66:58","nodeType":"YulFunctionCall","src":"1835:66:58"},"variableNames":[{"name":"depth_","nativeSrc":"1825:6:58","nodeType":"YulIdentifier","src":"1825:6:58"}]},{"nativeSrc":"1914:68:58","nodeType":"YulAssignment","src":"1914:68:58","value":{"arguments":[{"name":"depth_","nativeSrc":"1927:6:58","nodeType":"YulIdentifier","src":"1927:6:58"},{"arguments":[{"kind":"number","nativeSrc":"1939:1:58","nodeType":"YulLiteral","src":"1939:1:58","type":"","value":"5"},{"arguments":[{"kind":"number","nativeSrc":"1945:10:58","nodeType":"YulLiteral","src":"1945:10:58","type":"","value":"0xffffffff"},{"arguments":[{"name":"depth_","nativeSrc":"1961:6:58","nodeType":"YulIdentifier","src":"1961:6:58"},{"name":"_position","nativeSrc":"1969:9:58","nodeType":"YulIdentifier","src":"1969:9:58"}],"functionName":{"name":"shr","nativeSrc":"1957:3:58","nodeType":"YulIdentifier","src":"1957:3:58"},"nativeSrc":"1957:22:58","nodeType":"YulFunctionCall","src":"1957:22:58"}],"functionName":{"name":"lt","nativeSrc":"1942:2:58","nodeType":"YulIdentifier","src":"1942:2:58"},"nativeSrc":"1942:38:58","nodeType":"YulFunctionCall","src":"1942:38:58"}],"functionName":{"name":"shl","nativeSrc":"1935:3:58","nodeType":"YulIdentifier","src":"1935:3:58"},"nativeSrc":"1935:46:58","nodeType":"YulFunctionCall","src":"1935:46:58"}],"functionName":{"name":"or","nativeSrc":"1924:2:58","nodeType":"YulIdentifier","src":"1924:2:58"},"nativeSrc":"1924:58:58","nodeType":"YulFunctionCall","src":"1924:58:58"},"variableNames":[{"name":"depth_","nativeSrc":"1914:6:58","nodeType":"YulIdentifier","src":"1914:6:58"}]},{"nativeSrc":"2062:35:58","nodeType":"YulAssignment","src":"2062:35:58","value":{"arguments":[{"name":"depth_","nativeSrc":"2079:6:58","nodeType":"YulIdentifier","src":"2079:6:58"},{"name":"_position","nativeSrc":"2087:9:58","nodeType":"YulIdentifier","src":"2087:9:58"}],"functionName":{"name":"shr","nativeSrc":"2075:3:58","nodeType":"YulIdentifier","src":"2075:3:58"},"nativeSrc":"2075:22:58","nodeType":"YulFunctionCall","src":"2075:22:58"},"variableNames":[{"name":"_position","nativeSrc":"2062:9:58","nodeType":"YulIdentifier","src":"2062:9:58"}]},{"nativeSrc":"2110:45:58","nodeType":"YulAssignment","src":"2110:45:58","value":{"arguments":[{"name":"_position","nativeSrc":"2126:9:58","nodeType":"YulIdentifier","src":"2126:9:58"},{"arguments":[{"kind":"number","nativeSrc":"2141:1:58","nodeType":"YulLiteral","src":"2141:1:58","type":"","value":"1"},{"name":"_position","nativeSrc":"2144:9:58","nodeType":"YulIdentifier","src":"2144:9:58"}],"functionName":{"name":"shr","nativeSrc":"2137:3:58","nodeType":"YulIdentifier","src":"2137:3:58"},"nativeSrc":"2137:17:58","nodeType":"YulFunctionCall","src":"2137:17:58"}],"functionName":{"name":"or","nativeSrc":"2123:2:58","nodeType":"YulIdentifier","src":"2123:2:58"},"nativeSrc":"2123:32:58","nodeType":"YulFunctionCall","src":"2123:32:58"},"variableNames":[{"name":"_position","nativeSrc":"2110:9:58","nodeType":"YulIdentifier","src":"2110:9:58"}]},{"nativeSrc":"2168:45:58","nodeType":"YulAssignment","src":"2168:45:58","value":{"arguments":[{"name":"_position","nativeSrc":"2184:9:58","nodeType":"YulIdentifier","src":"2184:9:58"},{"arguments":[{"kind":"number","nativeSrc":"2199:1:58","nodeType":"YulLiteral","src":"2199:1:58","type":"","value":"2"},{"name":"_position","nativeSrc":"2202:9:58","nodeType":"YulIdentifier","src":"2202:9:58"}],"functionName":{"name":"shr","nativeSrc":"2195:3:58","nodeType":"YulIdentifier","src":"2195:3:58"},"nativeSrc":"2195:17:58","nodeType":"YulFunctionCall","src":"2195:17:58"}],"functionName":{"name":"or","nativeSrc":"2181:2:58","nodeType":"YulIdentifier","src":"2181:2:58"},"nativeSrc":"2181:32:58","nodeType":"YulFunctionCall","src":"2181:32:58"},"variableNames":[{"name":"_position","nativeSrc":"2168:9:58","nodeType":"YulIdentifier","src":"2168:9:58"}]},{"nativeSrc":"2226:45:58","nodeType":"YulAssignment","src":"2226:45:58","value":{"arguments":[{"name":"_position","nativeSrc":"2242:9:58","nodeType":"YulIdentifier","src":"2242:9:58"},{"arguments":[{"kind":"number","nativeSrc":"2257:1:58","nodeType":"YulLiteral","src":"2257:1:58","type":"","value":"4"},{"name":"_position","nativeSrc":"2260:9:58","nodeType":"YulIdentifier","src":"2260:9:58"}],"functionName":{"name":"shr","nativeSrc":"2253:3:58","nodeType":"YulIdentifier","src":"2253:3:58"},"nativeSrc":"2253:17:58","nodeType":"YulFunctionCall","src":"2253:17:58"}],"functionName":{"name":"or","nativeSrc":"2239:2:58","nodeType":"YulIdentifier","src":"2239:2:58"},"nativeSrc":"2239:32:58","nodeType":"YulFunctionCall","src":"2239:32:58"},"variableNames":[{"name":"_position","nativeSrc":"2226:9:58","nodeType":"YulIdentifier","src":"2226:9:58"}]},{"nativeSrc":"2284:45:58","nodeType":"YulAssignment","src":"2284:45:58","value":{"arguments":[{"name":"_position","nativeSrc":"2300:9:58","nodeType":"YulIdentifier","src":"2300:9:58"},{"arguments":[{"kind":"number","nativeSrc":"2315:1:58","nodeType":"YulLiteral","src":"2315:1:58","type":"","value":"8"},{"name":"_position","nativeSrc":"2318:9:58","nodeType":"YulIdentifier","src":"2318:9:58"}],"functionName":{"name":"shr","nativeSrc":"2311:3:58","nodeType":"YulIdentifier","src":"2311:3:58"},"nativeSrc":"2311:17:58","nodeType":"YulFunctionCall","src":"2311:17:58"}],"functionName":{"name":"or","nativeSrc":"2297:2:58","nodeType":"YulIdentifier","src":"2297:2:58"},"nativeSrc":"2297:32:58","nodeType":"YulFunctionCall","src":"2297:32:58"},"variableNames":[{"name":"_position","nativeSrc":"2284:9:58","nodeType":"YulIdentifier","src":"2284:9:58"}]},{"nativeSrc":"2342:46:58","nodeType":"YulAssignment","src":"2342:46:58","value":{"arguments":[{"name":"_position","nativeSrc":"2358:9:58","nodeType":"YulIdentifier","src":"2358:9:58"},{"arguments":[{"kind":"number","nativeSrc":"2373:2:58","nodeType":"YulLiteral","src":"2373:2:58","type":"","value":"16"},{"name":"_position","nativeSrc":"2377:9:58","nodeType":"YulIdentifier","src":"2377:9:58"}],"functionName":{"name":"shr","nativeSrc":"2369:3:58","nodeType":"YulIdentifier","src":"2369:3:58"},"nativeSrc":"2369:18:58","nodeType":"YulFunctionCall","src":"2369:18:58"}],"functionName":{"name":"or","nativeSrc":"2355:2:58","nodeType":"YulIdentifier","src":"2355:2:58"},"nativeSrc":"2355:33:58","nodeType":"YulFunctionCall","src":"2355:33:58"},"variableNames":[{"name":"_position","nativeSrc":"2342:9:58","nodeType":"YulIdentifier","src":"2342:9:58"}]},{"nativeSrc":"2402:286:58","nodeType":"YulAssignment","src":"2402:286:58","value":{"arguments":[{"name":"depth_","nativeSrc":"2452:6:58","nodeType":"YulIdentifier","src":"2452:6:58"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"2514:3:58","nodeType":"YulLiteral","src":"2514:3:58","type":"","value":"251"},{"arguments":[{"name":"_position","nativeSrc":"2523:9:58","nodeType":"YulIdentifier","src":"2523:9:58"},{"arguments":[{"kind":"number","nativeSrc":"2538:3:58","nodeType":"YulLiteral","src":"2538:3:58","type":"","value":"224"},{"kind":"number","nativeSrc":"2543:10:58","nodeType":"YulLiteral","src":"2543:10:58","type":"","value":"0x07c4acdd"}],"functionName":{"name":"shl","nativeSrc":"2534:3:58","nodeType":"YulIdentifier","src":"2534:3:58"},"nativeSrc":"2534:20:58","nodeType":"YulFunctionCall","src":"2534:20:58"}],"functionName":{"name":"mul","nativeSrc":"2519:3:58","nodeType":"YulIdentifier","src":"2519:3:58"},"nativeSrc":"2519:36:58","nodeType":"YulFunctionCall","src":"2519:36:58"}],"functionName":{"name":"shr","nativeSrc":"2510:3:58","nodeType":"YulIdentifier","src":"2510:3:58"},"nativeSrc":"2510:46:58","nodeType":"YulFunctionCall","src":"2510:46:58"},{"kind":"number","nativeSrc":"2582:66:58","nodeType":"YulLiteral","src":"2582:66:58","type":"","value":"0x0009010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f"}],"functionName":{"name":"byte","nativeSrc":"2480:4:58","nodeType":"YulIdentifier","src":"2480:4:58"},"nativeSrc":"2480:190:58","nodeType":"YulFunctionCall","src":"2480:190:58"}],"functionName":{"name":"or","nativeSrc":"2428:2:58","nodeType":"YulIdentifier","src":"2428:2:58"},"nativeSrc":"2428:260:58","nodeType":"YulFunctionCall","src":"2428:260:58"},"variableNames":[{"name":"depth_","nativeSrc":"2402:6:58","nodeType":"YulIdentifier","src":"2402:6:58"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":54435,"isOffset":false,"isSlot":false,"src":"1888:9:58","valueSize":1},{"declaration":54435,"isOffset":false,"isSlot":false,"src":"1969:9:58","valueSize":1},{"declaration":54435,"isOffset":false,"isSlot":false,"src":"2062:9:58","valueSize":1},{"declaration":54435,"isOffset":false,"isSlot":false,"src":"2087:9:58","valueSize":1},{"declaration":54435,"isOffset":false,"isSlot":false,"src":"2110:9:58","valueSize":1},{"declaration":54435,"isOffset":false,"isSlot":false,"src":"2126:9:58","valueSize":1},{"declaration":54435,"isOffset":false,"isSlot":false,"src":"2144:9:58","valueSize":1},{"declaration":54435,"isOffset":false,"isSlot":false,"src":"2168:9:58","valueSize":1},{"declaration":54435,"isOffset":false,"isSlot":false,"src":"2184:9:58","valueSize":1},{"declaration":54435,"isOffset":false,"isSlot":false,"src":"2202:9:58","valueSize":1},{"declaration":54435,"isOffset":false,"isSlot":false,"src":"2226:9:58","valueSize":1},{"declaration":54435,"isOffset":false,"isSlot":false,"src":"2242:9:58","valueSize":1},{"declaration":54435,"isOffset":false,"isSlot":false,"src":"2260:9:58","valueSize":1},{"declaration":54435,"isOffset":false,"isSlot":false,"src":"2284:9:58","valueSize":1},{"declaration":54435,"isOffset":false,"isSlot":false,"src":"2300:9:58","valueSize":1},{"declaration":54435,"isOffset":false,"isSlot":false,"src":"2318:9:58","valueSize":1},{"declaration":54435,"isOffset":false,"isSlot":false,"src":"2342:9:58","valueSize":1},{"declaration":54435,"isOffset":false,"isSlot":false,"src":"2358:9:58","valueSize":1},{"declaration":54435,"isOffset":false,"isSlot":false,"src":"2377:9:58","valueSize":1},{"declaration":54435,"isOffset":false,"isSlot":false,"src":"2523:9:58","valueSize":1},{"declaration":54438,"isOffset":false,"isSlot":false,"src":"1825:6:58","valueSize":1},{"declaration":54438,"isOffset":false,"isSlot":false,"src":"1838:6:58","valueSize":1},{"declaration":54438,"isOffset":false,"isSlot":false,"src":"1880:6:58","valueSize":1},{"declaration":54438,"isOffset":false,"isSlot":false,"src":"1914:6:58","valueSize":1},{"declaration":54438,"isOffset":false,"isSlot":false,"src":"1927:6:58","valueSize":1},{"declaration":54438,"isOffset":false,"isSlot":false,"src":"1961:6:58","valueSize":1},{"declaration":54438,"isOffset":false,"isSlot":false,"src":"2079:6:58","valueSize":1},{"declaration":54438,"isOffset":false,"isSlot":false,"src":"2402:6:58","valueSize":1},{"declaration":54438,"isOffset":false,"isSlot":false,"src":"2452:6:58","valueSize":1}],"id":54440,"nodeType":"InlineAssembly","src":"1802:896:58"}]},"documentation":{"id":54432,"nodeType":"StructuredDocumentation","src":"1363:260:58","text":"@notice Pulls the `depth` out of a `Position` type.\n @param _position The generalized index to get the `depth` of.\n @return depth_ The `depth` of the `position` gindex.\n @custom:attribution Solady <https://github.com/Vectorized/Solady>"},"implemented":true,"kind":"function","modifiers":[],"name":"depth","nameLocation":"1637:5:58","parameters":{"id":54436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54435,"mutability":"mutable","name":"_position","nameLocation":"1652:9:58","nodeType":"VariableDeclaration","scope":54442,"src":"1643:18:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54434,"nodeType":"UserDefinedTypeName","pathNode":{"id":54433,"name":"Position","nameLocations":["1643:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"1643:8:58"},"referencedDeclaration":54413,"src":"1643:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"}],"src":"1642:20:58"},"returnParameters":{"id":54439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54438,"mutability":"mutable","name":"depth_","nameLocation":"1692:6:58","nodeType":"VariableDeclaration","scope":54442,"src":"1686:12:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":54437,"name":"uint8","nodeType":"ElementaryTypeName","src":"1686:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1685:14:58"},"scope":54626,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":54459,"nodeType":"FunctionDefinition","src":"3171:363:58","nodes":[],"body":{"id":54458,"nodeType":"Block","src":"3259:275:58","nodes":[],"statements":[{"assignments":[54452],"declarations":[{"constant":false,"id":54452,"mutability":"mutable","name":"msb","nameLocation":"3419:3:58","nodeType":"VariableDeclaration","scope":54458,"src":"3411:11:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54451,"name":"uint256","nodeType":"ElementaryTypeName","src":"3411:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54456,"initialValue":{"arguments":[{"id":54454,"name":"_position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54446,"src":"3431:9:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}],"id":54453,"name":"depth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54442,"src":"3425:5:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$54413_$returns$_t_uint8_$","typeString":"function (Position) pure returns (uint8)"}},"id":54455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3425:16:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"3411:30:58"},{"AST":{"nativeSrc":"3460:68:58","nodeType":"YulBlock","src":"3460:68:58","statements":[{"nativeSrc":"3474:44:58","nodeType":"YulAssignment","src":"3474:44:58","value":{"arguments":[{"name":"_position","nativeSrc":"3495:9:58","nodeType":"YulIdentifier","src":"3495:9:58"},{"arguments":[{"name":"msb","nativeSrc":"3510:3:58","nodeType":"YulIdentifier","src":"3510:3:58"},{"kind":"number","nativeSrc":"3515:1:58","nodeType":"YulLiteral","src":"3515:1:58","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"3506:3:58","nodeType":"YulIdentifier","src":"3506:3:58"},"nativeSrc":"3506:11:58","nodeType":"YulFunctionCall","src":"3506:11:58"}],"functionName":{"name":"sub","nativeSrc":"3491:3:58","nodeType":"YulIdentifier","src":"3491:3:58"},"nativeSrc":"3491:27:58","nodeType":"YulFunctionCall","src":"3491:27:58"},"variableNames":[{"name":"indexAtDepth_","nativeSrc":"3474:13:58","nodeType":"YulIdentifier","src":"3474:13:58"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":54446,"isOffset":false,"isSlot":false,"src":"3495:9:58","valueSize":1},{"declaration":54449,"isOffset":false,"isSlot":false,"src":"3474:13:58","valueSize":1},{"declaration":54452,"isOffset":false,"isSlot":false,"src":"3510:3:58","valueSize":1}],"id":54457,"nodeType":"InlineAssembly","src":"3451:77:58"}]},"documentation":{"id":54443,"nodeType":"StructuredDocumentation","src":"2710:456:58","text":"@notice Pulls the `indexAtDepth` out of a `Position` type.\n         The `indexAtDepth` is the left/right index of a position at a specific depth within\n         the binary tree, starting from index 0. For example, at gindex 2, the `depth` = 1\n         and the `indexAtDepth` = 0.\n @param _position The generalized index to get the `indexAtDepth` of.\n @return indexAtDepth_ The `indexAtDepth` of the `position` gindex."},"implemented":true,"kind":"function","modifiers":[],"name":"indexAtDepth","nameLocation":"3180:12:58","parameters":{"id":54447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54446,"mutability":"mutable","name":"_position","nameLocation":"3202:9:58","nodeType":"VariableDeclaration","scope":54459,"src":"3193:18:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54445,"nodeType":"UserDefinedTypeName","pathNode":{"id":54444,"name":"Position","nameLocations":["3193:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"3193:8:58"},"referencedDeclaration":54413,"src":"3193:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"}],"src":"3192:20:58"},"returnParameters":{"id":54450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54449,"mutability":"mutable","name":"indexAtDepth_","nameLocation":"3244:13:58","nodeType":"VariableDeclaration","scope":54459,"src":"3236:21:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54448,"name":"uint128","nodeType":"ElementaryTypeName","src":"3236:7:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"3235:23:58"},"scope":54626,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":54471,"nodeType":"FunctionDefinition","src":"3720:148:58","nodes":[],"body":{"id":54470,"nodeType":"Block","src":"3793:75:58","nodes":[],"statements":[{"AST":{"nativeSrc":"3812:50:58","nodeType":"YulBlock","src":"3812:50:58","statements":[{"nativeSrc":"3826:26:58","nodeType":"YulAssignment","src":"3826:26:58","value":{"arguments":[{"kind":"number","nativeSrc":"3839:1:58","nodeType":"YulLiteral","src":"3839:1:58","type":"","value":"1"},{"name":"_position","nativeSrc":"3842:9:58","nodeType":"YulIdentifier","src":"3842:9:58"}],"functionName":{"name":"shl","nativeSrc":"3835:3:58","nodeType":"YulIdentifier","src":"3835:3:58"},"nativeSrc":"3835:17:58","nodeType":"YulFunctionCall","src":"3835:17:58"},"variableNames":[{"name":"left_","nativeSrc":"3826:5:58","nodeType":"YulIdentifier","src":"3826:5:58"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":54463,"isOffset":false,"isSlot":false,"src":"3842:9:58","valueSize":1},{"declaration":54467,"isOffset":false,"isSlot":false,"src":"3826:5:58","valueSize":1}],"id":54469,"nodeType":"InlineAssembly","src":"3803:59:58"}]},"documentation":{"id":54460,"nodeType":"StructuredDocumentation","src":"3540:175:58","text":"@notice Get the left child of `_position`.\n @param _position The position to get the left position of.\n @return left_ The position to the left of `position`."},"implemented":true,"kind":"function","modifiers":[],"name":"left","nameLocation":"3729:4:58","parameters":{"id":54464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54463,"mutability":"mutable","name":"_position","nameLocation":"3743:9:58","nodeType":"VariableDeclaration","scope":54471,"src":"3734:18:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54462,"nodeType":"UserDefinedTypeName","pathNode":{"id":54461,"name":"Position","nameLocations":["3734:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"3734:8:58"},"referencedDeclaration":54413,"src":"3734:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"}],"src":"3733:20:58"},"returnParameters":{"id":54468,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54467,"mutability":"mutable","name":"left_","nameLocation":"3786:5:58","nodeType":"VariableDeclaration","scope":54471,"src":"3777:14:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54466,"nodeType":"UserDefinedTypeName","pathNode":{"id":54465,"name":"Position","nameLocations":["3777:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"3777:8:58"},"referencedDeclaration":54413,"src":"3777:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"}],"src":"3776:16:58"},"scope":54626,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":54483,"nodeType":"FunctionDefinition","src":"4057:158:58","nodes":[],"body":{"id":54482,"nodeType":"Block","src":"4132:83:58","nodes":[],"statements":[{"AST":{"nativeSrc":"4151:58:58","nodeType":"YulBlock","src":"4151:58:58","statements":[{"nativeSrc":"4165:34:58","nodeType":"YulAssignment","src":"4165:34:58","value":{"arguments":[{"kind":"number","nativeSrc":"4178:1:58","nodeType":"YulLiteral","src":"4178:1:58","type":"","value":"1"},{"arguments":[{"kind":"number","nativeSrc":"4185:1:58","nodeType":"YulLiteral","src":"4185:1:58","type":"","value":"1"},{"name":"_position","nativeSrc":"4188:9:58","nodeType":"YulIdentifier","src":"4188:9:58"}],"functionName":{"name":"shl","nativeSrc":"4181:3:58","nodeType":"YulIdentifier","src":"4181:3:58"},"nativeSrc":"4181:17:58","nodeType":"YulFunctionCall","src":"4181:17:58"}],"functionName":{"name":"or","nativeSrc":"4175:2:58","nodeType":"YulIdentifier","src":"4175:2:58"},"nativeSrc":"4175:24:58","nodeType":"YulFunctionCall","src":"4175:24:58"},"variableNames":[{"name":"right_","nativeSrc":"4165:6:58","nodeType":"YulIdentifier","src":"4165:6:58"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":54475,"isOffset":false,"isSlot":false,"src":"4188:9:58","valueSize":1},{"declaration":54479,"isOffset":false,"isSlot":false,"src":"4165:6:58","valueSize":1}],"id":54481,"nodeType":"InlineAssembly","src":"4142:67:58"}]},"documentation":{"id":54472,"nodeType":"StructuredDocumentation","src":"3874:178:58","text":"@notice Get the right child of `_position`\n @param _position The position to get the right position of.\n @return right_ The position to the right of `position`."},"implemented":true,"kind":"function","modifiers":[],"name":"right","nameLocation":"4066:5:58","parameters":{"id":54476,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54475,"mutability":"mutable","name":"_position","nameLocation":"4081:9:58","nodeType":"VariableDeclaration","scope":54483,"src":"4072:18:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54474,"nodeType":"UserDefinedTypeName","pathNode":{"id":54473,"name":"Position","nameLocations":["4072:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"4072:8:58"},"referencedDeclaration":54413,"src":"4072:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"}],"src":"4071:20:58"},"returnParameters":{"id":54480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54479,"mutability":"mutable","name":"right_","nameLocation":"4124:6:58","nodeType":"VariableDeclaration","scope":54483,"src":"4115:15:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54478,"nodeType":"UserDefinedTypeName","pathNode":{"id":54477,"name":"Position","nameLocations":["4115:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"4115:8:58"},"referencedDeclaration":54413,"src":"4115:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"}],"src":"4114:17:58"},"scope":54626,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":54495,"nodeType":"FunctionDefinition","src":"4405:154:58","nodes":[],"body":{"id":54494,"nodeType":"Block","src":"4482:77:58","nodes":[],"statements":[{"AST":{"nativeSrc":"4501:52:58","nodeType":"YulBlock","src":"4501:52:58","statements":[{"nativeSrc":"4515:28:58","nodeType":"YulAssignment","src":"4515:28:58","value":{"arguments":[{"kind":"number","nativeSrc":"4530:1:58","nodeType":"YulLiteral","src":"4530:1:58","type":"","value":"1"},{"name":"_position","nativeSrc":"4533:9:58","nodeType":"YulIdentifier","src":"4533:9:58"}],"functionName":{"name":"shr","nativeSrc":"4526:3:58","nodeType":"YulIdentifier","src":"4526:3:58"},"nativeSrc":"4526:17:58","nodeType":"YulFunctionCall","src":"4526:17:58"},"variableNames":[{"name":"parent_","nativeSrc":"4515:7:58","nodeType":"YulIdentifier","src":"4515:7:58"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":54487,"isOffset":false,"isSlot":false,"src":"4533:9:58","valueSize":1},{"declaration":54491,"isOffset":false,"isSlot":false,"src":"4515:7:58","valueSize":1}],"id":54493,"nodeType":"InlineAssembly","src":"4492:61:58"}]},"documentation":{"id":54484,"nodeType":"StructuredDocumentation","src":"4221:179:58","text":"@notice Get the parent position of `_position`.\n @param _position The position to get the parent position of.\n @return parent_ The parent position of `position`."},"implemented":true,"kind":"function","modifiers":[],"name":"parent","nameLocation":"4414:6:58","parameters":{"id":54488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54487,"mutability":"mutable","name":"_position","nameLocation":"4430:9:58","nodeType":"VariableDeclaration","scope":54495,"src":"4421:18:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54486,"nodeType":"UserDefinedTypeName","pathNode":{"id":54485,"name":"Position","nameLocations":["4421:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"4421:8:58"},"referencedDeclaration":54413,"src":"4421:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"}],"src":"4420:20:58"},"returnParameters":{"id":54492,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54491,"mutability":"mutable","name":"parent_","nameLocation":"4473:7:58","nodeType":"VariableDeclaration","scope":54495,"src":"4464:16:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54490,"nodeType":"UserDefinedTypeName","pathNode":{"id":54489,"name":"Position","nameLocations":["4464:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"4464:8:58"},"referencedDeclaration":54413,"src":"4464:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"}],"src":"4463:18:58"},"scope":54626,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":54515,"nodeType":"FunctionDefinition","src":"4980:313:58","nodes":[],"body":{"id":54514,"nodeType":"Block","src":"5084:209:58","nodes":[],"statements":[{"assignments":[54508],"declarations":[{"constant":false,"id":54508,"mutability":"mutable","name":"msb","nameLocation":"5102:3:58","nodeType":"VariableDeclaration","scope":54514,"src":"5094:11:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54507,"name":"uint256","nodeType":"ElementaryTypeName","src":"5094:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54512,"initialValue":{"arguments":[{"id":54510,"name":"_position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54499,"src":"5114:9:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}],"id":54509,"name":"depth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54442,"src":"5108:5:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$54413_$returns$_t_uint8_$","typeString":"function (Position) pure returns (uint8)"}},"id":54511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5108:16:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"5094:30:58"},{"AST":{"nativeSrc":"5143:144:58","nodeType":"YulBlock","src":"5143:144:58","statements":[{"nativeSrc":"5157:36:58","nodeType":"YulVariableDeclaration","src":"5157:36:58","value":{"arguments":[{"name":"_maxDepth","nativeSrc":"5178:9:58","nodeType":"YulIdentifier","src":"5178:9:58"},{"name":"msb","nativeSrc":"5189:3:58","nodeType":"YulIdentifier","src":"5189:3:58"}],"functionName":{"name":"sub","nativeSrc":"5174:3:58","nodeType":"YulIdentifier","src":"5174:3:58"},"nativeSrc":"5174:19:58","nodeType":"YulFunctionCall","src":"5174:19:58"},"variables":[{"name":"remaining","nativeSrc":"5161:9:58","nodeType":"YulTypedName","src":"5161:9:58","type":""}]},{"nativeSrc":"5206:71:58","nodeType":"YulAssignment","src":"5206:71:58","value":{"arguments":[{"arguments":[{"name":"remaining","nativeSrc":"5228:9:58","nodeType":"YulIdentifier","src":"5228:9:58"},{"name":"_position","nativeSrc":"5239:9:58","nodeType":"YulIdentifier","src":"5239:9:58"}],"functionName":{"name":"shl","nativeSrc":"5224:3:58","nodeType":"YulIdentifier","src":"5224:3:58"},"nativeSrc":"5224:25:58","nodeType":"YulFunctionCall","src":"5224:25:58"},{"arguments":[{"arguments":[{"name":"remaining","nativeSrc":"5259:9:58","nodeType":"YulIdentifier","src":"5259:9:58"},{"kind":"number","nativeSrc":"5270:1:58","nodeType":"YulLiteral","src":"5270:1:58","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"5255:3:58","nodeType":"YulIdentifier","src":"5255:3:58"},"nativeSrc":"5255:17:58","nodeType":"YulFunctionCall","src":"5255:17:58"},{"kind":"number","nativeSrc":"5274:1:58","nodeType":"YulLiteral","src":"5274:1:58","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"5251:3:58","nodeType":"YulIdentifier","src":"5251:3:58"},"nativeSrc":"5251:25:58","nodeType":"YulFunctionCall","src":"5251:25:58"}],"functionName":{"name":"or","nativeSrc":"5221:2:58","nodeType":"YulIdentifier","src":"5221:2:58"},"nativeSrc":"5221:56:58","nodeType":"YulFunctionCall","src":"5221:56:58"},"variableNames":[{"name":"rightIndex_","nativeSrc":"5206:11:58","nodeType":"YulIdentifier","src":"5206:11:58"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":54501,"isOffset":false,"isSlot":false,"src":"5178:9:58","valueSize":1},{"declaration":54499,"isOffset":false,"isSlot":false,"src":"5239:9:58","valueSize":1},{"declaration":54508,"isOffset":false,"isSlot":false,"src":"5189:3:58","valueSize":1},{"declaration":54505,"isOffset":false,"isSlot":false,"src":"5206:11:58","valueSize":1}],"id":54513,"nodeType":"InlineAssembly","src":"5134:153:58"}]},"documentation":{"id":54496,"nodeType":"StructuredDocumentation","src":"4565:410:58","text":"@notice Get the deepest, right most gindex relative to the `position`. This is equivalent to\n         calling `right` on a position until the maximum depth is reached.\n @param _position The position to get the relative deepest, right most gindex of.\n @param _maxDepth The maximum depth of the game.\n @return rightIndex_ The deepest, right most gindex relative to the `position`."},"implemented":true,"kind":"function","modifiers":[],"name":"rightIndex","nameLocation":"4989:10:58","parameters":{"id":54502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54499,"mutability":"mutable","name":"_position","nameLocation":"5009:9:58","nodeType":"VariableDeclaration","scope":54515,"src":"5000:18:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54498,"nodeType":"UserDefinedTypeName","pathNode":{"id":54497,"name":"Position","nameLocations":["5000:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"5000:8:58"},"referencedDeclaration":54413,"src":"5000:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":54501,"mutability":"mutable","name":"_maxDepth","nameLocation":"5028:9:58","nodeType":"VariableDeclaration","scope":54515,"src":"5020:17:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54500,"name":"uint256","nodeType":"ElementaryTypeName","src":"5020:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4999:39:58"},"returnParameters":{"id":54506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54505,"mutability":"mutable","name":"rightIndex_","nameLocation":"5071:11:58","nodeType":"VariableDeclaration","scope":54515,"src":"5062:20:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54504,"nodeType":"UserDefinedTypeName","pathNode":{"id":54503,"name":"Position","nameLocations":["5062:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"5062:8:58"},"referencedDeclaration":54413,"src":"5062:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"}],"src":"5061:22:58"},"scope":54626,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":54534,"nodeType":"FunctionDefinition","src":"5741:336:58","nodes":[],"body":{"id":54533,"nodeType":"Block","src":"5844:233:58","nodes":[],"statements":[{"assignments":[54527],"declarations":[{"constant":false,"id":54527,"mutability":"mutable","name":"msb","nameLocation":"5862:3:58","nodeType":"VariableDeclaration","scope":54533,"src":"5854:11:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54526,"name":"uint256","nodeType":"ElementaryTypeName","src":"5854:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54531,"initialValue":{"arguments":[{"id":54529,"name":"_position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54519,"src":"5874:9:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}],"id":54528,"name":"depth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54442,"src":"5868:5:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$54413_$returns$_t_uint8_$","typeString":"function (Position) pure returns (uint8)"}},"id":54530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5868:16:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"5854:30:58"},{"AST":{"nativeSrc":"5903:168:58","nodeType":"YulBlock","src":"5903:168:58","statements":[{"nativeSrc":"5917:36:58","nodeType":"YulVariableDeclaration","src":"5917:36:58","value":{"arguments":[{"name":"_maxDepth","nativeSrc":"5938:9:58","nodeType":"YulIdentifier","src":"5938:9:58"},{"name":"msb","nativeSrc":"5949:3:58","nodeType":"YulIdentifier","src":"5949:3:58"}],"functionName":{"name":"sub","nativeSrc":"5934:3:58","nodeType":"YulIdentifier","src":"5934:3:58"},"nativeSrc":"5934:19:58","nodeType":"YulFunctionCall","src":"5934:19:58"},"variables":[{"name":"remaining","nativeSrc":"5921:9:58","nodeType":"YulTypedName","src":"5921:9:58","type":""}]},{"nativeSrc":"5966:95:58","nodeType":"YulAssignment","src":"5966:95:58","value":{"arguments":[{"arguments":[{"arguments":[{"name":"remaining","nativeSrc":"5992:9:58","nodeType":"YulIdentifier","src":"5992:9:58"},{"name":"_position","nativeSrc":"6003:9:58","nodeType":"YulIdentifier","src":"6003:9:58"}],"functionName":{"name":"shl","nativeSrc":"5988:3:58","nodeType":"YulIdentifier","src":"5988:3:58"},"nativeSrc":"5988:25:58","nodeType":"YulFunctionCall","src":"5988:25:58"},{"arguments":[{"arguments":[{"name":"remaining","nativeSrc":"6023:9:58","nodeType":"YulIdentifier","src":"6023:9:58"},{"kind":"number","nativeSrc":"6034:1:58","nodeType":"YulLiteral","src":"6034:1:58","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"6019:3:58","nodeType":"YulIdentifier","src":"6019:3:58"},"nativeSrc":"6019:17:58","nodeType":"YulFunctionCall","src":"6019:17:58"},{"kind":"number","nativeSrc":"6038:1:58","nodeType":"YulLiteral","src":"6038:1:58","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"6015:3:58","nodeType":"YulIdentifier","src":"6015:3:58"},"nativeSrc":"6015:25:58","nodeType":"YulFunctionCall","src":"6015:25:58"}],"functionName":{"name":"or","nativeSrc":"5985:2:58","nodeType":"YulIdentifier","src":"5985:2:58"},"nativeSrc":"5985:56:58","nodeType":"YulFunctionCall","src":"5985:56:58"},{"arguments":[{"name":"_maxDepth","nativeSrc":"6047:9:58","nodeType":"YulIdentifier","src":"6047:9:58"},{"kind":"number","nativeSrc":"6058:1:58","nodeType":"YulLiteral","src":"6058:1:58","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"6043:3:58","nodeType":"YulIdentifier","src":"6043:3:58"},"nativeSrc":"6043:17:58","nodeType":"YulFunctionCall","src":"6043:17:58"}],"functionName":{"name":"sub","nativeSrc":"5981:3:58","nodeType":"YulIdentifier","src":"5981:3:58"},"nativeSrc":"5981:80:58","nodeType":"YulFunctionCall","src":"5981:80:58"},"variableNames":[{"name":"traceIndex_","nativeSrc":"5966:11:58","nodeType":"YulIdentifier","src":"5966:11:58"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":54521,"isOffset":false,"isSlot":false,"src":"5938:9:58","valueSize":1},{"declaration":54521,"isOffset":false,"isSlot":false,"src":"6047:9:58","valueSize":1},{"declaration":54519,"isOffset":false,"isSlot":false,"src":"6003:9:58","valueSize":1},{"declaration":54527,"isOffset":false,"isSlot":false,"src":"5949:3:58","valueSize":1},{"declaration":54524,"isOffset":false,"isSlot":false,"src":"5966:11:58","valueSize":1}],"id":54532,"nodeType":"InlineAssembly","src":"5894:177:58"}]},"documentation":{"id":54516,"nodeType":"StructuredDocumentation","src":"5299:437:58","text":"@notice Get the deepest, right most trace index relative to the `position`. This is\n         equivalent to calling `right` on a position until the maximum depth is reached and\n         then finding its index at depth.\n @param _position The position to get the relative trace index of.\n @param _maxDepth The maximum depth of the game.\n @return traceIndex_ The trace index relative to the `position`."},"implemented":true,"kind":"function","modifiers":[],"name":"traceIndex","nameLocation":"5750:10:58","parameters":{"id":54522,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54519,"mutability":"mutable","name":"_position","nameLocation":"5770:9:58","nodeType":"VariableDeclaration","scope":54534,"src":"5761:18:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54518,"nodeType":"UserDefinedTypeName","pathNode":{"id":54517,"name":"Position","nameLocations":["5761:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"5761:8:58"},"referencedDeclaration":54413,"src":"5761:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":54521,"mutability":"mutable","name":"_maxDepth","nameLocation":"5789:9:58","nodeType":"VariableDeclaration","scope":54534,"src":"5781:17:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54520,"name":"uint256","nodeType":"ElementaryTypeName","src":"5781:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5760:39:58"},"returnParameters":{"id":54525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54524,"mutability":"mutable","name":"traceIndex_","nameLocation":"5831:11:58","nodeType":"VariableDeclaration","scope":54534,"src":"5823:19:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54523,"name":"uint256","nodeType":"ElementaryTypeName","src":"5823:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5822:21:58"},"scope":54626,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":54557,"nodeType":"FunctionDefinition","src":"6379:710:58","nodes":[],"body":{"id":54556,"nodeType":"Block","src":"6465:624:58","nodes":[],"statements":[{"assignments":[54546],"declarations":[{"constant":false,"id":54546,"mutability":"mutable","name":"lsb","nameLocation":"6561:3:58","nodeType":"VariableDeclaration","scope":54556,"src":"6552:12:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54545,"nodeType":"UserDefinedTypeName","pathNode":{"id":54544,"name":"Position","nameLocations":["6552:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"6552:8:58"},"referencedDeclaration":54413,"src":"6552:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"}],"id":54547,"nodeType":"VariableDeclarationStatement","src":"6552:12:58"},{"AST":{"nativeSrc":"6583:69:58","nodeType":"YulBlock","src":"6583:69:58","statements":[{"nativeSrc":"6597:45:58","nodeType":"YulAssignment","src":"6597:45:58","value":{"arguments":[{"arguments":[{"name":"_position","nativeSrc":"6612:9:58","nodeType":"YulIdentifier","src":"6612:9:58"}],"functionName":{"name":"not","nativeSrc":"6608:3:58","nodeType":"YulIdentifier","src":"6608:3:58"},"nativeSrc":"6608:14:58","nodeType":"YulFunctionCall","src":"6608:14:58"},{"arguments":[{"name":"_position","nativeSrc":"6628:9:58","nodeType":"YulIdentifier","src":"6628:9:58"},{"kind":"number","nativeSrc":"6639:1:58","nodeType":"YulLiteral","src":"6639:1:58","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"6624:3:58","nodeType":"YulIdentifier","src":"6624:3:58"},"nativeSrc":"6624:17:58","nodeType":"YulFunctionCall","src":"6624:17:58"}],"functionName":{"name":"and","nativeSrc":"6604:3:58","nodeType":"YulIdentifier","src":"6604:3:58"},"nativeSrc":"6604:38:58","nodeType":"YulFunctionCall","src":"6604:38:58"},"variableNames":[{"name":"lsb","nativeSrc":"6597:3:58","nodeType":"YulIdentifier","src":"6597:3:58"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":54538,"isOffset":false,"isSlot":false,"src":"6612:9:58","valueSize":1},{"declaration":54538,"isOffset":false,"isSlot":false,"src":"6628:9:58","valueSize":1},{"declaration":54546,"isOffset":false,"isSlot":false,"src":"6597:3:58","valueSize":1}],"id":54548,"nodeType":"InlineAssembly","src":"6574:78:58"},{"assignments":[54550],"declarations":[{"constant":false,"id":54550,"mutability":"mutable","name":"msb","nameLocation":"6737:3:58","nodeType":"VariableDeclaration","scope":54556,"src":"6729:11:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54549,"name":"uint256","nodeType":"ElementaryTypeName","src":"6729:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54554,"initialValue":{"arguments":[{"id":54552,"name":"lsb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54546,"src":"6749:3:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}],"id":54551,"name":"depth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54442,"src":"6743:5:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$54413_$returns$_t_uint8_$","typeString":"function (Position) pure returns (uint8)"}},"id":54553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6743:10:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"6729:24:58"},{"AST":{"nativeSrc":"6929:154:58","nodeType":"YulBlock","src":"6929:154:58","statements":[{"nativeSrc":"6943:28:58","nodeType":"YulVariableDeclaration","src":"6943:28:58","value":{"arguments":[{"name":"msb","nativeSrc":"6956:3:58","nodeType":"YulIdentifier","src":"6956:3:58"},{"name":"_position","nativeSrc":"6961:9:58","nodeType":"YulIdentifier","src":"6961:9:58"}],"functionName":{"name":"shr","nativeSrc":"6952:3:58","nodeType":"YulIdentifier","src":"6952:3:58"},"nativeSrc":"6952:19:58","nodeType":"YulFunctionCall","src":"6952:19:58"},"variables":[{"name":"a","nativeSrc":"6947:1:58","nodeType":"YulTypedName","src":"6947:1:58","type":""}]},{"nativeSrc":"7044:29:58","nodeType":"YulAssignment","src":"7044:29:58","value":{"arguments":[{"name":"a","nativeSrc":"7060:1:58","nodeType":"YulIdentifier","src":"7060:1:58"},{"arguments":[{"name":"a","nativeSrc":"7070:1:58","nodeType":"YulIdentifier","src":"7070:1:58"}],"functionName":{"name":"iszero","nativeSrc":"7063:6:58","nodeType":"YulIdentifier","src":"7063:6:58"},"nativeSrc":"7063:9:58","nodeType":"YulFunctionCall","src":"7063:9:58"}],"functionName":{"name":"or","nativeSrc":"7057:2:58","nodeType":"YulIdentifier","src":"7057:2:58"},"nativeSrc":"7057:16:58","nodeType":"YulFunctionCall","src":"7057:16:58"},"variableNames":[{"name":"ancestor_","nativeSrc":"7044:9:58","nodeType":"YulIdentifier","src":"7044:9:58"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":54538,"isOffset":false,"isSlot":false,"src":"6961:9:58","valueSize":1},{"declaration":54542,"isOffset":false,"isSlot":false,"src":"7044:9:58","valueSize":1},{"declaration":54550,"isOffset":false,"isSlot":false,"src":"6956:3:58","valueSize":1}],"id":54555,"nodeType":"InlineAssembly","src":"6920:163:58"}]},"documentation":{"id":54535,"nodeType":"StructuredDocumentation","src":"6083:291:58","text":"@notice Gets the position of the highest ancestor of `_position` that commits to the same\n         trace index.\n @param _position The position to get the highest ancestor of.\n @return ancestor_ The highest ancestor of `position` that commits to the same trace index."},"implemented":true,"kind":"function","modifiers":[],"name":"traceAncestor","nameLocation":"6388:13:58","parameters":{"id":54539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54538,"mutability":"mutable","name":"_position","nameLocation":"6411:9:58","nodeType":"VariableDeclaration","scope":54557,"src":"6402:18:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54537,"nodeType":"UserDefinedTypeName","pathNode":{"id":54536,"name":"Position","nameLocations":["6402:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"6402:8:58"},"referencedDeclaration":54413,"src":"6402:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"}],"src":"6401:20:58"},"returnParameters":{"id":54543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54542,"mutability":"mutable","name":"ancestor_","nameLocation":"6454:9:58","nodeType":"VariableDeclaration","scope":54557,"src":"6445:18:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54541,"nodeType":"UserDefinedTypeName","pathNode":{"id":54540,"name":"Position","nameLocations":["6445:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"6445:8:58"},"referencedDeclaration":54413,"src":"6445:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"}],"src":"6444:20:58"},"scope":54626,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":54600,"nodeType":"FunctionDefinition","src":"7608:944:58","nodes":[],"body":{"id":54599,"nodeType":"Block","src":"7781:771:58","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":54569,"name":"_position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54561,"src":"7877:9:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"id":54570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7887:5:58","memberName":"depth","nodeType":"MemberAccess","referencedDeclaration":54442,"src":"7877:15:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$54413_$returns$_t_uint8_$attached_to$_t_userDefinedValueType$_Position_$54413_$","typeString":"function (Position) pure returns (uint8)"}},"id":54571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7877:17:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":54572,"name":"_upperBoundExclusive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54563,"src":"7898:20:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7877:41:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54576,"nodeType":"IfStatement","src":"7873:222:58","trueBody":{"id":54575,"nodeType":"Block","src":"7920:175:58","statements":[{"AST":{"nativeSrc":"7943:142:58","nodeType":"YulBlock","src":"7943:142:58","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"8019:4:58","nodeType":"YulLiteral","src":"8019:4:58","type":"","value":"0x00"},{"kind":"number","nativeSrc":"8025:10:58","nodeType":"YulLiteral","src":"8025:10:58","type":"","value":"0xb34b5c22"}],"functionName":{"name":"mstore","nativeSrc":"8012:6:58","nodeType":"YulIdentifier","src":"8012:6:58"},"nativeSrc":"8012:24:58","nodeType":"YulFunctionCall","src":"8012:24:58"},"nativeSrc":"8012:24:58","nodeType":"YulExpressionStatement","src":"8012:24:58"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"8060:4:58","nodeType":"YulLiteral","src":"8060:4:58","type":"","value":"0x1C"},{"kind":"number","nativeSrc":"8066:4:58","nodeType":"YulLiteral","src":"8066:4:58","type":"","value":"0x04"}],"functionName":{"name":"revert","nativeSrc":"8053:6:58","nodeType":"YulIdentifier","src":"8053:6:58"},"nativeSrc":"8053:18:58","nodeType":"YulFunctionCall","src":"8053:18:58"},"nativeSrc":"8053:18:58","nodeType":"YulExpressionStatement","src":"8053:18:58"}]},"evmVersion":"cancun","externalReferences":[],"id":54574,"nodeType":"InlineAssembly","src":"7934:151:58"}]}},{"expression":{"id":54581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54577,"name":"ancestor_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54567,"src":"8148:9:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":54579,"name":"_position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54561,"src":"8174:9:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}],"id":54578,"name":"traceAncestor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54557,"src":"8160:13:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$54413_$returns$_t_userDefinedValueType$_Position_$54413_$","typeString":"function (Position) pure returns (Position)"}},"id":54580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8160:24:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"src":"8148:36:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"id":54582,"nodeType":"ExpressionStatement","src":"8148:36:58"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":54583,"name":"ancestor_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54567,"src":"8420:9:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"id":54584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8430:5:58","memberName":"depth","nodeType":"MemberAccess","referencedDeclaration":54442,"src":"8420:15:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$54413_$returns$_t_uint8_$attached_to$_t_userDefinedValueType$_Position_$54413_$","typeString":"function (Position) pure returns (uint8)"}},"id":54585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8420:17:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":54586,"name":"_upperBoundExclusive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54563,"src":"8441:20:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8420:41:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54598,"nodeType":"IfStatement","src":"8416:130:58","trueBody":{"id":54597,"nodeType":"Block","src":"8463:83:58","statements":[{"expression":{"id":54595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54588,"name":"ancestor_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54567,"src":"8477:9:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54591,"name":"_upperBoundExclusive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54563,"src":"8510:20:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":54592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8533:1:58","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8510:24:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":54589,"name":"ancestor_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54567,"src":"8489:9:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"id":54590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8499:10:58","memberName":"rightIndex","nodeType":"MemberAccess","referencedDeclaration":54515,"src":"8489:20:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$54413_$_t_uint256_$returns$_t_userDefinedValueType$_Position_$54413_$attached_to$_t_userDefinedValueType$_Position_$54413_$","typeString":"function (Position,uint256) pure returns (Position)"}},"id":54594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8489:46:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"src":"8477:58:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"id":54596,"nodeType":"ExpressionStatement","src":"8477:58:58"}]}}]},"documentation":{"id":54558,"nodeType":"StructuredDocumentation","src":"7095:508:58","text":"@notice Gets the position of the highest ancestor of `_position` that commits to the same\n         trace index, while still being below `_upperBoundExclusive`.\n @param _position The position to get the highest ancestor of.\n @param _upperBoundExclusive The exclusive upper depth bound, used to inform where to stop in order\n                             to not escape a sub-tree.\n @return ancestor_ The highest ancestor of `position` that commits to the same trace index."},"implemented":true,"kind":"function","modifiers":[],"name":"traceAncestorBounded","nameLocation":"7617:20:58","parameters":{"id":54564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54561,"mutability":"mutable","name":"_position","nameLocation":"7656:9:58","nodeType":"VariableDeclaration","scope":54600,"src":"7647:18:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54560,"nodeType":"UserDefinedTypeName","pathNode":{"id":54559,"name":"Position","nameLocations":["7647:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"7647:8:58"},"referencedDeclaration":54413,"src":"7647:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":54563,"mutability":"mutable","name":"_upperBoundExclusive","nameLocation":"7683:20:58","nodeType":"VariableDeclaration","scope":54600,"src":"7675:28:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54562,"name":"uint256","nodeType":"ElementaryTypeName","src":"7675:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7637:72:58"},"returnParameters":{"id":54568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54567,"mutability":"mutable","name":"ancestor_","nameLocation":"7766:9:58","nodeType":"VariableDeclaration","scope":54600,"src":"7757:18:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54566,"nodeType":"UserDefinedTypeName","pathNode":{"id":54565,"name":"Position","nameLocations":["7757:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"7757:8:58"},"referencedDeclaration":54413,"src":"7757:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"}],"src":"7756:20:58"},"scope":54626,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":54614,"nodeType":"FunctionDefinition","src":"8973:187:58","nodes":[],"body":{"id":54613,"nodeType":"Block","src":"9062:98:58","nodes":[],"statements":[{"AST":{"nativeSrc":"9081:73:58","nodeType":"YulBlock","src":"9081:73:58","statements":[{"nativeSrc":"9095:49:58","nodeType":"YulAssignment","src":"9095:49:58","value":{"arguments":[{"kind":"number","nativeSrc":"9108:1:58","nodeType":"YulLiteral","src":"9108:1:58","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"_isAttack","nativeSrc":"9121:9:58","nodeType":"YulIdentifier","src":"9121:9:58"}],"functionName":{"name":"iszero","nativeSrc":"9114:6:58","nodeType":"YulIdentifier","src":"9114:6:58"},"nativeSrc":"9114:17:58","nodeType":"YulFunctionCall","src":"9114:17:58"},{"name":"_position","nativeSrc":"9133:9:58","nodeType":"YulIdentifier","src":"9133:9:58"}],"functionName":{"name":"or","nativeSrc":"9111:2:58","nodeType":"YulIdentifier","src":"9111:2:58"},"nativeSrc":"9111:32:58","nodeType":"YulFunctionCall","src":"9111:32:58"}],"functionName":{"name":"shl","nativeSrc":"9104:3:58","nodeType":"YulIdentifier","src":"9104:3:58"},"nativeSrc":"9104:40:58","nodeType":"YulFunctionCall","src":"9104:40:58"},"variableNames":[{"name":"move_","nativeSrc":"9095:5:58","nodeType":"YulIdentifier","src":"9095:5:58"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":54606,"isOffset":false,"isSlot":false,"src":"9121:9:58","valueSize":1},{"declaration":54604,"isOffset":false,"isSlot":false,"src":"9133:9:58","valueSize":1},{"declaration":54610,"isOffset":false,"isSlot":false,"src":"9095:5:58","valueSize":1}],"id":54612,"nodeType":"InlineAssembly","src":"9072:82:58"}]},"documentation":{"id":54601,"nodeType":"StructuredDocumentation","src":"8558:410:58","text":"@notice Get the move position of `_position`, which is the left child of:\n         1. `_position` if `_isAttack` is true.\n         2. `_position | 1` if `_isAttack` is false.\n @param _position The position to get the relative attack/defense position of.\n @param _isAttack Whether or not the move is an attack move.\n @return move_ The move position relative to `position`."},"implemented":true,"kind":"function","modifiers":[],"name":"move","nameLocation":"8982:4:58","parameters":{"id":54607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54604,"mutability":"mutable","name":"_position","nameLocation":"8996:9:58","nodeType":"VariableDeclaration","scope":54614,"src":"8987:18:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54603,"nodeType":"UserDefinedTypeName","pathNode":{"id":54602,"name":"Position","nameLocations":["8987:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"8987:8:58"},"referencedDeclaration":54413,"src":"8987:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":54606,"mutability":"mutable","name":"_isAttack","nameLocation":"9012:9:58","nodeType":"VariableDeclaration","scope":54614,"src":"9007:14:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":54605,"name":"bool","nodeType":"ElementaryTypeName","src":"9007:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8986:36:58"},"returnParameters":{"id":54611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54610,"mutability":"mutable","name":"move_","nameLocation":"9055:5:58","nodeType":"VariableDeclaration","scope":54614,"src":"9046:14:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54609,"nodeType":"UserDefinedTypeName","pathNode":{"id":54608,"name":"Position","nameLocations":["9046:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"9046:8:58"},"referencedDeclaration":54413,"src":"9046:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"}],"src":"9045:16:58"},"scope":54626,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":54625,"nodeType":"FunctionDefinition","src":"9383:136:58","nodes":[],"body":{"id":54624,"nodeType":"Block","src":"9453:66:58","nodes":[],"statements":[{"AST":{"nativeSrc":"9472:41:58","nodeType":"YulBlock","src":"9472:41:58","statements":[{"nativeSrc":"9486:17:58","nodeType":"YulAssignment","src":"9486:17:58","value":{"name":"_position","nativeSrc":"9494:9:58","nodeType":"YulIdentifier","src":"9494:9:58"},"variableNames":[{"name":"raw_","nativeSrc":"9486:4:58","nodeType":"YulIdentifier","src":"9486:4:58"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":54618,"isOffset":false,"isSlot":false,"src":"9494:9:58","valueSize":1},{"declaration":54621,"isOffset":false,"isSlot":false,"src":"9486:4:58","valueSize":1}],"id":54623,"nodeType":"InlineAssembly","src":"9463:50:58"}]},"documentation":{"id":54615,"nodeType":"StructuredDocumentation","src":"9166:212:58","text":"@notice Get the value of a `Position` type in the form of the underlying uint128.\n @param _position The position to get the value of.\n @return raw_ The value of the `position` as a uint128 type."},"implemented":true,"kind":"function","modifiers":[],"name":"raw","nameLocation":"9392:3:58","parameters":{"id":54619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54618,"mutability":"mutable","name":"_position","nameLocation":"9405:9:58","nodeType":"VariableDeclaration","scope":54625,"src":"9396:18:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"},"typeName":{"id":54617,"nodeType":"UserDefinedTypeName","pathNode":{"id":54616,"name":"Position","nameLocations":["9396:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":54413,"src":"9396:8:58"},"referencedDeclaration":54413,"src":"9396:8:58","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$54413","typeString":"Position"}},"visibility":"internal"}],"src":"9395:20:58"},"returnParameters":{"id":54622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54621,"mutability":"mutable","name":"raw_","nameLocation":"9447:4:58","nodeType":"VariableDeclaration","scope":54625,"src":"9439:12:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":54620,"name":"uint128","nodeType":"ElementaryTypeName","src":"9439:7:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9438:14:58"},"scope":54626,"stateMutability":"pure","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[],"canonicalName":"LibPosition","contractDependencies":[],"contractKind":"library","documentation":{"id":54414,"nodeType":"StructuredDocumentation","src":"487:112:58","text":"@title LibPosition\n @notice This library contains helper functions for working with the `Position` type."},"fullyImplemented":true,"linearizedBaseContracts":[54626],"name":"LibPosition","nameLocation":"607:11:58","scope":54627,"usedErrors":[],"usedEvents":[]}],"license":"MIT"},"id":58}