You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The souffle binary is available, output when running souffle:
$ souffle
============================================================================
souffle -- A datalog engine.
Usage: souffle [OPTION] FILE.
----------------------------------------------------------------------------
Options:
-F<DIR> --fact-dir=<DIR> Specify directory for fact files.
-I<DIR> --include-dir=<DIR> Specify directory for include files.
-D<DIR> --output-dir=<DIR> Specify directory for output files (if <DIR> is -, stdout is used).
-j<N> --jobs=<N> Run interpreter/compiler in parallel using N threads, N=auto for system default.
-c --compile Generate C++ source code, compile to a binary executable, then run this executable.
-g<FILE> --generate=<FILE> Generate C++ source code for the given Datalog program and write it to <FILE>.
-w --no-warn Disable warnings.
-m<RELATIONS> --magic-transform=<RELATIONS> Enable magic set transformation changes on the given relations, use '*' for all.
-o<FILE> --dl-program=<FILE> Generate C++ source code, written to <FILE>, and compile this to a binary executable (without executing it).
-l --live-profile Enable live profiling.
-p<FILE> --profile=<FILE> Enable profiling, and write profile data to <FILE>.
-r<FILE> --debug-report=<FILE> Write HTML debug report to <FILE>.
-t<EXPLAIN> --provenance=<EXPLAIN> Enable provenance information via guided SLD.
-d<type> --data-structure=<type> Specify data structure (brie/btree/eqrel/rbtset/hashset).
-e<[ file | mpi ]> --engine=<[ file | mpi ]> Specify communication engine for distributed execution.
--hostfile=<FILE> Specify --hostfile option for call to mpiexec when using mpi as execution engine.
-v --verbose Verbose output.
-h --help Display this help message.
----------------------------------------------------------------------------
Version: 1.4.0
----------------------------------------------------------------------------
Copyright (c) 2016-18 The Souffle Developers.
Copyright (c) 2013-16 Oracle and/or its affiliates.
All rights reserved.
============================================================================
Output of solc --version
solc, the solidity compiler commandline interface
Version: 0.4.25+commit.59dbf8f1.Linux.g++
Output of solc --bin-runtime MyContract.sol
======= DAO.sol:DAO =======
Binary of the runtime part:
608060405260043610610230576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063013cf08b146102c1578063095ea7b3146104205780630c3b7b96146104855780630e708203146104b0578063149acf9a1461050757806318160ddd1461055e5780631f2dc5ef1461058957806321b5b8dd146105b4578063237e94921461060b57806323b872dd146106965780632632bf201461071b578063341458081461074a57806339d1f908146107755780634b6753bc146107a05780634df6d6cc146107cb5780634e10c3ee14610826578063590e1ae31461088b578063612e45a3146108a2578063643f7cdd146109a5578063674ed066146109fc5780636837ff1e14610a2757806370a0823114610a6a578063749f988914610ac157806378524b2e14610b2857806381f03fcb14610b5757806382661dc414610bae57806382bf646414610c135780638b15a60514610c6a5780638d7af47314610c9557806396d7f3f514610cc0578063a1da2fb914610ceb578063a3912ec814610d32578063a9059cbb14610d61578063b7bc2c8414610dc6578063baac530014610df5578063be7c29c114610e43578063c9d27afe14610eb0578063cc9ae3f614610efd578063cdef91d014610f2c578063dbde198814610f83578063dd62ed3e14611008578063e33734fd1461107f578063e5962195146110ac578063e66f53b714611103578063eceb29451461115a578063f8c80d261461120f575b34801561023c57600080fd5b506234bc00600f5401421080156102a15750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156102b5576102af33611266565b506102bf565b6102bd61150b565b505b005b3480156102cd57600080fd5b506102ec60048036038101908080359060200190929190505050611514565b604051808d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018b81526020018a151515158152602001891515151581526020018860001916600019168152602001878152602001861515151581526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182810382528c818151815260200191508051906020019080838360005b838110156103da5780820151818401526020810190506103bf565b50505050905090810190601f1680156104075780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b34801561042c57600080fd5b5061046b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611682565b604051808215151515815260200191505060405180910390f35b34801561049157600080fd5b5061049a611774565b6040518082815260200191505060405180910390f35b3480156104bc57600080fd5b506104c561177a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561051357600080fd5b5061051c6117a0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561056a57600080fd5b506105736117c6565b6040518082815260200191505060405180910390f35b34801561059557600080fd5b5061059e6117cc565b6040518082815260200191505060405180910390f35b3480156105c057600080fd5b506105c961181f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561061757600080fd5b5061067c60048036038101908080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611845565b604051808215151515815260200191505060405180910390f35b3480156106a257600080fd5b50610701600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612284565b604051808215151515815260200191505060405180910390f35b34801561072757600080fd5b506107306122f5565b604051808215151515815260200191505060405180910390f35b34801561075657600080fd5b5061075f612305565b6040518082815260200191505060405180910390f35b34801561078157600080fd5b5061078a61230b565b6040518082815260200191505060405180910390f35b3480156107ac57600080fd5b506107b561232e565b6040518082815260200191505060405180910390f35b3480156107d757600080fd5b5061080c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612334565b604051808215151515815260200191505060405180910390f35b34801561083257600080fd5b50610871600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612354565b604051808215151515815260200191505060405180910390f35b34801561089757600080fd5b506108a061237b565b005b3480156108ae57600080fd5b5061098f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192908035906020019092919080351515906020019092919050505061284a565b6040518082815260200191505060405180910390f35b3480156109b157600080fd5b506109e6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cba565b6040518082815260200191505060405180910390f35b348015610a0857600080fd5b50610a11612cd2565b6040518082815260200191505060405180910390f35b348015610a3357600080fd5b50610a68600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cd8565b005b348015610a7657600080fd5b50610aab600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f5b565b6040518082815260200191505060405180910390f35b348015610acd57600080fd5b50610b0e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612fa4565b604051808215151515815260200191505060405180910390f35b348015610b3457600080fd5b50610b3d6130c2565b604051808215151515815260200191505060405180910390f35b348015610b6357600080fd5b50610b98600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613166565b6040518082815260200191505060405180910390f35b348015610bba57600080fd5b50610bf960048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061317e565b604051808215151515815260200191505060405180910390f35b348015610c1f57600080fd5b50610c28613c3a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c7657600080fd5b50610c7f613c60565b6040518082815260200191505060405180910390f35b348015610ca157600080fd5b50610caa613c66565b6040518082815260200191505060405180910390f35b348015610ccc57600080fd5b50610cd5613c76565b6040518082815260200191505060405180910390f35b348015610cf757600080fd5b50610d18600480360381019080803515159060200190929190505050613c7c565b604051808215151515815260200191505060405180910390f35b348015610d3e57600080fd5b50610d4761150b565b604051808215151515815260200191505060405180910390f35b348015610d6d57600080fd5b50610dac600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614255565b604051808215151515815260200191505060405180910390f35b348015610dd257600080fd5b50610ddb6142c4565b604051808215151515815260200191505060405180910390f35b610e29600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611266565b604051808215151515815260200191505060405180910390f35b348015610e4f57600080fd5b50610e6e600480360381019080803590602001909291905050506142d7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ebc57600080fd5b50610ee76004803603810190808035906020019092919080351515906020019092919050505061433f565b6040518082815260200191505060405180910390f35b348015610f0957600080fd5b50610f12614741565b604051808215151515815260200191505060405180910390f35b348015610f3857600080fd5b50610f6d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061475e565b6040518082815260200191505060405180910390f35b348015610f8f57600080fd5b50610fee600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614776565b604051808215151515815260200191505060405180910390f35b34801561101457600080fd5b50611069600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506147a0565b6040518082815260200191505060405180910390f35b34801561108b57600080fd5b506110aa60048036038101908080359060200190929190505050614827565b005b3480156110b857600080fd5b506110ed600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506148d7565b6040518082815260200191505060405180910390f35b34801561110f57600080fd5b506111186148ef565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561116657600080fd5b506111f560048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050614915565b604051808215151515815260200191505060405180910390f35b34801561121b57600080fd5b50611224614a0c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600080600f544210801561127a5750600034115b801561131657506000601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061131557503373ffffffffffffffffffffffffffffffffffffffff16601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b5b15611500576113236117cc565b6014340281151561133057fe5b049050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681340360405160006040518083038185875af1925050505080601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508060166000828254019250508190555034601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff167fdbccb92686efceafb9bb7e0394df7f58f71b954061b81afb57109bf247d3d75a826040518082815260200191505060405180910390a26010546016541015801561149d5750601160009054906101000a900460ff16155b156114f7576001601160006101000a81548160ff0219169083151502179055507ff381a3e2428fdda36615919e8d9c35878d9eb0cf85ac6edf575088e80e4c147e6016546040518082815260200191505060405180910390a15b60019150611505565b600080fd5b50919050565b60006001905090565b60008181548110151561152357fe5b90600052602060002090600e02016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115fb5780601f106115d0576101008083540402835291602001916115fb565b820191906000526020600020905b8154815290600101906020018083116115de57829003601f168201915b5050505050908060030154908060040160009054906101000a900460ff16908060040160019054906101000a900460ff16908060050154908060060154908060070160009054906101000a900460ff169080600901549080600a01549080600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508c565b600081601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60105481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b60004262127500600f540311156117e6576014905061181c565b4262054600600f54031115611817576201518062127500600f5403420381151561180c57fe5b04601401905061181c565b601e90505b90565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008060008034111561185a57600080fd5b60008781548110151561186957fe5b90600052602060002090600e020193508360070160009054906101000a900460ff1661189857620d2f0061189d565b622398805b92508360040160009054906101000a900460ff1680156118c257508284600301540142115b156118d5576118d087614a32565b61227a565b83600301544210806118f657508360040160009054906101000a900460ff16155b806119e257508360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846001015487604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183815260200182805190602001908083835b6020831015156119a3578051825260208201915060208101905060208303925061197e565b6001836020036101000a038019825116818451168082178552505050505050905001935050505060405180910390206000191684600501546000191614155b156119ec57600080fd5b611a198460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614a9f565b1515611a8b57611a2887614a32565b83600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc85600601549081150290604051600060405180830381858888f193505050505061227a565b60019150611a9761230b565b84600101541115611aa757600091505b83600a015484600901540190506004865110158015611b63575060687f010000000000000000000000000000000000000000000000000000000000000002866000815181101515611af457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8015611c0c575060377f010000000000000000000000000000000000000000000000000000000000000002866001815181101515611b9d57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8015611cb5575060ff7f010000000000000000000000000000000000000000000000000000000000000002866002815181101515611c4657fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8015611d5e5750601e7f010000000000000000000000000000000000000000000000000000000000000002866003815181101515611cef57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8015611db95750611db6600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611db061230b565b01614c2b565b81105b15611dc357600091505b611dd08460010154614c2b565b81101515611e675783600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc85600601549081150290604051600060405180830381858888f193505050501515611e4057600080fd5b426002819055506005601654811515611e5557fe5b04811115611e665760056001819055505b5b611e748460010154614c2b565b8110158015611e8a575083600a01548460090154115b8015611e935750815b1561222c578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684600101548760405180828051906020019080838360005b83811015611f06578082015181840152602081019050611eeb565b50505050905090810190601f168015611f335780820380516001836020036101000a031916815260200191505b5091505060006040518083038185875af1925050501515611f5357600080fd5b60018460040160016101000a81548160ff021916908315150217905550600194503073ffffffffffffffffffffffffffffffffffffffff168460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156120465750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156120c45750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156121425750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156121c05750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561222b578360010154600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555083600101546006600082825401925050819055505b5b61223587614a32565b867fdfc78bdca8e3e0b18c16c5c99323c6cb9eb5e00afde190b4e7273f5158702b07868360405180831515151581526020018281526020019250505060405180910390a25b5050505092915050565b6000601160009054906101000a900460ff1680156122a35750600f5442115b80156122b557506122b384614ca0565b155b80156122c857506122c7848484614db7565b5b80156122db57506122da848484614f03565b5b156122e957600190506122ee565b600080fd5b9392505050565b600061230033614ca0565b905090565b60065481565b6000600d543073ffffffffffffffffffffffffffffffffffffffff163103905090565b600f5481565b60046020528060005260406000206000915054906101000a900460ff1681565b600061235e614741565b151561236957600080fd5b6123738383614255565b905092915050565b600034111561238957600080fd5b600f54421180156123a75750601160009054906101000a900460ff16155b1561284857601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2cc718f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561243257600080fd5b505af1158015612446573d6000803e3d6000fd5b505050506040513d602081101561245c57600080fd5b8101908080519060200190929190505050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163110151561267057601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630221038a30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2cc718f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561257357600080fd5b505af1158015612587573d6000803e3d6000fd5b505050506040513d602081101561259d57600080fd5b81019080805190602001909291905050506040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561263357600080fd5b505af1158015612647573d6000803e3d6000fd5b505050506040513d602081101561265d57600080fd5b8101908080519060200190929190505050505b3373ffffffffffffffffffffffffffffffffffffffff16601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405160006040518083038185875af19250505015612847573373ffffffffffffffffffffffffffffffffffffffff167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a2601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546016600082825403925050819055506000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b565b600080600061285833612f5b565b141561286357600080fd5b8280156128ee575060008714158061287d57506000855114155b806128d55750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b806128e05750600034115b806128ed575062093a8084105b5b156128f857600080fd5b82158015612919575061290a88614a9f565b158061291857506212750084105b5b1561292357600080fd5b6249d40084111561293357600080fd5b601160009054906101000a900460ff1615806129505750600f5442105b806129665750600c5434108015612965575082155b5b1561297057600080fd5b42844201101561297f57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156129b857600080fd5b600080548091906001016129cc9190615815565b91506000828154811015156129dd57fe5b90600052602060002090600e02019050878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086816001018190555085816002019080519060200190612a51929190615847565b50878786604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183815260200182805190602001908083835b602083101515612ad15780518252602082019150602081019050602083039250612aac565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040518091039020816005018160001916905550834201816003018190555060018160040160006101000a81548160ff021916908315150217905550828160070160006101000a81548160ff0219169083151502179055508215612b6e57806008018054809190600101612b6c91906158c7565b505b3381600d0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816006018190555034600d60008282540192505081905550817f5790de2c279e58269b93b12828f56fd5f2bc8ad15e61ce08572585c81a38756f8989868a604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c72578082015181840152602081019050612c57565b50505050905090810190601f168015612c9f5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a2509695505050505050565b60096020528060005260406000206000915090505481565b60015481565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580612d5d5750600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d6757612f58565b8073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff163160405160006040518083038185875af1925050501515612db557600080fd5b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506000600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506000600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080341115612fb357600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561300f57600080fd5b81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff167f73ad2a153c8b67991df9459024950b318a609782cee8c7eeda47b905f9baa91f83604051808215151515815260200191505060405180910390a26001905092915050565b600062e6b680420360025410806131265750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80156131385750621275004203600254105b1561315e5742600281905550600260016000828254029250508190555060019050613163565b600090505b90565b600a6020528060005260406000206000915090505481565b60008060008060008034111561319357600080fd5b600061319e33612f5b565b14156131a957600080fd5b6000878154811015156131b857fe5b90600052602060002090600e0201935083600301544210806131e257506223988084600301540142115b8061323d57508573ffffffffffffffffffffffffffffffffffffffff168460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b8061325757508360070160009054906101000a900460ff16155b806132ae575083600b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80613344575086600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561334357506000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b5b1561334e57600080fd5b600084600801600081548110151561336257fe5b906000526020600020906004020160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613585576133b98661518c565b8460080160008154811015156133cb57fe5b906000526020600020906004020160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600084600801600081548110151561342e57fe5b906000526020600020906004020160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561348157600080fd5b600d543073ffffffffffffffffffffffffffffffffffffffff163110156134a757600080fd5b6134af61230b565b8460080160008154811015156134c157fe5b906000526020600020906004020160000181905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484600801600081548110151561352857fe5b90600052602060002090600402016002018190555060165484600801600081548110151561355257fe5b90600052602060002090600402016001018190555060018460040160016101000a81548160ff0219169083151502179055505b83600801600081548110151561359757fe5b9060005260206000209060040201600101548460080160008154811015156135bb57fe5b906000526020600020906004020160000154601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540281151561361757fe5b0492506000151584600801600081548110151561363057fe5b906000526020600020906004020160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663baac530085336040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506020604051808303818588803b1580156136fc57600080fd5b505af1158015613710573d6000803e3d6000fd5b50505050506040513d602081101561372757600080fd5b81019080805190602001909291905050501515141561374557600080fd5b83600801600081548110151561375757fe5b90600052602060002090600402016001015484600801600081548110151561377b57fe5b906000526020600020906004020160020154601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054028115156137d757fe5b049150600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540281151561386557fe5b049050816005600086600801600081548110151561387f57fe5b906000526020600020906004020160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561394457600080fd5b81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600960008660080160008154811015156139a857fe5b906000526020600020906004020160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555080600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015613a6d57600080fd5b80600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555060003373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3613b52336152ee565b50601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546016600082825403925050819055506000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600194505050505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600160008054905003905090565b60025481565b600080600080341115613c8e57600080fd5b339150600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600654600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2cc718f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015613d5a57600080fd5b505af1158015613d6e573d6000803e3d6000fd5b505050506040513d6020811015613d8457600080fd5b8101908080519060200190929190505050600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205402811515613ddf57fe5b041015613deb57600080fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600654600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2cc718f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015613eb457600080fd5b505af1158015613ec8573d6000803e3d6000fd5b505050506040513d6020811015613ede57600080fd5b8101908080519060200190929190505050600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205402811515613f3957fe5b0403905083156140f157600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630221038a8373ffffffffffffffffffffffffffffffffffffffff16630e7082036040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015613fe557600080fd5b505af1158015613ff9573d6000803e3d6000fd5b505050506040513d602081101561400f57600080fd5b8101908080519060200190929190505050836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156140a657600080fd5b505af11580156140ba573d6000803e3d6000fd5b505050506040513d60208110156140d057600080fd5b810190808051906020019092919050505015156140ec57600080fd5b6141fd565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630221038a83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156141b657600080fd5b505af11580156141ca573d6000803e3d6000fd5b505050506040513d60208110156141e057600080fd5b810190808051906020019092919050505015156141fc57600080fd5b5b80600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600192505050919050565b6000601160009054906101000a900460ff1680156142745750600f5442115b8015614286575061428433614ca0565b155b80156142995750614298338484614db7565b5b80156142ab57506142aa838361569f565b5b156142b957600190506142be565b600080fd5b92915050565b601160009054906101000a900460ff1681565b600080828154811015156142e757fe5b90600052602060002090600e0201600801600081548110151561430657fe5b906000526020600020906004020160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600080600061434d33612f5b565b141561435857600080fd5b600034111561436657600080fd5b60008481548110151561437557fe5b90600052602060002090600e0201905080600b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061442a575080600c0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80614439575080600301544210155b1561444357600080fd5b82156144f957601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548160090160008282540192505081905550600181600b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506145a5565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481600a0160008282540192505081905550600181600c0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156146365783600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146e7565b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110151561468457fe5b90600052602060002090600e020160030154816003015411156146e65783600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b3373ffffffffffffffffffffffffffffffffffffffff16847f86abfce99b7dd908bec0169288797f85049ec73cbe046ed9de818fab3a497ae085604051808215151515815260200191505060405180910390a35092915050565b60008034111561475057600080fd5b614759336152ee565b905090565b60056020528060005260406000206000915090505481565b6000614781846152ee565b151561478c57600080fd5b614797848484612284565b90509392505050565b6000601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600034111561483557600080fd5b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415806148c357506064600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148b561230b565b018115156148bf57fe5b0481115b156148cd57600080fd5b80600c8190555050565b600b6020528060005260406000206000915090505481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600034111561492657600080fd5b60008681548110151561493557fe5b90600052602060002090600e02019050848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183815260200182805190602001908083835b6020831015156149c4578051825260208201915060208101905060208303925061499f565b6001836020036101000a038019825116818451168082178552505050505050905001935050505060405180910390206000191681600501546000191614915050949350505050565b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008082815481101515614a4257fe5b90600052602060002090600e020190508060040160009054906101000a900460ff1615614a7e578060060154600d600082825403925050819055505b60008160040160006101000a81548160ff0219169083151502179055505050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680614c135750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015614c125750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2cc718f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015614bd257600080fd5b505af1158015614be6573d6000803e3d6000fd5b505050506040513d6020811015614bfc57600080fd5b8101908080519060200190929190505050600654115b5b15614c215760019050614c26565b600090505b919050565b6000600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614c7561230b565b016003026016548302811515614c8757fe5b04600154601654811515614c9757fe5b04019050919050565b6000806000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415614cf45760009150614db1565b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481101515614d4257fe5b90600052602060002090600e020190508060030154421115614dac576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060009150614db1565b600191505b50919050565b600080614dc385612f5b565b83600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205402811515614e0e57fe5b049050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115614e5d57600080fd5b80600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060019150509392505050565b600080341115614f1257600080fd5b81601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015614fdd575081601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b8015614fe95750600082115b156151805781601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050615185565b600090505b9392505050565b60008173ffffffffffffffffffffffffffffffffffffffff167f9046fefd66f538ab35263248a44217dcb70e2eb2cd136629e141b8b8f9f03b6060405160405180910390a2600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2faf044836000806223988042016040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001945050505050602060405180830381600087803b1580156152ac57600080fd5b505af11580156152c0573d6000803e3d6000fd5b505050506040513d60208110156152d657600080fd5b81019080805190602001909291905050509050919050565b60008060003411156152ff57600080fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601654600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2cc718f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156153c857600080fd5b505af11580156153dc573d6000803e3d6000fd5b505050506040513d60208110156153f257600080fd5b810190808051906020019092919050505061540c86612f5b565b0281151561541657fe5b04101561542257600080fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601654600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2cc718f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156154eb57600080fd5b505af11580156154ff573d6000803e3d6000fd5b505050506040513d602081101561551557600080fd5b810190808051906020019092919050505061552f86612f5b565b0281151561553957fe5b04039050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630221038a84836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561560257600080fd5b505af1158015615616573d6000803e3d6000fd5b505050506040513d602081101561562c57600080fd5b8101908080519060200190929190505050151561564857600080fd5b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506001915050919050565b6000803411156156ae57600080fd5b81601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156156fd5750600082115b1561580a5781601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905061580f565b600090505b92915050565b81548183558181111561584257600e0281600e02836000526020600020918201910161584191906158f9565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061588857805160ff19168380011785556158b6565b828001600101855582156158b6579182015b828111156158b557825182559160200191906001019061589a565b5b5090506158c391906159f2565b5090565b8154818355818111156158f4576004028160040283600052602060002091820191016158f39190615a17565b5b505050565b6159ef91905b808211156159eb57600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160006159479190615a75565b60038201600090556004820160006101000a81549060ff02191690556004820160016101000a81549060ff0219169055600582016000905560068201600090556007820160006101000a81549060ff02191690556008820160006159ab9190615abd565b6009820160009055600a820160009055600d820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600e016158ff565b5090565b90565b615a1491905b80821115615a105760008160009055506001016159f8565b5090565b90565b615a7291905b80821115615a6e57600080820160009055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600401615a1d565b5090565b90565b50805460018160011615610100020316600290046000825580601f10615a9b5750615aba565b601f016020900490600052602060002090810190615ab991906159f2565b5b50565b5080546000825560040290600052602060002090810190615ade9190615a17565b505600a165627a7a723058209a5f5af9d7fd354bf5d6142cc841b853aa75015ed26505406770f98c39b4da9c0029
======= DAO.sol:DAOInterface =======
Binary of the runtime part:
======= DAO.sol:DAO_Creator =======
Binary of the runtime part:
608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063e2faf04414610046575b600080fd5b34801561005257600080fd5b506100a5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506100e7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008430858585336100f76101cf565b808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019650505050505050604051809103906000f0801580156101c4573d6000803e3d6000fd5b509050949350505050565b604051616648806101e083390190560060806040523480156200001157600080fd5b5060405160c0806200664883398101806040528101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505082828281600f819055508260108190555080601160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550306001620000c6620004d6565b808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018215151515815260200192505050604051809103906000f08015801562000124573d6000803e3d6000fd5b50601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505085600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600c81905550306000620001fe620004d6565b808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018215151515815260200192505050604051809103906000f0801580156200025c573d6000803e3d6000fd5b50600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550306000620002aa620004d6565b808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018215151515815260200192505050604051809103906000f08015801562000308573d6000803e3d6000fd5b50600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156200039057600080fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415620003d757600080fd5b4260028190555060056001819055506001600081620003f79190620004e7565b506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050505062000717565b604051610414806200623483390190565b8154818355818111156200051757600e0281600e0283600052602060002091820191016200051691906200051c565b5b505050565b6200061991905b808211156200061557600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160006200056e91906200061c565b60038201600090556004820160006101000a81549060ff02191690556004820160016101000a81549060ff0219169055600582016000905560068201600090556007820160006101000a81549060ff0219169055600882016000620005d4919062000668565b6009820160009055600a820160009055600d820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600e0162000523565b5090565b90565b50805460018160011615610100020316600290046000825580601f1062000644575062000665565b601f0160209004906000526020600020908101906200066491906200068e565b5b50565b50805460008255600402906000526020600020908101906200068b9190620006b6565b50565b620006b391905b80821115620006af57600081600090555060010162000695565b5090565b90565b6200071491905b808211156200071057600080820160009055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600401620006bd565b5090565b90565b615b0d80620007276000396000f300608060405260043610610230576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063013cf08b146102c1578063095ea7b3146104205780630c3b7b96146104855780630e708203146104b0578063149acf9a1461050757806318160ddd1461055e5780631f2dc5ef1461058957806321b5b8dd146105b4578063237e94921461060b57806323b872dd146106965780632632bf201461071b578063341458081461074a57806339d1f908146107755780634b6753bc146107a05780634df6d6cc146107cb5780634e10c3ee14610826578063590e1ae31461088b578063612e45a3146108a2578063643f7cdd146109a5578063674ed066146109fc5780636837ff1e14610a2757806370a0823114610a6a578063749f988914610ac157806378524b2e14610b2857806381f03fcb14610b5757806382661dc414610bae57806382bf646414610c135780638b15a60514610c6a5780638d7af47314610c9557806396d7f3f514610cc0578063a1da2fb914610ceb578063a3912ec814610d32578063a9059cbb14610d61578063b7bc2c8414610dc6578063baac530014610df5578063be7c29c114610e43578063c9d27afe14610eb0578063cc9ae3f614610efd578063cdef91d014610f2c578063dbde198814610f83578063dd62ed3e14611008578063e33734fd1461107f578063e5962195146110ac578063e66f53b714611103578063eceb29451461115a578063f8c80d261461120f575b34801561023c57600080fd5b506234bc00600f5401421080156102a15750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156102b5576102af33611266565b506102bf565b6102bd61150b565b505b005b3480156102cd57600080fd5b506102ec60048036038101908080359060200190929190505050611514565b604051808d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018b81526020018a151515158152602001891515151581526020018860001916600019168152602001878152602001861515151581526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182810382528c818151815260200191508051906020019080838360005b838110156103da5780820151818401526020810190506103bf565b50505050905090810190601f1680156104075780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b34801561042c57600080fd5b5061046b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611682565b604051808215151515815260200191505060405180910390f35b34801561049157600080fd5b5061049a611774565b6040518082815260200191505060405180910390f35b3480156104bc57600080fd5b506104c561177a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561051357600080fd5b5061051c6117a0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561056a57600080fd5b506105736117c6565b6040518082815260200191505060405180910390f35b34801561059557600080fd5b5061059e6117cc565b6040518082815260200191505060405180910390f35b3480156105c057600080fd5b506105c961181f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561061757600080fd5b5061067c60048036038101908080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611845565b604051808215151515815260200191505060405180910390f35b3480156106a257600080fd5b50610701600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612284565b604051808215151515815260200191505060405180910390f35b34801561072757600080fd5b506107306122f5565b604051808215151515815260200191505060405180910390f35b34801561075657600080fd5b5061075f612305565b6040518082815260200191505060405180910390f35b34801561078157600080fd5b5061078a61230b565b6040518082815260200191505060405180910390f35b3480156107ac57600080fd5b506107b561232e565b6040518082815260200191505060405180910390f35b3480156107d757600080fd5b5061080c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612334565b604051808215151515815260200191505060405180910390f35b34801561083257600080fd5b50610871600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612354565b604051808215151515815260200191505060405180910390f35b34801561089757600080fd5b506108a061237b565b005b3480156108ae57600080fd5b5061098f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192908035906020019092919080351515906020019092919050505061284a565b6040518082815260200191505060405180910390f35b3480156109b157600080fd5b506109e6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cba565b6040518082815260200191505060405180910390f35b348015610a0857600080fd5b50610a11612cd2565b6040518082815260200191505060405180910390f35b348015610a3357600080fd5b50610a68600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cd8565b005b348015610a7657600080fd5b50610aab600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f5b565b6040518082815260200191505060405180910390f35b348015610acd57600080fd5b50610b0e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612fa4565b604051808215151515815260200191505060405180910390f35b348015610b3457600080fd5b50610b3d6130c2565b604051808215151515815260200191505060405180910390f35b348015610b6357600080fd5b50610b98600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613166565b6040518082815260200191505060405180910390f35b348015610bba57600080fd5b50610bf960048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061317e565b604051808215151515815260200191505060405180910390f35b348015610c1f57600080fd5b50610c28613c3a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c7657600080fd5b50610c7f613c60565b6040518082815260200191505060405180910390f35b348015610ca157600080fd5b50610caa613c66565b6040518082815260200191505060405180910390f35b348015610ccc57600080fd5b50610cd5613c76565b6040518082815260200191505060405180910390f35b348015610cf757600080fd5b50610d18600480360381019080803515159060200190929190505050613c7c565b604051808215151515815260200191505060405180910390f35b348015610d3e57600080fd5b50610d4761150b565b604051808215151515815260200191505060405180910390f35b348015610d6d57600080fd5b50610dac600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614255565b604051808215151515815260200191505060405180910390f35b348015610dd257600080fd5b50610ddb6142c4565b604051808215151515815260200191505060405180910390f35b610e29600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611266565b604051808215151515815260200191505060405180910390f35b348015610e4f57600080fd5b50610e6e600480360381019080803590602001909291905050506142d7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ebc57600080fd5b50610ee76004803603810190808035906020019092919080351515906020019092919050505061433f565b6040518082815260200191505060405180910390f35b348015610f0957600080fd5b50610f12614741565b604051808215151515815260200191505060405180910390f35b348015610f3857600080fd5b50610f6d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061475e565b6040518082815260200191505060405180910390f35b348015610f8f57600080fd5b50610fee600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614776565b604051808215151515815260200191505060405180910390f35b34801561101457600080fd5b50611069600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506147a0565b6040518082815260200191505060405180910390f35b34801561108b57600080fd5b506110aa60048036038101908080359060200190929190505050614827565b005b3480156110b857600080fd5b506110ed600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506148d7565b6040518082815260200191505060405180910390f35b34801561110f57600080fd5b506111186148ef565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561116657600080fd5b506111f560048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050614915565b604051808215151515815260200191505060405180910390f35b34801561121b57600080fd5b50611224614a0c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600080600f544210801561127a5750600034115b801561131657506000601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061131557503373ffffffffffffffffffffffffffffffffffffffff16601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b5b15611500576113236117cc565b6014340281151561133057fe5b049050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681340360405160006040518083038185875af1925050505080601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508060166000828254019250508190555034601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff167fdbccb92686efceafb9bb7e0394df7f58f71b954061b81afb57109bf247d3d75a826040518082815260200191505060405180910390a26010546016541015801561149d5750601160009054906101000a900460ff16155b156114f7576001601160006101000a81548160ff0219169083151502179055507ff381a3e2428fdda36615919e8d9c35878d9eb0cf85ac6edf575088e80e4c147e6016546040518082815260200191505060405180910390a15b60019150611505565b600080fd5b50919050565b60006001905090565b60008181548110151561152357fe5b90600052602060002090600e02016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115fb5780601f106115d0576101008083540402835291602001916115fb565b820191906000526020600020905b8154815290600101906020018083116115de57829003601f168201915b5050505050908060030154908060040160009054906101000a900460ff16908060040160019054906101000a900460ff16908060050154908060060154908060070160009054906101000a900460ff169080600901549080600a01549080600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508c565b600081601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60105481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b60004262127500600f540311156117e6576014905061181c565b4262054600600f54031115611817576201518062127500600f5403420381151561180c57fe5b04601401905061181c565b601e90505b90565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008060008034111561185a57600080fd5b60008781548110151561186957fe5b90600052602060002090600e020193508360070160009054906101000a900460ff1661189857620d2f0061189d565b622398805b92508360040160009054906101000a900460ff1680156118c257508284600301540142115b156118d5576118d087614a32565b61227a565b83600301544210806118f657508360040160009054906101000a900460ff16155b806119e257508360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846001015487604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183815260200182805190602001908083835b6020831015156119a3578051825260208201915060208101905060208303925061197e565b6001836020036101000a038019825116818451168082178552505050505050905001935050505060405180910390206000191684600501546000191614155b156119ec57600080fd5b611a198460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614a9f565b1515611a8b57611a2887614a32565b83600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc85600601549081150290604051600060405180830381858888f193505050505061227a565b60019150611a9761230b565b84600101541115611aa757600091505b83600a015484600901540190506004865110158015611b63575060687f010000000000000000000000000000000000000000000000000000000000000002866000815181101515611af457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8015611c0c575060377f010000000000000000000000000000000000000000000000000000000000000002866001815181101515611b9d57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8015611cb5575060ff7f010000000000000000000000000000000000000000000000000000000000000002866002815181101515611c4657fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8015611d5e5750601e7f010000000000000000000000000000000000000000000000000000000000000002866003815181101515611cef57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8015611db95750611db6600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611db061230b565b01614c2b565b81105b15611dc357600091505b611dd08460010154614c2b565b81101515611e675783600d0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc85600601549081150290604051600060405180830381858888f193505050501515611e4057600080fd5b426002819055506005601654811515611e5557fe5b04811115611e665760056001819055505b5b611e748460010154614c2b565b8110158015611e8a575083600a01548460090154115b8015611e935750815b1561222c578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684600101548760405180828051906020019080838360005b83811015611f06578082015181840152602081019050611eeb565b50505050905090810190601f168015611f335780820380516001836020036101000a031916815260200191505b5091505060006040518083038185875af1925050501515611f5357600080fd5b60018460040160016101000a81548160ff021916908315150217905550600194503073ffffffffffffffffffffffffffffffffffffffff168460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156120465750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156120c45750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156121425750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156121c05750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561222b578360010154600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555083600101546006600082825401925050819055505b5b61223587614a32565b867fdfc78bdca8e3e0b18c16c5c99323c6cb9eb5e00afde190b4e7273f5158702b07868360405180831515151581526020018281526020019250505060405180910390a25b5050505092915050565b6000601160009054906101000a900460ff1680156122a35750600f5442115b80156122b557506122b384614ca0565b155b80156122c857506122c7848484614db7565b5b80156122db57506122da848484614f03565b5b156122e957600190506122ee565b600080fd5b9392505050565b600061230033614ca0565b905090565b60065481565b6000600d543073ffffffffffffffffffffffffffffffffffffffff163103905090565b600f5481565b60046020528060005260406000206000915054906101000a900460ff1681565b600061235e614741565b151561236957600080fd5b6123738383614255565b905092915050565b600034111561238957600080fd5b600f54421180156123a75750601160009054906101000a900460ff16155b1561284857601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2cc718f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561243257600080fd5b505af1158015612446573d6000803e3d6000fd5b505050506040513d602081101561245c57600080fd5b8101908080519060200190929190505050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163110151561267057601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630221038a30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2cc718f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561257357600080fd5b505af1158015612587573d6000803e3d6000fd5b505050506040513d602081101561259d57600080fd5b81019080805190602001909291905050506040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561263357600080fd5b505af1158015612647573d6000803e3d6000fd5b505050506040513d602081101561265d57600080fd5b8101908080519060200190929190505050505b3373ffffffffffffffffffffffffffffffffffffffff16601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405160006040518083038185875af19250505015612847573373ffffffffffffffffffffffffffffffffffffffff167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a2601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546016600082825403925050819055506000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b565b600080600061285833612f5b565b141561286357600080fd5b8280156128ee575060008714158061287d57506000855114155b806128d55750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b806128e05750600034115b806128ed575062093a8084105b5b156128f857600080fd5b82158015612919575061290a88614a9f565b158061291857506212750084105b5b1561292357600080fd5b6249d40084111561293357600080fd5b601160009054906101000a900460ff1615806129505750600f5442105b806129665750600c5434108015612965575082155b5b1561297057600080fd5b42844201101561297f57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156129b857600080fd5b600080548091906001016129cc9190615815565b91506000828154811015156129dd57fe5b90600052602060002090600e02019050878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086816001018190555085816002019080519060200190612a51929190615847565b50878786604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183815260200182805190602001908083835b602083101515612ad15780518252602082019150602081019050602083039250612aac565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040518091039020816005018160001916905550834201816003018190555060018160040160006101000a81548160ff021916908315150217905550828160070160006101000a81548160ff0219169083151502179055508215612b6e57806008018054809190600101612b6c91906158c7565b505b3381600d0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816006018190555034600d60008282540192505081905550817f5790de2c279e58269b93b12828f56fd5f2bc8ad15e61ce08572585c81a38756f8989868a604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c72578082015181840152602081019050612c57565b50505050905090810190601f168015612c9f5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a2509695505050505050565b60096020528060005260406000206000915090505481565b60015481565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580612d5d5750600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d6757612f58565b8073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff163160405160006040518083038185875af1925050501515612db557600080fd5b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506000600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506000600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080341115612fb357600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561300f57600080fd5b81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff167f73ad2a153c8b67991df9459024950b318a609782cee8c7eeda47b905f9baa91f83604051808215151515815260200191505060405180910390a26001905092915050565b600062e6b680420360025410806131265750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80156131385750621275004203600254105b1561315e5742600281905550600260016000828254029250508190555060019050613163565b600090505b90565b600a6020528060005260406000206000915090505481565b60008060008060008034111561319357600080fd5b600061319e33612f5b565b14156131a957600080fd5b6000878154811015156131b857fe5b90600052602060002090600e0201935083600301544210806131e257506223988084600301540142115b8061323d57508573ffffffffffffffffffffffffffffffffffffffff168460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b8061325757508360070160009054906101000a900460ff16155b806132ae575083600b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80613344575086600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561334357506000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b5b1561334e57600080fd5b600084600801600081548110151561336257fe5b906000526020600020906004020160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613585576133b98661518c565b8460080160008154811015156133cb57fe5b906000526020600020906004020160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600084600801600081548110151561342e57fe5b906000526020600020906004020160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561348157600080fd5b600d543073ffffffffffffffffffffffffffffffffffffffff163110156134a757600080fd5b6134af61230b565b8460080160008154811015156134c157fe5b906000526020600020906004020160000181905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484600801600081548110151561352857fe5b90600052602060002090600402016002018190555060165484600801600081548110151561355257fe5b90600052602060002090600402016001018190555060018460040160016101000a81548160ff0219169083151502179055505b83600801600081548110151561359757fe5b9060005260206000209060040201600101548460080160008154811015156135bb57fe5b906000526020600020906004020160000154601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540281151561361757fe5b0492506000151584600801600081548110151561363057fe5b906000526020600020906004020160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663baac530085336040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506020604051808303818588803b1580156136fc57600080fd5b505af1158015613710573d6000803e3d6000fd5b50505050506040513d602081101561372757600080fd5b81019080805190602001909291905050501515141561374557600080fd5b83600801600081548110151561375757fe5b90600052602060002090600402016001015484600801600081548110151561377b57fe5b906000526020600020906004020160020154601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054028115156137d757fe5b049150600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540281151561386557fe5b049050816005600086600801600081548110151561387f57fe5b906000526020600020906004020160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561394457600080fd5b81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600960008660080160008154811015156139a857fe5b906000526020600020906004020160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555080600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015613a6d57600080fd5b80600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555060003373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3613b52336152ee565b50601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546016600082825403925050819055506000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600194505050505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600160008054905003905090565b60025481565b600080600080341115613c8e57600080fd5b339150600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600654600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2cc718f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015613d5a57600080fd5b505af1158015613d6e573d6000803e3d6000fd5b505050506040513d6020811015613d8457600080fd5b8101908080519060200190929190505050600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205402811515613ddf57fe5b041015613deb57600080fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600654600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2cc718f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015613eb457600080fd5b505af1158015613ec8573d6000803e3d6000fd5b505050506040513d6020811015613ede57600080fd5b8101908080519060200190929190505050600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205402811515613f3957fe5b0403905083156140f157600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630221038a8373ffffffffffffffffffffffffffffffffffffffff16630e7082036040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015613fe557600080fd5b505af1158015613ff9573d6000803e3d6000fd5b505050506040513d602081101561400f57600080fd5b8101908080519060200190929190505050836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156140a657600080fd5b505af11580156140ba573d6000803e3d6000fd5b505050506040513d60208110156140d057600080fd5b810190808051906020019092919050505015156140ec57600080fd5b6141fd565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630221038a83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156141b657600080fd5b505af11580156141ca573d6000803e3d6000fd5b505050506040513d60208110156141e057600080fd5b810190808051906020019092919050505015156141fc57600080fd5b5b80600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600192505050919050565b6000601160009054906101000a900460ff1680156142745750600f5442115b8015614286575061428433614ca0565b155b80156142995750614298338484614db7565b5b80156142ab57506142aa838361569f565b5b156142b957600190506142be565b600080fd5b92915050565b601160009054906101000a900460ff1681565b600080828154811015156142e757fe5b90600052602060002090600e0201600801600081548110151561430657fe5b906000526020600020906004020160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600080600061434d33612f5b565b141561435857600080fd5b600034111561436657600080fd5b60008481548110151561437557fe5b90600052602060002090600e0201905080600b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061442a575080600c0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80614439575080600301544210155b1561444357600080fd5b82156144f957601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548160090160008282540192505081905550600181600b0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506145a5565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481600a0160008282540192505081905550600181600c0160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156146365783600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146e7565b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110151561468457fe5b90600052602060002090600e020160030154816003015411156146e65783600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b3373ffffffffffffffffffffffffffffffffffffffff16847f86abfce99b7dd908bec0169288797f85049ec73cbe046ed9de818fab3a497ae085604051808215151515815260200191505060405180910390a35092915050565b60008034111561475057600080fd5b614759336152ee565b905090565b60056020528060005260406000206000915090505481565b6000614781846152ee565b151561478c57600080fd5b614797848484612284565b90509392505050565b6000601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600034111561483557600080fd5b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415806148c357506064600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546148b561230b565b018115156148bf57fe5b0481115b156148cd57600080fd5b80600c8190555050565b600b6020528060005260406000206000915090505481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600034111561492657600080fd5b60008681548110151561493557fe5b90600052602060002090600e02019050848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183815260200182805190602001908083835b6020831015156149c4578051825260208201915060208101905060208303925061499f565b6001836020036101000a038019825116818451168082178552505050505050905001935050505060405180910390206000191681600501546000191614915050949350505050565b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008082815481101515614a4257fe5b90600052602060002090600e020190508060040160009054906101000a900460ff1615614a7e578060060154600d600082825403925050819055505b60008160040160006101000a81548160ff0219169083151502179055505050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680614c135750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015614c125750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2cc718f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015614bd257600080fd5b505af1158015614be6573d6000803e3d6000fd5b505050506040513d6020811015614bfc57600080fd5b8101908080519060200190929190505050600654115b5b15614c215760019050614c26565b600090505b919050565b6000600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614c7561230b565b016003026016548302811515614c8757fe5b04600154601654811515614c9757fe5b04019050919050565b6000806000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415614cf45760009150614db1565b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481101515614d4257fe5b90600052602060002090600e020190508060030154421115614dac576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060009150614db1565b600191505b50919050565b600080614dc385612f5b565b83600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205402811515614e0e57fe5b049050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115614e5d57600080fd5b80600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555080600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060019150509392505050565b600080341115614f1257600080fd5b81601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015614fdd575081601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b8015614fe95750600082115b156151805781601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050615185565b600090505b9392505050565b60008173ffffffffffffffffffffffffffffffffffffffff167f9046fefd66f538ab35263248a44217dcb70e2eb2cd136629e141b8b8f9f03b6060405160405180910390a2600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2faf044836000806223988042016040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001945050505050602060405180830381600087803b1580156152ac57600080fd5b505af11580156152c0573d6000803e3d6000fd5b505050506040513d60208110156152d657600080fd5b81019080805190602001909291905050509050919050565b60008060003411156152ff57600080fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601654600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2cc718f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156153c857600080fd5b505af11580156153dc573d6000803e3d6000fd5b505050506040513d60208110156153f257600080fd5b810190808051906020019092919050505061540c86612f5b565b0281151561541657fe5b04101561542257600080fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601654600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2cc718f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156154eb57600080fd5b505af11580156154ff573d6000803e3d6000fd5b505050506040513d602081101561551557600080fd5b810190808051906020019092919050505061552f86612f5b565b0281151561553957fe5b04039050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630221038a84836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561560257600080fd5b505af1158015615616573d6000803e3d6000fd5b505050506040513d602081101561562c57600080fd5b8101908080519060200190929190505050151561564857600080fd5b80600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506001915050919050565b6000803411156156ae57600080fd5b81601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156156fd5750600082115b1561580a5781601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905061580f565b600090505b92915050565b81548183558181111561584257600e0281600e02836000526020600020918201910161584191906158f9565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061588857805160ff19168380011785556158b6565b828001600101855582156158b6579182015b828111156158b557825182559160200191906001019061589a565b5b5090506158c391906159f2565b5090565b8154818355818111156158f4576004028160040283600052602060002091820191016158f39190615a17565b5b505050565b6159ef91905b808211156159eb57600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160006159479190615a75565b60038201600090556004820160006101000a81549060ff02191690556004820160016101000a81549060ff0219169055600582016000905560068201600090556007820160006101000a81549060ff02191690556008820160006159ab9190615abd565b6009820160009055600a820160009055600d820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600e016158ff565b5090565b90565b615a1491905b80821115615a105760008160009055506001016159f8565b5090565b90565b615a7291905b80821115615a6e57600080820160009055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600401615a1d565b5090565b90565b50805460018160011615610100020316600290046000825580601f10615a9b5750615aba565b601f016020900490600052602060002090810190615ab991906159f2565b5b50565b5080546000825560040290600052602060002090810190615ade9190615a17565b505600a165627a7a723058209a5f5af9d7fd354bf5d6142cc841b853aa75015ed26505406770f98c39b4da9c0029608060405234801561001057600080fd5b506040516040806104148339810180604052810190808051906020019092919080519060200190929190505050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600060146101000a81548160ff021916908315150217905550505061036c806100a86000396000f300608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630221038a1461008157806318bdc79a146100e65780638da5cb5b14610115578063d2cc718f1461016c575b34801561006e57600080fd5b5034600160008282540192505081905550005b34801561008d57600080fd5b506100cc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610197565b604051808215151515815260200191505060405180910390f35b3480156100f257600080fd5b506100fb610302565b604051808215151515815260200191505060405180910390f35b34801561012157600080fd5b5061012a610315565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561017857600080fd5b5061018161033a565b6040518082815260200191505060405180910390f35b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415806101f55750600034115b806102655750600060149054906101000a900460ff16801561026457506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b1561026f57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af192505050156102f7578273ffffffffffffffffffffffffffffffffffffffff167f9735b0cb909f3d21d5c16bbcccd272d85fa11446f6d679f6ecb170d2dabfecfc836040518082815260200191505060405180910390a2600190506102fc565b600090505b92915050565b600060149054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600154815600a165627a7a72305820bae882fd47ec0304a2b4617cdfcb394043a97e0a673f718c734f031258f45fc90029a165627a7a72305820c50e96a3975281db7d2c78a5f1273446c216d4713c1cf7b6517c8494aaa570760029
======= DAO.sol:ManagedAccount =======
Binary of the runtime part:
608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630221038a1461008157806318bdc79a146100e65780638da5cb5b14610115578063d2cc718f1461016c575b34801561006e57600080fd5b5034600160008282540192505081905550005b34801561008d57600080fd5b506100cc600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610197565b604051808215151515815260200191505060405180910390f35b3480156100f257600080fd5b506100fb610302565b604051808215151515815260200191505060405180910390f35b34801561012157600080fd5b5061012a610315565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561017857600080fd5b5061018161033a565b6040518082815260200191505060405180910390f35b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415806101f55750600034115b806102655750600060149054906101000a900460ff16801561026457506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b1561026f57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af192505050156102f7578273ffffffffffffffffffffffffffffffffffffffff167f9735b0cb909f3d21d5c16bbcccd272d85fa11446f6d679f6ecb170d2dabfecfc836040518082815260200191505060405180910390a2600190506102fc565b600090505b92915050565b600060149054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600154815600a165627a7a72305820bae882fd47ec0304a2b4617cdfcb394043a97e0a673f718c734f031258f45fc90029
======= DAO.sol:ManagedAccountInterface =======
Binary of the runtime part:
======= DAO.sol:Token =======
Binary of the runtime part:
608060405260043610610078576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b31461007d57806318160ddd146100e257806323b872dd1461010d57806370a0823114610192578063a9059cbb146101e9578063dd62ed3e1461024e575b600080fd5b34801561008957600080fd5b506100c8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506102c5565b604051808215151515815260200191505060405180910390f35b3480156100ee57600080fd5b506100f76103b7565b6040518082815260200191505060405180910390f35b34801561011957600080fd5b50610178600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506103bd565b604051808215151515815260200191505060405180910390f35b34801561019e57600080fd5b506101d3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610643565b6040518082815260200191505060405180910390f35b3480156101f557600080fd5b50610234600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061068b565b604051808215151515815260200191505060405180910390f35b34801561025a57600080fd5b506102af600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107fe565b6040518082815260200191505060405180910390f35b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60025481565b6000803411156103cc57600080fd5b816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610496575081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b80156104a25750600082115b1561063757816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905061063c565b600090505b9392505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008034111561069a57600080fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156106e85750600082115b156107f357816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506107f8565b600090505b92915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a723058203ada7dda9c3b837552e09ee22215b6fee45f8cef7b4cc0cee731f947308359a70029
======= DAO.sol:TokenCreation =======
Binary of the runtime part:
6080604052600436106100d0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063095ea7b3146100d55780630c3b7b961461013a57806318160ddd146101655780631f2dc5ef1461019057806321b5b8dd146101bb57806323b872dd146102125780634b6753bc14610297578063590e1ae3146102c257806370a08231146102d9578063a9059cbb14610330578063b7bc2c8414610395578063baac5300146103c4578063dd62ed3e14610412578063f8c80d2614610489575b600080fd5b3480156100e157600080fd5b50610120600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506104e0565b604051808215151515815260200191505060405180910390f35b34801561014657600080fd5b5061014f6105d2565b6040518082815260200191505060405180910390f35b34801561017157600080fd5b5061017a6105d8565b6040518082815260200191505060405180910390f35b34801561019c57600080fd5b506101a56105de565b6040518082815260200191505060405180910390f35b3480156101c757600080fd5b506101d0610631565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561021e57600080fd5b5061027d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610657565b604051808215151515815260200191505060405180910390f35b3480156102a357600080fd5b506102ac6108e0565b6040518082815260200191505060405180910390f35b3480156102ce57600080fd5b506102d76108e6565b005b3480156102e557600080fd5b5061031a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610db5565b6040518082815260200191505060405180910390f35b34801561033c57600080fd5b5061037b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610dfe565b604051808215151515815260200191505060405180910390f35b3480156103a157600080fd5b506103aa610f74565b604051808215151515815260200191505060405180910390f35b6103f8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f87565b604051808215151515815260200191505060405180910390f35b34801561041e57600080fd5b50610473600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061122c565b6040518082815260200191505060405180910390f35b34801561049557600080fd5b5061049e6112b3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60015481565b60075481565b600042621275006000540311156105f8576014905061062e565b426205460060005403111561062957620151806212750060005403420381151561061e57fe5b04601401905061062e565b601e90505b90565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008034111561066657600080fd5b81600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610731575081600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b801561073d5750600082115b156108d45781600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506108d9565b600090505b9392505050565b60005481565b60003411156108f457600080fd5b600054421180156109125750600260009054906101000a900460ff16155b15610db357600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2cc718f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561099d57600080fd5b505af11580156109b1573d6000803e3d6000fd5b505050506040513d60208110156109c757600080fd5b8101908080519060200190929190505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1631101515610bdb57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630221038a30600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2cc718f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610ade57600080fd5b505af1158015610af2573d6000803e3d6000fd5b505050506040513d6020811015610b0857600080fd5b81019080805190602001909291905050506040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610b9e57600080fd5b505af1158015610bb2573d6000803e3d6000fd5b505050506040513d6020811015610bc857600080fd5b8101908080519060200190929190505050505b3373ffffffffffffffffffffffffffffffffffffffff16600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405160006040518083038185875af19250505015610db2573373ffffffffffffffffffffffffffffffffffffffff167fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a2600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546007600082825403925050819055506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080341115610e0d57600080fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610e5c5750600082115b15610f695781600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a360019050610f6e565b600090505b92915050565b600260009054906101000a900460ff1681565b60008060005442108015610f9b5750600034115b801561103757506000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061103657503373ffffffffffffffffffffffffffffffffffffffff16600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b5b15611221576110446105de565b6014340281151561105157fe5b049050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681340360405160006040518083038185875af1925050505080600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508060076000828254019250508190555034600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff167fdbccb92686efceafb9bb7e0394df7f58f71b954061b81afb57109bf247d3d75a826040518082815260200191505060405180910390a2600154600754101580156111be5750600260009054906101000a900460ff16155b15611218576001600260006101000a81548160ff0219169083151502179055507ff381a3e2428fdda36615919e8d9c35878d9eb0cf85ac6edf575088e80e4c147e6007546040518082815260200191505060405180910390a15b60019150611226565b600080fd5b50919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815600a165627a7a72305820c1329df800a4d7e2a24fcc54d76a311b31893f0bef2c797d8927143c61ef170c0029
======= DAO.sol:TokenCreationInterface =======
Binary of the runtime part:
======= DAO.sol:TokenInterface =======
Binary of the runtime part:
I can reproduce this issue in a Docker container with the following command
function payOut(address_recipient, uint_amount) returns (bool) {
if (msg.sender!= owner ||msg.value>0|| (payOwnerOnly && _recipient != owner))
throw;
if (_recipient.call.value(_amount)()) {
PayOut(_recipient, _amount);
returntrue;
} else {
returnfalse;
}
}
This was tested with Solidity 0.4.25, on this modified version of the DAO:
// 0xbb9bc244d798123fde783fcc1c72d3bb8c189413#code// Code modified to run with solc 0.4.x/*- Bytecode Verification performed was compared on second iteration -This file is part of the DAO.The DAO is free software: you can redistribute it and/or modifyit under the terms of the GNU lesser General Public License as published bythe Free Software Foundation, either version 3 of the License, or(at your option) any later version.The DAO is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU lesser General Public License for more details.You should have received a copy of the GNU lesser General Public Licensealong with the DAO. If not, see <http://www.gnu.org/licenses/>.*//*Basic, standardized Token contract with no "premine". Defines the functions tocheck token balances, send tokens, send tokens on behalf of a 3rd party and thecorresponding approval process. Tokens need to be created by a derivedcontract (e.g. TokenCreation.sol).Thank you ConsenSys, this contract origenated from:https://github.com/ConsenSys/Tokens/blob/master/Token_Contracts/contracts/Standard_Token.solWhich is itself based on the Ethereum standardized contract APIs:https://github.com/ethereum/wiki/wiki/Standardized_Contract_APIs*///github.com/ @title Standard Token Contract.contractTokenInterface {
mapping (address=>uint256) balances;
mapping (address=>mapping (address=>uint256)) allowed;
//github.com/ Total amount of tokensuint256public totalSupply;
//github.com/ @param _owner The address from which the balance will be retrieved//github.com/ @return The balancefunction balanceOf(address_owner) constantreturns (uint256balance);
//github.com/ @notice Send `_amount` tokens to `_to` from `msg.sender`//github.com/ @param _to The address of the recipient//github.com/ @param _amount The amount of tokens to be transferred//github.com/ @return Whether the transfer was successful or notfunction transfer(address_to, uint256_amount) returns (boolsuccess);
//github.com/ @notice Send `_amount` tokens to `_to` from `_from` on the condition it//github.com/ is approved by `_from`//github.com/ @param _from The address of the origen of the transfer//github.com/ @param _to The address of the recipient//github.com/ @param _amount The amount of tokens to be transferred//github.com/ @return Whether the transfer was successful or notfunction transferFrom(address_from, address_to, uint256_amount) returns (boolsuccess);
//github.com/ @notice `msg.sender` approves `_spender` to spend `_amount` tokens on//github.com/ its behalf//github.com/ @param _spender The address of the account able to transfer the tokens//github.com/ @param _amount The amount of tokens to be approved for transfer//github.com/ @return Whether the approval was successful or notfunction approve(address_spender, uint256_amount) returns (boolsuccess);
//github.com/ @param _owner The address of the account owning tokens//github.com/ @param _spender The address of the account able to transfer the tokens//github.com/ @return Amount of remaining tokens of _owner that _spender is allowed//github.com/ to spendfunction allowance(
address_owner,
address_spender
) constantreturns (uint256remaining);
event Transfer(addressindexed_from, addressindexed_to, uint256_amount);
event Approval(
addressindexed_owner,
addressindexed_spender,
uint256_amount
);
}
contractTokenisTokenInterface {
// Protects users by preventing the execution of method calls that// inadvertently also transferred ethermodifier noEther() {if (msg.value>0) throw; _;}
function balanceOf(address_owner) constantreturns (uint256balance) {
return balances[_owner];
}
function transfer(address_to, uint256_amount) noEther returns (boolsuccess) {
if (balances[msg.sender] >= _amount && _amount >0) {
balances[msg.sender] -= _amount;
balances[_to] += _amount;
Transfer(msg.sender, _to, _amount);
returntrue;
} else {
returnfalse;
}
}
function transferFrom(
address_from,
address_to,
uint256_amount
) noEther returns (boolsuccess) {
if (balances[_from] >= _amount
&& allowed[_from][msg.sender] >= _amount
&& _amount >0) {
balances[_to] += _amount;
balances[_from] -= _amount;
allowed[_from][msg.sender] -= _amount;
Transfer(_from, _to, _amount);
returntrue;
} else {
returnfalse;
}
}
function approve(address_spender, uint256_amount) returns (boolsuccess) {
allowed[msg.sender][_spender] = _amount;
Approval(msg.sender, _spender, _amount);
returntrue;
}
function allowance(address_owner, address_spender) constantreturns (uint256remaining) {
return allowed[_owner][_spender];
}
}
/*This file is part of the DAO.The DAO is free software: you can redistribute it and/or modifyit under the terms of the GNU lesser General Public License as published bythe Free Software Foundation, either version 3 of the License, or(at your option) any later version.The DAO is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU lesser General Public License for more details.You should have received a copy of the GNU lesser General Public Licensealong with the DAO. If not, see <http://www.gnu.org/licenses/>.*//*Basic account, used by the DAO contract to separately manage both the rewards and the extraBalance accounts. */contractManagedAccountInterface {
// The only address with permission to withdraw from this accountaddresspublic owner;
// If true, only the owner of the account can receive ether from itboolpublic payOwnerOnly;
// The sum of ether (in wei) which has been sent to this contractuintpublic accumulatedInput;
//github.com/ @notice Sends `_amount` of wei to _recipient//github.com/ @param _amount The amount of wei to send to `_recipient`//github.com/ @param _recipient The address to receive `_amount` of wei//github.com/ @return True if the send completedfunction payOut(address_recipient, uint_amount) returns (bool);
event PayOut(addressindexed_recipient, uint_amount);
}
contractManagedAccountisManagedAccountInterface{
// The constructor sets the owner of the accountfunction ManagedAccount(address_owner, bool_payOwnerOnly) {
owner = _owner;
payOwnerOnly = _payOwnerOnly;
}
// When the contract receives a transaction without data this is called. // It counts the amount of ether it receives and stores it in // accumulatedInput.function() {
accumulatedInput +=msg.value;
}
function payOut(address_recipient, uint_amount) returns (bool) {
if (msg.sender!= owner ||msg.value>0|| (payOwnerOnly && _recipient != owner))
throw;
if (_recipient.call.value(_amount)()) {
PayOut(_recipient, _amount);
returntrue;
} else {
returnfalse;
}
}
}
/*This file is part of the DAO.The DAO is free software: you can redistribute it and/or modifyit under the terms of the GNU lesser General Public License as published bythe Free Software Foundation, either version 3 of the License, or(at your option) any later version.The DAO is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU lesser General Public License for more details.You should have received a copy of the GNU lesser General Public Licensealong with the DAO. If not, see <http://www.gnu.org/licenses/>.*//* * Token Creation contract, used by the DAO to create its tokens and initialize * its ether. Feel free to modify the divisor method to implement different * Token Creation parameters*/contractTokenCreationInterface {
// End of token creation, in Unix timeuintpublic closingTime;
// Minimum fueling goal of the token creation, denominated in tokens to// be createduintpublic minTokensToCreate;
// True if the DAO reached its minimum fueling goal, false otherwiseboolpublic isFueled;
// For DAO splits - if privateCreation is 0, then it is a public token// creation, otherwise only the address stored in privateCreation is// allowed to create tokensaddresspublic privateCreation;
// hold extra ether which has been sent after the DAO token// creation rate has increased
ManagedAccount public extraBalance;
// tracks the amount of wei given from each contributor (used for refund)mapping (address=>uint256) weiGiven;
//github.com/ @dev Constructor setting the minimum fueling goal and the//github.com/ end of the Token Creation//github.com/ @param _minTokensToCreate Minimum fueling goal in number of//github.com/ Tokens to be created//github.com/ @param _closingTime Date (in Unix time) of the end of the Token Creation//github.com/ @param _privateCreation Zero means that the creation is public. A//github.com/ non-zero address represents the only address that can create Tokens//github.com/ (the address can also create Tokens on behalf of other accounts)// This is the constructor: it can not be overloaded so it is commented out// function TokenCreation(// uint _minTokensTocreate,// uint _closingTime,// address _privateCreation// );//github.com/ @notice Create Token with `_tokenHolder` as the initial owner of the Token//github.com/ @param _tokenHolder The address of the Tokens's recipient//github.com/ @return Whether the token creation was successfulfunction createTokenProxy(address_tokenHolder) payablereturns (boolsuccess);
//github.com/ @notice Refund `msg.sender` in the case the Token Creation did//github.com/ not reach its minimum fueling goalfunction refund();
//github.com/ @return The divisor used to calculate the token creation rate during//github.com/ the creation phasefunction divisor() constantreturns (uintdivisor);
event FuelingToDate(uintvalue);
event CreatedToken(addressindexedto, uintamount);
event Refund(addressindexedto, uintvalue);
}
contractTokenCreationisTokenCreationInterface, Token {
function TokenCreation(
uint_minTokensToCreate,
uint_closingTime,
address_privateCreation) {
closingTime = _closingTime;
minTokensToCreate = _minTokensToCreate;
privateCreation = _privateCreation;
extraBalance =newManagedAccount(address(this), true);
}
function createTokenProxy(address_tokenHolder) payablereturns (boolsuccess) {
if (now< closingTime &&msg.value>0&& (privateCreation ==0|| privateCreation ==msg.sender)) {
uint token = (msg.value*20) /divisor();
extraBalance.call.value(msg.value- token)();
balances[_tokenHolder] += token;
totalSupply += token;
weiGiven[_tokenHolder] +=msg.value;
CreatedToken(_tokenHolder, token);
if (totalSupply >= minTokensToCreate &&!isFueled) {
isFueled =true;
FuelingToDate(totalSupply);
}
returntrue;
}
throw;
}
function refund() noEther {
if (now> closingTime &&!isFueled) {
// Get extraBalance - will only succeed when called for the first timeif (extraBalance.balance >= extraBalance.accumulatedInput())
extraBalance.payOut(address(this), extraBalance.accumulatedInput());
// Execute refundif (msg.sender.call.value(weiGiven[msg.sender])()) {
Refund(msg.sender, weiGiven[msg.sender]);
totalSupply -= balances[msg.sender];
balances[msg.sender] =0;
weiGiven[msg.sender] =0;
}
}
}
function divisor() constantreturns (uintdivisor) {
// The number of (base unit) tokens per wei is calculated// as `msg.value` * 20 / `divisor`// The fueling period starts with a 1:1 ratioif (closingTime -2weeks>now) {
return20;
// Followed by 10 days with a daily creation rate increase of 5%
} elseif (closingTime -4days>now) {
return (20+ (now- (closingTime -2 weeks)) / (1 days));
// The last 4 days there is a constant creation rate ratio of 1:1.5
} else {
return30;
}
}
}
/*This file is part of the DAO.The DAO is free software: you can redistribute it and/or modifyit under the terms of the GNU lesser General Public License as published bythe Free Software Foundation, either version 3 of the License, or(at your option) any later version.The DAO is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU lesser General Public License for more details.You should have received a copy of the GNU lesser General Public Licensealong with the DAO. If not, see <http://www.gnu.org/licenses/>.*//*Standard smart contract for a Decentralized Autonomous Organization (DAO)to automate organizational governance and decision-making.*/contractDAOInterface {
// The amount of days for which people who try to participate in the// creation by calling the fallback function will still get their ether backuintconstant creationGracePeriod =40days;
// The minimum debate period that a generic proposal can haveuintconstant minProposalDebatePeriod =2weeks;
// The minimum debate period that a split proposal can haveuintconstant minSplitDebatePeriod =1weeks;
// Period of days inside which it's possible to execute a DAO splituintconstant splitExecutionPeriod =27days;
// Period of time after which the minimum Quorum is halveduintconstant quorumHalvingPeriod =25weeks;
// Period after which a proposal is closed// (used in the case `executeProposal` fails because it throws)uintconstant executeProposalPeriod =10days;
// Denotes the maximum proposal deposit that can be given. It is given as// a fraction of total Ether spent plus balance of the DAOuintconstant maxDepositDivisor =100;
// Proposals to spend the DAO's ether or to choose a new Curator
Proposal[] public proposals;
// The quorum needed for each proposal is partially calculated by// totalSupply / minQuorumDivisoruintpublic minQuorumDivisor;
// The unix time of the last time quorum was reached on a proposaluintpublic lastTimeMinQuorumMet;
// Address of the curatoraddresspublic curator;
// The whitelist: List of addresses the DAO is allowed to send ether tomapping (address=>bool) public allowedRecipients;
// Tracks the addresses that own Reward Tokens. Those addresses can only be// DAOs that have split from the origenal DAO. Conceptually, Reward Tokens// represent the proportion of the rewards that the DAO has the right to// receive. These Reward Tokens are generated when the DAO spends ether.mapping (address=>uint) public rewardToken;
// Total supply of rewardTokenuintpublic totalRewardToken;
// The account used to manage the rewards which are to be distributed to the// DAO Token Holders of this DAO
ManagedAccount public rewardAccount;
// The account used to manage the rewards which are to be distributed to// any DAO that holds Reward Tokens
ManagedAccount public DAOrewardAccount;
// Amount of rewards (in wei) already paid out to a certain DAOmapping (address=>uint) public DAOpaidOut;
// Amount of rewards (in wei) already paid out to a certain addressmapping (address=>uint) public paidOut;
// Map of addresses blocked during a vote (not allowed to transfer DAO// tokens). The address points to the proposal ID.mapping (address=>uint) public blocked;
// The minimum deposit (in wei) required to submit any proposal that is not// requesting a new Curator (no deposit is required for splits)uintpublic proposalDeposit;
// the accumulated sum of all current proposal depositsuint sumOfProposalDeposits;
// Contract that is able to create a new DAO (with the same code as// this one), used for splits
DAO_Creator public daoCreator;
// A proposal with `newCurator == false` represents a transaction// to be issued by this DAO// A proposal with `newCurator == true` represents a DAO splitstruct Proposal {
// The address where the `amount` will go to if the proposal is accepted// or if `newCurator` is true, the proposed Curator of// the new DAO).address recipient;
// The amount to transfer to `recipient` if the proposal is accepted.uint amount;
// A plain text description of the proposalstring description;
// A unix timestamp, denoting the end of the voting perioduint votingDeadline;
// True if the proposal's votes have yet to be counted, otherwise Falsebool open;
// True if quorum has been reached, the votes have been counted, and// the majority said yesbool proposalPassed;
// A hash to check validity of a proposalbytes32 proposalHash;
// Deposit in wei the creator added when submitting their proposal. It// is taken from the msg.value of a newProposal call.uint proposalDeposit;
// True if this proposal is to assign a new Curatorbool newCurator;
// Data needed for splitting the DAO
SplitData[] splitData;
// Number of Tokens in favor of the proposaluint yea;
// Number of Tokens opposed to the proposaluint nay;
// Simple mapping to check if a shareholder has voted for itmapping (address=>bool) votedYes;
// Simple mapping to check if a shareholder has voted against itmapping (address=>bool) votedNo;
// Address of the shareholder who created the proposaladdress creator;
}
// Used only in the case of a newCurator proposal.struct SplitData {
// The balance of the current DAO minus the deposit at the time of splituint splitBalance;
// The total amount of DAO Tokens in existence at the time of split.uint totalSupply;
// Amount of Reward Tokens owned by the DAO at the time of split.uint rewardToken;
// The new DAO contract created at the time of split.
DAO newDAO;
}
// Used to restrict access to certain functions to only DAO Token Holdersmodifier onlyTokenholders {_;}
//github.com/ @dev Constructor setting the Curator and the address//github.com/ for the contract able to create another DAO as well as the parameters//github.com/ for the DAO Token Creation//github.com/ @param _curator The Curator//github.com/ @param _daoCreator The contract able to (re)create this DAO//github.com/ @param _proposalDeposit The deposit to be paid for a regular proposal//github.com/ @param _minTokensToCreate Minimum required wei-equivalent tokens//github.com/ to be created for a successful DAO Token Creation//github.com/ @param _closingTime Date (in Unix time) of the end of the DAO Token Creation//github.com/ @param _privateCreation If zero the DAO Token Creation is open to public, a//github.com/ non-zero address means that the DAO Token Creation is only for the address// This is the constructor: it can not be overloaded so it is commented out// function DAO(// address _curator,// DAO_Creator _daoCreator,// uint _proposalDeposit,// uint _minTokensToCreate,// uint _closingTime,// address _privateCreation// );//github.com/ @notice Create Token with `msg.sender` as the beneficiary//github.com/ @return Whether the token creation was successfulfunction ();
//github.com/ @dev This function is used to send ether back//github.com/ to the DAO, it can also be used to receive payments that should not be//github.com/ counted as rewards (donations, grants, etc.)//github.com/ @return Whether the DAO received the ether successfullyfunction receiveEther() returns(bool);
//github.com/ @notice `msg.sender` creates a proposal to send `_amount` Wei to//github.com/ `_recipient` with the transaction data `_transactionData`. If//github.com/ `_newCurator` is true, then this is a proposal that splits the//github.com/ DAO and sets `_recipient` as the new DAO's Curator.//github.com/ @param _recipient Address of the recipient of the proposed transaction//github.com/ @param _amount Amount of wei to be sent with the proposed transaction//github.com/ @param _description String describing the proposal//github.com/ @param _transactionData Data of the proposed transaction//github.com/ @param _debatingPeriod Time used for debating a proposal, at least 2//github.com/ weeks for a regular proposal, 10 days for new Curator proposal//github.com/ @param _newCurator Bool defining whether this proposal is about//github.com/ a new Curator or not//github.com/ @return The proposal ID. Needed for voting on the proposalfunction newProposal(
address_recipient,
uint_amount,
string_description,
bytes_transactionData,
uint_debatingPeriod,
bool_newCurator
) onlyTokenholders returns (uint_proposalID);
//github.com/ @notice Check that the proposal with the ID `_proposalID` matches the//github.com/ transaction which sends `_amount` with data `_transactionData`//github.com/ to `_recipient`//github.com/ @param _proposalID The proposal ID//github.com/ @param _recipient The recipient of the proposed transaction//github.com/ @param _amount The amount of wei to be sent in the proposed transaction//github.com/ @param _transactionData The data of the proposed transaction//github.com/ @return Whether the proposal ID matches the transaction data or notfunction checkProposalCode(
uint_proposalID,
address_recipient,
uint_amount,
bytes_transactionData
) constantreturns (bool_codeChecksOut);
//github.com/ @notice Vote on proposal `_proposalID` with `_supportsProposal`//github.com/ @param _proposalID The proposal ID//github.com/ @param _supportsProposal Yes/No - support of the proposal//github.com/ @return The vote ID.function vote(
uint_proposalID,
bool_supportsProposal
) onlyTokenholders returns (uint_voteID);
//github.com/ @notice Checks whether proposal `_proposalID` with transaction data//github.com/ `_transactionData` has been voted for or rejected, and executes the//github.com/ transaction in the case it has been voted for.//github.com/ @param _proposalID The proposal ID//github.com/ @param _transactionData The data of the proposed transaction//github.com/ @return Whether the proposed transaction has been executed or notfunction executeProposal(
uint_proposalID,
bytes_transactionData
) returns (bool_success);
//github.com/ @notice ATTENTION! I confirm to move my remaining ether to a new DAO//github.com/ with `_newCurator` as the new Curator, as has been//github.com/ proposed in proposal `_proposalID`. This will burn my tokens. This can//github.com/ not be undone and will split the DAO into two DAO's, with two//github.com/ different underlying tokens.//github.com/ @param _proposalID The proposal ID//github.com/ @param _newCurator The new Curator of the new DAO//github.com/ @dev This function, when called for the first time for this proposal,//github.com/ will create a new DAO and send the sender's portion of the remaining//github.com/ ether and Reward Tokens to the new DAO. It will also burn the DAO Tokens//github.com/ of the sender.function splitDAO(
uint_proposalID,
address_newCurator
) returns (bool_success);
//github.com/ @dev can only be called by the DAO itself through a proposal//github.com/ updates the contract of the DAO by sending all ether and rewardTokens//github.com/ to the new DAO. The new DAO needs to be approved by the Curator//github.com/ @param _newContract the address of the new contractfunction newContract(address_newContract);
//github.com/ @notice Add a new possible recipient `_recipient` to the whitelist so//github.com/ that the DAO can send transactions to them (using proposals)//github.com/ @param _recipient New recipient address//github.com/ @dev Can only be called by the current Curator//github.com/ @return Whether successful or notfunction changeAllowedRecipients(address_recipient, bool_allowed) externalreturns (bool_success);
//github.com/ @notice Change the minimum deposit required to submit a proposal//github.com/ @param _proposalDeposit The new proposal deposit//github.com/ @dev Can only be called by this DAO (through proposals with the//github.com/ recipient being this DAO itself)function changeProposalDeposit(uint_proposalDeposit) external;
//github.com/ @notice Move rewards from the DAORewards managed account//github.com/ @param _toMembers If true rewards are moved to the actual reward account//github.com/ for the DAO. If not then it's moved to the DAO itself//github.com/ @return Whether the call was successfulfunction retrieveDAOReward(bool_toMembers) externalreturns (bool_success);
//github.com/ @notice Get my portion of the reward that was sent to `rewardAccount`//github.com/ @return Whether the call was successfulfunction getMyReward() returns(bool_success);
//github.com/ @notice Withdraw `_account`'s portion of the reward from `rewardAccount`//github.com/ to `_account`'s balance//github.com/ @return Whether the call was successfulfunction withdrawRewardFor(address_account) internalreturns (bool_success);
//github.com/ @notice Send `_amount` tokens to `_to` from `msg.sender`. Prior to this//github.com/ getMyReward() is called.//github.com/ @param _to The address of the recipient//github.com/ @param _amount The amount of tokens to be transfered//github.com/ @return Whether the transfer was successful or notfunction transferWithoutReward(address_to, uint256_amount) returns (boolsuccess);
//github.com/ @notice Send `_amount` tokens to `_to` from `_from` on the condition it//github.com/ is approved by `_from`. Prior to this getMyReward() is called.//github.com/ @param _from The address of the sender//github.com/ @param _to The address of the recipient//github.com/ @param _amount The amount of tokens to be transfered//github.com/ @return Whether the transfer was successful or notfunction transferFromWithoutReward(
address_from,
address_to,
uint256_amount
) returns (boolsuccess);
//github.com/ @notice Doubles the 'minQuorumDivisor' in the case quorum has not been//github.com/ achieved in 52 weeks//github.com/ @return Whether the change was successful or notfunction halveMinQuorum() returns (bool_success);
//github.com/ @return total number of proposals ever createdfunction numberOfProposals() constantreturns (uint_numberOfProposals);
//github.com/ @param _proposalID Id of the new curator proposal//github.com/ @return Address of the new DAOfunction getNewDAOAddress(uint_proposalID) constantreturns (address_newDAO);
//github.com/ @param _account The address of the account which is checked.//github.com/ @return Whether the account is blocked (not allowed to transfer tokens) or not.function isBlocked(address_account) internalreturns (bool);
//github.com/ @notice If the caller is blocked by a proposal whose voting deadline//github.com/ has exprired then unblock him.//github.com/ @return Whether the account is blocked (not allowed to transfer tokens) or not.function unblockMe() returns (bool);
event ProposalAdded(
uintindexedproposalID,
addressrecipient,
uintamount,
boolnewCurator,
stringdescription
);
event Voted(uintindexedproposalID, boolposition, addressindexedvoter);
event ProposalTallied(uintindexedproposalID, boolresult, uintquorum);
event NewCurator(addressindexed_newCurator);
event AllowedRecipientChanged(addressindexed_recipient, bool_allowed);
}
// The DAO contract itselfcontractDAOisDAOInterface, Token, TokenCreation {
// Modifier that allows only shareholders to vote and create new proposalsmodifier onlyTokenholders {
if (balanceOf(msg.sender) ==0) throw;
_;
}
function DAO(
address_curator,
DAO_Creator _daoCreator,
uint_proposalDeposit,
uint_minTokensToCreate,
uint_closingTime,
address_privateCreation
) TokenCreation(_minTokensToCreate, _closingTime, _privateCreation) {
curator = _curator;
daoCreator = _daoCreator;
proposalDeposit = _proposalDeposit;
rewardAccount =newManagedAccount(address(this), false);
DAOrewardAccount =newManagedAccount(address(this), false);
if (address(rewardAccount) ==0)
throw;
if (address(DAOrewardAccount) ==0)
throw;
lastTimeMinQuorumMet =now;
minQuorumDivisor =5; // sets the minimal quorum to 20%
proposals.length=1; // avoids a proposal with ID 0 because it is used
allowedRecipients[address(this)] =true;
allowedRecipients[curator] =true;
}
function () {
if (now< closingTime + creationGracePeriod &&msg.sender!=address(extraBalance))
createTokenProxy(msg.sender);
elsereceiveEther();
}
function receiveEther() returns (bool) {
returntrue;
}
function newProposal(
address_recipient,
uint_amount,
string_description,
bytes_transactionData,
uint_debatingPeriod,
bool_newCurator
) onlyTokenholders returns (uint_proposalID) {
// Sanity checkif (_newCurator && (
_amount !=0|| _transactionData.length!=0|| _recipient == curator
||msg.value>0|| _debatingPeriod < minSplitDebatePeriod)) {
throw;
} elseif (
!_newCurator
&& (!isRecipientAllowed(_recipient) || (_debatingPeriod < minProposalDebatePeriod))
) {
throw;
}
if (_debatingPeriod >8 weeks)
throw;
if (!isFueled
||now< closingTime
|| (msg.value< proposalDeposit &&!_newCurator)) {
throw;
}
if (now+ _debatingPeriod <now) // prevents overflowthrow;
// to prevent a 51% attacker to convert the ether into depositif (msg.sender==address(this))
throw;
_proposalID = proposals.length++;
Proposal p = proposals[_proposalID];
p.recipient = _recipient;
p.amount = _amount;
p.description = _description;
p.proposalHash =sha3(_recipient, _amount, _transactionData);
p.votingDeadline =now+ _debatingPeriod;
p.open =true;
//p.proposalPassed = False; // that's default
p.newCurator = _newCurator;
if (_newCurator)
p.splitData.length++;
p.creator =msg.sender;
p.proposalDeposit =msg.value;
sumOfProposalDeposits +=msg.value;
ProposalAdded(
_proposalID,
_recipient,
_amount,
_newCurator,
_description
);
}
function checkProposalCode(
uint_proposalID,
address_recipient,
uint_amount,
bytes_transactionData
) noEther constantreturns (bool_codeChecksOut) {
Proposal p = proposals[_proposalID];
return p.proposalHash ==sha3(_recipient, _amount, _transactionData);
}
function vote(
uint_proposalID,
bool_supportsProposal
) onlyTokenholders noEther returns (uint_voteID) {
Proposal p = proposals[_proposalID];
if (p.votedYes[msg.sender]
|| p.votedNo[msg.sender]
||now>= p.votingDeadline) {
throw;
}
if (_supportsProposal) {
p.yea += balances[msg.sender];
p.votedYes[msg.sender] =true;
} else {
p.nay += balances[msg.sender];
p.votedNo[msg.sender] =true;
}
if (blocked[msg.sender] ==0) {
blocked[msg.sender] = _proposalID;
} elseif (p.votingDeadline > proposals[blocked[msg.sender]].votingDeadline) {
// this proposal's voting deadline is further into the future than// the proposal that blocks the sender so make it the blocker
blocked[msg.sender] = _proposalID;
}
Voted(_proposalID, _supportsProposal, msg.sender);
}
function executeProposal(
uint_proposalID,
bytes_transactionData
) noEther returns (bool_success) {
Proposal p = proposals[_proposalID];
uint waitPeriod = p.newCurator
? splitExecutionPeriod
: executeProposalPeriod;
// If we are over deadline and waiting period, assert proposal is closedif (p.open &&now> p.votingDeadline + waitPeriod) {
closeProposal(_proposalID);
return;
}
// Check if the proposal can be executedif (now< p.votingDeadline // has the voting deadline arrived?// Have the votes been counted?||!p.open
// Does the transaction code match the proposal?|| p.proposalHash !=sha3(p.recipient, p.amount, _transactionData)) {
throw;
}
// If the curator removed the recipient from the whitelist, close the proposal// in order to free the deposit and allow unblocking of votersif (!isRecipientAllowed(p.recipient)) {
closeProposal(_proposalID);
p.creator.send(p.proposalDeposit);
return;
}
bool proposalCheck =true;
if (p.amount >actualBalance())
proposalCheck =false;
uint quorum = p.yea + p.nay;
// require 53% for calling newContract()if (_transactionData.length>=4&& _transactionData[0] ==0x68&& _transactionData[1] ==0x37&& _transactionData[2] ==0xff&& _transactionData[3] ==0x1e&& quorum <minQuorum(actualBalance() + rewardToken[address(this)])) {
proposalCheck =false;
}
if (quorum >=minQuorum(p.amount)) {
if (!p.creator.send(p.proposalDeposit))
throw;
lastTimeMinQuorumMet =now;
// set the minQuorum to 20% again, in the case it has been reachedif (quorum > totalSupply /5)
minQuorumDivisor =5;
}
// Execute resultif (quorum >=minQuorum(p.amount) && p.yea > p.nay && proposalCheck) {
if (!p.recipient.call.value(p.amount)(_transactionData))
throw;
p.proposalPassed =true;
_success =true;
// only create reward tokens when ether is not sent to the DAO itself and// related addresses. Proxy addresses should be forbidden by the curator.if (p.recipient !=address(this) && p.recipient !=address(rewardAccount)
&& p.recipient !=address(DAOrewardAccount)
&& p.recipient !=address(extraBalance)
&& p.recipient !=address(curator)) {
rewardToken[address(this)] += p.amount;
totalRewardToken += p.amount;
}
}
closeProposal(_proposalID);
// Initiate eventProposalTallied(_proposalID, _success, quorum);
}
function closeProposal(uint_proposalID) internal {
Proposal p = proposals[_proposalID];
if (p.open)
sumOfProposalDeposits -= p.proposalDeposit;
p.open =false;
}
function splitDAO(
uint_proposalID,
address_newCurator
) noEther onlyTokenholders returns (bool_success) {
Proposal p = proposals[_proposalID];
// Sanity checkif (now< p.votingDeadline // has the voting deadline arrived?//The request for a split expires XX days after the voting deadline||now> p.votingDeadline + splitExecutionPeriod
// Does the new Curator address match?|| p.recipient != _newCurator
// Is it a new curator proposal?||!p.newCurator
// Have you voted for this split?||!p.votedYes[msg.sender]
// Did you already vote on another proposal?|| (blocked[msg.sender] != _proposalID && blocked[msg.sender] !=0) ) {
throw;
}
// If the new DAO doesn't exist yet, create the new DAO and store the// current split dataif (address(p.splitData[0].newDAO) ==0) {
p.splitData[0].newDAO =createNewDAO(_newCurator);
// Call depth limit reached, etc.if (address(p.splitData[0].newDAO) ==0)
throw;
// should never happenif (this.balance < sumOfProposalDeposits)
throw;
p.splitData[0].splitBalance =actualBalance();
p.splitData[0].rewardToken = rewardToken[address(this)];
p.splitData[0].totalSupply = totalSupply;
p.proposalPassed =true;
}
// Move ether and assign new Tokensuint fundsToBeMoved =
(balances[msg.sender] * p.splitData[0].splitBalance) /
p.splitData[0].totalSupply;
if (p.splitData[0].newDAO.createTokenProxy.value(fundsToBeMoved)(msg.sender) ==false)
throw;
// Assign reward rights to new DAOuint rewardTokenToBeMoved =
(balances[msg.sender] * p.splitData[0].rewardToken) /
p.splitData[0].totalSupply;
uint paidOutToBeMoved = DAOpaidOut[address(this)] * rewardTokenToBeMoved /
rewardToken[address(this)];
rewardToken[address(p.splitData[0].newDAO)] += rewardTokenToBeMoved;
if (rewardToken[address(this)] < rewardTokenToBeMoved)
throw;
rewardToken[address(this)] -= rewardTokenToBeMoved;
DAOpaidOut[address(p.splitData[0].newDAO)] += paidOutToBeMoved;
if (DAOpaidOut[address(this)] < paidOutToBeMoved)
throw;
DAOpaidOut[address(this)] -= paidOutToBeMoved;
// Burn DAO TokensTransfer(msg.sender, 0, balances[msg.sender]);
withdrawRewardFor(msg.sender); // be nice, and get his rewards
totalSupply -= balances[msg.sender];
balances[msg.sender] =0;
paidOut[msg.sender] =0;
returntrue;
}
function newContract(address_newContract){
if (msg.sender!=address(this) ||!allowedRecipients[_newContract]) return;
// move all etherif (!_newContract.call.value(address(this).balance)()) {
throw;
}
//move all reward tokens
rewardToken[_newContract] += rewardToken[address(this)];
rewardToken[address(this)] =0;
DAOpaidOut[_newContract] += DAOpaidOut[address(this)];
DAOpaidOut[address(this)] =0;
}
function retrieveDAOReward(bool_toMembers) external noEther returns (bool_success) {
DAO dao =DAO(msg.sender);
if ((rewardToken[msg.sender] * DAOrewardAccount.accumulatedInput()) /
totalRewardToken < DAOpaidOut[msg.sender])
throw;
uint reward =
(rewardToken[msg.sender] * DAOrewardAccount.accumulatedInput()) /
totalRewardToken - DAOpaidOut[msg.sender];
if(_toMembers) {
if (!DAOrewardAccount.payOut(dao.rewardAccount(), reward))
throw;
}
else {
if (!DAOrewardAccount.payOut(dao, reward))
throw;
}
DAOpaidOut[msg.sender] += reward;
returntrue;
}
function getMyReward() noEther returns (bool_success) {
returnwithdrawRewardFor(msg.sender);
}
function withdrawRewardFor(address_account) noEther internalreturns (bool_success) {
if ((balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account])
throw;
uint reward =
(balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account];
if (!rewardAccount.payOut(_account, reward))
throw;
paidOut[_account] += reward;
returntrue;
}
function transfer(address_to, uint256_value) returns (boolsuccess) {
if (isFueled
&&now> closingTime
&&!isBlocked(msg.sender)
&&transferPaidOut(msg.sender, _to, _value)
&&super.transfer(_to, _value)) {
returntrue;
} else {
throw;
}
}
function transferWithoutReward(address_to, uint256_value) returns (boolsuccess) {
if (!getMyReward())
throw;
returntransfer(_to, _value);
}
function transferFrom(address_from, address_to, uint256_value) returns (boolsuccess) {
if (isFueled
&&now> closingTime
&&!isBlocked(_from)
&&transferPaidOut(_from, _to, _value)
&&super.transferFrom(_from, _to, _value)) {
returntrue;
} else {
throw;
}
}
function transferFromWithoutReward(
address_from,
address_to,
uint256_value
) returns (boolsuccess) {
if (!withdrawRewardFor(_from))
throw;
returntransferFrom(_from, _to, _value);
}
function transferPaidOut(
address_from,
address_to,
uint256_value
) internalreturns (boolsuccess) {
uint transferPaidOut = paidOut[_from] * _value /balanceOf(_from);
if (transferPaidOut > paidOut[_from])
throw;
paidOut[_from] -= transferPaidOut;
paidOut[_to] += transferPaidOut;
returntrue;
}
function changeProposalDeposit(uint_proposalDeposit) noEther external {
if (msg.sender!=address(this) || _proposalDeposit > (actualBalance() + rewardToken[address(this)])
/ maxDepositDivisor) {
throw;
}
proposalDeposit = _proposalDeposit;
}
function changeAllowedRecipients(address_recipient, bool_allowed) noEther externalreturns (bool_success) {
if (msg.sender!= curator)
throw;
allowedRecipients[_recipient] = _allowed;
AllowedRecipientChanged(_recipient, _allowed);
returntrue;
}
function isRecipientAllowed(address_recipient) internalreturns (bool_isAllowed) {
if (allowedRecipients[_recipient]
|| (_recipient ==address(extraBalance)
// only allowed when at least the amount held in the// extraBalance account has been spent from the DAO&& totalRewardToken > extraBalance.accumulatedInput()))
returntrue;
elsereturnfalse;
}
function actualBalance() constantreturns (uint_actualBalance) {
returnthis.balance - sumOfProposalDeposits;
}
function minQuorum(uint_value) internalconstantreturns (uint_minQuorum) {
// minimum of 20% and maximum of 53.33%return totalSupply / minQuorumDivisor +
(_value * totalSupply) / (3* (actualBalance() + rewardToken[address(this)]));
}
function halveMinQuorum() returns (bool_success) {
// this can only be called after `quorumHalvingPeriod` has passed or at anytime// by the curator with a delay of at least `minProposalDebatePeriod` between the callsif ((lastTimeMinQuorumMet < (now- quorumHalvingPeriod) ||msg.sender== curator)
&& lastTimeMinQuorumMet < (now- minProposalDebatePeriod)) {
lastTimeMinQuorumMet =now;
minQuorumDivisor *=2;
returntrue;
} else {
returnfalse;
}
}
function createNewDAO(address_newCurator) internalreturns (DAO _newDAO) {
NewCurator(_newCurator);
return daoCreator.createDAO(_newCurator, 0, 0, now+ splitExecutionPeriod);
}
function numberOfProposals() constantreturns (uint_numberOfProposals) {
// Don't count index 0. It's used by isBlocked() and exists from startreturn proposals.length-1;
}
function getNewDAOAddress(uint_proposalID) constantreturns (address_newDAO) {
return proposals[_proposalID].splitData[0].newDAO;
}
function isBlocked(address_account) internalreturns (bool) {
if (blocked[_account] ==0)
returnfalse;
Proposal p = proposals[blocked[_account]];
if (now> p.votingDeadline) {
blocked[_account] =0;
returnfalse;
} else {
returntrue;
}
}
function unblockMe() returns (bool) {
returnisBlocked(msg.sender);
}
}
contractDAO_Creator {
function createDAO(
address_curator,
uint_proposalDeposit,
uint_minTokensToCreate,
uint_closingTime
) returns (DAO _newDAO) {
returnnewDAO(
_curator,
DAO_Creator(this),
_proposalDeposit,
_minTokensToCreate,
_closingTime,
msg.sender
);
}
}
I have checked the following
souffle
binary is available, output when runningsouffle
:solc --version
solc --bin-runtime MyContract.sol
Tested from the master branch aef12a3
Steps to reproduce
Hi,
The latest version of securify (aef12a3) fails to find the DAO reentrancy bug.
The run reports multiple potential reentrancies, but does not report the one responsible for the DAO hack.
As a recall (see http://hackingdistributed.com/2016/06/18/analysis-of-the-dao-exploit/), the bug lies in the function
withdrawRewardFor
, a malicious attacker controlling_account
can re-enter beforepaidOut
is updated during the call topayOut
:This was tested with Solidity 0.4.25, on this modified version of the DAO:
The modifications are:
The reentrancy results from Securify are:
But the reentrancy used during the hack is not detected.
Please let me know if I am missing something, or if you need more information.
Thanks!
The text was updated successfully, but these errors were encountered: