0x608060405234801561001057600080fd5b50600054610100900460ff168061002a575060005460ff16155b6100915760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b600054610100900460ff161580156100b3576000805461ffff19166101011790555b80156100c5576000805461ff00191690555b50611fb4806100d56000396000f3fe608060405234801561001057600080fd5b50600436106101415760003560e01c8063818a0ab7116100b8578063d547741f1161007c578063d547741f146102d7578063d9caed12146102ea578063efb13e7e146102fd578063f75dbeef14610310578063fada4e9314610319578063fc4d8a431461032c57600080fd5b8063818a0ab71461026457806391d148541461028a578063a217fddf1461029d578063c7397f07146102a5578063c8342403146102c457600080fd5b8063248a9ca31161010a578063248a9ca3146101ec5780632f2ff15d1461020f57806336568abe146102245780634886266e1461023757806349c7e6391461024a57806354fd4d501461025d57600080fd5b80622589261461014657806301ffc9a714610176578063128e3066146101995780631aa77240146101ba5780631dedb39a146101e3575b600080fd5b609754610159906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61018961018436600461172b565b61033f565b604051901515815260200161016d565b6101ac6101a736600461176b565b610376565b60405190815260200161016d565b6101596101c836600461179a565b609b602052600090815260409020546001600160a01b031681565b6101ac60995481565b6101ac6101fa3660046117b5565b60009081526065602052604090206001015490565b61022261021d3660046117e5565b6103a3565b005b6102226102323660046117e5565b6103ce565b610222610245366004611811565b610451565b61022261025836600461176b565b61051a565b60646101ac565b61027761027236600461179a565b6105c6565b60405161016d97969594939291906118c3565b6101896102983660046117e5565b6108b0565b6101ac600081565b609a546102b29060ff1681565b60405160ff909116815260200161016d565b6102226102d2366004611948565b6108db565b6102226102e53660046117e5565b610915565b6102226102f836600461198e565b61093b565b61022261030b366004611948565b6109bb565b6101ac60985481565b6102226103273660046119ca565b610a9e565b61022261033a366004611acf565b610ae8565b60006001600160e01b03198216637965db0b60e01b148061037057506301ffc9a760e01b6001600160e01b03198316145b92915050565b609a5460009060ff908116908316101561039257609854610396565b6099545b6103709060ff8416611c17565b6000828152606560205260409020600101546103bf8133610b32565b6103c98383610b96565b505050565b6001600160a01b03811633146104435760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61044d8282610c1c565b5050565b8060ff1660000361047557604051634668624160e01b815260040160405180910390fd5b60985460000361049857604051638ac0e17160e01b815260040160405180910390fd5b60006104a382610376565b6097546040805163ffffffff8716815260ff861660208201526001600160a01b0390921690820152606081018290529091507f84714466f5818ee7745f1a583a5193a1633d0dc2d34260776a227a0cc9bcaf8b9060800160405180910390a16097546103c9906001600160a01b0316333084610c83565b6001609a60018282829054906101000a900463ffffffff1661053c9190611c2e565b825463ffffffff91821661010093840a9081029083021990911617909255609a5461056a9350041682610451565b609a5461058290610100900463ffffffff1633610cee565b609a5460405161010090910463ffffffff1681527f04344ed7a67fec80c444d56ee1cee242f3f75b91fecc8dbce8890069c82eb48e9060200160405180910390a150565b609c602052600090815260409020805460018201805460ff80841694610100909404169291906105f590611c52565b80601f016020809104026020016040519081016040528092919081815260200182805461062190611c52565b801561066e5780601f106106435761010080835404028352916020019161066e565b820191906000526020600020905b81548152906001019060200180831161065157829003601f168201915b50505050509080600201805461068390611c52565b80601f01602080910402602001604051908101604052809291908181526020018280546106af90611c52565b80156106fc5780601f106106d1576101008083540402835291602001916106fc565b820191906000526020600020905b8154815290600101906020018083116106df57829003601f168201915b50505050509080600301805461071190611c52565b80601f016020809104026020016040519081016040528092919081815260200182805461073d90611c52565b801561078a5780601f1061075f5761010080835404028352916020019161078a565b820191906000526020600020905b81548152906001019060200180831161076d57829003601f168201915b50505050509080600401805461079f90611c52565b80601f01602080910402602001604051908101604052809291908181526020018280546107cb90611c52565b80156108185780601f106107ed57610100808354040283529160200191610818565b820191906000526020600020905b8154815290600101906020018083116107fb57829003601f168201915b50505050509080600501805461082d90611c52565b80601f016020809104026020016040519081016040528092919081815260200182805461085990611c52565b80156108a65780601f1061087b576101008083540402835291602001916108a6565b820191906000526020600020905b81548152906001019060200180831161088957829003601f168201915b5050505050905087565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6108e66000336108b0565b61090357604051636f4720fd60e11b815260040160405180910390fd5b61090f84848484610d6b565b50505050565b6000828152606560205260409020600101546109318133610b32565b6103c98383610c1c565b6109466000336108b0565b61096357604051636f4720fd60e11b815260040160405180910390fd5b6001600160a01b0383166109a7576040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561090f573d6000803e3d6000fd5b6103c96001600160a01b0384168383610df0565b600054610100900460ff16806109d4575060005460ff16155b610a375760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161043a565b600054610100900460ff16158015610a59576000805461ffff19166101011790555b609a805464ffffffff0019166405f5e10000179055610a79600033610e20565b610a8585858585610d6b565b8015610a97576000805461ff00191690555b5050505050565b63ffffffff82166000908152609b602052604090205482906001600160a01b03163314610ade5760405163b720fc9560e01b815260040160405180910390fd5b6103c98383610cee565b63ffffffff82166000908152609b602052604090205482906001600160a01b03163314610b285760405163b720fc9560e01b815260040160405180910390fd5b6103c98383610e2a565b610b3c82826108b0565b61044d57610b54816001600160a01b0316601461133e565b610b5f83602061133e565b604051602001610b70929190611c8c565b60408051601f198184030181529082905262461bcd60e51b825261043a91600401611d01565b610ba082826108b0565b61044d5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610bd83390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610c2682826108b0565b1561044d5760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6040516001600160a01b038085166024830152831660448201526064810182905261090f9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526114e1565b63ffffffff82166000818152609b602090815260409182902080546001600160a01b038681166001600160a01b03198316811790935584519586521691840182905291830191909152907f64a4ac135e3b8d0115c79eb47a0381a8d268b16e1dc359a40288312defc55181906060015b60405180910390a1505050565b609780546001600160a01b0319166001600160a01b03861690811790915560988490556099839055609a805460ff191660ff84169081179091556040805192835260208301869052820184905260608201527f25c053c3e062d39465e84bf332eb6b7e3fce6b986c71f9ecf1af7d5170767bb69060800160405180910390a150505050565b6040516001600160a01b0383166024820152604481018290526103c990849063a9059cbb60e01b90606401610cb7565b61044d8282610b96565b806020015160ff16600003610e5257604051634668624160e01b815260040160405180910390fd5b806040015151600003610e7857604051634668624160e01b815260040160405180910390fd5b806060015151600003610e9e57604051634668624160e01b815260040160405180910390fd5b8060a0015151600003610ec457604051634668624160e01b815260040160405180910390fd5b63ffffffff82166000908152609c6020526040808220815160e081019092528054829060ff168015610ef857610ef861183b565b8015610f0657610f0661183b565b81528154610100900460ff166020820152600182018054604090920191610f2c90611c52565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5890611c52565b8015610fa55780601f10610f7a57610100808354040283529160200191610fa5565b820191906000526020600020905b815481529060010190602001808311610f8857829003601f168201915b50505050508152602001600282018054610fbe90611c52565b80601f0160208091040260200160405190810160405280929190818152602001828054610fea90611c52565b80156110375780601f1061100c57610100808354040283529160200191611037565b820191906000526020600020905b81548152906001019060200180831161101a57829003601f168201915b5050505050815260200160038201805461105090611c52565b80601f016020809104026020016040519081016040528092919081815260200182805461107c90611c52565b80156110c95780601f1061109e576101008083540402835291602001916110c9565b820191906000526020600020905b8154815290600101906020018083116110ac57829003601f168201915b505050505081526020016004820180546110e290611c52565b80601f016020809104026020016040519081016040528092919081815260200182805461110e90611c52565b801561115b5780601f106111305761010080835404028352916020019161115b565b820191906000526020600020905b81548152906001019060200180831161113e57829003601f168201915b5050505050815260200160058201805461117490611c52565b80601f01602080910402602001604051908101604052809291908181526020018280546111a090611c52565b80156111ed5780601f106111c2576101008083540402835291602001916111ed565b820191906000526020600020905b8154815290600101906020018083116111d057829003601f168201915b5050505050815250509050806020015160ff1660001415801561122e57508151801561121b5761121b61183b565b8151801561122b5761122b61183b565b14155b1561124c57604051634668624160e01b815260040160405180910390fd5b63ffffffff83166000908152609c602052604090208251815484929190829060ff191660018380156112805761128061183b565b02179055506020820151815460ff9091166101000261ff0019909116178155604082015160018201906112b39082611d62565b50606082015160028201906112c89082611d62565b50608082015160038201906112dd9082611d62565b5060a082015160048201906112f29082611d62565b5060c082015160058201906113079082611d62565b509050507f284764d2874c018791266bae855578fc1f0b07d0b83637b8f8cc5401ac6a35c8838284604051610d5e93929190611ec5565b6060600061134d836002611c17565b611358906002611f00565b67ffffffffffffffff811115611370576113706119f4565b6040519080825280601f01601f19166020018201604052801561139a576020820181803683370190505b509050600360fc1b816000815181106113b5576113b5611f13565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106113e4576113e4611f13565b60200101906001600160f81b031916908160001a9053506000611408846002611c17565b611413906001611f00565b90505b600181111561148b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061144757611447611f13565b1a60f81b82828151811061145d5761145d611f13565b60200101906001600160f81b031916908160001a90535060049490941c9361148481611f29565b9050611416565b5083156114da5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161043a565b9392505050565b6000611536826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115b39092919063ffffffff16565b8051909150156103c957808060200190518101906115549190611f40565b6103c95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161043a565b60606115c284846000856115ca565b949350505050565b60608247101561162b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161043a565b843b6116795760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161043a565b600080866001600160a01b031685876040516116959190611f62565b60006040518083038185875af1925050503d80600081146116d2576040519150601f19603f3d011682016040523d82523d6000602084013e6116d7565b606091505b50915091506116e78282866116f2565b979650505050505050565b606083156117015750816114da565b8251156117115782518084602001fd5b8160405162461bcd60e51b815260040161043a9190611d01565b60006020828403121561173d57600080fd5b81356001600160e01b0319811681146114da57600080fd5b803560ff8116811461176657600080fd5b919050565b60006020828403121561177d57600080fd5b6114da82611755565b803563ffffffff8116811461176657600080fd5b6000602082840312156117ac57600080fd5b6114da82611786565b6000602082840312156117c757600080fd5b5035919050565b80356001600160a01b038116811461176657600080fd5b600080604083850312156117f857600080fd5b82359150611808602084016117ce565b90509250929050565b6000806040838503121561182457600080fd5b61182d83611786565b915061180860208401611755565b634e487b7160e01b600052602160045260246000fd5b6001811061186f57634e487b7160e01b600052602160045260246000fd5b9052565b60005b8381101561188e578181015183820152602001611876565b50506000910152565b600081518084526118af816020860160208601611873565b601f01601f19169290920160200192915050565b6118cd8189611851565b60ff8716602082015260e0604082015260006118ec60e0830188611897565b82810360608401526118fe8188611897565b905082810360808401526119128187611897565b905082810360a08401526119268186611897565b905082810360c084015261193a8185611897565b9a9950505050505050505050565b6000806000806080858703121561195e57600080fd5b611967856117ce565b9350602085013592506040850135915061198360608601611755565b905092959194509250565b6000806000606084860312156119a357600080fd5b6119ac846117ce565b92506119ba602085016117ce565b9150604084013590509250925092565b600080604083850312156119dd57600080fd5b6119e683611786565b9150611808602084016117ce565b634e487b7160e01b600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715611a2d57611a2d6119f4565b60405290565b80356001811061176657600080fd5b600082601f830112611a5357600080fd5b813567ffffffffffffffff80821115611a6e57611a6e6119f4565b604051601f8301601f19908116603f01168101908282118183101715611a9657611a966119f4565b81604052838152866020858801011115611aaf57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215611ae257600080fd5b611aeb83611786565b9150602083013567ffffffffffffffff80821115611b0857600080fd5b9084019060e08287031215611b1c57600080fd5b611b24611a0a565b611b2d83611a33565b8152611b3b60208401611755565b6020820152604083013582811115611b5257600080fd5b611b5e88828601611a42565b604083015250606083013582811115611b7657600080fd5b611b8288828601611a42565b606083015250608083013582811115611b9a57600080fd5b611ba688828601611a42565b60808301525060a083013582811115611bbe57600080fd5b611bca88828601611a42565b60a08301525060c083013582811115611be257600080fd5b611bee88828601611a42565b60c0830152508093505050509250929050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761037057610370611c01565b63ffffffff818116838216019080821115611c4b57611c4b611c01565b5092915050565b600181811c90821680611c6657607f821691505b602082108103611c8657634e487b7160e01b600052602260045260246000fd5b50919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611cc4816017850160208801611873565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611cf5816028840160208801611873565b01602801949350505050565b6020815260006114da6020830184611897565b601f8211156103c957600081815260208120601f850160051c81016020861015611d3b5750805b601f850160051c820191505b81811015611d5a57828155600101611d47565b505050505050565b815167ffffffffffffffff811115611d7c57611d7c6119f4565b611d9081611d8a8454611c52565b84611d14565b602080601f831160018114611dc55760008415611dad5750858301515b600019600386901b1c1916600185901b178555611d5a565b600085815260208120601f198616915b82811015611df457888601518255948401946001909101908401611dd5565b5085821015611e125787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611e2d828251611851565b60ff60208201511660208301526000604082015160e06040850152611e5560e0850182611897565b905060608301518482036060860152611e6e8282611897565b91505060808301518482036080860152611e888282611897565b91505060a083015184820360a0860152611ea28282611897565b91505060c083015184820360c0860152611ebc8282611897565b95945050505050565b63ffffffff84168152606060208201526000611ee46060830185611e22565b8281036040840152611ef68185611e22565b9695505050505050565b8082018082111561037057610370611c01565b634e487b7160e01b600052603260045260246000fd5b600081611f3857611f38611c01565b506000190190565b600060208284031215611f5257600080fd5b815180151581146114da57600080fd5b60008251611f74818460208701611873565b919091019291505056fea26469706673582212200fc655621d5cd8e773d4e9dd6e44d11a9e13a1f8686903f9b2dd5fdf7a34b96164736f6c63430008110033