0x608060405234801561001057600080fd5b506111f9806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063a06617cd116100a2578063ce8af54b11610071578063ce8af54b1461027a578063e489a3a81461028d578063f2fde38b14610296578063f4e59123146102a9578063fac2c621146102ca57600080fd5b8063a06617cd146101eb578063ad6f6e891461021e578063c37d904414610247578063cc6fcf721461025a57600080fd5b8063715018a6116100e9578063715018a61461019a5780638129fc1c146101a257806386f024b5146101aa5780638da5cb5b146101bd5780638f779735146101d857600080fd5b8063096605131461011b57806322a5dde414610144578063344cbc68146101595780635e5c06e21461016c575b600080fd5b61012e610129366004610e98565b6102dd565b60405161013b9190610f51565b60405180910390f35b610157610152366004610f81565b6103ac565b005b610157610167366004610e98565b6103fb565b61018c61017a366004610f81565b60656020526000908152604090205481565b60405190815260200161013b565b610157610584565b610157610598565b6101576101b8366004610fb2565b6106a8565b6033546040516001600160a01b03909116815260200161013b565b6101576101e636600461102a565b610806565b61020e6101f9366004610f81565b60676020526000908152604090205460ff1681565b604051901515815260200161013b565b61018c61022c366004610f81565b6001600160a01b031660009081526065602052604090205490565b610157610255366004611076565b6108ad565b61026d610268366004611091565b6109a6565b60405161013b91906110d3565b610157610288366004611117565b610a7d565b61018c60685481565b6101576102a4366004610f81565b610b97565b6102bc6102b7366004610f81565b610c0d565b60405161013b92919061113a565b6101576102d8366004610f81565b610cfd565b6102e5610e4d565b60008281526066602052604090819020815160a0810190925281606081018260028282826020028201915b81546001600160a01b03168152600190910190602001808311610310575050509183525050604080518082019182905260209092019190600284810191826000855b82829054906101000a900460ff16600481111561037157610371610eb1565b815260206001928301818104948501949093039092029101808411610352579050505050505081526020016003820154815250509050919050565b6103b4610d47565b6001600160a01b03811660009081526067602052604090205460ff166103f8576001600160a01b0381166000908152606760205260409020805460ff191660011790555b50565b33600090815260656020526040902054811461045e5760405162461bcd60e51b815260206004820152601760248201527f4d75737420717569742061206a6f696e65642067616d6500000000000000000060448201526064015b60405180910390fd5b6000818152606660205260409020546001600160a01b03161580159061049c57506000818152606660205260408120600101546001600160a01b0316145b6104e85760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207175697420647572696e672067616d650000000000000000006044820152606401610455565b6000818152606660205260409020546001600160a01b031633146105475760405162461bcd60e51b815260206004820152601660248201527513db9b1e4818dc99585d1bdc9cc818d85b881c5d5a5d60521b6044820152606401610455565b33600081815260656020526040808220829055518392917fb1620e21b30d953f0f9f2ffdc0d48c8c67cc7b0e1727d2658c0b8a1bfab1ae6291a350565b61058c610d47565b6105966000610da1565b565b600054610100900460ff16158080156105b85750600054600160ff909116105b806105d25750303b1580156105d2575060005460ff166001145b6106355760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610455565b6000805460ff191660011790558015610658576000805461ff0019166101001790555b610660610df3565b80156103f8576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b33600090815260656020526040902054156106fd5760405162461bcd60e51b8152602060048201526015602482015274416c7265616479206a6f696e656420612067616d6560581b6044820152606401610455565b6000828152606660205260409020546001600160a01b03161580159061073b57506000828152606660205260408120600101546001600160a01b0316145b6107795760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420706c617965727360881b6044820152606401610455565b336000818152606560209081526040808320869055858352606690915290206001810180546001600160a01b031916909217909155600201805482919061ff0019166101008360048111156107d0576107d0610eb1565b0217905550604051829033907f49f8fa5eee2e3f21251c2e968640dcaef35cb9332429eb059bb3cd56ddc2533d90600090a35050565b3360009081526067602052604090205460ff1661085f5760405162461bcd60e51b8152602060048201526017602482015276139bdd081c9959da5cdd195c99590818dbdb9d1c9858dd604a1b6044820152606401610455565b60005b818110156108a757610895848484848181106108805761088061114e565b90506020020160208101906102889190610f81565b8061089f81611164565b915050610862565b50505050565b6068600081546108bc90611164565b9091555033600090815260656020526040902054156109155760405162461bcd60e51b8152602060048201526015602482015274416c7265616479206a6f696e656420612067616d6560581b6044820152606401610455565b606880543360008181526065602090815260408083208590559382526066905282812080546001600160a01b031916909217909155915482529020600201805482919060ff1916600183600481111561097057610970610eb1565b021790555060685460405133907f0ce3610e89a4bb9ec9359763f99110ed52a4abaea0b62028a1637e242ca2768b90600090a350565b60608167ffffffffffffffff8111156109c1576109c161118b565b6040519080825280602002602001820160405280156109ea578160200160208202803683370190505b50905060005b82811015610a765760656000858584818110610a0e57610a0e61114e565b9050602002016020810190610a239190610f81565b6001600160a01b03166001600160a01b0316815260200190815260200160002060000154828281518110610a5957610a5961114e565b602090810291909101015280610a6e81611164565b9150506109f0565b5092915050565b3360009081526067602052604090205460ff16610ad65760405162461bcd60e51b8152602060048201526017602482015276139bdd081c9959da5cdd195c99590818dbdb9d1c9858dd604a1b6044820152606401610455565b6001600160a01b0381166000908152606560205260409020548214610b505760405162461bcd60e51b815260206004820152602a60248201527f506c61796572206e6f7420696e207468652067616d652073706563696669656460448201526908189e4819d85b59525960b21b6064820152608401610455565b6001600160a01b038116600081815260656020526040808220829055518492917f7823e479a1a4ebe2418874847436f8a1680c5ee5b17f38bb59dbff28e1b4555291a35050565b610b9f610d47565b6001600160a01b038116610c045760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610455565b6103f881610da1565b6000610c17610e4d565b6001600160a01b038316600090815260656020908152604080832054808452606690925291829020825160a0810190935290918181606081018260028282826020028201915b81546001600160a01b03168152600190910190602001808311610c5d575050509183525050604080518082019182905260209092019190600284810191826000855b82829054906101000a900460ff166004811115610cbe57610cbe610eb1565b815260206001928301818104948501949093039092029101808411610c9f57905050505050508152602001600382015481525050905091509150915091565b610d05610d47565b6001600160a01b03811660009081526067602052604090205460ff16156103f8576001600160a01b03166000908152606760205260409020805460ff19169055565b6033546001600160a01b031633146105965760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610455565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610e1a5760405162461bcd60e51b8152600401610455906111a1565b610596600054610100900460ff16610e445760405162461bcd60e51b8152600401610455906111a1565b61059633610da1565b6040518060600160405280610e60610e7a565b8152602001610e6d610e7a565b8152602001600081525090565b60405180604001604052806002906020820280368337509192915050565b600060208284031215610eaa57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b80518260005b6002811015610ef55782516001600160a01b0316825260209283019290910190600101610ecd565b5050506020808201516040840160005b6002811015610f4057825160058110610f2e57634e487b7160e01b600052602160045260246000fd5b82529183019190830190600101610f05565b505050506040015160809190910152565b60a08101610f5f8284610ec7565b92915050565b80356001600160a01b0381168114610f7c57600080fd5b919050565b600060208284031215610f9357600080fd5b610f9c82610f65565b9392505050565b803560058110610f7c57600080fd5b60008060408385031215610fc557600080fd5b82359150610fd560208401610fa3565b90509250929050565b60008083601f840112610ff057600080fd5b50813567ffffffffffffffff81111561100857600080fd5b6020830191508360208260051b850101111561102357600080fd5b9250929050565b60008060006040848603121561103f57600080fd5b83359250602084013567ffffffffffffffff81111561105d57600080fd5b61106986828701610fde565b9497909650939450505050565b60006020828403121561108857600080fd5b610f9c82610fa3565b600080602083850312156110a457600080fd5b823567ffffffffffffffff8111156110bb57600080fd5b6110c785828601610fde565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b8181101561110b578351835292840192918401916001016110ef565b50909695505050505050565b6000806040838503121561112a57600080fd5b82359150610fd560208401610f65565b82815260c08101610f9c6020830184610ec7565b634e487b7160e01b600052603260045260246000fd5b60006001820161118457634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052604160045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c6343000811000a