0x608060405234801561000f575f80fd5b506004361061013d575f3560e01c80638e32c003116100b4578063c345cf2311610079578063c345cf23146102b0578063cadc24b5146102b8578063d8fb9361146102e0578063dd62ed3e146102f3578063e03504af1461021b578063e156b1b61461032b575f80fd5b80638e32c0031461026f57806395d89b4114610141578063a713fd5314610282578063a9059cbb1461028a578063adacad8c1461029d575f80fd5b806328226aa71161010557806328226aa7146101d1578063313ce567146101f5578063416c3c9d1461020a5780635c01b60c1461021b57806370a082311461023d578063715018a614610265575f80fd5b806306fdde0314610141578063095ea7b31461017257806318160ddd146101955780631ae1ffbc146101ab57806323b872dd146101be575b5f80fd5b60408051808201909152600381526208aa8960eb1b60208201525b6040516101699190610b74565b60405180910390f35b610185610180366004610bdb565b61033e565b6040519015158152602001610169565b61019d6103a5565b604051908152602001610169565b6101856101b9366004610d3a565b6103c4565b6101856101cc366004610ddd565b6105cb565b5f546001600160a01b03165b6040516001600160a01b039091168152602001610169565b60015b60405160ff9091168152602001610169565b6004546001600160a01b03166101dd565b61015c6040518060400160405280600381526020016208aa8960eb1b81525081565b61019d61024b366004610e16565b6001600160a01b03165f9081526002602052604090205490565b61026d610785565b005b61026d61027d366004610e16565b6107fc565b6101f8600181565b610185610298366004610bdb565b610847565b61026d6102ab366004610e36565b610984565b61019d610a0a565b61019d6102c6366004610e16565b6001600160a01b03165f9081526003602052604090205490565b61026d6102ee366004610eaa565b610a26565b61019d610301366004610eec565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b610185610339366004610ddd565b610b41565b335f8181526001602090815260408083206001600160a01b03871680855290835281842086905590518581529293909290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b5f6103b26001600a611011565b6103bf906298968061101f565b905090565b5f805b85518110156105be578581815181106103e2576103e2611036565b60200260200101516001600160a01b0316876001600160a01b03165f8051602061112183398151915287848151811061041d5761041d611036565b602002602001015160405161043491815260200190565b60405180910390a385818151811061044e5761044e611036565b60200260200101516001600160a01b0316734752ba5dbc23f44d87826276bf6fd6b1c372ad246001600160a01b03167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8228784815181106104b0576104b0611036565b60200260200101515f808987815181106104cc576104cc611036565b6020908102919091018101516040805195865291850193909352830152606082015260800160405180910390a3826001600160a01b031663e156b1b687838151811061051a5761051a611036565b60200260200101518987858151811061053557610535611036565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303815f875af1158015610591573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105b5919061104a565b506001016103c7565b5060019695505050505050565b6001600160a01b0383165f9081526001602090815260408083203384529091528120548211156106425760405162461bcd60e51b815260206004820152601960248201527f416c6c6f77616e6365206c696d6974207375727061737365640000000000000060448201526064015b60405180910390fd5b6001600160a01b0384165f9081526003602052604090205480156106af578083146106af5760405162461bcd60e51b815260206004820181905260248201527f436f6d70756c736f7279207472616e736665722073756d206d69736d617463686044820152606401610639565b6001600160a01b0385165f90815260026020526040812080548592906106d6908490611069565b90915550506001600160a01b0384165f908152600260205260408120805485929061070290849061107c565b90915550506001600160a01b0385165f90815260016020908152604080832033845290915281208054859290610739908490611069565b92505081905550836001600160a01b0316856001600160a01b03165f805160206111218339815191528560405161077291815260200190565b60405180910390a3506001949350505050565b5f546001600160a01b031633146107ae5760405162461bcd60e51b81526004016106399061108f565b5f805460405161dead926001600160a01b03909216917f22500af037c600dd7b720644ab6e358635085601d9ac508ad83eb2d6b2d729ca91a35f80546001600160a01b03191661dead179055565b5f546001600160a01b031633146108255760405162461bcd60e51b81526004016106399061108f565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b335f9081526002602052604081205482111561089c5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610639565b5f6108a6336102c6565b905080156108fd578083146108fd5760405162461bcd60e51b815260206004820181905260248201527f436f6d70756c736f7279207472616e736665722073756d206d69736d617463686044820152606401610639565b335f908152600260205260408120805485929061091b908490611069565b90915550506001600160a01b0384165f908152600260205260408120805485929061094790849061107c565b90915550506040518381526001600160a01b0385169033905f80516020611121833981519152906020015b60405180910390a35060019392505050565b6004546001600160a01b031633146109ae5760405162461bcd60e51b8152600401610639906110da565b5f5b82811015610a04578160035f8686858181106109ce576109ce611036565b90506020020160208101906109e39190610e16565b6001600160a01b0316815260208101919091526040015f20556001016109b0565b50505050565b610a166001600a611011565b610a23906298968061101f565b81565b6004546001600160a01b03163314610a505760405162461bcd60e51b8152600401610639906110da565b5f5b8251811015610b3c575f838281518110610a6e57610a6e611036565b602002602001015190505f6001600160a01b0316816001600160a01b031603610ad95760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964206164647265737320737065636966696564000000000000006044820152606401610639565b6001600160a01b0381165f81815260026020908152604091829020805490879055825181815291820187905292917fef88868e7a1bd2fac29f7b777f32f9d8ea2ac5e10c2d23234d4715ab11c84890910160405180910390a25050600101610a52565b505050565b5f826001600160a01b0316846001600160a01b03165f805160206111218339815191528460405161097291815260200190565b5f602080835283518060208501525f5b81811015610ba057858101830151858201604001528201610b84565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610bd6575f80fd5b919050565b5f8060408385031215610bec575f80fd5b610bf583610bc0565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610c4057610c40610c03565b604052919050565b5f67ffffffffffffffff821115610c6157610c61610c03565b5060051b60200190565b5f82601f830112610c7a575f80fd5b81356020610c8f610c8a83610c48565b610c17565b8083825260208201915060208460051b870101935086841115610cb0575f80fd5b602086015b84811015610cd357610cc681610bc0565b8352918301918301610cb5565b509695505050505050565b5f82601f830112610ced575f80fd5b81356020610cfd610c8a83610c48565b8083825260208201915060208460051b870101935086841115610d1e575f80fd5b602086015b84811015610cd35780358352918301918301610d23565b5f805f805f60a08688031215610d4e575f80fd5b610d5786610bc0565b9450602086013567ffffffffffffffff80821115610d73575f80fd5b610d7f89838a01610c6b565b95506040880135915080821115610d94575f80fd5b610da089838a01610cde565b94506060880135915080821115610db5575f80fd5b50610dc288828901610cde565b925050610dd160808701610bc0565b90509295509295909350565b5f805f60608486031215610def575f80fd5b610df884610bc0565b9250610e0660208501610bc0565b9150604084013590509250925092565b5f60208284031215610e26575f80fd5b610e2f82610bc0565b9392505050565b5f805f60408486031215610e48575f80fd5b833567ffffffffffffffff80821115610e5f575f80fd5b818601915086601f830112610e72575f80fd5b813581811115610e80575f80fd5b8760208260051b8501011115610e94575f80fd5b6020928301989097509590910135949350505050565b5f8060408385031215610ebb575f80fd5b823567ffffffffffffffff811115610ed1575f80fd5b610edd85828601610c6b565b95602094909401359450505050565b5f8060408385031215610efd575f80fd5b610f0683610bc0565b9150610f1460208401610bc0565b90509250929050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115610f6b57815f1904821115610f5157610f51610f1d565b80851615610f5e57918102915b93841c9390800290610f36565b509250929050565b5f82610f815750600161039f565b81610f8d57505f61039f565b8160018114610fa35760028114610fad57610fc9565b600191505061039f565b60ff841115610fbe57610fbe610f1d565b50506001821b61039f565b5060208310610133831016604e8410600b8410161715610fec575081810a61039f565b610ff68383610f31565b805f190482111561100957611009610f1d565b029392505050565b5f610e2f60ff841683610f73565b808202811582820484141761039f5761039f610f1d565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561105a575f80fd5b81518015158114610e2f575f80fd5b8181038181111561039f5761039f610f1d565b8082018082111561039f5761039f610f1d565b6020808252602b908201527f556e617574686f72697a65643a2053696e676c65204f776e657220616363657360408201526a39903932b8bab4b932b21760a91b606082015260800190565b60208082526026908201527f556e617574686f72697a65643a2043726561746f7220616363657373207265716040820152653ab4b932b21760d11b60608201526080019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208be273e396f31ed5415a2b48120eab6898b384442e6e792fc8b4f7572c3fd2e164736f6c63430008170033
0x608060405234801562000010575f80fd5b505f80546001600160a01b031916339081178255604051909182917f22500af037c600dd7b720644ab6e358635085601d9ac508ad83eb2d6b2d729ca908290a3506200005f6001600a620001e5565b6200006e9062989680620001fc565b335f81815260026020526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620000b06001600a620001e5565b620000bf9062989680620001fc565b60405190815260200160405180910390a362000216565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200012a57815f19048211156200010e576200010e620000d6565b808516156200011c57918102915b93841c9390800290620000ef565b509250929050565b5f826200014257506001620001df565b816200015057505f620001df565b8160018114620001695760028114620001745762000194565b6001915050620001df565b60ff841115620001885762000188620000d6565b50506001821b620001df565b5060208310610133831016604e8410600b8410161715620001b9575081810a620001df565b620001c58383620000ea565b805f1904821115620001db57620001db620000d6565b0290505b92915050565b5f620001f560ff84168362000132565b9392505050565b8082028115828204841417620001df57620001df620000d6565b61117680620002245f395ff3fe608060405234801561000f575f80fd5b506004361061013d575f3560e01c80638e32c003116100b4578063c345cf2311610079578063c345cf23146102b0578063cadc24b5146102b8578063d8fb9361146102e0578063dd62ed3e146102f3578063e03504af1461021b578063e156b1b61461032b575f80fd5b80638e32c0031461026f57806395d89b4114610141578063a713fd5314610282578063a9059cbb1461028a578063adacad8c1461029d575f80fd5b806328226aa71161010557806328226aa7146101d1578063313ce567146101f5578063416c3c9d1461020a5780635c01b60c1461021b57806370a082311461023d578063715018a614610265575f80fd5b806306fdde0314610141578063095ea7b31461017257806318160ddd146101955780631ae1ffbc146101ab57806323b872dd146101be575b5f80fd5b60408051808201909152600381526208aa8960eb1b60208201525b6040516101699190610b74565b60405180910390f35b610185610180366004610bdb565b61033e565b6040519015158152602001610169565b61019d6103a5565b604051908152602001610169565b6101856101b9366004610d3a565b6103c4565b6101856101cc366004610ddd565b6105cb565b5f546001600160a01b03165b6040516001600160a01b039091168152602001610169565b60015b60405160ff9091168152602001610169565b6004546001600160a01b03166101dd565b61015c6040518060400160405280600381526020016208aa8960eb1b81525081565b61019d61024b366004610e16565b6001600160a01b03165f9081526002602052604090205490565b61026d610785565b005b61026d61027d366004610e16565b6107fc565b6101f8600181565b610185610298366004610bdb565b610847565b61026d6102ab366004610e36565b610984565b61019d610a0a565b61019d6102c6366004610e16565b6001600160a01b03165f9081526003602052604090205490565b61026d6102ee366004610eaa565b610a26565b61019d610301366004610eec565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b610185610339366004610ddd565b610b41565b335f8181526001602090815260408083206001600160a01b03871680855290835281842086905590518581529293909290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b5f6103b26001600a611011565b6103bf906298968061101f565b905090565b5f805b85518110156105be578581815181106103e2576103e2611036565b60200260200101516001600160a01b0316876001600160a01b03165f8051602061112183398151915287848151811061041d5761041d611036565b602002602001015160405161043491815260200190565b60405180910390a385818151811061044e5761044e611036565b60200260200101516001600160a01b0316734752ba5dbc23f44d87826276bf6fd6b1c372ad246001600160a01b03167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8228784815181106104b0576104b0611036565b60200260200101515f808987815181106104cc576104cc611036565b6020908102919091018101516040805195865291850193909352830152606082015260800160405180910390a3826001600160a01b031663e156b1b687838151811061051a5761051a611036565b60200260200101518987858151811061053557610535611036565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303815f875af1158015610591573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105b5919061104a565b506001016103c7565b5060019695505050505050565b6001600160a01b0383165f9081526001602090815260408083203384529091528120548211156106425760405162461bcd60e51b815260206004820152601960248201527f416c6c6f77616e6365206c696d6974207375727061737365640000000000000060448201526064015b60405180910390fd5b6001600160a01b0384165f9081526003602052604090205480156106af578083146106af5760405162461bcd60e51b815260206004820181905260248201527f436f6d70756c736f7279207472616e736665722073756d206d69736d617463686044820152606401610639565b6001600160a01b0385165f90815260026020526040812080548592906106d6908490611069565b90915550506001600160a01b0384165f908152600260205260408120805485929061070290849061107c565b90915550506001600160a01b0385165f90815260016020908152604080832033845290915281208054859290610739908490611069565b92505081905550836001600160a01b0316856001600160a01b03165f805160206111218339815191528560405161077291815260200190565b60405180910390a3506001949350505050565b5f546001600160a01b031633146107ae5760405162461bcd60e51b81526004016106399061108f565b5f805460405161dead926001600160a01b03909216917f22500af037c600dd7b720644ab6e358635085601d9ac508ad83eb2d6b2d729ca91a35f80546001600160a01b03191661dead179055565b5f546001600160a01b031633146108255760405162461bcd60e51b81526004016106399061108f565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b335f9081526002602052604081205482111561089c5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610639565b5f6108a6336102c6565b905080156108fd578083146108fd5760405162461bcd60e51b815260206004820181905260248201527f436f6d70756c736f7279207472616e736665722073756d206d69736d617463686044820152606401610639565b335f908152600260205260408120805485929061091b908490611069565b90915550506001600160a01b0384165f908152600260205260408120805485929061094790849061107c565b90915550506040518381526001600160a01b0385169033905f80516020611121833981519152906020015b60405180910390a35060019392505050565b6004546001600160a01b031633146109ae5760405162461bcd60e51b8152600401610639906110da565b5f5b82811015610a04578160035f8686858181106109ce576109ce611036565b90506020020160208101906109e39190610e16565b6001600160a01b0316815260208101919091526040015f20556001016109b0565b50505050565b610a166001600a611011565b610a23906298968061101f565b81565b6004546001600160a01b03163314610a505760405162461bcd60e51b8152600401610639906110da565b5f5b8251811015610b3c575f838281518110610a6e57610a6e611036565b602002602001015190505f6001600160a01b0316816001600160a01b031603610ad95760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964206164647265737320737065636966696564000000000000006044820152606401610639565b6001600160a01b0381165f81815260026020908152604091829020805490879055825181815291820187905292917fef88868e7a1bd2fac29f7b777f32f9d8ea2ac5e10c2d23234d4715ab11c84890910160405180910390a25050600101610a52565b505050565b5f826001600160a01b0316846001600160a01b03165f805160206111218339815191528460405161097291815260200190565b5f602080835283518060208501525f5b81811015610ba057858101830151858201604001528201610b84565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610bd6575f80fd5b919050565b5f8060408385031215610bec575f80fd5b610bf583610bc0565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610c4057610c40610c03565b604052919050565b5f67ffffffffffffffff821115610c6157610c61610c03565b5060051b60200190565b5f82601f830112610c7a575f80fd5b81356020610c8f610c8a83610c48565b610c17565b8083825260208201915060208460051b870101935086841115610cb0575f80fd5b602086015b84811015610cd357610cc681610bc0565b8352918301918301610cb5565b509695505050505050565b5f82601f830112610ced575f80fd5b81356020610cfd610c8a83610c48565b8083825260208201915060208460051b870101935086841115610d1e575f80fd5b602086015b84811015610cd35780358352918301918301610d23565b5f805f805f60a08688031215610d4e575f80fd5b610d5786610bc0565b9450602086013567ffffffffffffffff80821115610d73575f80fd5b610d7f89838a01610c6b565b95506040880135915080821115610d94575f80fd5b610da089838a01610cde565b94506060880135915080821115610db5575f80fd5b50610dc288828901610cde565b925050610dd160808701610bc0565b90509295509295909350565b5f805f60608486031215610def575f80fd5b610df884610bc0565b9250610e0660208501610bc0565b9150604084013590509250925092565b5f60208284031215610e26575f80fd5b610e2f82610bc0565b9392505050565b5f805f60408486031215610e48575f80fd5b833567ffffffffffffffff80821115610e5f575f80fd5b818601915086601f830112610e72575f80fd5b813581811115610e80575f80fd5b8760208260051b8501011115610e94575f80fd5b6020928301989097509590910135949350505050565b5f8060408385031215610ebb575f80fd5b823567ffffffffffffffff811115610ed1575f80fd5b610edd85828601610c6b565b95602094909401359450505050565b5f8060408385031215610efd575f80fd5b610f0683610bc0565b9150610f1460208401610bc0565b90509250929050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115610f6b57815f1904821115610f5157610f51610f1d565b80851615610f5e57918102915b93841c9390800290610f36565b509250929050565b5f82610f815750600161039f565b81610f8d57505f61039f565b8160018114610fa35760028114610fad57610fc9565b600191505061039f565b60ff841115610fbe57610fbe610f1d565b50506001821b61039f565b5060208310610133831016604e8410600b8410161715610fec575081810a61039f565b610ff68383610f31565b805f190482111561100957611009610f1d565b029392505050565b5f610e2f60ff841683610f73565b808202811582820484141761039f5761039f610f1d565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561105a575f80fd5b81518015158114610e2f575f80fd5b8181038181111561039f5761039f610f1d565b8082018082111561039f5761039f610f1d565b6020808252602b908201527f556e617574686f72697a65643a2053696e676c65204f776e657220616363657360408201526a39903932b8bab4b932b21760a91b606082015260800190565b60208082526026908201527f556e617574686f72697a65643a2043726561746f7220616363657373207265716040820152653ab4b932b21760d11b60608201526080019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208be273e396f31ed5415a2b48120eab6898b384442e6e792fc8b4f7572c3fd2e164736f6c63430008170033