6080604052600680546001600160a01b0319167333a39af0f83e9d46a055e6eebde3296d26d916f4179055600780547c749270100061c3ca10194cc053324c919f9c0aa0caabc3ac7c15ff63756001600160f01b0319909116179055655af3107a400060088190556200007b90674563918244f40000620001df565b6009805464ffffffffff191664ffffffffff92909216919091179055600c805460ff19166001179055348015620000b157600080fd5b5060405180604001604052806006815260200165506c61736d6160d01b81525060405180604001604052806006815260200165504c41534d4160d01b81525081600090805190602001906200010892919062000139565b5080516200011e90600190602084019062000139565b5050600580546001600160a01b03191633179055506200023f565b828054620001479062000202565b90600052602060002090601f0160209004810192826200016b5760008555620001b6565b82601f106200018657805160ff1916838001178555620001b6565b82800160010185558215620001b6579182015b82811115620001b657825182559160200191906001019062000199565b50620001c4929150620001c8565b5090565b5b80821115620001c45760008155600101620001c9565b600082620001fd57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806200021757607f821691505b602082108114156200023957634e487b7160e01b600052602260045260246000fd5b50919050565b612458806200024f6000396000f3fe608060405234801561001057600080fd5b50600436106102a05760003560e01c8063820aed1911610167578063c071bd3d116100ce578063e520a6e811610087578063e520a6e814610691578063e701fa4f146106a4578063eb0d22be146106b7578063ee0b04be146106c0578063ef3baf6b146106d3578063f2fde38b146106e657600080fd5b8063c071bd3d146105be578063c4fedb141461061c578063c7e6cc3f1461062d578063d363440c14610640578063d5d2f3c214610653578063dd62ed3e1461066657600080fd5b806395d89b411161012057806395d89b41146105575780639b3901351461055f578063a3f0a43a14610572578063a9059cbb14610585578063ba52158014610598578063bfe5c983146105ab57600080fd5b8063820aed19146104e557806382596f01146104f8578063871ff4051461050b578063877e139b1461051e5780638da5cb5b1461053157806394a3b4b91461054457600080fd5b80634dfc50c01161020b57806370a08231116101c457806370a082311461046c578063715018a61461048c578063752fd6101461049457806379cc6790146104a75780637bde17a3146104ba5780637c073ede146104cd57600080fd5b80634dfc50c0146103f5578063518e9e6f14610418578063521c27f21461042b578063632447c91461043e578063649d35fd14610451578063669459931461046457600080fd5b806323b872dd1161025d57806323b872dd14610372578063313ce56714610385578063314ca0391461039f57806335b944bf146103cd57806342966c68146103da57806348c54b9d146103ed57600080fd5b806302b343b1146102a557806306fdde03146102f1578063095ea7b3146103065780630d5fb5a61461032957806318160ddd146103545780631e89d5451461035d575b600080fd5b6102de6102b3366004611e09565b6001600160a01b03166000908152600a6020526040902054600160281b90046001600160b01b031690565b6040519081526020015b60405180910390f35b6102f96106f9565b6040516102e891906120f5565b610319610314366004611ebd565b610787565b60405190151581526020016102e8565b60075461033c906001600160a01b031681565b6040516001600160a01b0390911681526020016102e8565b6102de60025481565b61037061036b36600461201d565b61079d565b005b610319610380366004611e57565b610863565b61038d601281565b60405160ff90911681526020016102e8565b6007546103b790600160c81b900464ffffffffff1681565b60405164ffffffffff90911681526020016102e8565b600c546103199060ff1681565b6103706103e836600461209c565b610969565b610370610976565b610319610403366004611e09565b600b6020526000908152604090205460ff1681565b610370610426366004611ee7565b61098a565b610370610439366004612081565b610b52565b61037061044c366004611e09565b610b8f565b6102de61045f366004611e09565b610b98565b610370610bd5565b6102de61047a366004611e09565b60036020526000908152604090205481565b610370610bde565b6102de6104a2366004611e09565b610c12565b6103706104b5366004611ebd565b610c33565b6103706104c8366004611f95565b610d3c565b6007546103b790600160a01b900464ffffffffff1681565b60065461033c906001600160a01b031681565b610370610506366004611ebd565b610e2c565b610370610519366004611ebd565b610fd0565b61037061052c366004611e09565b6110df565b60055461033c906001600160a01b031681565b610370610552366004611e93565b61112b565b6102f9611180565b61037061056d3660046120ce565b61118d565b6102de610580366004611e09565b6111df565b610319610593366004611ebd565b61122d565b6102de6105a6366004611e09565b6112b7565b6103706105b9366004611f29565b6112f8565b6105f76105cc366004611e09565b600a6020526000908152604090205464ffffffffff811690600160281b90046001600160b01b031682565b6040805164ffffffffff90931683526001600160b01b039091166020830152016102e8565b6009546103b79064ffffffffff1681565b6102de61063b366004611e09565b6113d6565b61037061064e366004611e09565b6113f5565b610370610661366004611e09565b6113fe565b6102de610674366004611e24565b600460209081526000928352604080842090915290825290205481565b61037061069f366004611ee7565b61144a565b6103706106b2366004611ebd565b6114f0565b6102de60085481565b6103706106ce366004611e09565b61152d565b6102de6106e1366004611e09565b61156e565b6103706106f4366004611e09565b611588565b6000805461070690612340565b80601f016020809104026020016040519081016040528092919081815260200182805461073290612340565b801561077f5780601f106107545761010080835404028352916020019161077f565b820191906000526020600020905b81548152906001019060200180831161076257829003601f168201915b505050505081565b6000610794338484611621565b50600192915050565b80518251146108035760405162461bcd60e51b815260206004820152602760248201527f4552433230493a20546f20616e6420416d6f756e7473206c656e677468204d69604482015266736d617463682160c81b60648201526084015b60405180910390fd5b60005b825181101561085e5761084b838281518110610824576108246123d6565b602002602001015183838151811061083e5761083e6123d6565b602002602001015161122d565b50806108568161237b565b915050610806565b505050565b6001600160a01b0383166000908152600460209081526040808320338452909152812054600019146108c8576001600160a01b0384166000908152600460209081526040808320338452909152812080548492906108c2908490612329565b90915550505b6001600160a01b038416600090815260036020526040812080548492906108f0908490612329565b90915550506001600160a01b0383166000908152600360205260408120805484929061091d908490612289565b92505081905550826001600160a01b0316846001600160a01b03166000805160206124038339815191528460405161095791815260200190565b60405180910390a35060019392505050565b6109733382611682565b50565b61097f336116fc565b610988336117fb565b565b6005546001600160a01b031633146109b45760405162461bcd60e51b81526004016107fa9061219d565b60005b8181101561085e57600360008484848181106109d5576109d56123d6565b90506020020160208101906109ea9190611e09565b6001600160a01b0316815260208101919091526040016000205415610a5b5760405162461bcd60e51b815260206004820152602160248201527f54686973206164647265737320616c7265616479206861732062616c616e63656044820152602160f81b60648201526084016107fa565b6007546000906001600160a01b03166370a08231858585818110610a8157610a816123d6565b9050602002016020810190610a969190611e09565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015610ad557600080fd5b505afa158015610ae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0d91906120b5565b9050610b3f848484818110610b2457610b246123d6565b9050602002016020810190610b399190611e09565b826118b6565b5080610b4a8161237b565b9150506109b7565b6005546001600160a01b03163314610b7c5760405162461bcd60e51b81526004016107fa9061219d565b600c805460ff1916911515919091179055565b610973816116fc565b6008546001600160a01b0382166000908152600a60205260408120549091610bcf91600160281b90046001600160b01b03166122b5565b92915050565b61098833611926565b6005546001600160a01b03163314610c085760405162461bcd60e51b81526004016107fa9061219d565b6109886000611aeb565b6000600854610c2083611b3d565b6001600160b01b0316610bcf91906122b5565b6001600160a01b038216600090815260046020908152604080832033845290915290205481811015610ccd5760405162461bcd60e51b815260206004820152603860248201527f4552433230494275726e61626c653a204275726e20616d6f756e74207265717560448201527f6573746564206578636565647320616c6c6f77616e636521000000000000000060648201526084016107fa565b6001600160a01b038316600090815260046020908152604080832033845290915290205460001914610d32576001600160a01b038316600090815260046020908152604080832033845290915281208054849290610d2c908490612329565b90915550505b61085e8383611682565b81518351148015610d4e575080518351145b610db15760405162461bcd60e51b815260206004820152602e60248201527f4552433230493a2046726f6d2c20546f2c20616e6420416d6f756e7473206c6560448201526d6e677468204d69736d617463682160901b60648201526084016107fa565b60005b8351811015610e2657610e13848281518110610dd257610dd26123d6565b6020026020010151848381518110610dec57610dec6123d6565b6020026020010151848481518110610e0657610e066123d6565b6020026020010151610863565b5080610e1e8161237b565b915050610db4565b50505050565b336000908152600b602052604090205460ff16610e5b5760405162461bcd60e51b81526004016107fa906121d2565b600854610e689082612396565b15610e855760405162461bcd60e51b81526004016107fa9061214a565b600060085482610e9591906122a1565b6001600160a01b0384166000908152600a60205260409020549091506001600160b01b03808316600160281b909204161015610f1f5760405162461bcd60e51b8152602060048201526024808201527f4e6f7420656e6f756768206372656469742062616c616e636520746f206465646044820152637563742160e01b60648201526084016107fa565b6001600160a01b0383166000908152600a602052604090208054829190600590610f5a908490600160281b90046001600160b01b0316612301565b92506101000a8154816001600160b01b0302191690836001600160b01b031602179055507f1d9ca186c626e0ca14771900912a91678cb02770905264643d1f0d1cd2fded5e8383604051610fc39291906001600160a01b03929092168252602082015260400190565b60405180910390a1505050565b336000908152600b602052604090205460ff16610fff5760405162461bcd60e51b81526004016107fa906121d2565b60085461100c9082612396565b156110295760405162461bcd60e51b81526004016107fa9061214a565b60006008548261103991906122a1565b6001600160a01b0384166000908152600a6020526040902080549192508291600590611076908490600160281b90046001600160b01b031661225e565b92506101000a8154816001600160b01b0302191690836001600160b01b031602179055507fed46984c46e11f42ec323727ba7d99dc16be2d248a8aaa8982d492688497f09d8383604051610fc39291906001600160a01b03929092168252602082015260400190565b6005546001600160a01b031633146111095760405162461bcd60e51b81526004016107fa9061219d565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111555760405162461bcd60e51b81526004016107fa9061219d565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6001805461070690612340565b6005546001600160a01b031633146111b75760405162461bcd60e51b81526004016107fa9061219d565b6007805464ffffffffff909216600160c81b0264ffffffffff60c81b19909216919091179055565b60006008546111ed83611b3d565b6001600160a01b0384166000908152600a6020526040902054611223916001600160b01b0390811691600160281b900416612289565b610bcf91906122b5565b3360009081526003602052604081208054839190839061124e908490612329565b90915550506001600160a01b0383166000908152600360205260408120805484929061127b908490612289565b90915550506040518281526001600160a01b0384169033906000805160206124038339815191529060200160405180910390a350600192915050565b60006112c282611b3d565b6001600160a01b0383166000908152600a6020526040902054610bcf916001600160b01b0390811691600160281b900416612289565b6005546001600160a01b031633146113225760405162461bcd60e51b81526004016107fa9061219d565b82811461136a5760405162461bcd60e51b81526020600482015260166024820152754172726179206c656e677468206d69736d617463682160501b60448201526064016107fa565b60005b838110156113cf576113bd85858381811061138a5761138a6123d6565b905060200201602081019061139f9190611e09565b8484848181106113b1576113b16123d6565b905060200201356118b6565b806113c78161237b565b91505061136d565b5050505050565b60006008546113e483611bdb565b64ffffffffff16610bcf91906122b5565b61097381611926565b6005546001600160a01b031633146114285760405162461bcd60e51b81526004016107fa9061219d565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146114745760405162461bcd60e51b81526004016107fa9061219d565b60005b8181101561085e5742600a6000858585818110611496576114966123d6565b90506020020160208101906114ab9190611e09565b6001600160a01b031681526020810191909152604001600020805464ffffffffff191664ffffffffff92909216919091179055806114e88161237b565b915050611477565b336000908152600b602052604090205460ff1661151f5760405162461bcd60e51b81526004016107fa906121d2565b6115298282611682565b5050565b336000908152600b602052604090205460ff1661155c5760405162461bcd60e51b81526004016107fa906121d2565b611565816116fc565b610973816117fb565b600061157982611b3d565b6001600160b01b031692915050565b6005546001600160a01b031633146115b25760405162461bcd60e51b81526004016107fa9061219d565b6001600160a01b0381166116185760405162461bcd60e51b815260206004820152602760248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616044820152666464726573732160c81b60648201526084016107fa565b61097381611aeb565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216600090815260036020526040812080548392906116aa908490612329565b9250508190555080600260008282546116c39190612329565b90915550506040518181526000906001600160a01b03841690600080516020612403833981519152906020015b60405180910390a35050565b6000611706611c6e565b6001600160a01b0383166000908152600a602052604090205490915064ffffffffff1680156117995761173883611b3d565b6001600160a01b0384166000908152600a602052604090208054600590611770908490600160281b90046001600160b01b031661225e565b92506101000a8154816001600160b01b0302191690836001600160b01b031602179055506117ad565b600c5460ff16156117ad576117ad83611926565b60075464ffffffffff828116600160c81b909204161461085e576001600160a01b0383166000908152600a60205260409020805464ffffffffff841664ffffffffff19909116179055505050565b6001600160a01b0381166000908152600a6020526040902054600160281b90046001600160b01b03168015611529576001600160a01b0382166000908152600a60205260408120805465010000000000600160d81b031916905560085461186b906001600160b01b0384166122b5565b905061187783826118b6565b604080516001600160a01b0385168152602081018390527f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d49101610fc3565b80600260008282546118c89190612289565b90915550506001600160a01b038216600090815260036020526040812080548392906118f5908490612289565b90915550506040518181526001600160a01b03831690600090600080516020612403833981519152906020016116f0565b600c5460ff166119785760405162461bcd60e51b815260206004820152601960248201527f4d6967726174696f6e206973206e6f7420656e61626c6564210000000000000060448201526064016107fa565b6000611982611c6e565b6001600160a01b0383166000908152600a602052604090205490915064ffffffffff1680156119f35760405162461bcd60e51b815260206004820152601a60248201527f596f75206861766520616c7265616479206d696772617465642100000000000060448201526064016107fa565b6001600160a01b038381166000818152600a6020526040808220805464ffffffffff191664ffffffffff88161790556007549051630174a42b60e71b815260048101939093529092169063ba5215809060240160206040518083038186803b158015611a5e57600080fd5b505afa158015611a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9691906120b5565b90506001600160b01b03811615610e26576001600160a01b0384166000908152600a6020526040902080546001600160b01b038316600160281b0265010000000000600160d81b031990911617905550505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080611b4983611bdb565b64ffffffffff16905080611b605750600092915050565b6000611b6a611c6e565b6001600160a01b0385166000908152600a602052604090205460075464ffffffffff928316935090821691600160a01b90910416811115611bd05762015180611bb38284612329565b611bbd90856122b5565b611bc791906122a1565b95945050505050565b506000949350505050565b6009546006546040516370a0823160e01b81526001600160a01b03848116600483015260009364ffffffffff169216906370a082319060240160206040518083038186803b158015611c2c57600080fd5b505afa158015611c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6491906120b5565b610bcf91906122d4565b6000611c8d42600760199054906101000a900464ffffffffff16611c92565b905090565b60008164ffffffffff168364ffffffffff1610611caf5781611cb1565b825b9392505050565b80356001600160a01b0381168114611ccf57600080fd5b919050565b60008083601f840112611ce657600080fd5b50813567ffffffffffffffff811115611cfe57600080fd5b6020830191508360208260051b8501011115611d1957600080fd5b9250929050565b600082601f830112611d3157600080fd5b81356020611d46611d418361223a565b612209565b80838252828201915082860187848660051b8901011115611d6657600080fd5b60005b85811015611d8c57611d7a82611cb8565b84529284019290840190600101611d69565b5090979650505050505050565b600082601f830112611daa57600080fd5b81356020611dba611d418361223a565b80838252828201915082860187848660051b8901011115611dda57600080fd5b60005b85811015611d8c57813584529284019290840190600101611ddd565b80358015158114611ccf57600080fd5b600060208284031215611e1b57600080fd5b611cb182611cb8565b60008060408385031215611e3757600080fd5b611e4083611cb8565b9150611e4e60208401611cb8565b90509250929050565b600080600060608486031215611e6c57600080fd5b611e7584611cb8565b9250611e8360208501611cb8565b9150604084013590509250925092565b60008060408385031215611ea657600080fd5b611eaf83611cb8565b9150611e4e60208401611df9565b60008060408385031215611ed057600080fd5b611ed983611cb8565b946020939093013593505050565b60008060208385031215611efa57600080fd5b823567ffffffffffffffff811115611f1157600080fd5b611f1d85828601611cd4565b90969095509350505050565b60008060008060408587031215611f3f57600080fd5b843567ffffffffffffffff80821115611f5757600080fd5b611f6388838901611cd4565b90965094506020870135915080821115611f7c57600080fd5b50611f8987828801611cd4565b95989497509550505050565b600080600060608486031215611faa57600080fd5b833567ffffffffffffffff80821115611fc257600080fd5b611fce87838801611d20565b94506020860135915080821115611fe457600080fd5b611ff087838801611d20565b9350604086013591508082111561200657600080fd5b5061201386828701611d99565b9150509250925092565b6000806040838503121561203057600080fd5b823567ffffffffffffffff8082111561204857600080fd5b61205486838701611d20565b9350602085013591508082111561206a57600080fd5b5061207785828601611d99565b9150509250929050565b60006020828403121561209357600080fd5b611cb182611df9565b6000602082840312156120ae57600080fd5b5035919050565b6000602082840312156120c757600080fd5b5051919050565b6000602082840312156120e057600080fd5b813564ffffffffff81168114611cb157600080fd5b600060208083528351808285015260005b8181101561212257858101830151858201604001528201612106565b81811115612134576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526033908201527f416d6f756e7420646f6573206e6f7420636f6e666f726d20746f20476c6f62616040820152726c204d6f64756c7573207374616e646172642160681b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526019908201527f596f7520617265206e6f74206120636f6e74726f6c6c65722100000000000000604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612232576122326123ec565b604052919050565b600067ffffffffffffffff821115612254576122546123ec565b5060051b60200190565b60006001600160b01b03828116848216808303821115612280576122806123aa565b01949350505050565b6000821982111561229c5761229c6123aa565b500190565b6000826122b0576122b06123c0565b500490565b60008160001904831182151516156122cf576122cf6123aa565b500290565b600064ffffffffff808316818516818304811182151516156122f8576122f86123aa565b02949350505050565b60006001600160b01b0383811690831681811015612321576123216123aa565b039392505050565b60008282101561233b5761233b6123aa565b500390565b600181811c9082168061235457607f821691505b6020821081141561237557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561238f5761238f6123aa565b5060010190565b6000826123a5576123a56123c0565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212209975d0aecd1056c723e33eaea59adc4081142b59d2a7c01bd0df039e9176a68b64736f6c63430008070033