0x608060405234801561000f575f80fd5b506004361061016d575f3560e01c806342966c68116100d9578063a217fddf11610093578063d53913931161006e578063d53913931461035a578063d547741f14610381578063dd62ed3e14610394578063fcf0f0d3146103cc575f80fd5b8063a217fddf1461032d578063a9059cbb14610334578063c30885f114610347575f80fd5b806342966c681461029d578063496485c9146102b057806370a08231146102c35780637ae8352b146102eb57806391d148541461031257806395d89b4114610325575f80fd5b806323b872dd1161012a57806323b872dd1461021f578063248a9ca3146102325780632f2ff15d14610254578063313ce5671461026957806336568abe1461027757806340c10f191461028a575f80fd5b806301ffc9a714610171578063047fc9aa1461019957806306fdde03146101be578063095ea7b3146101d357806318160ddd146101e6578063206b60f9146101f8575b5f80fd5b61018461017f366004610e4a565b6103f3565b60405190151581526020015b60405180910390f35b6006546101a99063ffffffff1681565b60405163ffffffff9091168152602001610190565b6101c6610429565b6040516101909190610e71565b6101846101e1366004610ec1565b6104b9565b6003545b604051908152602001610190565b6101ea7f8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c81565b61018461022d366004610ee9565b6104d3565b6101ea610240366004610f23565b5f9081526020819052604090206001015490565b610267610262366004610f3a565b6104f8565b005b6040515f8152602001610190565b610267610285366004610f3a565b610522565b610267610298366004610ec1565b61055a565b6102676102ab366004610f23565b610580565b6102676102be366004610ee9565b61059d565b6101ea6102d1366004610f64565b6001600160a01b03165f9081526001602052604090205490565b6101ea7fd81ad4b52a95dd54000b782ee547c67a6d3c6b90c6653c2a839c973d684c7b7281565b610184610320366004610f3a565b6105b0565b6101c66105d8565b6101ea5f81565b610184610342366004610ec1565b6105e7565b610267610355366004610f64565b610603565b6101ea7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61026761038f366004610f3a565b610722565b6101ea6103a2366004610f7d565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b6101ea7f51b355059847d158e68950419dbcd54fad00bdfd0634c2515a5c533288c7f0a281565b5f6001600160e01b03198216637965db0b60e01b148061042357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606004805461043890610fa5565b80601f016020809104026020016040519081016040528092919081815260200182805461046490610fa5565b80156104af5780601f10610486576101008083540402835291602001916104af565b820191905f5260205f20905b81548152906001019060200180831161049257829003601f168201915b5050505050905090565b5f6104c2610746565b6104cc8383610786565b9392505050565b5f6104dc61079d565b6104e5826107db565b6104f08484846107fb565b949350505050565b5f828152602081905260409020600101546105128161081e565b61051c8383610828565b50505050565b6001600160a01b038116331461054b5760405163334bd91960e11b815260040160405180910390fd5b61055582826108b7565b505050565b610562610920565b61056a61098d565b61057482826109cb565b61057c610a04565b5050565b610588610920565b6105923382610a2e565b61059a610a04565b50565b6105a5610746565b610555838383610a62565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60606005805461043890610fa5565b5f6105f061079d565b6105f9826107db565b6104cc8383610a6f565b61060b610a7c565b47801561061c5761061c3382610aba565b6001600160a01b0382161561057c576040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa15801561066f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106939190610fdd565b905080156105555760405163a9059cbb60e01b8152336004820152602481018290525f906001600160a01b0385169063a9059cbb906044016020604051808303815f875af11580156106e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070b9190610ff4565b90508061051c5761051c637232c81f60e11b610b37565b5f8281526020819052604090206001015461073c8161081e565b61051c83836108b7565b6107707fd81ad4b52a95dd54000b782ee547c67a6d3c6b90c6653c2a839c973d684c7b72336105b0565b61078457610784634d4c14ed60e01b610b37565b565b5f33610793818585610a62565b5060019392505050565b6107c77f8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c336105b0565b61078457610784632944fdeb60e21b610b37565b60065463ffffffff1681111561059a5761059a631fc03ff160e31b610b37565b5f33610808858285610b3f565b610813858585610bb5565b506001949350505050565b61059a8133610c12565b5f61083383836105b0565b6108b0575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556108683390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610423565b505f610423565b5f6108c283836105b0565b156108b0575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610423565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c1561096057604051633ee5aeb560e01b815260040160405180910390fd5b61078460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b90610c4b565b6109b77f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336105b0565b610784576107846365c8e44b60e11b610b37565b6001600160a01b0382166109f95760405163ec442f0560e01b81525f60048201526024015b60405180910390fd5b61057c5f8383610c52565b6107845f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00610987565b6001600160a01b038216610a5757604051634b637e8f60e11b81525f60048201526024016109f0565b61057c825f83610c52565b6105558383836001610d78565b5f33610793818585610bb5565b610aa67f51b355059847d158e68950419dbcd54fad00bdfd0634c2515a5c533288c7f0a2336105b0565b61078457610784632571ba0360e11b610b37565b604080515f808252602082019092526001600160a01b038416908390604051610ae39190611013565b5f6040518083038185875af1925050503d805f8114610b1d576040519150601f19603f3d011682016040523d82523d5f602084013e610b22565b606091505b5050905080610555576105556312da5fa760e31b5b805f5260045ffd5b6001600160a01b038381165f908152600260209081526040808320938616835292905220545f1981101561051c5781811015610ba757604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016109f0565b61051c84848484035f610d78565b6001600160a01b038316610bde57604051634b637e8f60e11b81525f60048201526024016109f0565b6001600160a01b038216610c075760405163ec442f0560e01b81525f60048201526024016109f0565b610555838383610c52565b610c1c82826105b0565b61057c5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016109f0565b80825d5050565b6001600160a01b038316610c7c578060035f828254610c719190611029565b90915550610cec9050565b6001600160a01b0383165f9081526001602052604090205481811015610cce5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016109f0565b6001600160a01b0384165f9081526001602052604090209082900390555b6001600160a01b038216610d0857600380548290039055610d26565b6001600160a01b0382165f9081526001602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d6b91815260200190565b60405180910390a3505050565b6001600160a01b038416610da15760405163e602df0560e01b81525f60048201526024016109f0565b6001600160a01b038316610dca57604051634a1406b160e11b81525f60048201526024016109f0565b6001600160a01b038085165f908152600260209081526040808320938716835292905220829055801561051c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e3c91815260200190565b60405180910390a350505050565b5f60208284031215610e5a575f80fd5b81356001600160e01b0319811681146104cc575f80fd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610ebc575f80fd5b919050565b5f8060408385031215610ed2575f80fd5b610edb83610ea6565b946020939093013593505050565b5f805f60608486031215610efb575f80fd5b610f0484610ea6565b9250610f1260208501610ea6565b929592945050506040919091013590565b5f60208284031215610f33575f80fd5b5035919050565b5f8060408385031215610f4b575f80fd5b82359150610f5b60208401610ea6565b90509250929050565b5f60208284031215610f74575f80fd5b6104cc82610ea6565b5f8060408385031215610f8e575f80fd5b610f9783610ea6565b9150610f5b60208401610ea6565b600181811c90821680610fb957607f821691505b602082108103610fd757634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215610fed575f80fd5b5051919050565b5f60208284031215611004575f80fd5b815180151581146104cc575f80fd5b5f82518060208501845e5f920191825250919050565b8082018082111561042357634e487b7160e01b5f52601160045260245ffdfea2646970667358221220bb58a9224012cb02c66dbb55913634ae77bee94d831e1bcd65e431328a2644b564736f6c634300081a0033
0x608060405234801561000f575f80fd5b5060405161164138038061164183398101604081905261002e916103d9565b8282600461003c83826104dd565b50600561004982826104dd565b5061005891505f905033610130565b506100837f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633610130565b506100ae7f8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c33610130565b506100d97fd81ad4b52a95dd54000b782ee547c67a6d3c6b90c6653c2a839c973d684c7b7233610130565b506101047f51b355059847d158e68950419dbcd54fad00bdfd0634c2515a5c533288c7f0a233610130565b506006805463ffffffff191663ffffffff83169081179091556101289033906101d9565b5050506105b6565b5f828152602081815260408083206001600160a01b038516845290915281205460ff166101d0575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101883390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101d3565b505f5b92915050565b6001600160a01b0382166102075760405163ec442f0560e01b81525f60048201526024015b60405180910390fd5b6102125f8383610216565b5050565b6001600160a01b038316610240578060035f8282546102359190610597565b909155506102b09050565b6001600160a01b0383165f90815260016020526040902054818110156102925760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016101fe565b6001600160a01b0384165f9081526001602052604090209082900390555b6001600160a01b0382166102cc576003805482900390556102ea565b6001600160a01b0382165f9081526001602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161032f91815260200190565b60405180910390a3505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261035f575f80fd5b81516001600160401b038111156103785761037861033c565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103a6576103a661033c565b6040528181528382016020018510156103bd575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f805f606084860312156103eb575f80fd5b83516001600160401b03811115610400575f80fd5b61040c86828701610350565b602086015190945090506001600160401b03811115610429575f80fd5b61043586828701610350565b925050604084015163ffffffff8116811461044e575f80fd5b809150509250925092565b600181811c9082168061046d57607f821691505b60208210810361048b57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156104d857805f5260205f20601f840160051c810160208510156104b65750805b601f840160051c820191505b818110156104d5575f81556001016104c2565b50505b505050565b81516001600160401b038111156104f6576104f661033c565b61050a816105048454610459565b84610491565b6020601f82116001811461053c575f83156105255750848201515b5f19600385901b1c1916600184901b1784556104d5565b5f84815260208120601f198516915b8281101561056b578785015182556020948501946001909201910161054b565b508482101561058857868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b808201808211156101d357634e487b7160e01b5f52601160045260245ffd5b61107e806105c35f395ff3fe608060405234801561000f575f80fd5b506004361061016d575f3560e01c806342966c68116100d9578063a217fddf11610093578063d53913931161006e578063d53913931461035a578063d547741f14610381578063dd62ed3e14610394578063fcf0f0d3146103cc575f80fd5b8063a217fddf1461032d578063a9059cbb14610334578063c30885f114610347575f80fd5b806342966c681461029d578063496485c9146102b057806370a08231146102c35780637ae8352b146102eb57806391d148541461031257806395d89b4114610325575f80fd5b806323b872dd1161012a57806323b872dd1461021f578063248a9ca3146102325780632f2ff15d14610254578063313ce5671461026957806336568abe1461027757806340c10f191461028a575f80fd5b806301ffc9a714610171578063047fc9aa1461019957806306fdde03146101be578063095ea7b3146101d357806318160ddd146101e6578063206b60f9146101f8575b5f80fd5b61018461017f366004610e4a565b6103f3565b60405190151581526020015b60405180910390f35b6006546101a99063ffffffff1681565b60405163ffffffff9091168152602001610190565b6101c6610429565b6040516101909190610e71565b6101846101e1366004610ec1565b6104b9565b6003545b604051908152602001610190565b6101ea7f8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c81565b61018461022d366004610ee9565b6104d3565b6101ea610240366004610f23565b5f9081526020819052604090206001015490565b610267610262366004610f3a565b6104f8565b005b6040515f8152602001610190565b610267610285366004610f3a565b610522565b610267610298366004610ec1565b61055a565b6102676102ab366004610f23565b610580565b6102676102be366004610ee9565b61059d565b6101ea6102d1366004610f64565b6001600160a01b03165f9081526001602052604090205490565b6101ea7fd81ad4b52a95dd54000b782ee547c67a6d3c6b90c6653c2a839c973d684c7b7281565b610184610320366004610f3a565b6105b0565b6101c66105d8565b6101ea5f81565b610184610342366004610ec1565b6105e7565b610267610355366004610f64565b610603565b6101ea7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61026761038f366004610f3a565b610722565b6101ea6103a2366004610f7d565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b6101ea7f51b355059847d158e68950419dbcd54fad00bdfd0634c2515a5c533288c7f0a281565b5f6001600160e01b03198216637965db0b60e01b148061042357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606004805461043890610fa5565b80601f016020809104026020016040519081016040528092919081815260200182805461046490610fa5565b80156104af5780601f10610486576101008083540402835291602001916104af565b820191905f5260205f20905b81548152906001019060200180831161049257829003601f168201915b5050505050905090565b5f6104c2610746565b6104cc8383610786565b9392505050565b5f6104dc61079d565b6104e5826107db565b6104f08484846107fb565b949350505050565b5f828152602081905260409020600101546105128161081e565b61051c8383610828565b50505050565b6001600160a01b038116331461054b5760405163334bd91960e11b815260040160405180910390fd5b61055582826108b7565b505050565b610562610920565b61056a61098d565b61057482826109cb565b61057c610a04565b5050565b610588610920565b6105923382610a2e565b61059a610a04565b50565b6105a5610746565b610555838383610a62565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60606005805461043890610fa5565b5f6105f061079d565b6105f9826107db565b6104cc8383610a6f565b61060b610a7c565b47801561061c5761061c3382610aba565b6001600160a01b0382161561057c576040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa15801561066f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106939190610fdd565b905080156105555760405163a9059cbb60e01b8152336004820152602481018290525f906001600160a01b0385169063a9059cbb906044016020604051808303815f875af11580156106e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070b9190610ff4565b90508061051c5761051c637232c81f60e11b610b37565b5f8281526020819052604090206001015461073c8161081e565b61051c83836108b7565b6107707fd81ad4b52a95dd54000b782ee547c67a6d3c6b90c6653c2a839c973d684c7b72336105b0565b61078457610784634d4c14ed60e01b610b37565b565b5f33610793818585610a62565b5060019392505050565b6107c77f8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c336105b0565b61078457610784632944fdeb60e21b610b37565b60065463ffffffff1681111561059a5761059a631fc03ff160e31b610b37565b5f33610808858285610b3f565b610813858585610bb5565b506001949350505050565b61059a8133610c12565b5f61083383836105b0565b6108b0575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556108683390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610423565b505f610423565b5f6108c283836105b0565b156108b0575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610423565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c1561096057604051633ee5aeb560e01b815260040160405180910390fd5b61078460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b90610c4b565b6109b77f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336105b0565b610784576107846365c8e44b60e11b610b37565b6001600160a01b0382166109f95760405163ec442f0560e01b81525f60048201526024015b60405180910390fd5b61057c5f8383610c52565b6107845f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00610987565b6001600160a01b038216610a5757604051634b637e8f60e11b81525f60048201526024016109f0565b61057c825f83610c52565b6105558383836001610d78565b5f33610793818585610bb5565b610aa67f51b355059847d158e68950419dbcd54fad00bdfd0634c2515a5c533288c7f0a2336105b0565b61078457610784632571ba0360e11b610b37565b604080515f808252602082019092526001600160a01b038416908390604051610ae39190611013565b5f6040518083038185875af1925050503d805f8114610b1d576040519150601f19603f3d011682016040523d82523d5f602084013e610b22565b606091505b5050905080610555576105556312da5fa760e31b5b805f5260045ffd5b6001600160a01b038381165f908152600260209081526040808320938616835292905220545f1981101561051c5781811015610ba757604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016109f0565b61051c84848484035f610d78565b6001600160a01b038316610bde57604051634b637e8f60e11b81525f60048201526024016109f0565b6001600160a01b038216610c075760405163ec442f0560e01b81525f60048201526024016109f0565b610555838383610c52565b610c1c82826105b0565b61057c5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016109f0565b80825d5050565b6001600160a01b038316610c7c578060035f828254610c719190611029565b90915550610cec9050565b6001600160a01b0383165f9081526001602052604090205481811015610cce5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016109f0565b6001600160a01b0384165f9081526001602052604090209082900390555b6001600160a01b038216610d0857600380548290039055610d26565b6001600160a01b0382165f9081526001602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d6b91815260200190565b60405180910390a3505050565b6001600160a01b038416610da15760405163e602df0560e01b81525f60048201526024016109f0565b6001600160a01b038316610dca57604051634a1406b160e11b81525f60048201526024016109f0565b6001600160a01b038085165f908152600260209081526040808320938716835292905220829055801561051c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e3c91815260200190565b60405180910390a350505050565b5f60208284031215610e5a575f80fd5b81356001600160e01b0319811681146104cc575f80fd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610ebc575f80fd5b919050565b5f8060408385031215610ed2575f80fd5b610edb83610ea6565b946020939093013593505050565b5f805f60608486031215610efb575f80fd5b610f0484610ea6565b9250610f1260208501610ea6565b929592945050506040919091013590565b5f60208284031215610f33575f80fd5b5035919050565b5f8060408385031215610f4b575f80fd5b82359150610f5b60208401610ea6565b90509250929050565b5f60208284031215610f74575f80fd5b6104cc82610ea6565b5f8060408385031215610f8e575f80fd5b610f9783610ea6565b9150610f5b60208401610ea6565b600181811c90821680610fb957607f821691505b602082108103610fd757634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215610fed575f80fd5b5051919050565b5f60208284031215611004575f80fd5b815180151581146104cc575f80fd5b5f82518060208501845e5f920191825250919050565b8082018082111561042357634e487b7160e01b5f52601160045260245ffdfea2646970667358221220bb58a9224012cb02c66dbb55913634ae77bee94d831e1bcd65e431328a2644b564736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000186a0000000000000000000000000000000000000000000000000000000000000002a44697372757074697665204d696e647a205368617265686f6c6465727320566f74696e6720546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005444d535654000000000000000000000000000000000000000000000000000000