SWC 123 and 127 caught by Harvey but not Mythril - why?
See original GitHub issueDescription
Here are 3 issues, (one SWC 123, and two SWC-127) of something that the fuzzer Harvey catches that Mythril doesn’t. Why? And should Mythril also detect it?
How to Reproduce
$ myth -x -f AssertRegistry.bc
==== Integer Overflow ====
SWC ID: 101
Severity: High
Contract: MAIN
Function name: _function_0x6a0cc449
PC address: 1202
Estimated Gas Usage: 555 - 650
The binary addition can overflow.
The operands of the addition operation are not sufficiently constrained. The addition could therefore result in an integer overflow. Prevent the overflow by checking inputs or ensure sure that the overflow is caught by an assertion.
--------------------
==== Exception State ====
SWC ID: 110
Severity: Low
Contract: MAIN
Function name: _function_0x0409efcd
PC address: 2254
Estimated Gas Usage: 678 - 773
A reachable exception has been detected.
It is possible to trigger an exception (opcode 0xfe). Exceptions can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. Note that explicit `assert()` should only be used to check invariants. Use `require()` for regular input checking.
--------------------
==== Exception State ====
SWC ID: 110
Severity: Low
Contract: MAIN
Function name: _function_0x2854af99
PC address: 3545
Estimated Gas Usage: 718 - 813
A reachable exception has been detected.
It is possible to trigger an exception (opcode 0xfe). Exceptions can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. Note that explicit `assert()` should only be used to check invariants. Use `require()` for regular input checking.
--------------------
$
AssertRegistry.bc is:
60806040523480156200001157600080fd5b5060405160408062005aac833981018060405260408110156200003357600080fd5b81019080805190602001909291908051906020019092919050505062000068336200034a640100000000026401000000009004565b6000600160006101000a81548160ff021916908315150217905550336001806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a381600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506004608060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600015158152509080600181540180825580915050906001820390600052602060002090600202016000909192909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548160ff02191690831515021790555060608201518160010160156101000a81548160ff02191690831515021790555050505060076000908060018154018082558091505090600182039060005260206000200160009091929091909150555050506200050c565b6200036e816000620003b46401000000000262002140179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515620003f157600080fd5b6200040c828262000477640100000000026401000000009004565b1515156200041957600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515620004b557600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b615590806200051c6000396000f3fe6080604052600436106200013f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630409efcd14620001445780630aac5dfd146200018d5780632482855714620001bb5780632854af99146200022c5780633f4ba83a146200026b57806346fbf68e146200028557806348abcf8314620002f2578063494fd749146200039e5780635460303014620003cc5780635c975abb14620003fa5780636a0cc449146200042c5780636ef8d66d1462000516578063715018a6146200053057806382dc1ec4146200054a5780638456cb59146200059f5780638da5cb5b14620005b95780638f32d59b14620006135780639ac7876c1462000645578063b3e444a714620006cc578063ec9da59e1462000794578063f2fde38b14620007e9578063fb7ad2e3146200083e575b600080fd5b3480156200015157600080fd5b506200018b600480360360408110156200016a57600080fd5b810190808035906020019092919080359060200190929190505050620008a7565b005b3480156200019a57600080fd5b50620001a562000c4e565b6040518082815260200191505060405180910390f35b348015620001c857600080fd5b50620001d362000c5e565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101562000218578082015181840152602081019050620001fb565b505050509050019250505060405180910390f35b3480156200023957600080fd5b5062000269600480360360208110156200025257600080fd5b810190808035906020019092919050505062000db1565b005b3480156200027857600080fd5b506200028362000ecb565b005b3480156200029257600080fd5b50620002d860048036036020811015620002ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000f7e565b604051808215151515815260200191505060405180910390f35b348015620002ff57600080fd5b5062000345600480360360208110156200031857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062000f9d565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156200038a5780820151818401526020810190506200036d565b505050509050019250505060405180910390f35b348015620003ab57600080fd5b50620003b66200104c565b6040518082815260200191505060405180910390f35b348015620003d957600080fd5b50620003e4620011ee565b6040518082815260200191505060405180910390f35b3480156200040757600080fd5b506200041262001201565b604051808215151515815260200191505060405180910390f35b3480156200043957600080fd5b506200051460048036036101008110156200045357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156200049157600080fd5b820183602082011115620004a457600080fd5b80359060200191846001830284011164010000000083111715620004c757600080fd5b909192939192939080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919050505062001218565b005b3480156200052357600080fd5b506200052e620017d6565b005b3480156200053d57600080fd5b5062000548620017e3565b005b3480156200055757600080fd5b506200059d600480360360208110156200057057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050620018b8565b005b348015620005ac57600080fd5b50620005b7620018dd565b005b348015620005c657600080fd5b50620005d162001990565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156200062057600080fd5b506200062b620019b9565b604051808215151515815260200191505060405180910390f35b3480156200065257600080fd5b50620006ca600480360360c08110156200066b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919050505062001a10565b005b348015620006d957600080fd5b506200070960048036036020811015620006f257600080fd5b810190808035906020019092919050505062001bd9565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001831515151581526020018215151515815260200194505050505060405180910390f35b348015620007a157600080fd5b50620007e760048036036020811015620007ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001cff565b005b348015620007f657600080fd5b506200083c600480360360208110156200080f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001d59565b005b3480156200084b57600080fd5b5062000891600480360360208110156200086457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505062001d7d565b6040518082815260200191505060405180910390f35b803373ffffffffffffffffffffffffffffffffffffffff16600482815481101515620008cf57fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156200092457600080fd5b60006004838154811015156200093657fe5b906000526020600020906002020190508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad7ee8326040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015620009cd57600080fd5b505afa158015620009e2573d6000803e3d6000fd5b505050506040513d6020811015620009f957600080fd5b810190808051906020019092919050505062000a27670de0b6b3a76400008662001dc690919063ffffffff16565b1015151562000a3557600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd338360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801562000b5357600080fd5b505af115801562000b68573d6000803e3d6000fd5b505050506040513d602081101562000b7f57600080fd5b8101908080519060200190929190505050151562000b9c57600080fd5b60018160010160156101000a81548160ff0219169083151502179055507f9490153ccd10164d959040e4e2c23d989eea12bb8f5a5560e983e70ffa51d8c9838260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150505050565b6000600160048054905003905090565b60606000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501415151562000d1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6d757374206861766520616e206163746976652061737365740000000000000081525060200191505060405180910390fd5b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801562000da757602002820191906000526020600020905b81548152602001906001019080831162000d92575b5050505050905090565b80600073ffffffffffffffffffffffffffffffffffffffff1660048281548110151562000dda57fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151562000e3057600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151562000e8d57600080fd5b600160048381548110151562000e9f57fe5b906000526020600020906002020160010160146101000a81548160ff0219169083151502179055505050565b62000ed63362000f7e565b151562000ee257600080fd5b600160009054906101000a900460ff16151562000efe57600080fd5b6000600160006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600062000f9682600062001df290919063ffffffff16565b9050919050565b606062000fa9620019b9565b151562000fb557600080fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156200104057602002820191906000526020600020905b8154815260200190600101908083116200102b575b50505050509050919050565b6000806000600190505b60016004805490500381111515620011e657600073ffffffffffffffffffffffffffffffffffffffff166004828154811015156200109057fe5b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515620011d857620011d5600482815481101515620010f457fe5b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f76c1146040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200118857600080fd5b505afa1580156200119d573d6000803e3d6000fd5b505050506040513d6020811015620011b457600080fd5b81019080805190602001909291905050508362001e8790919063ffffffff16565b91505b808060010191505062001056565b508091505090565b6000620011fc600762001ea9565b905090565b6000600160009054906101000a900460ff16905090565b600089600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168a8a8a8a8a8a8a8a62001250620021f4565b808b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200188815260200187815260200186815260200185815260200184815260200183815260200182810382528a8a82818152602001925080828437600081840152601f19601f8201169050808301925050509b505050505050505050505050604051809103906000f08015801562001332573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff1663983b2d56600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015620013f357600080fd5b505af115801562001408573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a356e79182886040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015620014d257600080fd5b505af1158015620014e7573d6000803e3d6000fd5b50505050620014f562002205565b6080604051908101604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600015158152509050600060016004839080600181540180825580915050906001820390600052602060002090600202016000909192909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548160ff02191690831515021790555060608201518160010160156101000a81548160ff0219169083151502179055505050039050600560008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505090600182039060005260206000200160009091929091909150555080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060078690806001815401808255809150509060018203906000526020600020016000909192909190915055507ffa059abe2916f4d57f1c7b4f97b9258577651dd2b526a041e78635f804d5d763838d83604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050505050505050505050565b620017e13362001eda565b565b620017ed620019b9565b1515620017f957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166001809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360006001806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b620018c33362000f7e565b1515620018cf57600080fd5b620018da8162001f36565b50565b620018e83362000f7e565b1515620018f457600080fd5b600160009054906101000a900460ff161515156200191157600080fd5b60018060006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60006001809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006001809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b62001a1a620019b9565b151562001a2657600080fd5b6000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415151562001a7657600080fd5b8573ffffffffffffffffffffffffffffffffffffffff1663158e89a986868686866040518663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018086815260200185815260200184815260200183815260200182815260200195505050505050600060405180830381600087803b15801562001b0657600080fd5b505af115801562001b1b573d6000803e3d6000fd5b505050506000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508360078281548110151562001b7457fe5b90600052602060002001819055508673ffffffffffffffffffffffffffffffffffffffff167fc421279808c21ea1a5078cb61b852c933f2d541137749d0e79577590a1ba704f826040518082815260200191505060405180910390a250505050505050565b60008060008084600073ffffffffffffffffffffffffffffffffffffffff1660048281548110151562001c0857fe5b906000526020600020906002020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151562001c5e57600080fd5b600060048781548110151562001c7057fe5b906000526020600020906002020190508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1695508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1694508060010160149054906101000a900460ff1693508060010160159054906101000a900460ff16925050509193509193565b62001d09620019b9565b151562001d1557600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b62001d63620019b9565b151562001d6f57600080fd5b62001d7a8162001f92565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000808211151562001dd757600080fd5b6000828481151562001de557fe5b0490508091505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151562001e3057600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080828401905083811015151562001e9f57600080fd5b8091505092915050565b60008160605260005b825481101562001ed45781816020606020015401915060018101905062001eb2565b50919050565b62001ef08160006200208d90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e60405160405180910390a250565b62001f4c8160006200214090919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151562001fcf57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166001809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806001806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515620020ca57600080fd5b620020d6828262001df2565b1515620020e257600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200217d57600080fd5b62002189828262001df2565b1515156200219657600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b604051613306806200225f83390190565b608060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600015158152509056fe60806040526012600655600c60075561016d600855620151806009553480156200002857600080fd5b50604051620033063803806200330683398101806040526101208110156200004f57600080fd5b81019080805190602001909291908051906020019092919080516401000000008111156200007c57600080fd5b828101905060208101848111156200009357600080fd5b8151856001820283011164010000000082111715620000b157600080fd5b5050929190602001805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050846200011333620002bd640100000000026401000000009004565b6000811115156200012357600080fd5b806004819055505033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a386600b9080519060200190620002019291906200047f565b5085600c8190555083600d8190555082600e8190555042600f81905550816010819055508060118190555087601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505050506200052e565b620002e1816003620003276401000000000262002c3d179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200036457600080fd5b6200037f8282620003ea640100000000026401000000009004565b1515156200038c57600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156200042857600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004c257805160ff1916838001178555620004f3565b82800160010185558215620004f3579182015b82811115620004f2578251825591602001919060010190620004d5565b5b50905062000502919062000506565b5090565b6200052b91905b80821115620005275760008160009055506001016200050d565b5090565b90565b612dc8806200053e6000396000f3fe6080604052600436106101ac576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde0314610226578063095ea7b3146102b65780630f76c11414610329578063158e89a91461035457806318160ddd146103b757806323b872dd146103e2578063313ce5671461047557806334f2114a146104a0578063355274ea146104b757806339509351146104e257806340c10f191461055557806342966c68146105c857806359c6ecd6146106035780635da139ab1461062e57806370a0823114610659578063715018a6146106be57806379cc6790146106d5578063821f1219146107305780638da5cb5b1461075b5780638f32d59b146107b2578063983b2d56146107e157806398650275146108325780639ac9940f14610849578063a457c2d7146108a0578063a9059cbb14610913578063aa271e1a14610986578063ad7ee832146109ef578063af214cf314610a1a578063b8613ae814610a45578063cf09e0d014610a70578063dd62ed3e14610a9b578063e0b9d9b014610b20578063e2608c9e14610b4b578063f2fde38b14610b76575b600034141515610224576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6e6f7420616363657074696e672045544800000000000000000000000000000081525060200191505060405180910390fd5b005b34801561023257600080fd5b5061023b610bc7565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561027b578082015181840152602081019050610260565b50505050905090810190601f1680156102a85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102c257600080fd5b5061030f600480360360408110156102d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c65565b604051808215151515815260200191505060405180910390f35b34801561033557600080fd5b5061033e610d92565b6040518082815260200191505060405180910390f35b34801561036057600080fd5b506103b5600480360360a081101561037757600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050610dec565b005b3480156103c357600080fd5b506103cc610e29565b6040518082815260200191505060405180910390f35b3480156103ee57600080fd5b5061045b6004803603606081101561040557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e33565b604051808215151515815260200191505060405180910390f35b34801561048157600080fd5b5061048a61103b565b6040518082815260200191505060405180910390f35b3480156104ac57600080fd5b506104b5611041565b005b3480156104c357600080fd5b506104cc61179e565b6040518082815260200191505060405180910390f35b3480156104ee57600080fd5b5061053b6004803603604081101561050557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117a8565b604051808215151515815260200191505060405180910390f35b34801561056157600080fd5b506105ae6004803603604081101561057857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119df565b604051808215151515815260200191505060405180910390f35b3480156105d457600080fd5b50610601600480360360208110156105eb57600080fd5b8101908080359060200190929190505050611a09565b005b34801561060f57600080fd5b50610618611a16565b6040518082815260200191505060405180910390f35b34801561063a57600080fd5b50610643611b1e565b6040518082815260200191505060405180910390f35b34801561066557600080fd5b506106a86004803603602081101561067c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b24565b6040518082815260200191505060405180910390f35b3480156106ca57600080fd5b506106d3611b6c565b005b3480156106e157600080fd5b5061072e600480360360408110156106f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c40565b005b34801561073c57600080fd5b50610745611c4e565b6040518082815260200191505060405180910390f35b34801561076757600080fd5b50610770611c54565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107be57600080fd5b506107c7611c7e565b604051808215151515815260200191505060405180910390f35b3480156107ed57600080fd5b506108306004803603602081101561080457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cd6565b005b34801561083e57600080fd5b50610847611cf6565b005b34801561085557600080fd5b5061085e611d01565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108ac57600080fd5b506108f9600480360360408110156108c357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d27565b604051808215151515815260200191505060405180910390f35b34801561091f57600080fd5b5061096c6004803603604081101561093657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f5e565b604051808215151515815260200191505060405180910390f35b34801561099257600080fd5b506109d5600480360360208110156109a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f75565b604051808215151515815260200191505060405180910390f35b3480156109fb57600080fd5b50610a04611f92565b6040518082815260200191505060405180910390f35b348015610a2657600080fd5b50610a2f611f98565b6040518082815260200191505060405180910390f35b348015610a5157600080fd5b50610a5a612090565b6040518082815260200191505060405180910390f35b348015610a7c57600080fd5b50610a85612096565b6040518082815260200191505060405180910390f35b348015610aa757600080fd5b50610b0a60048036036040811015610abe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061209c565b6040518082815260200191505060405180910390f35b348015610b2c57600080fd5b50610b35612123565b6040518082815260200191505060405180910390f35b348015610b5757600080fd5b50610b60612129565b6040518082815260200191505060405180910390f35b348015610b8257600080fd5b50610bc560048036036020811015610b9957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612209565b005b600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c5d5780601f10610c3257610100808354040283529160200191610c5d565b820191906000526020600020905b815481529060010190602001808311610c4057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610ca257600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600080610da5610da061179e565b612228565b9050610de6610dd5600f544203610dc76011548561227390919063ffffffff16565b61227390919063ffffffff16565b600c546122b190919063ffffffff16565b91505090565b610df4611c7e565b1515610dff57600080fd5b84600c8190555083600d8190555082600e8190555081601081905550806011819055505050505050565b6000600254905090565b6000610ec482600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122d290919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f4f8484846122f4565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b60065481565b600061104c33611b24565b141515156110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6d757374206861766520616e2061637469766520696e766573746d656e74206981526020017f6e2074686973206173736574000000000000000000000000000000000000000081525060400191505060405180910390fd5b60006110f2612129565b90506000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156111b157600080fd5b505afa1580156111c5573d6000803e3d6000fd5b505050506040513d60208110156111db57600080fd5b810190808051906020019092919050505090508181101561130a57601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f193061124884866122d290919063ffffffff16565b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156112cd57600080fd5b505af11580156112e1573d6000803e3d6000fd5b505050506040513d60208110156112f757600080fd5b8101908080519060200190929190505050505b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113cf57600080fd5b505af11580156113e3573d6000803e3d6000fd5b505050506040513d60208110156113f957600080fd5b8101908080519060200190929190505050151561147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f6661696c6564207472616e7366657272696e67205420746f6b656e730000000081525060200191505060405180910390fd5b61148f61148a33611b24565b611a09565b6000611499610e29565b141561179a576000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561155c57600080fd5b505afa158015611570573d6000803e3d6000fd5b505050506040513d602081101561158657600080fd5b81019080805190602001909291905050509050600081111561175f57601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561168957600080fd5b505af115801561169d573d6000803e3d6000fd5b505050506040513d60208110156116b357600080fd5b8101908080519060200190929190505050151561175e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f6661696c656420726566756e64696e672072656d61696e646572205420746f6b81526020017f656e7320746f206173736574206f776e6572000000000000000000000000000081525060400191505060405180910390fd5b5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5050565b6000600454905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156117e557600080fd5b61187482600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122b190919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60006119ea33611f75565b15156119f557600080fd5b6119ff83836124c0565b6001905092915050565b611a1333826124f8565b50565b600080611a2233611b24565b14151515611abe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6d757374206861766520616e2061637469766520696e766573746d656e74206981526020017f6e2074686973206173736574000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000611ac933611b24565b90506000611ad682612228565b9050611b17611b06600f544203611af86011548561227390919063ffffffff16565b61227390919063ffffffff16565b600c546122b190919063ffffffff16565b9250505090565b600d5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b74611c7e565b1515611b7f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611c4a828261264c565b5050565b60105481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b611cdf33611f75565b1515611cea57600080fd5b611cf38161284a565b50565b611cff336128a4565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611d6457600080fd5b611df382600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122d290919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000611f6b3384846122f4565b6001905092915050565b6000611f8b8260036128fe90919063ffffffff16565b9050919050565b600e5481565b600080611fa433611b24565b14151515612040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6d757374206861766520616e2061637469766520696e766573746d656e74206981526020017f6e2074686973206173736574000000000000000000000000000000000000000081525060400191505060405180910390fd5b600061204b33611b24565b9050600061205882612992565b90506000612071600754836129c390919063ffffffff16565b90506120886010548261227390919063ffffffff16565b935050505090565b60115481565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c5481565b60008061213533611b24565b141515156121d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6d757374206861766520616e2061637469766520696e766573746d656e74206981526020017f6e2074686973206173736574000000000000000000000000000000000000000081525060400191505060405180910390fd5b60006121dc33611b24565b905060006121e982612228565b9050612202600f5442038261227390919063ffffffff16565b9250505090565b612211611c7e565b151561221c57600080fd5b612225816129ed565b50565b60008061223483612992565b9050600061224d600854836129c390919063ffffffff16565b90506000612266600954836129c390919063ffffffff16565b9050809350505050919050565b60008083141561228657600090506122ab565b6000828402905082848281151561229957fe5b041415156122a657600080fd5b809150505b92915050565b60008082840190508381101515156122c857600080fd5b8091505092915050565b60008282111515156122e357600080fd5b600082840390508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561233057600080fd5b612381816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122d290919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612414816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122b190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6004546124dd826124cf610e29565b6122b190919063ffffffff16565b111515156124ea57600080fd5b6124f48282612ae9565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561253457600080fd5b612549816002546122d290919063ffffffff16565b6002819055506125a0816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122d290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6126db81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122d290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061276582826124f8565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a35050565b61285e816003612c3d90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b6128b8816003612ced90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561293b57600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006129bc60646129ae600d548561227390919063ffffffff16565b6129c390919063ffffffff16565b9050919050565b600080821115156129d357600080fd5b600082848115156129e057fe5b0490508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612a2957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612b2557600080fd5b612b3a816002546122b190919063ffffffff16565b600281905550612b91816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122b190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612c7957600080fd5b612c8382826128fe565b151515612c8f57600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612d2957600080fd5b612d3382826128fe565b1515612d3e57600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505056fea165627a7a72305820d88dc01ed340e689f9d00e580fd8072f848808dbc7da073abb513ac1f0fc10620029a165627a7a72305820f4063b1af1c18d610cc83e16b139e81fecef65d039787acc7f756e42065ef5000029
Expected behavior
Here is what harvey-cli reports:
$ cat AssetRegistry.json | harvey-cli
{
"issues": [
{
"swc-id": "SWC-123",
"title": "precondition violation",
"details": "Precondition violations should be avoided when passing inputs to other contracts. Make sure your contracts provide only valid inputs to both callees (e.g, via passed arguments) and callers (e.g., via return values).",
"code-hash": "0xd6a271e58404cfd95406d16bdc12f24f8e33aee4b87ebec2fb1d1c331091954a",
"function-signature": "00000000",
"bytecode-offset": 290,
"stack-trace": [
{
"op-code": "CREATE",
"code-hash": "0xb17b583de9bdbb8dbda78285df7abbe982b373490723cc2694896c87bc8dae64",
"function-signature": "6a0cc449",
"bytecode-offset": 4895
}
],
"time-secs": 4.497308861
},
{
"swc-id": "SWC-110",
"title": "assertion violation",
"details": "Assertion violations should be avoided within your contracts. Make sure that your program logic is correct (e.g., no division by zero) and that you add appropriate validation for inputs from both callers (e.g, passed arguments) and callees (e.g., return values). If your contracts are written in Solidity you may want to use the \"require\" language construct for this purpose.",
"code-hash": "0xb17b583de9bdbb8dbda78285df7abbe982b373490723cc2694896c87bc8dae64",
"function-signature": "2854af99",
"bytecode-offset": 3545,
"stack-trace": [],
"time-secs": 6.412805462
},
{
"swc-id": "SWC-110",
"title": "assertion violation",
"details": "Assertion violations should be avoided within your contracts. Make sure that your program logic is correct (e.g., no division by zero) and that you add appropriate validation for inputs from both callers (e.g, passed arguments) and callees (e.g., return values). If your contracts are written in Solidity you may want to use the \"require\" language construct for this purpose.",
"code-hash": "0xb17b583de9bdbb8dbda78285df7abbe982b373490723cc2694896c87bc8dae64",
"function-signature": "0409efcd",
"bytecode-offset": 2254,
"stack-trace": [],
"time-secs": 6.660975065
},
{
"swc-id": "SWC-110",
"title": "assertion violation",
"details": "Assertion violations should be avoided within your contracts. Make sure that your program logic is correct (e.g., no division by zero) and that you add appropriate validation for inputs from both callers (e.g, passed arguments) and callees (e.g., return values). If your contracts are written in Solidity you may want to use the \"require\" language construct for this purpose.",
"code-hash": "0xb17b583de9bdbb8dbda78285df7abbe982b373490723cc2694896c87bc8dae64",
"function-signature": "b3e444a7",
"bytecode-offset": 7175,
"stack-trace": [],
"time-secs": 9.666337898
},
{
"swc-id": "SWC-127",
"title": "jump to arbitrary destination",
"details": "A caller can trigger a jump to an arbitrary destination.",
"code-hash": "0x497a74b6f2beea96da5f6318de670706217e0edbcad5ce1bc5eaf89880d3f50b",
"function-signature": "00000000",
"bytecode-offset": 903,
"stack-trace": [
{
"op-code": "CREATE",
"code-hash": "0xb17b583de9bdbb8dbda78285df7abbe982b373490723cc2694896c87bc8dae64",
"function-signature": "6a0cc449",
"bytecode-offset": 4895
}
],
"time-secs": 26.878317139
},
{
"swc-id": "SWC-127",
"title": "jump to arbitrary destination",
"details": "A caller can trigger a jump to an arbitrary destination.",
"code-hash": "0xcc8f9d2be824285e0603317cba15118dd5c82ff0237ceb1b46daea8a99643370",
"function-signature": "00000000",
"bytecode-offset": 903,
"stack-trace": [
{
"op-code": "CREATE",
"code-hash": "0xb17b583de9bdbb8dbda78285df7abbe982b373490723cc2694896c87bc8dae64",
"function-signature": "6a0cc449",
"bytecode-offset": 4895
}
],
"time-secs": 78.71825101
}
],
"covered-paths": 721,
"covered-instructions": 276715,
"error": "",
"total-time-secs": 96.005005074
}>
Environment
- Mythril version v0.20.0
- Python 3.6.6
- Ubuntu bionic
Issue Analytics
- State:
- Created 5 years ago
- Comments:15 (6 by maintainers)
Top Results From Across the Web
Harvey: A Greybox Fuzzer for Smart Contracts - Maria Christakis
ABSTRACT. We present Harvey, an industrial greybox fuzzer for smart con- tracts, which are programs managing accounts on a blockchain. Greybox fuzzing is...
Read more >Testing Smart Contracts - Stellenbosch University
4.12 List of SWC registry entries checked by Mythril Classic. . . . . 62 ... and symbolic execution frameworks that emulate the...
Read more >Harvey: A Greybox Fuzzer for Smart Contracts - arXiv Vanity
Abstract. We present Harvey, an industrial greybox fuzzer for smart contracts, which are programs managing accounts on a blockchain.
Read more >Ethereum Smart Contract Analysis Tools: A ... - IEEE Xplore
In a no-trust contracting environment, smart contracts can establish trust among parties. Terms ... Mythril [123]: It is a publicly available open-source.
Read more >Ethereum Smart Contract Analysis Tools: A Systematic Review
chine byte code is given as input for analysis in this tool. Mythril not only analyses Ethereum blockchain-based. smart contracts but also works ......
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
Forgot to add that AssertRegistry.sol is
@norhh are there still plan to perform at least a binary (not open source) release?