60806040526102d1600c55611b58600d556010805462ffffff191690553480156200002957600080fd5b506040518060600160405280602281526020016200258b602291396040518060400160405280600381526020016204e4c560ec1b8152508160029080519060200190620000789291906200013b565b5080516200008e9060039060208401906200013b565b5050600160005550620000a133620000e9565b6008805460ff60a01b19169055600160095560408051606081019091526023808252620025ad60208301398051620000e291600b916020909101906200013b565b506200021e565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200014990620001e1565b90600052602060002090601f0160209004810192826200016d5760008555620001b8565b82601f106200018857805160ff1916838001178555620001b8565b82800160010185558215620001b8579182015b82811115620001b85782518255916020019190600101906200019b565b50620001c6929150620001ca565b5090565b5b80821115620001c65760008155600101620001cb565b600181811c90821680620001f657607f821691505b602082108114156200021857634e487b7160e01b600052602260045260246000fd5b50919050565b61235d806200022e6000396000f3fe60806040526004361061025c5760003560e01c806366ac2efd11610144578063a98bbc5a116100b6578063d52c57e01161007a578063d52c57e01461069f578063de00772f146106bf578063e985e9c5146106d5578063eff31e9e1461071e578063f2fde38b14610734578063f4f9e0a21461075457600080fd5b8063a98bbc5a1461060c578063b61ff93c1461061f578063b67c25a31461063f578063b88d4fde1461065f578063c87b56dd1461067f57600080fd5b80638456cb59116101085780638456cb59146105645780638895283f146105795780638da5cb5b1461059957806394742bba146105b757806395d89b41146105d7578063a22cb465146105ec57600080fd5b806366ac2efd146104d457806370a08231146104f0578063715018a6146105105780637be1ef79146105255780637cb647591461054457600080fd5b80633ccfd60b116101dd5780634c81433f116101a15780634c81433f1461042957806353135ca01461043f57806355f804b3146104595780635c975abb1461047957806362dc6e21146104985780636352211e146104b457600080fd5b80633ccfd60b146103b55780633ed6a604146103ca5780633f4ba83a146103df57806342842e0e146103f4578063495906571461041457600080fd5b8063136f3cfc11610224578063136f3cfc1461033c57806318160ddd14610352578063189f68571461036f57806323b872dd146103825780632db11544146103a257600080fd5b806301ffc9a71461026157806306fdde031461029657806307e89ec0146102b8578063081812fc146102e2578063095ea7b31461031a575b600080fd5b34801561026d57600080fd5b5061028161027c366004611c74565b610774565b60405190151581526020015b60405180910390f35b3480156102a257600080fd5b506102ab6107c6565b60405161028d9190611ce9565b3480156102c457600080fd5b506102d4670429d069189e000081565b60405190815260200161028d565b3480156102ee57600080fd5b506103026102fd366004611cfc565b610858565b6040516001600160a01b03909116815260200161028d565b34801561032657600080fd5b5061033a610335366004611d31565b61089c565b005b34801561034857600080fd5b506102d4600d5481565b34801561035e57600080fd5b5060015460005403600019016102d4565b61033a61037d366004611e22565b61093c565b34801561038e57600080fd5b5061033a61039d366004611e79565b610c19565b61033a6103b0366004611cfc565b610daa565b3480156103c157600080fd5b5061033a610eb4565b3480156103d657600080fd5b506102d4600381565b3480156103eb57600080fd5b5061033a610ff6565b34801561040057600080fd5b5061033a61040f366004611e79565b611008565b34801561042057600080fd5b506102d4611028565b34801561043557600080fd5b506102d4600f5481565b34801561044b57600080fd5b506010546102819060ff1681565b34801561046557600080fd5b5061033a610474366004611eb5565b611039565b34801561048557600080fd5b50600854600160a01b900460ff16610281565b3480156104a457600080fd5b506102d46702636c09c5d8400081565b3480156104c057600080fd5b506103026104cf366004611cfc565b61104d565b3480156104e057600080fd5b506102d4670214e8348c4f000081565b3480156104fc57600080fd5b506102d461050b366004611f27565b611058565b34801561051c57600080fd5b5061033a6110a7565b34801561053157600080fd5b5060105461028190610100900460ff1681565b34801561055057600080fd5b5061033a61055f366004611cfc565b6110b9565b34801561057057600080fd5b5061033a6110c6565b34801561058557600080fd5b5061033a610594366004611f52565b6110d6565b3480156105a557600080fd5b506008546001600160a01b0316610302565b3480156105c357600080fd5b506102816105d2366004611f27565b6110f1565b3480156105e357600080fd5b506102ab611104565b3480156105f857600080fd5b5061033a610607366004611f6d565b611113565b61033a61061a366004611fa0565b6111a9565b34801561062b57600080fd5b5061033a61063a366004611f52565b611423565b34801561064b57600080fd5b506010546102819062010000900460ff1681565b34801561066b57600080fd5b5061033a61067a366004611fe7565b611447565b34801561068b57600080fd5b506102ab61069a366004611cfc565b611491565b3480156106ab57600080fd5b5061033a6106ba3660046120a7565b611516565b3480156106cb57600080fd5b506102d4600e5481565b3480156106e157600080fd5b506102816106f03660046120ca565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561072a57600080fd5b506102d4600c5481565b34801561074057600080fd5b5061033a61074f366004611f27565b6115a7565b34801561076057600080fd5b5061033a61076f366004611f52565b611620565b60006301ffc9a760e01b6001600160e01b0319831614806107a557506380ac58cd60e01b6001600160e01b03198316145b806107c05750635b5e139f60e01b6001600160e01b03198316145b92915050565b6060600280546107d5906120f4565b80601f0160208091040260200160405190810160405280929190818152602001828054610801906120f4565b801561084e5780601f106108235761010080835404028352916020019161084e565b820191906000526020600020905b81548152906001019060200180831161083157829003601f168201915b5050505050905090565b600061086382611642565b610880576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006108a78261104d565b9050336001600160a01b038216146108e0576108c381336106f0565b6108e0576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b610944611677565b32331461096c5760405162461bcd60e51b81526004016109639061212f565b60405180910390fd5b601054610100900460ff166109c35760405162461bcd60e51b815260206004820152601a60248201527f526566657272616c4d696e74206973206e6f74206163746976650000000000006044820152606401610963565b60006109ce836116c4565b11610a1b5760405162461bcd60e51b815260206004820152601b60248201527f5265666572726572206163636f756e74206e6f74206d696e74656400000000006044820152606401610963565b6040516bffffffffffffffffffffffff19606084901b166020820152600090603401604051602081830303815290604052805190602001209050610a6282600a54836116ed565b610ab85760405162461bcd60e51b815260206004820152602160248201527f52656665727265722061646472657373206e6f7420696e2077686974656c69736044820152601d60fa1b6064820152608401610963565b6000610ac3336116c4565b610ace90600361217a565b905080851115610af05760405162461bcd60e51b815260040161096390612191565b6001851015610b415760405162461bcd60e51b815260206004820152601e60248201527f5175616e746974792073686f756c64206e6f206c657373207468616e203100006044820152606401610963565b600d5485600e54610b5291906121d3565b1115610b705760405162461bcd60e51b8152600401610963906121eb565b6000610b846702636c09c5d8400087612222565b905080341015610ba65760405162461bcd60e51b815260040161096390612241565b85600e6000828254610bb891906121d3565b90915550610bc890503387611703565b604080513381526001600160a01b03871660208201529081018790527fdf8d29f7cc726f1505839f28315c9c3499f31d0269904e9e62cc8f25df135b1a9060600160405180910390a1505050505050565b6000610c24826117fa565b9050836001600160a01b0316816001600160a01b031614610c575760405162a1148160e81b815260040160405180910390fd5b60008281526006602052604090208054338082146001600160a01b03881690911417610ca457610c8786336106f0565b610ca457604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610ccb57604051633a954ecd60e21b815260040160405180910390fd5b8015610cd657600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040902055600160e11b8316610d615760018401600081815260046020526040902054610d5f576000548114610d5f5760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b610db2611677565b323314610dd15760405162461bcd60e51b81526004016109639061212f565b60105462010000900460ff16610e295760405162461bcd60e51b815260206004820152601860248201527f5075626c69634d696e74206973206e6f742061637469766500000000000000006044820152606401610963565b600d5481600e54610e3a91906121d3565b1115610e585760405162461bcd60e51b8152600401610963906121eb565b6000610e6c670429d069189e000083612222565b905080341015610e8e5760405162461bcd60e51b815260040161096390612241565b81600e6000828254610ea091906121d3565b90915550610eb090503383611703565b5050565b610ebc611863565b60026009541415610f0f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610963565b60026009554780610f625760405162461bcd60e51b815260206004820152601960248201527f4e6f206574686572206c65667420746f207769746864726177000000000000006044820152606401610963565b604051600090339083908381818185875af1925050503d8060008114610fa4576040519150601f19603f3d011682016040523d82523d6000602084013e610fa9565b606091505b5050905080610fed5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610963565b50506001600955565b610ffe611863565b6110066118bd565b565b61102383838360405180602001604052806000815250611447565b505050565b6000611032611863565b50600a5490565b611041611863565b611023600b8383611bc5565b60006107c0826117fa565b60006001600160a01b038216611081576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6110af611863565b6110066000611912565b6110c1611863565b600a55565b6110ce611863565b611006611964565b6110de611863565b6010805460ff1916911515919091179055565b6000806110fd836116c4565b1192915050565b6060600380546107d5906120f4565b6001600160a01b03821633141561113d5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6111b1611677565b3233146111d05760405162461bcd60e51b81526004016109639061212f565b60105460ff1661121a5760405162461bcd60e51b815260206004820152601560248201527450726573616c65206973206e6f742061637469766560581b6044820152606401610963565b6040516bffffffffffffffffffffffff193360601b16602082015260009060340160405160208183030381529060405280519060200120905061126082600a54836116ed565b6112c05760405162461bcd60e51b815260206004820152602b60248201527f5468652063757272656e742061646472657373206973206e6f7420696e20746860448201526a19481dda1a5d195b1a5cdd60aa1b6064820152608401610963565b60006112cb336116c4565b6112d690600361217a565b9050808411156112f85760405162461bcd60e51b815260040161096390612191565b60018410156113495760405162461bcd60e51b815260206004820152601e60248201527f5175616e746974792073686f756c64206e6f206c657373207468616e203100006044820152606401610963565b600d5484600e5461135a91906121d3565b11156113785760405162461bcd60e51b8152600401610963906121eb565b600060018211156113c557670214e8348c4f000061139760018761217a565b6113a19190612222565b6113b46702636c09c5d840006001612222565b6113be91906121d3565b90506113da565b6113d76702636c09c5d8400086612222565b90505b803410156113fa5760405162461bcd60e51b815260040161096390612241565b84600e600082825461140c91906121d3565b9091555061141c90503386611703565b5050505050565b61142b611863565b60108054911515620100000262ff000019909216919091179055565b611452848484610c19565b6001600160a01b0383163b1561148b5761146e848484846119a7565b61148b576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b606061149c82611642565b6114b957604051630a14c4b560e41b815260040160405180910390fd5b60006114c3611a9e565b90508051600014156114e4576040518060200160405280600081525061150f565b806114ee84611aad565b6040516020016114ff92919061226d565b6040516020818303038152906040525b9392505050565b61151e611677565b611526611863565b600c5482600f5461153791906121d3565b11156115855760405162461bcd60e51b815260206004820152601f60248201527f4578636565646564206d6178696d756d207265736572766520737570706c79006044820152606401610963565b81600f600082825461159791906121d3565b90915550610eb090508183611703565b6115af611863565b6001600160a01b0381166116145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610963565b61161d81611912565b50565b611628611863565b601080549115156101000261ff0019909216919091179055565b600081600111158015611656575060005482105b80156107c0575050600090815260046020526040902054600160e01b161590565b600854600160a01b900460ff16156110065760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610963565b6001600160a01b03166000908152600560205260409081902054901c67ffffffffffffffff1690565b6000826116fa8584611afc565b14949350505050565b600054816117245760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b8181146117d357808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460010161179b565b50816117f157604051622e076360e81b815260040160405180910390fd5b60005550505050565b6000818060011161184a5760005481101561184a57600081815260046020526040902054600160e01b8116611848575b8061150f57506000190160008181526004602052604090205461182a565b505b604051636f96cda160e11b815260040160405180910390fd5b6008546001600160a01b031633146110065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610963565b6118c5611b49565b6008805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61196c611677565b6008805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118f53390565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906119dc90339089908890889060040161229c565b602060405180830381600087803b1580156119f657600080fd5b505af1925050508015611a26575060408051601f3d908101601f19168201909252611a23918101906122d9565b60015b611a81573d808015611a54576040519150601f19603f3d011682016040523d82523d6000602084013e611a59565b606091505b508051611a79576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6060600b80546107d5906120f4565b604080516080810191829052607f0190826030600a8206018353600a90045b8015611aea57600183039250600a81066030018353600a9004611acc565b50819003601f19909101908152919050565b600081815b8451811015611b4157611b2d82868381518110611b2057611b206122f6565b6020026020010151611b99565b915080611b398161230c565b915050611b01565b509392505050565b600854600160a01b900460ff166110065760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610963565b6000818310611bb557600082815260208490526040902061150f565b5060009182526020526040902090565b828054611bd1906120f4565b90600052602060002090601f016020900481019282611bf35760008555611c39565b82601f10611c0c5782800160ff19823516178555611c39565b82800160010185558215611c39579182015b82811115611c39578235825591602001919060010190611c1e565b50611c45929150611c49565b5090565b5b80821115611c455760008155600101611c4a565b6001600160e01b03198116811461161d57600080fd5b600060208284031215611c8657600080fd5b813561150f81611c5e565b60005b83811015611cac578181015183820152602001611c94565b8381111561148b5750506000910152565b60008151808452611cd5816020860160208601611c91565b601f01601f19169290920160200192915050565b60208152600061150f6020830184611cbd565b600060208284031215611d0e57600080fd5b5035919050565b80356001600160a01b0381168114611d2c57600080fd5b919050565b60008060408385031215611d4457600080fd5b611d4d83611d15565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d9a57611d9a611d5b565b604052919050565b600082601f830112611db357600080fd5b8135602067ffffffffffffffff821115611dcf57611dcf611d5b565b8160051b611dde828201611d71565b9283528481018201928281019087851115611df857600080fd5b83870192505b84831015611e1757823582529183019190830190611dfe565b979650505050505050565b600080600060608486031215611e3757600080fd5b83359250611e4760208501611d15565b9150604084013567ffffffffffffffff811115611e6357600080fd5b611e6f86828701611da2565b9150509250925092565b600080600060608486031215611e8e57600080fd5b611e9784611d15565b9250611ea560208501611d15565b9150604084013590509250925092565b60008060208385031215611ec857600080fd5b823567ffffffffffffffff80821115611ee057600080fd5b818501915085601f830112611ef457600080fd5b813581811115611f0357600080fd5b866020828501011115611f1557600080fd5b60209290920196919550909350505050565b600060208284031215611f3957600080fd5b61150f82611d15565b80358015158114611d2c57600080fd5b600060208284031215611f6457600080fd5b61150f82611f42565b60008060408385031215611f8057600080fd5b611f8983611d15565b9150611f9760208401611f42565b90509250929050565b60008060408385031215611fb357600080fd5b82359150602083013567ffffffffffffffff811115611fd157600080fd5b611fdd85828601611da2565b9150509250929050565b60008060008060808587031215611ffd57600080fd5b61200685611d15565b93506020612015818701611d15565b935060408601359250606086013567ffffffffffffffff8082111561203957600080fd5b818801915088601f83011261204d57600080fd5b81358181111561205f5761205f611d5b565b612071601f8201601f19168501611d71565b9150808252898482850101111561208757600080fd5b808484018584013760008482840101525080935050505092959194509250565b600080604083850312156120ba57600080fd5b82359150611f9760208401611d15565b600080604083850312156120dd57600080fd5b6120e683611d15565b9150611f9760208401611d15565b600181811c9082168061210857607f821691505b6020821081141561212957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f436f6e7472616374206973206e6f7420616c6c6f77656420746f206d696e742e604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008282101561218c5761218c612164565b500390565b60208082526022908201527f4578636565646564206d6178696d756d206d696e747320706572206164647265604082015261737360f01b606082015260800190565b600082198211156121e6576121e6612164565b500190565b6020808252601c908201527f4578636565646564206d6178696d756d2073616c6520737570706c7900000000604082015260600190565b600081600019048311821515161561223c5761223c612164565b500290565b60208082526012908201527124b739bab33334b1b4b2b73a1032ba3432b960711b604082015260600190565b6000835161227f818460208801611c91565b835190830190612293818360208801611c91565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906122cf90830184611cbd565b9695505050505050565b6000602082840312156122eb57600080fd5b815161150f81611c5e565b634e487b7160e01b600052603260045260246000fd5b600060001982141561232057612320612164565b506001019056fea26469706673582212208121901c994179589572500e9b04923de2ddb32cbda555d21845f1563ae8f50864736f6c634300080900334379626572446567656e73202d204e4654457965204c69666574696d65205061737368747470733a2f2f6170692e6e66746579652e696f2f6170692f6e6c705f6d6574612f