60806040523480156200001157600080fd5b5060405162001eb438038062001eb483398101604081905262000034916200012b565b6040518060400160405280600881526020016716505653c813919560c21b815250604051806040016040528060048152602001635941594f60e01b815250816000908162000083919062000202565b50600162000092828262000202565b505050620000af620000a9620000d560201b60201c565b620000d9565b600880546001600160a01b0319166001600160a01b0392909216919091179055620002ce565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200013e57600080fd5b81516001600160a01b03811681146200015657600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200018857607f821691505b602082108103620001a957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001fd57600081815260208120601f850160051c81016020861015620001d85750805b601f850160051c820191505b81811015620001f957828155600101620001e4565b5050505b505050565b81516001600160401b038111156200021e576200021e6200015d565b62000236816200022f845462000173565b84620001af565b602080601f8311600181146200026e5760008415620002555750858301515b600019600386901b1c1916600185901b178555620001f9565b600085815260208120601f198616915b828110156200029f578886015182559484019460019091019084016200027e565b5085821015620002be5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611bd680620002de6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a0823111610104578063b88d4fde116100a2578063e0b6bb6711610071578063e0b6bb67146103dd578063e985e9c5146103e5578063f2fde38b14610421578063fca3b5aa1461043457600080fd5b8063b88d4fde1461038f578063c87b56dd146103a2578063cc54cce3146103b5578063df3c3a30146103c957600080fd5b80638da5cb5b116100de5780638da5cb5b1461034357806395d89b4114610354578063a22cb4651461035c578063ac936d4a1461036f57600080fd5b806370a0823114610312578063715018a61461033357806376daebe11461033b57600080fd5b806342842e0e1161017157806355f804b31161014b57806355f804b3146102d05780635d148e5c146102e35780636352211e146102f75780636e34a4821461030a57600080fd5b806342842e0e1461028a5780634f558e791461029d57806353df5c7c146102c857600080fd5b8063095ea7b3116101ad578063095ea7b31461023c5780631defbba91461025157806323b872dd1461026457806340c10f191461027757600080fd5b806301ffc9a7146101d457806306fdde03146101fc578063081812fc14610211575b600080fd5b6101e76101e23660046114f0565b610447565b60405190151581526020015b60405180910390f35b610204610499565b6040516101f3919061155a565b61022461021f36600461156d565b61052b565b6040516001600160a01b0390911681526020016101f3565b61024f61024a36600461159d565b610552565b005b600854610224906001600160a01b031681565b61024f6102723660046115c7565b61066c565b61024f61028536600461159d565b61069d565b61024f6102983660046115c7565b610701565b6101e76102ab36600461156d565b6000908152600260205260409020546001600160a01b0316151590565b61024f61071c565b61024f6102de3660046116a2565b610739565b6008546101e790600160b01b900460ff1681565b61022461030536600461156d565b610778565b6102046107d8565b6103256103203660046116eb565b610866565b6040519081526020016101f3565b61024f6108ec565b61024f610900565b6006546001600160a01b0316610224565b61020461091d565b61024f61036a366004611706565b61092c565b61038261037d366004611742565b610937565b6040516101f391906117e8565b61024f61039d36600461182e565b610a13565b6102046103b036600461156d565b610a4b565b6008546101e790600160a81b900460ff1681565b6008546101e790600160a01b900460ff1681565b61024f610b4f565b6101e76103f33660046118aa565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61024f61042f3660046116eb565b610b6c565b61024f6104423660046116eb565b610be5565b60006001600160e01b031982166380ac58cd60e01b148061047857506001600160e01b03198216635b5e139f60e01b145b8061049357506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546104a8906118dd565b80601f01602080910402602001604051908101604052809291908181526020018280546104d4906118dd565b80156105215780601f106104f657610100808354040283529160200191610521565b820191906000526020600020905b81548152906001019060200180831161050457829003601f168201915b5050505050905090565b600061053682610c3a565b506000908152600460205260409020546001600160a01b031690565b600061055d82610778565b9050806001600160a01b0316836001600160a01b0316036105cf5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806105eb57506105eb81336103f3565b61065d5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016105c6565b6106678383610c99565b505050565b6106763382610d07565b6106925760405162461bcd60e51b81526004016105c690611917565b610667838383610d86565b6008546001600160a01b031633146106c85760405163469d9d3360e01b815260040160405180910390fd5b600854600160a01b900460ff16156106f3576040516333b9b83d60e21b815260040160405180910390fd5b6106fd8282610eea565b5050565b61066783838360405180602001604052806000815250610a13565b610724610f04565b6008805460ff60b01b1916600160b01b179055565b610741610f04565b600854600160b01b900460ff161561076c57604051632a6c544d60e01b815260040160405180910390fd5b60076106fd82826119b2565b6000818152600260205260408120546001600160a01b0316806104935760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016105c6565b600780546107e5906118dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610811906118dd565b801561085e5780601f106108335761010080835404028352916020019161085e565b820191906000526020600020905b81548152906001019060200180831161084157829003601f168201915b505050505081565b60006001600160a01b0382166108d05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016105c6565b506001600160a01b031660009081526003602052604090205490565b6108f4610f04565b6108fe6000610f5e565b565b610908610f04565b6008805460ff60a81b1916600160a81b179055565b6060600180546104a8906118dd565b6106fd338383610fb0565b80516060908067ffffffffffffffff81111561095557610955611603565b60405190808252806020026020018201604052801561097e578160200160208202803683370190505b50915060005b81811015610a0c5760006001600160a01b03166109cf8583815181106109ac576109ac611a72565b60200260200101516000908152600260205260409020546001600160a01b031690565b6001600160a01b031614158382815181106109ec576109ec611a72565b91151560209283029190910190910152610a0581611a88565b9050610984565b5050919050565b610a1d3383610d07565b610a395760405162461bcd60e51b81526004016105c690611917565b610a458484848461107e565b50505050565b6000818152600260205260409020546060906001600160a01b0316610a8357604051634b78a82560e11b815260040160405180910390fd5b60078054610a90906118dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610abc906118dd565b8015610b095780601f10610ade57610100808354040283529160200191610b09565b820191906000526020600020905b815481529060010190602001808311610aec57829003601f168201915b505050505090508051600014610b4a57610493604051806040016040528060048152602001637b69647d60e01b815250610b42846110b1565b8391906110f5565b919050565b610b57610f04565b6008805460ff60a01b1916600160a01b179055565b610b74610f04565b6001600160a01b038116610bd95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105c6565b610be281610f5e565b50565b610bed610f04565b600854600160a81b900460ff1615610c1857604051639aa08d2760e01b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600260205260409020546001600160a01b0316610be25760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016105c6565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610cce82610778565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610d1383610778565b9050806001600160a01b0316846001600160a01b03161480610d5a57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80610d7e5750836001600160a01b0316610d738461052b565b6001600160a01b0316145b949350505050565b826001600160a01b0316610d9982610778565b6001600160a01b031614610dbf5760405162461bcd60e51b81526004016105c690611aaf565b6001600160a01b038216610e215760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016105c6565b826001600160a01b0316610e3482610778565b6001600160a01b031614610e5a5760405162461bcd60e51b81526004016105c690611aaf565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6106fd82826040518060200160405280600081525061121b565b6006546001600160a01b031633146108fe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105c6565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316036110115760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105c6565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611089848484610d86565b6110958484848461124e565b610a455760405162461bcd60e51b81526004016105c690611af4565b60606080604051019050602081016040526000815280600019835b928101926030600a8206018453600a9004806110cc575050819003601f19909101908152919050565b606083518351835160208701965060208601955060208501945060206040510193508287018383116111c75760018382030160006020851061113657508388205b601f851660200360031b89515b8b51818118831c6111ae57831561117d5783888e201461117d57808a5260019c8d019c90990198848d1061117757506111c2565b50611143565b60005b8b8101518b82015260200187811061118057509b87019b9886019887156111ae57848d1061117757506111c2565b895260019b8c019b90980197838c10611143575b505050505b84935060206040510194508781038585030192505b808810156111f75787518452602097880197909301926111dc565b50506000818401908152601f01601f19908116604052909201918252509392505050565b611225838361134f565b611232600084848461124e565b6106675760405162461bcd60e51b81526004016105c690611af4565b60006001600160a01b0384163b1561134457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611292903390899088908890600401611b46565b6020604051808303816000875af19250505080156112cd575060408051601f3d908101601f191682019092526112ca91810190611b83565b60015b61132a573d8080156112fb576040519150601f19603f3d011682016040523d82523d6000602084013e611300565b606091505b5080516000036113225760405162461bcd60e51b81526004016105c690611af4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610d7e565b506001949350505050565b6001600160a01b0382166113a55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105c6565b6000818152600260205260409020546001600160a01b03161561140a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105c6565b6000818152600260205260409020546001600160a01b03161561146f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105c6565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b031981168114610be257600080fd5b60006020828403121561150257600080fd5b813561150d816114da565b9392505050565b6000815180845260005b8181101561153a5760208185018101518683018201520161151e565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061150d6020830184611514565b60006020828403121561157f57600080fd5b5035919050565b80356001600160a01b0381168114610b4a57600080fd5b600080604083850312156115b057600080fd5b6115b983611586565b946020939093013593505050565b6000806000606084860312156115dc57600080fd5b6115e584611586565b92506115f360208501611586565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561164257611642611603565b604052919050565b600067ffffffffffffffff83111561166457611664611603565b611677601f8401601f1916602001611619565b905082815283838301111561168b57600080fd5b828260208301376000602084830101529392505050565b6000602082840312156116b457600080fd5b813567ffffffffffffffff8111156116cb57600080fd5b8201601f810184136116dc57600080fd5b610d7e8482356020840161164a565b6000602082840312156116fd57600080fd5b61150d82611586565b6000806040838503121561171957600080fd5b61172283611586565b91506020830135801515811461173757600080fd5b809150509250929050565b6000602080838503121561175557600080fd5b823567ffffffffffffffff8082111561176d57600080fd5b818501915085601f83011261178157600080fd5b81358181111561179357611793611603565b8060051b91506117a4848301611619565b81815291830184019184810190888411156117be57600080fd5b938501935b838510156117dc578435825293850193908501906117c3565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611822578351151583529284019291840191600101611804565b50909695505050505050565b6000806000806080858703121561184457600080fd5b61184d85611586565b935061185b60208601611586565b925060408501359150606085013567ffffffffffffffff81111561187e57600080fd5b8501601f8101871361188f57600080fd5b61189e8782356020840161164a565b91505092959194509250565b600080604083850312156118bd57600080fd5b6118c683611586565b91506118d460208401611586565b90509250929050565b600181811c908216806118f157607f821691505b60208210810361191157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b601f82111561066757600081815260208120601f850160051c8101602086101561198b5750805b601f850160051c820191505b818110156119aa57828155600101611997565b505050505050565b815167ffffffffffffffff8111156119cc576119cc611603565b6119e0816119da84546118dd565b84611964565b602080601f831160018114611a1557600084156119fd5750858301515b600019600386901b1c1916600185901b1785556119aa565b600085815260208120601f198616915b82811015611a4457888601518255948401946001909101908401611a25565b5085821015611a625787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b600060018201611aa857634e487b7160e01b600052601160045260246000fd5b5060010190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611b7990830184611514565b9695505050505050565b600060208284031215611b9557600080fd5b815161150d816114da56fea26469706673582212205a7ef4efb033d80df6aa2d800c156d2588f2ba11e9662eb04c9c0c2a9d8e0aac64736f6c634300081300330000000000000000000000000000000000000000000000000000000000000000