{"abi":[],"bytecode":{"object":"0x602d6037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c634300080f000a","sourceMap":"599:8922:197:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;599:8922:197;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c634300080f000a","sourceMap":"599:8922:197:-:0;;;;;;;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"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\":\"london\",\"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.15+commit.e14f2714"},"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":"london","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":110368,"exportedSymbols":{"LibPosition":[110367],"Position":[110154]},"nodeType":"SourceUnit","src":"32:9490:197","nodes":[{"id":110148,"nodeType":"PragmaDirective","src":"32:24:197","nodes":[],"literals":["solidity","^","0.8",".15"]},{"id":110152,"nodeType":"UsingForDirective","src":"58:38:197","nodes":[],"global":true,"libraryName":{"id":110149,"name":"LibPosition","nodeType":"IdentifierPath","referencedDeclaration":110367,"src":"64:11:197"},"typeName":{"id":110151,"nodeType":"UserDefinedTypeName","pathNode":{"id":110150,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"80:8:197"},"referencedDeclaration":110154,"src":"80:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}}},{"id":110154,"nodeType":"UserDefinedValueTypeDefinition","src":"460:25:197","nodes":[],"canonicalName":"Position","name":"Position","nameLocation":"465:8:197","underlyingType":{"id":110153,"name":"uint128","nodeType":"ElementaryTypeName","src":"477:7:197","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}},{"id":110367,"nodeType":"ContractDefinition","src":"599:8922:197","nodes":[{"id":110159,"nodeType":"VariableDeclaration","src":"811:49:197","nodes":[],"constant":true,"documentation":{"id":110156,"nodeType":"StructuredDocumentation","src":"625:181:197","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:197","scope":110367,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":110157,"name":"uint8","nodeType":"ElementaryTypeName","src":"811:5:197","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"313236","id":110158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"857:3:197","typeDescriptions":{"typeIdentifier":"t_rational_126_by_1","typeString":"int_const 126"},"value":"126"},"visibility":"internal"},{"id":110172,"nodeType":"FunctionDefinition","src":"1116:241:197","nodes":[],"body":{"id":110171,"nodeType":"Block","src":"1210:147:197","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"1229:122:197","statements":[{"nodeType":"YulAssignment","src":"1294:47:197","value":{"arguments":[{"arguments":[{"name":"_depth","nodeType":"YulIdentifier","src":"1315:6:197"},{"kind":"number","nodeType":"YulLiteral","src":"1323:1:197","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1311:3:197"},"nodeType":"YulFunctionCall","src":"1311:14:197"},{"name":"_indexAtDepth","nodeType":"YulIdentifier","src":"1327:13:197"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1307:3:197"},"nodeType":"YulFunctionCall","src":"1307:34:197"},"variableNames":[{"name":"position_","nodeType":"YulIdentifier","src":"1294:9:197"}]}]},"evmVersion":"london","externalReferences":[{"declaration":110162,"isOffset":false,"isSlot":false,"src":"1315:6:197","valueSize":1},{"declaration":110164,"isOffset":false,"isSlot":false,"src":"1327:13:197","valueSize":1},{"declaration":110168,"isOffset":false,"isSlot":false,"src":"1294:9:197","valueSize":1}],"id":110170,"nodeType":"InlineAssembly","src":"1220:131:197"}]},"documentation":{"id":110160,"nodeType":"StructuredDocumentation","src":"867:244:197","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:197","parameters":{"id":110165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110162,"mutability":"mutable","name":"_depth","nameLocation":"1136:6:197","nodeType":"VariableDeclaration","scope":110172,"src":"1130:12:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":110161,"name":"uint8","nodeType":"ElementaryTypeName","src":"1130:5:197","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":110164,"mutability":"mutable","name":"_indexAtDepth","nameLocation":"1152:13:197","nodeType":"VariableDeclaration","scope":110172,"src":"1144:21:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":110163,"name":"uint128","nodeType":"ElementaryTypeName","src":"1144:7:197","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1129:37:197"},"returnParameters":{"id":110169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110168,"mutability":"mutable","name":"position_","nameLocation":"1199:9:197","nodeType":"VariableDeclaration","scope":110172,"src":"1190:18:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110167,"nodeType":"UserDefinedTypeName","pathNode":{"id":110166,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"1190:8:197"},"referencedDeclaration":110154,"src":"1190:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"}],"src":"1189:20:197"},"scope":110367,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":110183,"nodeType":"FunctionDefinition","src":"1628:1076:197","nodes":[],"body":{"id":110182,"nodeType":"Block","src":"1700:1004:197","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"1811:887:197","statements":[{"nodeType":"YulAssignment","src":"1825:76:197","value":{"arguments":[{"name":"depth_","nodeType":"YulIdentifier","src":"1838:6:197"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1850:1:197","type":"","value":"6"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1856:18:197","type":"","value":"0xffffffffffffffff"},{"arguments":[{"name":"depth_","nodeType":"YulIdentifier","src":"1880:6:197"},{"name":"_position","nodeType":"YulIdentifier","src":"1888:9:197"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1876:3:197"},"nodeType":"YulFunctionCall","src":"1876:22:197"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1853:2:197"},"nodeType":"YulFunctionCall","src":"1853:46:197"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1846:3:197"},"nodeType":"YulFunctionCall","src":"1846:54:197"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1835:2:197"},"nodeType":"YulFunctionCall","src":"1835:66:197"},"variableNames":[{"name":"depth_","nodeType":"YulIdentifier","src":"1825:6:197"}]},{"nodeType":"YulAssignment","src":"1914:68:197","value":{"arguments":[{"name":"depth_","nodeType":"YulIdentifier","src":"1927:6:197"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1939:1:197","type":"","value":"5"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1945:10:197","type":"","value":"0xffffffff"},{"arguments":[{"name":"depth_","nodeType":"YulIdentifier","src":"1961:6:197"},{"name":"_position","nodeType":"YulIdentifier","src":"1969:9:197"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1957:3:197"},"nodeType":"YulFunctionCall","src":"1957:22:197"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1942:2:197"},"nodeType":"YulFunctionCall","src":"1942:38:197"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1935:3:197"},"nodeType":"YulFunctionCall","src":"1935:46:197"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1924:2:197"},"nodeType":"YulFunctionCall","src":"1924:58:197"},"variableNames":[{"name":"depth_","nodeType":"YulIdentifier","src":"1914:6:197"}]},{"nodeType":"YulAssignment","src":"2062:35:197","value":{"arguments":[{"name":"depth_","nodeType":"YulIdentifier","src":"2079:6:197"},{"name":"_position","nodeType":"YulIdentifier","src":"2087:9:197"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2075:3:197"},"nodeType":"YulFunctionCall","src":"2075:22:197"},"variableNames":[{"name":"_position","nodeType":"YulIdentifier","src":"2062:9:197"}]},{"nodeType":"YulAssignment","src":"2110:45:197","value":{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"2126:9:197"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2141:1:197","type":"","value":"1"},{"name":"_position","nodeType":"YulIdentifier","src":"2144:9:197"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2137:3:197"},"nodeType":"YulFunctionCall","src":"2137:17:197"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2123:2:197"},"nodeType":"YulFunctionCall","src":"2123:32:197"},"variableNames":[{"name":"_position","nodeType":"YulIdentifier","src":"2110:9:197"}]},{"nodeType":"YulAssignment","src":"2168:45:197","value":{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"2184:9:197"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2199:1:197","type":"","value":"2"},{"name":"_position","nodeType":"YulIdentifier","src":"2202:9:197"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2195:3:197"},"nodeType":"YulFunctionCall","src":"2195:17:197"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2181:2:197"},"nodeType":"YulFunctionCall","src":"2181:32:197"},"variableNames":[{"name":"_position","nodeType":"YulIdentifier","src":"2168:9:197"}]},{"nodeType":"YulAssignment","src":"2226:45:197","value":{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"2242:9:197"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2257:1:197","type":"","value":"4"},{"name":"_position","nodeType":"YulIdentifier","src":"2260:9:197"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2253:3:197"},"nodeType":"YulFunctionCall","src":"2253:17:197"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2239:2:197"},"nodeType":"YulFunctionCall","src":"2239:32:197"},"variableNames":[{"name":"_position","nodeType":"YulIdentifier","src":"2226:9:197"}]},{"nodeType":"YulAssignment","src":"2284:45:197","value":{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"2300:9:197"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2315:1:197","type":"","value":"8"},{"name":"_position","nodeType":"YulIdentifier","src":"2318:9:197"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2311:3:197"},"nodeType":"YulFunctionCall","src":"2311:17:197"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2297:2:197"},"nodeType":"YulFunctionCall","src":"2297:32:197"},"variableNames":[{"name":"_position","nodeType":"YulIdentifier","src":"2284:9:197"}]},{"nodeType":"YulAssignment","src":"2342:46:197","value":{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"2358:9:197"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2373:2:197","type":"","value":"16"},{"name":"_position","nodeType":"YulIdentifier","src":"2377:9:197"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2369:3:197"},"nodeType":"YulFunctionCall","src":"2369:18:197"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2355:2:197"},"nodeType":"YulFunctionCall","src":"2355:33:197"},"variableNames":[{"name":"_position","nodeType":"YulIdentifier","src":"2342:9:197"}]},{"nodeType":"YulAssignment","src":"2402:286:197","value":{"arguments":[{"name":"depth_","nodeType":"YulIdentifier","src":"2452:6:197"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2514:3:197","type":"","value":"251"},{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"2523:9:197"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2538:3:197","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2543:10:197","type":"","value":"0x07c4acdd"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2534:3:197"},"nodeType":"YulFunctionCall","src":"2534:20:197"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"2519:3:197"},"nodeType":"YulFunctionCall","src":"2519:36:197"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2510:3:197"},"nodeType":"YulFunctionCall","src":"2510:46:197"},{"kind":"number","nodeType":"YulLiteral","src":"2582:66:197","type":"","value":"0x0009010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f"}],"functionName":{"name":"byte","nodeType":"YulIdentifier","src":"2480:4:197"},"nodeType":"YulFunctionCall","src":"2480:190:197"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2428:2:197"},"nodeType":"YulFunctionCall","src":"2428:260:197"},"variableNames":[{"name":"depth_","nodeType":"YulIdentifier","src":"2402:6:197"}]}]},"evmVersion":"london","externalReferences":[{"declaration":110176,"isOffset":false,"isSlot":false,"src":"1888:9:197","valueSize":1},{"declaration":110176,"isOffset":false,"isSlot":false,"src":"1969:9:197","valueSize":1},{"declaration":110176,"isOffset":false,"isSlot":false,"src":"2062:9:197","valueSize":1},{"declaration":110176,"isOffset":false,"isSlot":false,"src":"2087:9:197","valueSize":1},{"declaration":110176,"isOffset":false,"isSlot":false,"src":"2110:9:197","valueSize":1},{"declaration":110176,"isOffset":false,"isSlot":false,"src":"2126:9:197","valueSize":1},{"declaration":110176,"isOffset":false,"isSlot":false,"src":"2144:9:197","valueSize":1},{"declaration":110176,"isOffset":false,"isSlot":false,"src":"2168:9:197","valueSize":1},{"declaration":110176,"isOffset":false,"isSlot":false,"src":"2184:9:197","valueSize":1},{"declaration":110176,"isOffset":false,"isSlot":false,"src":"2202:9:197","valueSize":1},{"declaration":110176,"isOffset":false,"isSlot":false,"src":"2226:9:197","valueSize":1},{"declaration":110176,"isOffset":false,"isSlot":false,"src":"2242:9:197","valueSize":1},{"declaration":110176,"isOffset":false,"isSlot":false,"src":"2260:9:197","valueSize":1},{"declaration":110176,"isOffset":false,"isSlot":false,"src":"2284:9:197","valueSize":1},{"declaration":110176,"isOffset":false,"isSlot":false,"src":"2300:9:197","valueSize":1},{"declaration":110176,"isOffset":false,"isSlot":false,"src":"2318:9:197","valueSize":1},{"declaration":110176,"isOffset":false,"isSlot":false,"src":"2342:9:197","valueSize":1},{"declaration":110176,"isOffset":false,"isSlot":false,"src":"2358:9:197","valueSize":1},{"declaration":110176,"isOffset":false,"isSlot":false,"src":"2377:9:197","valueSize":1},{"declaration":110176,"isOffset":false,"isSlot":false,"src":"2523:9:197","valueSize":1},{"declaration":110179,"isOffset":false,"isSlot":false,"src":"1825:6:197","valueSize":1},{"declaration":110179,"isOffset":false,"isSlot":false,"src":"1838:6:197","valueSize":1},{"declaration":110179,"isOffset":false,"isSlot":false,"src":"1880:6:197","valueSize":1},{"declaration":110179,"isOffset":false,"isSlot":false,"src":"1914:6:197","valueSize":1},{"declaration":110179,"isOffset":false,"isSlot":false,"src":"1927:6:197","valueSize":1},{"declaration":110179,"isOffset":false,"isSlot":false,"src":"1961:6:197","valueSize":1},{"declaration":110179,"isOffset":false,"isSlot":false,"src":"2079:6:197","valueSize":1},{"declaration":110179,"isOffset":false,"isSlot":false,"src":"2402:6:197","valueSize":1},{"declaration":110179,"isOffset":false,"isSlot":false,"src":"2452:6:197","valueSize":1}],"id":110181,"nodeType":"InlineAssembly","src":"1802:896:197"}]},"documentation":{"id":110173,"nodeType":"StructuredDocumentation","src":"1363:260:197","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:197","parameters":{"id":110177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110176,"mutability":"mutable","name":"_position","nameLocation":"1652:9:197","nodeType":"VariableDeclaration","scope":110183,"src":"1643:18:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110175,"nodeType":"UserDefinedTypeName","pathNode":{"id":110174,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"1643:8:197"},"referencedDeclaration":110154,"src":"1643:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"}],"src":"1642:20:197"},"returnParameters":{"id":110180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110179,"mutability":"mutable","name":"depth_","nameLocation":"1692:6:197","nodeType":"VariableDeclaration","scope":110183,"src":"1686:12:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":110178,"name":"uint8","nodeType":"ElementaryTypeName","src":"1686:5:197","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1685:14:197"},"scope":110367,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":110200,"nodeType":"FunctionDefinition","src":"3171:363:197","nodes":[],"body":{"id":110199,"nodeType":"Block","src":"3259:275:197","nodes":[],"statements":[{"assignments":[110193],"declarations":[{"constant":false,"id":110193,"mutability":"mutable","name":"msb","nameLocation":"3419:3:197","nodeType":"VariableDeclaration","scope":110199,"src":"3411:11:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":110192,"name":"uint256","nodeType":"ElementaryTypeName","src":"3411:7:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":110197,"initialValue":{"arguments":[{"id":110195,"name":"_position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110187,"src":"3431:9:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}],"id":110194,"name":"depth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110183,"src":"3425:5:197","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$110154_$returns$_t_uint8_$","typeString":"function (Position) pure returns (uint8)"}},"id":110196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3425:16:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"3411:30:197"},{"AST":{"nodeType":"YulBlock","src":"3460:68:197","statements":[{"nodeType":"YulAssignment","src":"3474:44:197","value":{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"3495:9:197"},{"arguments":[{"name":"msb","nodeType":"YulIdentifier","src":"3510:3:197"},{"kind":"number","nodeType":"YulLiteral","src":"3515:1:197","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3506:3:197"},"nodeType":"YulFunctionCall","src":"3506:11:197"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3491:3:197"},"nodeType":"YulFunctionCall","src":"3491:27:197"},"variableNames":[{"name":"indexAtDepth_","nodeType":"YulIdentifier","src":"3474:13:197"}]}]},"evmVersion":"london","externalReferences":[{"declaration":110187,"isOffset":false,"isSlot":false,"src":"3495:9:197","valueSize":1},{"declaration":110190,"isOffset":false,"isSlot":false,"src":"3474:13:197","valueSize":1},{"declaration":110193,"isOffset":false,"isSlot":false,"src":"3510:3:197","valueSize":1}],"id":110198,"nodeType":"InlineAssembly","src":"3451:77:197"}]},"documentation":{"id":110184,"nodeType":"StructuredDocumentation","src":"2710:456:197","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:197","parameters":{"id":110188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110187,"mutability":"mutable","name":"_position","nameLocation":"3202:9:197","nodeType":"VariableDeclaration","scope":110200,"src":"3193:18:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110186,"nodeType":"UserDefinedTypeName","pathNode":{"id":110185,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"3193:8:197"},"referencedDeclaration":110154,"src":"3193:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"}],"src":"3192:20:197"},"returnParameters":{"id":110191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110190,"mutability":"mutable","name":"indexAtDepth_","nameLocation":"3244:13:197","nodeType":"VariableDeclaration","scope":110200,"src":"3236:21:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":110189,"name":"uint128","nodeType":"ElementaryTypeName","src":"3236:7:197","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"3235:23:197"},"scope":110367,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":110212,"nodeType":"FunctionDefinition","src":"3720:148:197","nodes":[],"body":{"id":110211,"nodeType":"Block","src":"3793:75:197","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"3812:50:197","statements":[{"nodeType":"YulAssignment","src":"3826:26:197","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3839:1:197","type":"","value":"1"},{"name":"_position","nodeType":"YulIdentifier","src":"3842:9:197"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3835:3:197"},"nodeType":"YulFunctionCall","src":"3835:17:197"},"variableNames":[{"name":"left_","nodeType":"YulIdentifier","src":"3826:5:197"}]}]},"evmVersion":"london","externalReferences":[{"declaration":110204,"isOffset":false,"isSlot":false,"src":"3842:9:197","valueSize":1},{"declaration":110208,"isOffset":false,"isSlot":false,"src":"3826:5:197","valueSize":1}],"id":110210,"nodeType":"InlineAssembly","src":"3803:59:197"}]},"documentation":{"id":110201,"nodeType":"StructuredDocumentation","src":"3540:175:197","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:197","parameters":{"id":110205,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110204,"mutability":"mutable","name":"_position","nameLocation":"3743:9:197","nodeType":"VariableDeclaration","scope":110212,"src":"3734:18:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110203,"nodeType":"UserDefinedTypeName","pathNode":{"id":110202,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"3734:8:197"},"referencedDeclaration":110154,"src":"3734:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"}],"src":"3733:20:197"},"returnParameters":{"id":110209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110208,"mutability":"mutable","name":"left_","nameLocation":"3786:5:197","nodeType":"VariableDeclaration","scope":110212,"src":"3777:14:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110207,"nodeType":"UserDefinedTypeName","pathNode":{"id":110206,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"3777:8:197"},"referencedDeclaration":110154,"src":"3777:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"}],"src":"3776:16:197"},"scope":110367,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":110224,"nodeType":"FunctionDefinition","src":"4057:158:197","nodes":[],"body":{"id":110223,"nodeType":"Block","src":"4132:83:197","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"4151:58:197","statements":[{"nodeType":"YulAssignment","src":"4165:34:197","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4178:1:197","type":"","value":"1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4185:1:197","type":"","value":"1"},{"name":"_position","nodeType":"YulIdentifier","src":"4188:9:197"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4181:3:197"},"nodeType":"YulFunctionCall","src":"4181:17:197"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"4175:2:197"},"nodeType":"YulFunctionCall","src":"4175:24:197"},"variableNames":[{"name":"right_","nodeType":"YulIdentifier","src":"4165:6:197"}]}]},"evmVersion":"london","externalReferences":[{"declaration":110216,"isOffset":false,"isSlot":false,"src":"4188:9:197","valueSize":1},{"declaration":110220,"isOffset":false,"isSlot":false,"src":"4165:6:197","valueSize":1}],"id":110222,"nodeType":"InlineAssembly","src":"4142:67:197"}]},"documentation":{"id":110213,"nodeType":"StructuredDocumentation","src":"3874:178:197","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:197","parameters":{"id":110217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110216,"mutability":"mutable","name":"_position","nameLocation":"4081:9:197","nodeType":"VariableDeclaration","scope":110224,"src":"4072:18:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110215,"nodeType":"UserDefinedTypeName","pathNode":{"id":110214,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"4072:8:197"},"referencedDeclaration":110154,"src":"4072:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"}],"src":"4071:20:197"},"returnParameters":{"id":110221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110220,"mutability":"mutable","name":"right_","nameLocation":"4124:6:197","nodeType":"VariableDeclaration","scope":110224,"src":"4115:15:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110219,"nodeType":"UserDefinedTypeName","pathNode":{"id":110218,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"4115:8:197"},"referencedDeclaration":110154,"src":"4115:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"}],"src":"4114:17:197"},"scope":110367,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":110236,"nodeType":"FunctionDefinition","src":"4405:154:197","nodes":[],"body":{"id":110235,"nodeType":"Block","src":"4482:77:197","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"4501:52:197","statements":[{"nodeType":"YulAssignment","src":"4515:28:197","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4530:1:197","type":"","value":"1"},{"name":"_position","nodeType":"YulIdentifier","src":"4533:9:197"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"4526:3:197"},"nodeType":"YulFunctionCall","src":"4526:17:197"},"variableNames":[{"name":"parent_","nodeType":"YulIdentifier","src":"4515:7:197"}]}]},"evmVersion":"london","externalReferences":[{"declaration":110228,"isOffset":false,"isSlot":false,"src":"4533:9:197","valueSize":1},{"declaration":110232,"isOffset":false,"isSlot":false,"src":"4515:7:197","valueSize":1}],"id":110234,"nodeType":"InlineAssembly","src":"4492:61:197"}]},"documentation":{"id":110225,"nodeType":"StructuredDocumentation","src":"4221:179:197","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:197","parameters":{"id":110229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110228,"mutability":"mutable","name":"_position","nameLocation":"4430:9:197","nodeType":"VariableDeclaration","scope":110236,"src":"4421:18:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110227,"nodeType":"UserDefinedTypeName","pathNode":{"id":110226,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"4421:8:197"},"referencedDeclaration":110154,"src":"4421:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"}],"src":"4420:20:197"},"returnParameters":{"id":110233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110232,"mutability":"mutable","name":"parent_","nameLocation":"4473:7:197","nodeType":"VariableDeclaration","scope":110236,"src":"4464:16:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110231,"nodeType":"UserDefinedTypeName","pathNode":{"id":110230,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"4464:8:197"},"referencedDeclaration":110154,"src":"4464:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"}],"src":"4463:18:197"},"scope":110367,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":110256,"nodeType":"FunctionDefinition","src":"4980:313:197","nodes":[],"body":{"id":110255,"nodeType":"Block","src":"5084:209:197","nodes":[],"statements":[{"assignments":[110249],"declarations":[{"constant":false,"id":110249,"mutability":"mutable","name":"msb","nameLocation":"5102:3:197","nodeType":"VariableDeclaration","scope":110255,"src":"5094:11:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":110248,"name":"uint256","nodeType":"ElementaryTypeName","src":"5094:7:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":110253,"initialValue":{"arguments":[{"id":110251,"name":"_position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110240,"src":"5114:9:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}],"id":110250,"name":"depth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110183,"src":"5108:5:197","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$110154_$returns$_t_uint8_$","typeString":"function (Position) pure returns (uint8)"}},"id":110252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5108:16:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"5094:30:197"},{"AST":{"nodeType":"YulBlock","src":"5143:144:197","statements":[{"nodeType":"YulVariableDeclaration","src":"5157:36:197","value":{"arguments":[{"name":"_maxDepth","nodeType":"YulIdentifier","src":"5178:9:197"},{"name":"msb","nodeType":"YulIdentifier","src":"5189:3:197"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5174:3:197"},"nodeType":"YulFunctionCall","src":"5174:19:197"},"variables":[{"name":"remaining","nodeType":"YulTypedName","src":"5161:9:197","type":""}]},{"nodeType":"YulAssignment","src":"5206:71:197","value":{"arguments":[{"arguments":[{"name":"remaining","nodeType":"YulIdentifier","src":"5228:9:197"},{"name":"_position","nodeType":"YulIdentifier","src":"5239:9:197"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5224:3:197"},"nodeType":"YulFunctionCall","src":"5224:25:197"},{"arguments":[{"arguments":[{"name":"remaining","nodeType":"YulIdentifier","src":"5259:9:197"},{"kind":"number","nodeType":"YulLiteral","src":"5270:1:197","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5255:3:197"},"nodeType":"YulFunctionCall","src":"5255:17:197"},{"kind":"number","nodeType":"YulLiteral","src":"5274:1:197","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5251:3:197"},"nodeType":"YulFunctionCall","src":"5251:25:197"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"5221:2:197"},"nodeType":"YulFunctionCall","src":"5221:56:197"},"variableNames":[{"name":"rightIndex_","nodeType":"YulIdentifier","src":"5206:11:197"}]}]},"evmVersion":"london","externalReferences":[{"declaration":110242,"isOffset":false,"isSlot":false,"src":"5178:9:197","valueSize":1},{"declaration":110240,"isOffset":false,"isSlot":false,"src":"5239:9:197","valueSize":1},{"declaration":110249,"isOffset":false,"isSlot":false,"src":"5189:3:197","valueSize":1},{"declaration":110246,"isOffset":false,"isSlot":false,"src":"5206:11:197","valueSize":1}],"id":110254,"nodeType":"InlineAssembly","src":"5134:153:197"}]},"documentation":{"id":110237,"nodeType":"StructuredDocumentation","src":"4565:410:197","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:197","parameters":{"id":110243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110240,"mutability":"mutable","name":"_position","nameLocation":"5009:9:197","nodeType":"VariableDeclaration","scope":110256,"src":"5000:18:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110239,"nodeType":"UserDefinedTypeName","pathNode":{"id":110238,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"5000:8:197"},"referencedDeclaration":110154,"src":"5000:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":110242,"mutability":"mutable","name":"_maxDepth","nameLocation":"5028:9:197","nodeType":"VariableDeclaration","scope":110256,"src":"5020:17:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":110241,"name":"uint256","nodeType":"ElementaryTypeName","src":"5020:7:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4999:39:197"},"returnParameters":{"id":110247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110246,"mutability":"mutable","name":"rightIndex_","nameLocation":"5071:11:197","nodeType":"VariableDeclaration","scope":110256,"src":"5062:20:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110245,"nodeType":"UserDefinedTypeName","pathNode":{"id":110244,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"5062:8:197"},"referencedDeclaration":110154,"src":"5062:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"}],"src":"5061:22:197"},"scope":110367,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":110275,"nodeType":"FunctionDefinition","src":"5741:336:197","nodes":[],"body":{"id":110274,"nodeType":"Block","src":"5844:233:197","nodes":[],"statements":[{"assignments":[110268],"declarations":[{"constant":false,"id":110268,"mutability":"mutable","name":"msb","nameLocation":"5862:3:197","nodeType":"VariableDeclaration","scope":110274,"src":"5854:11:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":110267,"name":"uint256","nodeType":"ElementaryTypeName","src":"5854:7:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":110272,"initialValue":{"arguments":[{"id":110270,"name":"_position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110260,"src":"5874:9:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}],"id":110269,"name":"depth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110183,"src":"5868:5:197","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$110154_$returns$_t_uint8_$","typeString":"function (Position) pure returns (uint8)"}},"id":110271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5868:16:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"5854:30:197"},{"AST":{"nodeType":"YulBlock","src":"5903:168:197","statements":[{"nodeType":"YulVariableDeclaration","src":"5917:36:197","value":{"arguments":[{"name":"_maxDepth","nodeType":"YulIdentifier","src":"5938:9:197"},{"name":"msb","nodeType":"YulIdentifier","src":"5949:3:197"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5934:3:197"},"nodeType":"YulFunctionCall","src":"5934:19:197"},"variables":[{"name":"remaining","nodeType":"YulTypedName","src":"5921:9:197","type":""}]},{"nodeType":"YulAssignment","src":"5966:95:197","value":{"arguments":[{"arguments":[{"arguments":[{"name":"remaining","nodeType":"YulIdentifier","src":"5992:9:197"},{"name":"_position","nodeType":"YulIdentifier","src":"6003:9:197"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5988:3:197"},"nodeType":"YulFunctionCall","src":"5988:25:197"},{"arguments":[{"arguments":[{"name":"remaining","nodeType":"YulIdentifier","src":"6023:9:197"},{"kind":"number","nodeType":"YulLiteral","src":"6034:1:197","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6019:3:197"},"nodeType":"YulFunctionCall","src":"6019:17:197"},{"kind":"number","nodeType":"YulLiteral","src":"6038:1:197","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6015:3:197"},"nodeType":"YulFunctionCall","src":"6015:25:197"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"5985:2:197"},"nodeType":"YulFunctionCall","src":"5985:56:197"},{"arguments":[{"name":"_maxDepth","nodeType":"YulIdentifier","src":"6047:9:197"},{"kind":"number","nodeType":"YulLiteral","src":"6058:1:197","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6043:3:197"},"nodeType":"YulFunctionCall","src":"6043:17:197"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5981:3:197"},"nodeType":"YulFunctionCall","src":"5981:80:197"},"variableNames":[{"name":"traceIndex_","nodeType":"YulIdentifier","src":"5966:11:197"}]}]},"evmVersion":"london","externalReferences":[{"declaration":110262,"isOffset":false,"isSlot":false,"src":"5938:9:197","valueSize":1},{"declaration":110262,"isOffset":false,"isSlot":false,"src":"6047:9:197","valueSize":1},{"declaration":110260,"isOffset":false,"isSlot":false,"src":"6003:9:197","valueSize":1},{"declaration":110268,"isOffset":false,"isSlot":false,"src":"5949:3:197","valueSize":1},{"declaration":110265,"isOffset":false,"isSlot":false,"src":"5966:11:197","valueSize":1}],"id":110273,"nodeType":"InlineAssembly","src":"5894:177:197"}]},"documentation":{"id":110257,"nodeType":"StructuredDocumentation","src":"5299:437:197","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:197","parameters":{"id":110263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110260,"mutability":"mutable","name":"_position","nameLocation":"5770:9:197","nodeType":"VariableDeclaration","scope":110275,"src":"5761:18:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110259,"nodeType":"UserDefinedTypeName","pathNode":{"id":110258,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"5761:8:197"},"referencedDeclaration":110154,"src":"5761:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":110262,"mutability":"mutable","name":"_maxDepth","nameLocation":"5789:9:197","nodeType":"VariableDeclaration","scope":110275,"src":"5781:17:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":110261,"name":"uint256","nodeType":"ElementaryTypeName","src":"5781:7:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5760:39:197"},"returnParameters":{"id":110266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110265,"mutability":"mutable","name":"traceIndex_","nameLocation":"5831:11:197","nodeType":"VariableDeclaration","scope":110275,"src":"5823:19:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":110264,"name":"uint256","nodeType":"ElementaryTypeName","src":"5823:7:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5822:21:197"},"scope":110367,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":110298,"nodeType":"FunctionDefinition","src":"6379:710:197","nodes":[],"body":{"id":110297,"nodeType":"Block","src":"6465:624:197","nodes":[],"statements":[{"assignments":[110287],"declarations":[{"constant":false,"id":110287,"mutability":"mutable","name":"lsb","nameLocation":"6561:3:197","nodeType":"VariableDeclaration","scope":110297,"src":"6552:12:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110286,"nodeType":"UserDefinedTypeName","pathNode":{"id":110285,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"6552:8:197"},"referencedDeclaration":110154,"src":"6552:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"}],"id":110288,"nodeType":"VariableDeclarationStatement","src":"6552:12:197"},{"AST":{"nodeType":"YulBlock","src":"6583:69:197","statements":[{"nodeType":"YulAssignment","src":"6597:45:197","value":{"arguments":[{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"6612:9:197"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6608:3:197"},"nodeType":"YulFunctionCall","src":"6608:14:197"},{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"6628:9:197"},{"kind":"number","nodeType":"YulLiteral","src":"6639:1:197","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6624:3:197"},"nodeType":"YulFunctionCall","src":"6624:17:197"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6604:3:197"},"nodeType":"YulFunctionCall","src":"6604:38:197"},"variableNames":[{"name":"lsb","nodeType":"YulIdentifier","src":"6597:3:197"}]}]},"evmVersion":"london","externalReferences":[{"declaration":110279,"isOffset":false,"isSlot":false,"src":"6612:9:197","valueSize":1},{"declaration":110279,"isOffset":false,"isSlot":false,"src":"6628:9:197","valueSize":1},{"declaration":110287,"isOffset":false,"isSlot":false,"src":"6597:3:197","valueSize":1}],"id":110289,"nodeType":"InlineAssembly","src":"6574:78:197"},{"assignments":[110291],"declarations":[{"constant":false,"id":110291,"mutability":"mutable","name":"msb","nameLocation":"6737:3:197","nodeType":"VariableDeclaration","scope":110297,"src":"6729:11:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":110290,"name":"uint256","nodeType":"ElementaryTypeName","src":"6729:7:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":110295,"initialValue":{"arguments":[{"id":110293,"name":"lsb","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110287,"src":"6749:3:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}],"id":110292,"name":"depth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110183,"src":"6743:5:197","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$110154_$returns$_t_uint8_$","typeString":"function (Position) pure returns (uint8)"}},"id":110294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6743:10:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"6729:24:197"},{"AST":{"nodeType":"YulBlock","src":"6929:154:197","statements":[{"nodeType":"YulVariableDeclaration","src":"6943:28:197","value":{"arguments":[{"name":"msb","nodeType":"YulIdentifier","src":"6956:3:197"},{"name":"_position","nodeType":"YulIdentifier","src":"6961:9:197"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"6952:3:197"},"nodeType":"YulFunctionCall","src":"6952:19:197"},"variables":[{"name":"a","nodeType":"YulTypedName","src":"6947:1:197","type":""}]},{"nodeType":"YulAssignment","src":"7044:29:197","value":{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"7060:1:197"},{"arguments":[{"name":"a","nodeType":"YulIdentifier","src":"7070:1:197"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7063:6:197"},"nodeType":"YulFunctionCall","src":"7063:9:197"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"7057:2:197"},"nodeType":"YulFunctionCall","src":"7057:16:197"},"variableNames":[{"name":"ancestor_","nodeType":"YulIdentifier","src":"7044:9:197"}]}]},"evmVersion":"london","externalReferences":[{"declaration":110279,"isOffset":false,"isSlot":false,"src":"6961:9:197","valueSize":1},{"declaration":110283,"isOffset":false,"isSlot":false,"src":"7044:9:197","valueSize":1},{"declaration":110291,"isOffset":false,"isSlot":false,"src":"6956:3:197","valueSize":1}],"id":110296,"nodeType":"InlineAssembly","src":"6920:163:197"}]},"documentation":{"id":110276,"nodeType":"StructuredDocumentation","src":"6083:291:197","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:197","parameters":{"id":110280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110279,"mutability":"mutable","name":"_position","nameLocation":"6411:9:197","nodeType":"VariableDeclaration","scope":110298,"src":"6402:18:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110278,"nodeType":"UserDefinedTypeName","pathNode":{"id":110277,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"6402:8:197"},"referencedDeclaration":110154,"src":"6402:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"}],"src":"6401:20:197"},"returnParameters":{"id":110284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110283,"mutability":"mutable","name":"ancestor_","nameLocation":"6454:9:197","nodeType":"VariableDeclaration","scope":110298,"src":"6445:18:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110282,"nodeType":"UserDefinedTypeName","pathNode":{"id":110281,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"6445:8:197"},"referencedDeclaration":110154,"src":"6445:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"}],"src":"6444:20:197"},"scope":110367,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":110341,"nodeType":"FunctionDefinition","src":"7608:944:197","nodes":[],"body":{"id":110340,"nodeType":"Block","src":"7781:771:197","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":110314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":110310,"name":"_position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110302,"src":"7877:9:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"id":110311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"depth","nodeType":"MemberAccess","referencedDeclaration":110183,"src":"7877:15:197","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$110154_$returns$_t_uint8_$bound_to$_t_userDefinedValueType$_Position_$110154_$","typeString":"function (Position) pure returns (uint8)"}},"id":110312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7877:17:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":110313,"name":"_upperBoundExclusive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110304,"src":"7898:20:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7877:41:197","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":110317,"nodeType":"IfStatement","src":"7873:222:197","trueBody":{"id":110316,"nodeType":"Block","src":"7920:175:197","statements":[{"AST":{"nodeType":"YulBlock","src":"7943:142:197","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8019:4:197","type":"","value":"0x00"},{"kind":"number","nodeType":"YulLiteral","src":"8025:10:197","type":"","value":"0xb34b5c22"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"8012:6:197"},"nodeType":"YulFunctionCall","src":"8012:24:197"},"nodeType":"YulExpressionStatement","src":"8012:24:197"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8060:4:197","type":"","value":"0x1C"},{"kind":"number","nodeType":"YulLiteral","src":"8066:4:197","type":"","value":"0x04"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8053:6:197"},"nodeType":"YulFunctionCall","src":"8053:18:197"},"nodeType":"YulExpressionStatement","src":"8053:18:197"}]},"evmVersion":"london","externalReferences":[],"id":110315,"nodeType":"InlineAssembly","src":"7934:151:197"}]}},{"expression":{"id":110322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":110318,"name":"ancestor_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110308,"src":"8148:9:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":110320,"name":"_position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110302,"src":"8174:9:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}],"id":110319,"name":"traceAncestor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110298,"src":"8160:13:197","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$110154_$returns$_t_userDefinedValueType$_Position_$110154_$","typeString":"function (Position) pure returns (Position)"}},"id":110321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8160:24:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"src":"8148:36:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"id":110323,"nodeType":"ExpressionStatement","src":"8148:36:197"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":110328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":110324,"name":"ancestor_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110308,"src":"8420:9:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"id":110325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"depth","nodeType":"MemberAccess","referencedDeclaration":110183,"src":"8420:15:197","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$110154_$returns$_t_uint8_$bound_to$_t_userDefinedValueType$_Position_$110154_$","typeString":"function (Position) pure returns (uint8)"}},"id":110326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8420:17:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":110327,"name":"_upperBoundExclusive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110304,"src":"8441:20:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8420:41:197","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":110339,"nodeType":"IfStatement","src":"8416:130:197","trueBody":{"id":110338,"nodeType":"Block","src":"8463:83:197","statements":[{"expression":{"id":110336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":110329,"name":"ancestor_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110308,"src":"8477:9:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":110334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":110332,"name":"_upperBoundExclusive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110304,"src":"8510:20:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":110333,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8533:1:197","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8510:24:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":110330,"name":"ancestor_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":110308,"src":"8489:9:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"id":110331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"rightIndex","nodeType":"MemberAccess","referencedDeclaration":110256,"src":"8489:20:197","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$110154_$_t_uint256_$returns$_t_userDefinedValueType$_Position_$110154_$bound_to$_t_userDefinedValueType$_Position_$110154_$","typeString":"function (Position,uint256) pure returns (Position)"}},"id":110335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8489:46:197","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"src":"8477:58:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"id":110337,"nodeType":"ExpressionStatement","src":"8477:58:197"}]}}]},"documentation":{"id":110299,"nodeType":"StructuredDocumentation","src":"7095:508:197","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:197","parameters":{"id":110305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110302,"mutability":"mutable","name":"_position","nameLocation":"7656:9:197","nodeType":"VariableDeclaration","scope":110341,"src":"7647:18:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110301,"nodeType":"UserDefinedTypeName","pathNode":{"id":110300,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"7647:8:197"},"referencedDeclaration":110154,"src":"7647:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":110304,"mutability":"mutable","name":"_upperBoundExclusive","nameLocation":"7683:20:197","nodeType":"VariableDeclaration","scope":110341,"src":"7675:28:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":110303,"name":"uint256","nodeType":"ElementaryTypeName","src":"7675:7:197","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7637:72:197"},"returnParameters":{"id":110309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110308,"mutability":"mutable","name":"ancestor_","nameLocation":"7766:9:197","nodeType":"VariableDeclaration","scope":110341,"src":"7757:18:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110307,"nodeType":"UserDefinedTypeName","pathNode":{"id":110306,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"7757:8:197"},"referencedDeclaration":110154,"src":"7757:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"}],"src":"7756:20:197"},"scope":110367,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":110355,"nodeType":"FunctionDefinition","src":"8973:187:197","nodes":[],"body":{"id":110354,"nodeType":"Block","src":"9062:98:197","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"9081:73:197","statements":[{"nodeType":"YulAssignment","src":"9095:49:197","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"9108:1:197","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"_isAttack","nodeType":"YulIdentifier","src":"9121:9:197"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"9114:6:197"},"nodeType":"YulFunctionCall","src":"9114:17:197"},{"name":"_position","nodeType":"YulIdentifier","src":"9133:9:197"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"9111:2:197"},"nodeType":"YulFunctionCall","src":"9111:32:197"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"9104:3:197"},"nodeType":"YulFunctionCall","src":"9104:40:197"},"variableNames":[{"name":"move_","nodeType":"YulIdentifier","src":"9095:5:197"}]}]},"evmVersion":"london","externalReferences":[{"declaration":110347,"isOffset":false,"isSlot":false,"src":"9121:9:197","valueSize":1},{"declaration":110345,"isOffset":false,"isSlot":false,"src":"9133:9:197","valueSize":1},{"declaration":110351,"isOffset":false,"isSlot":false,"src":"9095:5:197","valueSize":1}],"id":110353,"nodeType":"InlineAssembly","src":"9072:82:197"}]},"documentation":{"id":110342,"nodeType":"StructuredDocumentation","src":"8558:410:197","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:197","parameters":{"id":110348,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110345,"mutability":"mutable","name":"_position","nameLocation":"8996:9:197","nodeType":"VariableDeclaration","scope":110355,"src":"8987:18:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110344,"nodeType":"UserDefinedTypeName","pathNode":{"id":110343,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"8987:8:197"},"referencedDeclaration":110154,"src":"8987:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":110347,"mutability":"mutable","name":"_isAttack","nameLocation":"9012:9:197","nodeType":"VariableDeclaration","scope":110355,"src":"9007:14:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":110346,"name":"bool","nodeType":"ElementaryTypeName","src":"9007:4:197","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8986:36:197"},"returnParameters":{"id":110352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110351,"mutability":"mutable","name":"move_","nameLocation":"9055:5:197","nodeType":"VariableDeclaration","scope":110355,"src":"9046:14:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110350,"nodeType":"UserDefinedTypeName","pathNode":{"id":110349,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"9046:8:197"},"referencedDeclaration":110154,"src":"9046:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"}],"src":"9045:16:197"},"scope":110367,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":110366,"nodeType":"FunctionDefinition","src":"9383:136:197","nodes":[],"body":{"id":110365,"nodeType":"Block","src":"9453:66:197","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"9472:41:197","statements":[{"nodeType":"YulAssignment","src":"9486:17:197","value":{"name":"_position","nodeType":"YulIdentifier","src":"9494:9:197"},"variableNames":[{"name":"raw_","nodeType":"YulIdentifier","src":"9486:4:197"}]}]},"evmVersion":"london","externalReferences":[{"declaration":110359,"isOffset":false,"isSlot":false,"src":"9494:9:197","valueSize":1},{"declaration":110362,"isOffset":false,"isSlot":false,"src":"9486:4:197","valueSize":1}],"id":110364,"nodeType":"InlineAssembly","src":"9463:50:197"}]},"documentation":{"id":110356,"nodeType":"StructuredDocumentation","src":"9166:212:197","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:197","parameters":{"id":110360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110359,"mutability":"mutable","name":"_position","nameLocation":"9405:9:197","nodeType":"VariableDeclaration","scope":110366,"src":"9396:18:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"},"typeName":{"id":110358,"nodeType":"UserDefinedTypeName","pathNode":{"id":110357,"name":"Position","nodeType":"IdentifierPath","referencedDeclaration":110154,"src":"9396:8:197"},"referencedDeclaration":110154,"src":"9396:8:197","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$110154","typeString":"Position"}},"visibility":"internal"}],"src":"9395:20:197"},"returnParameters":{"id":110363,"nodeType":"ParameterList","parameters":[{"constant":false,"id":110362,"mutability":"mutable","name":"raw_","nameLocation":"9447:4:197","nodeType":"VariableDeclaration","scope":110366,"src":"9439:12:197","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":110361,"name":"uint128","nodeType":"ElementaryTypeName","src":"9439:7:197","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9438:14:197"},"scope":110367,"stateMutability":"pure","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[],"canonicalName":"LibPosition","contractDependencies":[],"contractKind":"library","documentation":{"id":110155,"nodeType":"StructuredDocumentation","src":"487:112:197","text":"@title LibPosition\n @notice This library contains helper functions for working with the `Position` type."},"fullyImplemented":true,"linearizedBaseContracts":[110367],"name":"LibPosition","nameLocation":"607:11:197","scope":110368,"usedErrors":[]}],"license":"MIT"},"id":197}