Skip to content

Instantly share code, notes, and snippets.

@ekpyron
Last active June 9, 2021 14:00
Show Gist options
  • Save ekpyron/b5a00f3d09b132ed415acd4fb51b929a to your computer and use it in GitHub Desktop.
Save ekpyron/b5a00f3d09b132ed415acd4fb51b929a to your computer and use it in GitHub Desktop.
// test/libsolidity/semanticTests/calldata/calldata_internal_function_pointer.sol --evm-version homestead --optimize
// function call to g() reverts, even though it should not
object "C_71" {
code {
{
mstore(64, 128)
if callvalue() { revert(0, 0) }
sstore(0x00, or(and(sload(0x00), not(sub(exp(2, 64), 1))), 28))
let _1 := datasize("C_71_deployed")
codecopy(128, dataoffset("C_71_deployed"), _1)
return(128, _1)
}
}
object "C_71_deployed" {
code {
{
let _1 := 64
mstore(_1, 128)
if iszero(lt(calldatasize(), 4))
{
let _2 := 0
switch div(calldataload(_2), exp(2, 224))
case 0xb2e4ec10 {
if callvalue() { revert(_2, _2) }
if slt(add(calldatasize(), not(3)), 32) { revert(_2, _2) }
let offset := calldataload(4)
let _3 := 0xffffffffffffffff
if gt(offset, _3) { revert(_2, _2) }
if iszero(slt(add(offset, 35), calldatasize())) { revert(_2, _2) }
let length := calldataload(add(4, offset))
if gt(length, _3) { revert(_2, _2) }
if gt(add(add(offset, length), 36), calldatasize()) { revert(_2, _2) }
let value := and(sload(_2), _3)
let out := _2
switch value
case 28 {
if iszero(lt(0x02, length)) { panic_error_0x32() }
out := and(calldataload(add(offset, 38)), 0xff00000000000000000000000000000000000000000000000000000000000000)
}
default {
mstore(_2, 35408467139433450592217433187231851964531694900788300625387963629091585785856)
mstore(4, 0x51)
revert(_2, 36)
}
let memPos := mload(_1)
mstore(memPos, and(out, 0xff00000000000000000000000000000000000000000000000000000000000000))
return(memPos, 32)
}
case 0xe2179b8e {
if callvalue() { revert(_2, _2) }
if slt(add(calldatasize(), not(3)), _2) { revert(_2, _2) }
let memPtr := mload(_1)
let newFreePtr := add(memPtr, 96)
let _4 := 0xffffffffffffffff
if or(gt(newFreePtr, _4), lt(newFreePtr, memPtr)) { panic_error_0x41() }
mstore(_1, newFreePtr)
mstore(memPtr, 0x22)
let _5 := 32
calldatacopy(add(memPtr, _5), calldatasize(), _1)
if iszero(lt(0x02, mload(memPtr))) { panic_error_0x32() }
mstore8(add(memPtr, 0x22), 0x07)
mstore(add(mload(_1), _5), _2)
if iszero(extcodesize(address())) { revert(_2, _2) }
let _6 := mload(_1)
mstore(_6, 0xb2e4ec1000000000000000000000000000000000000000000000000000000000)
mstore(add(_6, 4), _5)
let length_1 := mload(memPtr)
mstore(add(_6, 36), length_1)
let i := _2
for { } lt(i, length_1) { i := add(i, _5) }
{
mstore(add(add(_6, i), 68), mload(add(add(memPtr, i), _5)))
}
if gt(i, length_1)
{
mstore(add(add(_6, length_1), 68), _2)
}
let _7 := call(add(gas(), not(49)), address(), _2, _6, add(sub(add(_6, and(add(length_1, 31), not(31))), _6), 68), _6, _5)
if iszero(_7) { revert(_2, _2) }
let expr := _2
if _7
{
let newFreePtr_1 := add(_6, _5)
if or(gt(newFreePtr_1, _4), lt(newFreePtr_1, _6)) { panic_error_0x41() }
mstore(_1, newFreePtr_1)
let value_1 := mload(_6)
if iszero(eq(value_1, and(value_1, 0xff00000000000000000000000000000000000000000000000000000000000000))) { revert(_2, _2) }
expr := value_1
}
let memPos_1 := mload(_1)
mstore(memPos_1, and(expr, 0xff00000000000000000000000000000000000000000000000000000000000000))
return(memPos_1, _5)
}
}
revert(0, 0)
}
function panic_error_0x32()
{
mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)
mstore(4, 0x32)
revert(0, 0x24)
}
function panic_error_0x41()
{
mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)
mstore(4, 0x41)
revert(0, 0x24)
}
}
}
}
// ====
// stackOptimization: true
// ----
// /* "":61:64 */
// 0x80 // [ 128 ]
// /* "":57:59 */
// 0x40 // [ 128, 64 ]
// /* "":50:65 */
// mstore // [] statement correct
// /* "":81:92 */
// jumpi(tag_1, callvalue) // [] condition correct
// tag_2: // []
// /* "":181:183 */
// 0x1c // [ 28 ]
// /* "":175:176 */
// 0x01 // [ 28, 1 ]
// /* "":170:172 */
// 0x40 // [ 28, 1, 64 ]
// /* "":167:168 */
// 0x02 // [ 28, 1, 64, 2 ]
// /* "":163:173 */
// exp // [ 28, 1, exp(2,64) ]
// /* "":159:177 */
// sub // [ 28, sub(exp(2,64),1) ]
// /* "":155:178 */
// not // [ 28, not(sub(exp(2,64),1)) ]
// /* "":148:152 */
// 0x00 // [ 28, not(sub(exp(2,64),1)), 0x00 ]
// /* "":142:153 */
// sload // [ 28, not(sub(exp(2,64),1)), sload(0x00) ]
// /* "":138:179 */
// and // [ 28, and(sload(0x00),not(sub(exp(2,64),1))) ]
// /* "":135:184 */
// or // [ or(and(sload(0x00),not(sub(exp(2,64),1))),28) ]
// /* "":129:133 */
// 0x00 // [ or(and(sload(0x00),not(sub(exp(2,64),1))), 28), 0x00 ]
// /* "":122:185 */
// sstore // [ ] statement correct
// /* "":208:233 */
// dataSize(sub_0) // [ dataSize(sub_0) ]
// dup1 // [ dataSize(sub_0), dataSize(sub_0) ]
// /* "":260:287 */
// dataOffset(sub_0) // [ dataSize(sub_0), dataSize(sub_0), dataOffset(sub_0) ]
// /* "":255:258 */
// 0x80 // [ dataSize(sub_0), dataSize(sub_0), dataOffset(sub_0), 128 ]
// /* "":246:292 */
// codecopy // [ dataSize(sub_0) ] statement correct
// /* "":312:315 */
// 0x80 // [ dataSize(sub_0), 128 ]
// /* "":305:320 */
// return // [ ] statement correct
// tag_1: // []
// /* "":105:106 */
// 0x00 // [ 0x00 ]
// dup1 // [ 0x00, 0x00 ]
// /* "":95:107 */
// revert // [ revert ]
// stop
//
// sub_0: assembly {
// /* "":421:423 */
// 0x40 // [ _1 ]
// /* "":451:454 */
// 0x80 // [ _1, 128 ]
// dup2 // [ _1, 128, _1 ]
// /* "":440:455 */
// mstore // [ _1 ] statement correct
// /* "":501:502 */
// 0x04 // [ _1, 0x04 ]
// /* "":485:499 */
// calldatasize // [ _1, 0x04, calldatasize() ]
// /* "":482:503 */
// lt // [ _1, lt(calldatasize(),0x04) ]
// /* "":475:504 */
// iszero // [ _1, iszero(lt(calldatasize(),0x04)) ]
// tag_1 // [ _1, iszero(lt(calldatasize(),0x04)), tag_1 ]
// jumpi // [ _1 ] condition correct
// tag_2: // [ JUNK ]
// pop // [ ]
// /* "":4867:4868 */
// 0x00 // [ 0x00 ]
// dup1 // [ 0x00, 0x00 ]
// /* "":4857:4869 */
// revert // [ ] statement correct
// tag_1: // [ _1 ]
// /* "":553:554 */
// 0x00 // [ _1, _2 ]
// /* "":611:614 */
// 0xe0 // [ _1, _2, 224 ]
// /* "":608:609 */
// 0x02 // [ _1, _2, 224, 2 ]
// /* "":604:615 */
// exp // [ _1, _2, exp(2,224) ]
// dup2 // [ _1, _2, exp(2,224), _2 ]
// /* "":586:602 */
// calldataload // [ _1, _2, exp(2,224), calldataload(_2) ]
// /* "":582:616 */
// div // [ _1, _2, div(calldataload(_2),exp(2,224)) ] = [ _1, _2, switchExpression ]
// dup1 // [ _1, _2, switchExpression, switchExpression ]
// /* "":642:652 */
// 0xb2e4ec10 // [ _1, _2, switchExpression, switchExpression, 0xb2e4ec10 ]
// eq // [ _1, _2, switchExpression, eq(0xb2e4ec10,switchExpression) ]
// tag_3 // [ _1, _2, switchExpression, eq(0xb2e4ec10,switchExpression), tag_3 ]
// jumpi // [ _1, _2, switchExpression ] condition correct
// tag_4: // note: unused tag
// /* "":2206:2216 */
// 0xe2179b8e // [ _1, _2, switchExpression, 0xe2179b8e ]
// eq // [ _1, _2, eq(0xe2179b8e,switchExpression) ]
// tag_5 // [ _1, _2, eq(0xe2179b8e,switchExpression), tag_5 ]
// jumpi // [ _1, _2 ] condition correct
// tag_6: // [ _1, _2 ] code after switch
// pop // [ _1 ]
// pop // [ ]
// pc // [ JUNK ] note: better not to pop before, i.e. stack shuffling should be junk-aware
// jump(tag_2) // layout compatible
// tag_5: // [ _1, _2 ] start of switch case 0xe2179b8e
// /* "":2246:2257 */
// jumpi(tag_7, callvalue) // [ _1, _2 ] condition correct
// tag_8:
// dup1 // [ _1, _2, _2 ]
// /* "":2332:2333 */
// 0x03 // [ _1, _2, _2, 3 ]
// /* "":2328:2334 */
// not // [ _1, _2, _2, not(3) ]
// /* "":2312:2326 */
// calldatasize // [ _1, _2, _2, not(3), calldatasize() ]
// /* "":2308:2335 */
// add // [ _1, _2, _2, add(calldatasize(),not(3)) ]
// /* "":2304:2340 */
// slt // [ _1, _2, slt(add(calldatasize(),not(3)),_2) ]
// tag_9 // [ _1, _2, slt(add(calldatasize(),not(3)),_2), tag_9 ]
// jumpi // [ _1, _2 ] condition correct
// tag_10:
// dup2 // [ _1, _2, _1 ]
// /* "":2398:2407 */
// mload // [ _1, _2, mload(_1) ] = [ _1, _2, memPtr ]
// swap2 // [ memPtr, _2, _1 ]
// dup3 // [ memPtr, _2, _1, memPtr ]
// /* "":2462:2464 */
// 0x60 // [ memPtr, _2, _1, memPtr, 96 ]
// swap1 // [ memPtr, _2, _1, 96, memPtr ]
// /* "":2450:2465 */
// add // [ memPtr, _2, _1, add(memPtr,96) ] = [ memPtr, _2, _1, newFreePtr ]
// swap2 // [ memPtr, newFreePtr, _1, _2 ]
// /* "":2500:2518 */
// 0xffffffffffffffff // [ memPtr, newFreePtr, _1, _2, 0xff..ff ] = [ memPtr, newFreePtr, _1, _2, _4 ]
// swap3 // [ memPtr, _4, _1, _2, newFreePtr ]
// dup1 // [ memPtr, _4, _1, _2, newFreePtr, newFreePtr ]
// dup6 // [ memPtr, _4, _1, _2, newFreePtr, newFreePtr, memPtr ]
// swap1 // [ memPtr, _4, _1, _2, newFreePtr, memPtr, newFreePtr ]
// /* "":2569:2591 */
// lt // [ memPtr, _4, _1, _2, newFreePtr, lt(newFreePtr,memPtr) ]
// dup5 // [ memPtr, _4, _1, _2, newFreePtr, lt(newFreePtr,memPtr), _4 ]
// dup3 // [ memPtr, _4, _1, _2, newFreePtr, lt(newFreePtr,memPtr), _4, newFreePtr ]
// /* "":2549:2567 */
// gt // [ memPtr, _4, _1, _2, newFreePtr, lt(newFreePtr,memPtr), gt(newFreePtr,_4) ]
// /* "":2546:2592 */
// or // [ memPtr, _4, _1, _2, newFreePtr, or(gt(newFreePtr,_4),lt(newFreePtr,memPtr)) ]
// tag_11 // [ memPtr, _4, _1, _2, newFreePtr, or(gt(newFreePtr,_4),lt(newFreePtr,memPtr)), tag_11 ]
// jumpi // [ memPtr, _4, _1, _2, newFreePtr ] condition correct
// tag_12:
// dup3 // [ memPtr, _4, _1, _2, newFreePtr, _1 ]
// /* "":2640:2662 */
// mstore // [ memPtr, _4, _1, _2 ] statement correct
// /* "":2702:2706 */
// 0x22 // [ memPtr, _4, _1, _2, 0x22 ]
// dup5 // [ memPtr, _4, _1, _2, 0x22, memPtr ]
// /* "":2687:2707 */
// mstore // [ memPtr, _4, _1, _2 ] statement correct
// /* "":2742:2744 */
// 0x20 // [ memPtr, _4, _1, _2, 32 ] = [ memPtr, _4, _1, _2, _5 ]
// swap4 // [ _5, _4, _1, _2, memPtr ]
// dup3 // [ _5, _4, _1, _2, memPtr, _1 ]
// /* "":2799:2813 */
// calldatasize // [ _5, _4, _1, _2, memPtr, _1, calldatasize() ]
// dup7 // [ _5, _4, _1, _2, memPtr, _1, calldatasize(), _5 ]
// dup4 // [ _5, _4, _1, _2, memPtr, _1, calldatasize(), _5, memPtr ]
// /* "":2782:2797 */
// add // [ _5, _4, _1, _2, memPtr, _1, calldatasize(), add(memPtr,_5) ]
// /* "":2769:2818 */
// calldatacopy // [ _5, _4, _1, _2, memPtr ] statement correct
// dup1 // [ _5, _4, _1, _2, memPtr, memPtr ]
// /* "":2862:2875 */
// mload // [ _5, _4, _1, _2, memPtr, mload(memPtr) ]
// /* "":2856:2860 */
// 0x02 // [ _5, _4, _1, _2, memPtr, mload(memPtr), 2 ]
// /* "":2853:2876 */
// lt // [ _5, _4, _1, _2, memPtr, lt(2,mload(memPtr)) ]
// /* "":2846:2877 */
// iszero // [ _5, _4, _1, _2, memPtr, iszero(lt(2,mload(memPtr))) ]
// tag_13 // [ _5, _4, _1, _2, memPtr, iszero(lt(2,mload(memPtr))), tag_13 ]
// jumpi // [ _5, _4, _1, _2, memPtr ] condition correct
// tag_14: // [ _5, _4, _1, _2, memPtr ]
// /* "":2952:2956 */
// 0x07 // [ _5, _4, _1, _2, memPtr, 0x07 ]
// /* "":2945:2949 */
// 0x22 // [ _5, _4, _1, _2, memPtr, 0x07, 0x22 ]
// dup3 // [ _5, _4, _1, _2, memPtr, 0x07, 0x22, memPtr ]
// /* "":2933:2950 */
// add // [ _5, _4, _1, _2, memPtr, 0x07, add(memPtr,0x22) ]
// /* "":2925:2957 */
// mstore8 // [ _5, _4, _1, _2, memPtr ] statement correct
// dup2 // [ _5, _4, _1, _2, memPtr, _2 ]
// dup6 // [ _5, _4, _1, _2, memPtr, _2, _5 ]
// dup5 // [ _5, _4, _1, _2, memPtr, _2, _5, _1 ]
// /* "":2993:3002 */
// mload // [ _5, _4, _1, _2, memPtr, _2, _5, mload(_1) ]
// /* "":2989:3007 */
// add // [ _5, _4, _1, _2, memPtr, _2, add(mload(_1),_5) ]
// /* "":2982:3012 */
// mstore // [ _5, _4, _1, _2, memPtr ] statement correct
// /* "":3059:3068 */
// address // [ _5, _4, _1, _2, memPtr, address() ]
// /* "":3047:3069 */
// extcodesize // [ _5, _4, _1, _2, memPtr, extcodesize(address()) ]
// /* "":3040:3070 */
// iszero // [ _5, _4, _1, _2, memPtr, iszero(extcodesize(address())) ]
// tag_15 // [ _5, _4, _1, _2, memPtr, iszero(extcodesize(address())), tag_15 ]
// jumpi // [ _5, _4, _1, _2, memPtr ] condition correct
// tag_16:
// dup3 // [ _5, _4, _1, _2, memPtr, _1 ]
// /* "":3124:3133 */
// mload // [ _5, _4, _1, _2, memPtr, mload(_1) ] = [ _5, _4, _1, _2, memPtr, _6 ]
// swap1 // [ _5, _4, _1, _2, memPtr, mload(_1) ] = [ _5, _4, _1, _2, _6, memPtr ]
// dup2 // [ _5, _4, _1, _2, memPtr, mload(_1) ] = [ _5, _4, _1, _2, _6, memPtr, _6 ]
// /* "":3169:3235 */
// 0xb2e4ec1000000000000000000000000000000000000000000000000000000000 // [ _5, _4, _1, _2, memPtr, mload(_1) ] = [ _5, _4, _1, _2, _6, memPtr, _6, left(0xb2e4ec1) ]
// swap1 // [ _5, _4, _1, _2, memPtr, mload(_1) ] = [ _5, _4, _1, _2, _6, memPtr, left(0xb2e4ec1), _6 ]
// /* "":3158:3236 */
// mstore // [ _5, _4, _1, _2, memPtr, mload(_1) ] = [ _5, _4, _1, _2, _6, memPtr ] statement correct
// dup6 // [ _5, _4, _1, _2, _6, memPtr, _5 ]
// /* "":3276:3277 */
// 0x04 // [ _5, _4, _1, _2, _6, memPtr, _5, 4 ]
// dup4 // [ _5, _4, _1, _2, _6, memPtr, _5, 4, _6 ]
// /* "":3268:3278 */
// add // [ _5, _4, _1, _2, _6, memPtr, _5, add(_6,4) ]
// /* "":3261:3283 */
// mstore // [ _5, _4, _1, _2, _6, memPtr ] statement correct
// dup2 // [ _5, _4, _1, _2, _6, memPtr, _6 ]
// dup2 // [ _5, _4, _1, _2, _6, memPtr, _6, memPtr ]
// /* "":3324:3337 */
// mload // [ _5, _4, _1, _2, _6, memPtr, _6, mload(memPtr) ] = [ _5, _4, _1, _2, _6, memPtr, _6, length_1 ]
// swap2 // [ _5, _4, _1, _2, _6, length_1, _6, memPtr ]
// dup3 // [ _5, _4, _1, _2, _6, length_1, _6, memPtr, length_1 ]
// dup3 // [ _5, _4, _1, _2, _6, length_1, _6, memPtr, length_1, _6 ]
// /* "":3377:3379 */
// 0x24 // [ _5, _4, _1, _2, _6, length_1, _6, memPtr, length_1, _6, 36 ]
// swap1 // [ _5, _4, _1, _2, _6, length_1, _6, memPtr, length_1, 36, _6 ]
// /* "":3369:3380 */
// add // [ _5, _4, _1, _2, _6, length_1, _6, memPtr, length_1, add(_6,36) ]
// /* "":3362:3391 */
// mstore // [ _5, _4, _1, _2, _6, length_1, _6, memPtr ] statement correct
// dup5 // [ _5, _4, _1, _2, _6, length_1, _6, memPtr, _2 ] = [ _5, _4, _1, _2, _6, length_1, _6, memPtr, i ]
// swap1 // [ _5, _4, _1, _2, _6, length_1, _6, i, memPtr ]
// jump(tag_17) // entering for loop
// tag_17: // [ _5, _4, _1, _2, _6, length_1, _6, i, memPtr ] for loop condition
// dup4 // [ _5, _4, _1, _2, _6, length_1, _6, i, memPtr, length_1 ]
// dup3 // [ _5, _4, _1, _2, _6, length_1, _6, i, memPtr, length_1, i ]
// /* "":3460:3475 */
// lt // [ _5, _4, _1, _2, _6, length_1, _6, i, memPtr, lt(i,length_1) ]
// tag_18 // [ _5, _4, _1, _2, _6, length_1, _6, i, memPtr, lt(i,length_1), tag_18 ]
// jumpi // [ _5, _4, _1, _2, _6, length_1, _6, i, memPtr ] condition correct
// tag_19: // [ _5, _4, _1, _2, _6, length_1, _6, i, memPtr ] after for loop
// pop // [ _5, _4, _1, _2, _6, length_1, _6, i ]
// dup3 // [ _5, _4, _1, _2, _6, length_1, _6, i, length_1 ]
// /* "":3932:3934 */
// 0x44 // [ _5, _4, _1, _2, _6, length_1, _6, i, length_1, 68 ]
// swap4 // [ _5, _4, _1, _2, _6, 68, _6, i, length_1, length_1 ]
// swap2 // [ _5, _4, _1, _2, _6, 68, _6, length_1, length_1, i ]
// /* "":3663:3678 */
// gt // [ _5, _4, _1, _2, _6, 68, _6, length_1, gt(i,length_1) ]
// tag_20 // [ _5, _4, _1, _2, _6, 68, _6, length_1, gt(i,length_1), tag_20 ]
// jumpi // [ _5, _4, _1, _2, _6, 68, _6, length_1 ] condition correct
// tag_21: // [ _5, _4, _1, _2, _6, 68, _6, length_1 ]
// /* "":3911:3913 */
// 0x1f // [ _5, _4, _1, _2, _6, 68, _6, length_1, 31 ]
// dup1 // [ _5, _4, _1, _2, _6, 68, _6, length_1, 31, 31 ]
// /* "":3916:3923 */
// not // [ _5, _4, _1, _2, _6, 68, _6, length_1, 31, not(31) ]
// swap2 // [ _5, _4, _1, _2, _6, 68, _6, not(31), 31, length_1 ]
// /* "":3897:3914 */
// add // [ _5, _4, _1, _2, _6, 68, _6, not(31), add(length_1,31) ]
// /* "":3893:3924 */
// and // [ _5, _4, _1, _2, _6, 68, _6, and(add(length_1,31),not(31)) ]
// dup2 // [ _5, _4, _1, _2, _6, 68, _6, and(add(length_1,31),not(31)), _6 ]
// /* "":3885:3925 */
// add // [ _5, _4, _1, _2, _6, 68, _6, add(_6,and(add(length_1,31),not(31))) ]
// /* "":3881:3930 */
// sub // [ _5, _4, _1, _2, _6, 68, sub(add(_6,and(add(length_1,31),not(31))),_6) ]
// /* "":3877:3935 */
// add // [ _5, _4, _1, _2, _6, add(sub(add(_6,and(add(length_1,31),not(31))),_6),68) ]
// /* "":3858:3867 */
// address // [ _5, _4, _1, _2, _6, add(sub(add(_6,and(add(length_1,31),not(31))),_6),68), address() ]
// /* "":3852:3854 */
// 0x31 // [ _5, _4, _1, _2, _6, add(sub(add(_6,and(add(length_1,31),not(31))),_6),68), address(), 49 ]
// /* "":3848:3855 */
// not // [ _5, _4, _1, _2, _6, add(sub(add(_6,and(add(length_1,31),not(31))),_6),68), address(), not(49) ]
// /* "":3841:3846 */
// gas // [ _5, _4, _1, _2, _6, add(sub(add(_6,and(add(length_1,31),not(31))),_6),68), address(), not(49), gas() ]
// dup9 // [ _5, _4, _1, _2, _6, add(sub(add(_6,and(add(length_1,31),not(31))),_6),68), address(), not(49), gas(), _5 ]
// swap4 // [ _5, _4, _1, _2, _6, _5, address(), not(49), gas(), add(sub(add(_6,and(add(length_1,31),not(31))),_6),68) ]
// swap2 // [ _5, _4, _1, _2, _6, _5, address(), add(sub(add(_6,and(add(length_1,31),not(31))),_6),68), gas(), not(49) ]
// dup6 // [ _5, _4, _1, _2, _6, _5, address(), add(sub(add(_6,and(add(length_1,31),not(31))),_6),68), gas(), not(49), _6 ]
// swap4 // [ _5, _4, _1, _2, _6, _5, _6, add(sub(add(_6,and(add(length_1,31),not(31))),_6),68), gas(), not(49), address() ]
// dup5 // [ _5, _4, _1, _2, _6, _5, _6, add(sub(add(_6,and(add(length_1,31),not(31))),_6),68), gas(), not(49), address(), _6 ]
// swap3 // [ _5, _4, _1, _2, _6, _5, _6, add(sub(add(_6,and(add(length_1,31),not(31))),_6),68), _6, not(49), address(), gas() ]
// dup9 // [ _5, _4, _1, _2, _6, _5, _6, add(sub(add(_6,and(add(length_1,31),not(31))),_6),68), _6, not(49), address(), gas(), _2 ]
// swap3 // [ _5, _4, _1, _2, _6, _5, _6, add(sub(add(_6,and(add(length_1,31),not(31))),_6),68), _6, _2, address(), gas(), not(49) ]
// swap1 // [ _5, _4, _1, _2, _6, _5, _6, add(sub(add(_6,and(add(length_1,31),not(31))),_6),68), _6, _2, address(), not(49), gas() ]
// /* "":3837:3856 */
// add // [ _5, _4, _1, _2, _6, _5, _6, add(sub(add(_6,and(add(length_1,31),not(31))),_6),68), _6, _2, address(), add(gas(),not(49)) ]
// /* "":3832:3944 */
// call // [ _5, _4, _1, _2, _6, _7 ] arguments correct
// swap4 // [ _5, _7, _1, _2, _6, _4 ]
// dup5 // [ _5, _7, _1, _2, _6, _4, _7 ]
// /* "":3972:3982 */
// iszero // [ _5, _7, _1, _2, _6, _4, iszero(_7) ]
// tag_22 // [ _5, _7, _1, _2, _6, _4, iszero(_7), tag_22 ]
// jumpi // [ _5, _7, _1, _2, _6, _4 ] condition correct
// tag_23:
// dup3 // [ _5, _7, _1, _2, _6, _4, _2 ] = [ _5, _7, _1, _2, _6, _4, expr ]
// swap5 // [ _5, expr, _1, _2, _6, _4, _7 ]
// tag_24 // [ _5, expr, _1, _2, _6, _4, _7, tag_24 ]
// jumpi // [ _5, expr, _1, _2, _6, _4 ] condition correct
// tag_25: // [ _5, expr, _1, JUNK, JUNK, JUNK ]
// pop // [ _5, expr, _1, JUNK, JUNK ]
// pop // [ _5, expr, _1, JUNK ]
// pop // [ _5, expr, _1 ]
// /* "":4687:4753 */
// 0xff00000000000000000000000000000000000000000000000000000000000000 // [ _5, expr, _1, left(0xff) ]
// swap1 // [ _5, expr, left(0xff), _1 ]
// /* "":4626:4635 */
// mload // [ _5, expr, left(0xff), memPos_1 ]
// swap2 // [ _5, memPos_1, left(0xff), expr ]
// /* "":4677:4754 */
// and // [ _5, memPos_1, and(expr,left(0xff)) ]
// dup2 // [ _5, memPos_1, and(expr,left(0xff)), memPos_1 ]
// /* "":4660:4755 */
// mstore // [ _5, memPos_1 ] statement correct
// /* "":4780:4800 */
// return // [] statement correct
// tag_24: // [ _5, expr, _1, _2, _6, _4 ] note: this starts of a bit curious, I guess it's generating the initial layout for the branch or does some weird compression
// swap1 // [ _5, expr, _1, _2, _4, _6 ]
// swap2 // [ _5, expr, _1, _6, _4, _2 ]
// swap3 // [ _5, expr, _2, _6, _4, _1 ]
// swap4 // [ _5, _1, _2, _6, _4, expr ]
// pop // [ _5, _1, _2, _6, _4 ]
// dup2 // [ _5, _1, _2, _6, _4, _6 ]
// dup6 // [ _5, _1, _2, _6, _4, _6, _5 ]
// swap1 // [ _5, _1, _2, _6, _4, _5, _6 ]
// /* "":4145:4156 */
// add // [ _5, _1, _2, _6, _4, add(_6,_5) ] = [ _5, _1, _2, _6, _4, newFreePtr_1 ]
// swap1 // [ _5, _1, _2, _6, newFreePtr_1, _4 ]
// dup2 // [ _5, _1, _2, _6, newFreePtr_1, _4, newFreePtr_1 ]
// dup4 // [ _5, _1, _2, _6, newFreePtr_1, _4, newFreePtr_1, _6 ]
// swap1 // [ _5, _1, _2, _6, newFreePtr_1, _4, _6, newFreePtr_1 ]
// /* "":4213:4233 */
// lt // [ _5, _1, _2, _6, newFreePtr_1, _4, lt(newFreePtr_1,_6) ]
// swap1 // [ _5, _1, _2, _6, newFreePtr_1, lt(newFreePtr_1,_6), _4 ]
// dup3 // [ _5, _1, _2, _6, newFreePtr_1, lt(newFreePtr_1,_6), _4, newFreePtr_1 ]
// /* "":4191:4211 */
// gt // [ _5, _1, _2, _6, newFreePtr_1, lt(newFreePtr_1,_6), gt(newFreePtr_1,_4) ]
// /* "":4188:4234 */
// or // [ _5, _1, _2, _6, newFreePtr_1, or(gt(newFreePtr_1,_4),lt(newFreePtr_1,_6)) ]
// tag_26 // [ _5, _1, _2, _6, newFreePtr_1, or(gt(newFreePtr_1,_4),lt(newFreePtr_1,_6)), tag_26 ]
// jumpi // [ _5, _1, _2, _6, newFreePtr_1 ] condition correct
// tag_27: // [ _5, _1, _2, _6, newFreePtr_1 ]
// dup4 // [ _5, _1, _2, _6, newFreePtr_1, _1 ]
// /* "":4286:4310 */
// mstore // [ _5, _1, _2, _6 ] statement correct
// /* "":4354:4363 */
// mload // [ _5, _1, _2, mload(_6) ] = [ _5, _1, _2, value_1 ]
// swap1 // [ _5, _1, value_1, _2 ]
// dup2 // [ _5, _1, value_1, _2, value_1 ]
// /* "":4427:4493 */
// 0xff00000000000000000000000000000000000000000000000000000000000000 // [ _5, _1, value_1, _2, value_1, left(0xff) ]
// swap1 // [ _5, _1, value_1, _2, left(0xff), value_1 ]
// /* "":4414:4494 */
// and // [ _5, _1, value_1, _2, and(value_1,left(0xff)) ]
// dup3 // [ _5, _1, value_1, _2, and(value_1,left(0xff)), value_1 ]
// /* "":4402:4495 */
// eq // [ _5, _1, value_1, _2, eq(value_1,and(value_1,left(0xff))) ]
// /* "":4395:4496 */
// iszero // [ _5, _1, value_1, _2, iszero(eq(value_1,and(value_1,left(0xff)))) ]
// tag_28 // [ _5, _1, value_1, _2, iszero(eq(value_1,and(value_1,left(0xff)))), tag_28 ]
// jumpi // [ _5, _1, value_1, _2 ] condition correct
// tag_29: // [ _5, _1, value_1, _2 ]
// pop // [ _5, _1, value_1 ]
// /* "":4687:4753 */
// 0xff00000000000000000000000000000000000000000000000000000000000000 // [ _5, _1, value_1, left(0xff) ]
// swap1 // [ _5, _1, left(0xff), value_1 ]
// swap2 // [ _5, value_1, left(0xff), _1 ]
// swap1 // [ _5, value_1, _1, left(0xff) ]
// pop // [ _5, value_1, _1 ]
// pc // [ _5, value_1, _1, JUNK ]
// dup1 // [ _5, value_1, _1, JUNK, JUNK ]
// dup1 // [ _5, value_1, _1, JUNK, JUNK, JUNK ]
// jump(tag_25) // correct layout, given the expr := value_1 assignment in the branch
// tag_28: // [ _5, _1, value_1, _2 ]
// swap3 // [ _2, _1, value_1, _5 ]
// pop // [ _2, _1, value_1 ]
// pop // [ _2, _1 ]
// pop // [ _2 ]
// dup1 // [ _2, _2 ]
// /* "":4499:4513 */
// revert // [] statement correct
// tag_26: // [ _5, _1, _2, _6, newFreePtr_1 ]
// tag_30 // [ _5, _1, _2, _6, newFreePtr_1, tag_30 ]
// /* "":4237:4255 */
// tag_31 // [ _5, _1, _2, _6, newFreePtr_1, tag_30, tag_31 ]
// jump // in panic_error_0x41([RET])
// tag_30: // unreachable
// jump(tag_27)
// tag_22: // [ _5, _7, _1, _2, _6, _4 ]
// pop // [ _5, _7, _1, _2, _6 ]
// pop // [ _5, _7, _1, _2 ]
// swap3 // [ _2, _7, _1, _5 ]
// pop // [ _2, _7, _1 ]
// pop // [ _2, _7 ]
// pop // [ _2 ]
// dup1 // [ _2, _2 ]
// /* "":3985:3999 */
// revert // [ ] statement correct
// tag_20: // [ _5, _4, _1, _2, _6, 68, _6, length_1 ]
// dup5 // [ _5, _4, _1, _2, _6, 68, _6, length_1, _2 ]
// dup4 // [ _5, _4, _1, _2, _6, 68, _6, length_1, _2, 68 ]
// dup3 // [ _5, _4, _1, _2, _6, 68, _6, length_1, _2, 68, length_1 ]
// dup5 // [ _5, _4, _1, _2, _6, 68, _6, length_1, _2, 68, length_1, _6 ]
// /* "":3744:3761 */
// add // [ _5, _4, _1, _2, _6, 68, _6, length_1, _2, 68, add(_6,length_1) ]
// /* "":3740:3766 */
// add // [ _5, _4, _1, _2, _6, 68, _6, length_1, _2, add(add(_6,length_1),68) ]
// /* "":3733:3771 */
// mstore // [ _5, _4, _1, _2, _6, 68, _6, length_1 ] statement correct
// jump(tag_21) // layout matches
// tag_18: // [ _5, _4, _1, _2, _6, length_1, _6, i, memPtr ] for loop body
// swap2 // [ _5, _4, _1, _2, _6, length_1, memPtr, i, _6 ]
// pop // [ _5, _4, _1, _2, _6, length_1, memPtr, i ]
// dup2 // [ _5, _4, _1, _2, _6, length_1, memPtr, i, memPtr ]
// dup2 // [ _5, _4, _1, _2, _6, length_1, memPtr, i, memPtr, i ]
// dup10 // [ _5, _4, _1, _2, _6, length_1, memPtr, i, memPtr, i, _5 ]
// swap2 // [ _5, _4, _1, _2, _6, length_1, memPtr, i, _5, i, memPtr ]
// /* "":3588:3602 */
// add // [ _5, _4, _1, _2, _6, length_1, memPtr, i, _5, add(memPtr,i) ]
// /* "":3584:3607 */
// add // [ _5, _4, _1, _2, _6, length_1, memPtr, i, add(add(memPtr,i),_5) ]
// /* "":3578:3608 */
// mload // [ _5, _4, _1, _2, _6, length_1, memPtr, i, mload(add(add(memPtr,i),_5)) ]
// dup2 // [ _5, _4, _1, _2, _6, length_1, memPtr, i, mload(add(add(memPtr,i),_5)), i ]
// dup6 // [ _5, _4, _1, _2, _6, length_1, memPtr, i, mload(add(add(memPtr,i),_5)), i, _6 ]
// /* "":3561:3571 */
// add // [ _5, _4, _1, _2, _6, length_1, memPtr, i, mload(add(add(memPtr,i),_5)), add(_6,i) ]
// dup10 // [ _5, _4, _1, _2, _6, length_1, memPtr, i, mload(add(add(memPtr,i),_5)), add(_6,i), _5 ]
// swap3 // [ _5, _4, _1, _2, _6, length_1, memPtr, _5, mload(add(add(memPtr,i),_5)), add(_6,i), i ]
// swap1 // [ _5, _4, _1, _2, _6, length_1, memPtr, _5, mload(add(add(memPtr,i),_5)), i, add(_6,i) ]
// dup4 // [ _5, _4, _1, _2, _6, length_1, memPtr, _5, mload(add(add(memPtr,i),_5)), i, add(_6,i), _5 ]
// swap3 // [ _5, _4, _1, _2, _6, length_1, memPtr, _5, _5, i, add(_6,i), mload(add(add(memPtr,i),_5)) ]
// swap1 // [ _5, _4, _1, _2, _6, length_1, memPtr, _5, _5, i, mload(add(add(memPtr,i),_5)), add(_6,i) ]
// /* "":3573:3575 */
// 0x44 // [ _5, _4, _1, _2, _6, length_1, memPtr, _5, _5, i, mload(add(add(memPtr,i),_5)), add(_6,i), 68 ]
// swap1 // [ _5, _4, _1, _2, _6, length_1, memPtr, _5, _5, i, mload(add(add(memPtr,i),_5)), 68, add(_6,i) ]
// /* "":3557:3576 */
// add // [ _5, _4, _1, _2, _6, length_1, memPtr, _5, _5, i, mload(add(add(memPtr,i),_5)), add(add(_6,i),68) ]
// /* "":3550:3609 */
// mstore // [ _5, _4, _1, _2, _6, length_1, memPtr, _5, _5, i ] statemeent correct
// /* "":3483:3493 */
// add // [ _5, _4, _1, _2, _6, length_1, memPtr, _5, add(i,_5) ] = [ _5, _4, _1, _2, _6, length_1, memPtr, _5, i' ]
// swap2 // [ _5, _4, _1, _2, _6, length_1, i', _5, memPtr ]
// dup5 // [ _5, _4, _1, _2, _6, length_1, i', _5, memPtr, _6 ]
// swap3 // [ _5, _4, _1, _2, _6, length_1, _6, _5, memPtr, i' ]
// swap2 // [ _5, _4, _1, _2, _6, length_1, _6, i', memPtr, _5 ]
// pop // [ _5, _4, _1, _2, _6, length_1, _6, i', memPtr ]
// jump(tag_17) // jump back to for loop body; layout matches; i is properly updated
// tag_15: // [ _5, _4, _1, _2, memPtr ] note: hm, here it's getting excessive, maybe it's worth avoiding the popping
// pop // [ _5, _4, _1, _2 ]
// swap3 // [ _2, _4, _1, _5 ]
// pop // [ _2, _4, _1 ]
// pop // [ _2, _4 ]
// pop // [ _2 ]
// dup1 // [ _2, _2 ]
// /* "":3073:3087 */
// revert // [] statement correct
// tag_13: // [ _5, _4, _1, _2, memPtr ]
// tag_32 // [ _5, _4, _1, _2, memPtr, tag_32 ]
// /* "":2880:2898 */
// tag_33 // [ _5, _4, _1, _2, memPtr, tag_32, tag_33 ]
// jump // in panic_error_0x32([RET])
// tag_32: // as noted elsewhere: unreachable
// jump(tag_14)
// tag_11: // [ memPtr, _4, _1, _2, newFreePtr ]
// tag_34 // [ memPtr, _4, _1, _2, newFreePtr, tag_34 ]
// /* "":2595:2613 */
// tag_31 // [ memPtr, _4, _1, _2, newFreePtr, tag_34, tag_31 ]
// jump // in panic_error_0x41([ RET ])
// tag_34: // note: this will never be reached because tag_31, resp. panic_error_0x41 never returns - need to propagate control flow side effects to user-defined functions and take them into account
// jump(tag_12)
// tag_9: // [ _1, _2 ]
// dup1 // [ _1, _2, _2 ]
// swap2 // [ _2, _2, _1 ] note: as noted a few lines down: funny thing to do
// pop // [ _2, _2 ]
// /* "":2343:2357 */
// revert // [] statement correct
// tag_7: // [ _1, _2 ]
// dup1 // [ _1, _2, _2 ]
// swap2 // [ _2, _2, _1 ] note: funny that it does this, but makes sense and not too bad, but maybe we can avoid
// pop // [ _2, _2 ]
// /* "":2260:2274 */
// revert // [] statement correct
// tag_3: // [ _1, _2, switchExpression ] start of switch case 0xb2e4ec10
// pop // [ _1, _2 ]
// swap1 // [ _2, _1 ]
// /* "":682:693 */
// jumpi(tag_35, callvalue) // [ _2, _1 ] condition correct
// tag_36:
// /* "":773:775 */
// 0x20 // [ _2, _1, 32 ]
// /* "":768:769 */
// 0x03 // [ _2, _1, 32, 3 ]
// /* "":764:770 */
// not // [ _2, _1, 32, not(3) ]
// /* "":748:762 */
// calldatasize // [ _2, _1, 32, not(3), calldatasize() ]
// /* "":744:771 */
// add // [ _2, _1, 32, add(calldatasize(),not(3)) ]
// /* "":740:776 */
// slt // [ _2, _1, slt(add(calldatasize(),not(3)),32) ]
// tag_37 // [ _2, _1, slt(add(calldatasize(),not(3)),32), tag_37 ]
// jumpi // [ _2, _1 ] condition correct
// tag_38:
// /* "":847:848 */
// 0x04 // [ _2, _1, 4 ]
// /* "":834:849 */
// calldataload // [ _2, _1, calldataload(4) ] = [ _2, _1, offset ]
// /* "":884:902 */
// 0xffffffffffffffff // [ _2, _1, offset, 0xff..ff ] = [ _2, _1, offset, _3 ]
// dup1 // [ _2, _1, offset, _3, _3 ]
// dup3 // [ _2, _1, offset, _3, _3, offset ]
// /* "":930:944 */
// gt // [ _2, _1, offset, _3, gt(offset,_3) ]
// tag_39 // [ _2, _1, offset, _3, gt(offset,_3), tag_39 ]
// jumpi // [ _2, _1, offset, _3 ] condition correct
// tag_40:
// /* "":1019:1033 */
// calldatasize // [ _2, _1, offset, _3, calldatasize() ]
// /* "":1014:1016 */
// 0x23 // [ _2, _1, offset, _3, calldatasize(), 35 ]
// dup4 // [ _2, _1, offset, _3, calldatasize(), 35, offset ]
// /* "":1002:1017 */
// add // [ _2, _1, offset, _3, calldatasize(), add(offset,35) ]
// /* "":998:1034 */
// slt // [ _2, _1, offset, _3, slt(add(offset,35),calldatasize()) ]
// /* "":991:1035 */
// iszero // [ _2, _1, offset, _3, iszero(slt(add(offset,35),calldatasize())) ]
// tag_41 // [ _2, _1, offset, _3, iszero(slt(add(offset,35),calldatasize())), tag_41 ]
// jumpi // [ _2, _1, offset, _3 ] condition correct
// tag_42: // [ _2, _1, offset, _3 ]
// dup2 // [ _2, _1, offset, _3, offset ]
// /* "":1110:1111 */
// 0x04 // [ _2, _1, offset, _3, offset, 4 ]
// /* "":1106:1120 */
// add // [ _2, _1, offset, _3, add(4,offset) ]
// /* "":1093:1121 */
// calldataload // [ _2, _1, offset, _3, calldataload(add(4,offset)) ] = [ _2, _1, offset, _3, length ]
// swap1 // [ _2, _1, offset, length, _3 ]
// dup2 // [ _2, _1, offset, length, _3, length ]
// dup2 // [ _2, _1, offset, length, _3, length, _3 ]
// swap1 // [ _2, _1, offset, length, _3, _3, length ]
// /* "":1149:1163 */
// gt // [ _2, _1, offset, length, _3, gt(length,_3) ]
// tag_43 // [ _2, _1, offset, length, _3, gt(length,_3), tag_43 ]
// jumpi // [ _2, _1, offset, length, _3 ]
// tag_44: // [ _2, _1, offset, length, _3 ]
// /* "":1243:1257 */
// calldatasize // [ _2, _1, offset, length, _3, calldatasize() ]
// /* "":1238:1240 */
// 0x24 // [ _2, _1, offset, length, _3, calldatasize(), 36 ]
// dup4 // [ _2, _1, offset, length, _3, calldatasize(), 36, length ]
// dup6 // [ _2, _1, offset, length, _3, calldatasize(), 36, length, offset ]
// /* "":1217:1236 */
// add // [ _2, _1, offset, length, _3, calldatasize(), 36, add(offset,length) ]
// /* "":1213:1241 */
// add // [ _2, _1, offset, length, _3, calldatasize(), add(add(offset,length),36) ]
// /* "":1210:1258 */
// gt // [ _2, _1, offset, length, _3, gt(add(add(offset,length),36),calldatasize()) ]
// tag_45 // [ _2, _1, offset, length, _3, gt(add(add(offset,length),36),calldatasize()), tag_45 ]
// jumpi // [ _2, _1, offset, length, _3 ] condition correct
// tag_46:
// dup5 // [ _2, _1, offset, length, _3, _2 ]
// /* "":1319:1328 */
// sload // [ _2, _1, offset, length, _3, sload(_2) ]
// /* "":1315:1333 */
// and // [ _2, _1, offset, length, and(sload(_2),_3) ] = [ _2, _1, offset, length, value ]
// dup5 // [ _2, _1, offset, length, value, _2 ] = [ _2, _1, offset, length, value, out ]
// pop // [ _2, _1, offset, length, value ] note: this looks weird, but as a matter of fact the value of out is not needed later, so this is actually a flaw in the yul optimizer, that doesn't take into account that the default case of the following switch reverts
// /* "":1438:1440 */
// 0x1c // [ _2, _1, offset, length, value, 28 ]
// eq // [ _2, _1, offset, length, eq(28,value) ]
// tag_47 // [ _2, _1, offset, length, eq(28,value), tag_47 ]
// jumpi // [ _2, _1, offset, length ] condition correct
// tag_48: // [ _2, _1, offset, length ] start of switch default case
// pop // [ _2, _1, offset ]
// pop // [ _2, _1 ]
// pop // [ _2 ]
// dup1 // [ _2, _2 ]
// /* "":1921:1923 */
// 0x24 // [ _2, _2, 36 ]
// swap2 // [ 36, _2, _2 ]
// /* "":1759:1836 */
// 0x4e487b7100000000000000000000000000000000000000000000000000000000 // [ 36, _2, _2, left(0x4e487b71) ]
// swap1 // [ 36, _2, left(0x4e487b71), _2 ]
// /* "":1748:1837 */
// mstore // [ 36, _2 ] statement correct
// /* "":1876:1880 */
// 0x51 // [ 36, _2, 0x51 ]
// /* "":1873:1874 */
// 0x04 // [ 36, _2, 0x51, 4 ]
// /* "":1866:1881 */
// mstore // [ 36, _2 ] statement correct
// /* "":1910:1924 */
// revert // [] statement correct
// tag_47: // [ _2, _1, offset, length ] start of switch case 28
// /* "":2155:2157 */
// 0x20 // [ _2, _1, offset, length, 32 ]
// swap4 // [ 32, _1, offset, length, _2 ]
// pop // [ 32, _1, offset, length ]
// /* "":2047:2113 */
// 0xff00000000000000000000000000000000000000000000000000000000000000 // [ 32, _1, offset, length, left(0xff) ]
// swap2 // [ 32, _1, left(0xff), length, offset ]
// dup3 // [ 32, _1, left(0xff), length, offset, left(0xff) ]
// swap2 // [ 32, _1, left(0xff), left(0xff), offset, length ]
// /* "":1586:1588 */
// 0x26 // [ 32, _1, left(0xff), left(0xff), offset, length, 38 ]
// swap2 // [ 32, _1, left(0xff), left(0xff), 38, length, offset ]
// swap1 // [ 32, _1, left(0xff), left(0xff), 38, offset, length ]
// /* "":1484:1488 */
// 0x02 // [ 32, _1, left(0xff), left(0xff), 38, offset, length, 0x02 ]
// /* "":1481:1497 */
// lt // [ 32, _1, left(0xff), left(0xff), 38, offset, lt(0x02,length) ]
// /* "":1474:1498 */
// iszero // [ 32, _1, left(0xff), left(0xff), 38, offset, iszero(lt(0x02,length)) ]
// tag_49 // [ 32, _1, left(0xff), left(0xff), 38, offset, iszero(lt(0x02,length)), tag_49 ]
// jumpi // [ 32, _1, left(0xff), left(0xff), 38, offset ] condition correct
// tag_50: // [ 32, _1, left(0xff), left(0xff), 38, offset ]
// /* "":1574:1589 */
// add // [ 32, _1, left(0xff), left(0xff), add(offset,38) ]
// /* "":1561:1590 */
// calldataload // [ 32, _1, left(0xff), left(0xff), calldataload(add(offset,38)) ]
// /* "":1557:1659 */
// and // [ 32, _1, left(0xff), and(calldataload(add(offset,38)),left(0xff)) ] = [ 32, _1, left(0xff), out ]
// swap2 // [ 32, out, left(0xff), _1 ] note: this is the direct transition to post the switch
// /* "":1989:1998 */
// mload // [ 32, out, left(0xff), mload(_1) ] = [ 32, out, left(0xff), memPos ]
// swap2 // [ 32, memPos, left(0xff), out ]
// /* "":2038:2114 */
// and // [ 32, memPos, and(out,left(0xff)) ]
// dup2 // [ 32, memPos, and(out,left(0xff)), memPos ]
// /* "":2023:2115 */
// mstore // [ 32, memPos ] statement correct
// /* "":2140:2158 */
// return // [] statement correct
// tag_49: // [ 32, _1, left(0xff), left(0xff), 38, offset ]
// tag_51 // [ 32, _1, left(0xff), left(0xff), 38, offset, tag_51 ]
// /* "":1501:1519 */
// tag_33 // [ 32, _1, left(0xff), left(0xff), 38, offset, tag_51, tag_33 ]
// jump // in panic_error_0x32([RET])
// tag_51: // unreachable
// jump(tag_50)
// tag_45: // [ _2, _1, offset, length, _3 ]
// pop // [ _2, _1, offset, length ]
// pop // [ _2, _1, offset ]
// pop // [ _2, _1 ]
// pop // [ _2 ]
// dup1 // [ _2, _2 ]
// /* "":1261:1275 */
// revert // [] statement correct
// tag_43: // [ _2, _1, offset, length, _3 ]
// pop // [ _2, _1, offset, length ]
// pop // [ _2, _1, offset ]
// pop // [ _2, _1 ]
// pop // [ _2 ]
// dup1 // [ _2, _2 ]
// /* "":1166:1180 */
// revert // [ ]
// tag_41: // [ _2, _1, offset, _3 ]
// pop // [ _2, _1, offset ]
// pop // [ _2, _1 ]
// pop // [ _2 ]
// dup1 // [ _2, _2 ]
// /* "":1038:1052 */
// revert // [ ] statement correct
// tag_39: // [ _2, _1, offset, _3 ]
// pop // [ _2, _1, offset ]
// pop // [ _2, _1 ]
// pop // [ _2 ]
// dup1 // [ _2, _2 ]
// /* "":947:961 */
// revert // [ ] statement correct
// tag_37: // [ _2, _1 ]
// pop // [ _2 ]
// dup1 // [ _2, _2 ]
// /* "":779:793 */
// revert // [ ] statement correct
// tag_35: // [ _2, _1 ]
// pop // [ _2 ]
// dup1 // [ _2, _2 ]
// /* "":696:710 */
// revert // [] statement correct
// /* "":4896:5120 */
// tag_33: // [RET] start of panic_error_0x32()
// pop // []
// /* "":4964:5041 */
// 0x4e487b7100000000000000000000000000000000000000000000000000000000 // [ left(errsig) ]
// /* "":4961:4962 */
// 0x00 // [ left(errsig), 0 ]
// /* "":4954:5042 */
// mstore // [ ] statement correct
// /* "":5069:5073 */
// 0x32 // [ 0x32 ]
// /* "":5066:5067 */
// 0x04 // [ 0x32, 4 ]
// /* "":5059:5074 */
// mstore // [ ] statement correct
// /* "":5101:5105 */
// 0x24 // [ 0x24 ]
// /* "":5098:5099 */
// 0x00 // [ 0x24, 0x00 ]
// /* "":5091:5106 */
// revert // [] statement correct
// /* "":5133:5357 */
// tag_31: // [ RET ] entry of panic_error_0x41
// pop // [ ] note: interesting - of course better to just keep it and ignore it.
// /* "":5201:5278 */
// 0x4e487b7100000000000000000000000000000000000000000000000000000000 // [ left(errsig) ]
// /* "":5198:5199 */
// 0x00 // [ left(errsig), 0 ]
// /* "":5191:5279 */
// mstore // [ ] statement correct
// /* "":5306:5310 */
// 0x41 // [ 0x42 ]
// /* "":5303:5304 */
// 0x04 // [ 0x42, 4 ]
// /* "":5296:5311 */
// mstore // [ ] statement correct
// /* "":5338:5342 */
// 0x24 // [ 0x24 ]
// /* "":5335:5336 */
// 0x00 // [ 0x24, 0 ]
// /* "":5328:5343 */
// revert // [ ] statement correct
// }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment