60806040526200001b683635c9adc5dea00000600019620002cf565b6200002990600019620002a9565b600955600a600c819055600f600d819055600e82905580805560108290556011819055601291909155601355601480546001600160a01b031990811673cdc7021bf2963db65c7551514ee749eaa57c59f7179091556015805490911673801c0ff56dda58c741505e38f665803b272dcf0d1790556017805462ffffff60a01b1916600160a81b179055681b1ae4d6e2ef50000060188190556019819055601a55348015620000d657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506009543360009081526002602090815260408083209390935581546001600160a01b03908116835260059091528282208054600160ff1991821681179092553084528484208054821683179055601454831684528484208054821683179055601554831684529383208054909416179092555462000199911660016200021f565b620001a63060016200021f565b601454620001bf906001600160a01b031660016200021f565b601554620001d8906001600160a01b031660016200021f565b604051683635c9adc5dea00000815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3620002f2565b6000546001600160a01b031633146200027e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600082821015620002ca57634e487b7160e01b600052601160045260246000fd5b500390565b600082620002ed57634e487b7160e01b600052601260045260246000fd5b500690565b6129c480620003026000396000f3fe60806040526004361061021c5760003560e01c806370a0823111610123578063bbc0c742116100ab578063ea1644d51161006f578063ea1644d5146106a8578063ea2f0b37146106c8578063ec28438a146106e8578063f2fde38b14610708578063f42938901461072857600080fd5b8063bbc0c742146105d1578063bfd79284146105f2578063dbf32ed414610622578063dd62ed3e14610642578063e755d0cf1461068857600080fd5b80638f9a55c0116100f25780638f9a55c01461052e57806395d89b411461054457806398a5c31514610571578063a2a957bb14610591578063a9059cbb146105b157600080fd5b806370a08231146104ba5780637d1db4a5146104da5780637d72b1bf146104f05780638da5cb5b1461051057600080fd5b80632fd689e3116101a657806351bc3c851161017557806351bc3c8514610415578063563912bd1461042a578063595cc84f1461045a578063672434821461047a5780636b9990531461049a57600080fd5b80632fd689e3146103a3578063313ce567146103b9578063437823ec146103d557806349bd5a5e146103f557600080fd5b8063095ea7b3116101ed578063095ea7b3146102ed5780631694505e1461031d57806318160ddd1461033d57806323b872dd1461036357806327334a081461038357600080fd5b806286803414610228578062b8cf2a1461026557806305f82a451461028757806306fdde03146102a757600080fd5b3661022357005b600080fd5b34801561023457600080fd5b50601554610248906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561027157600080fd5b506102856102803660046125d4565b61073d565b005b34801561029357600080fd5b506102856102a23660046124c1565b6107dc565b3480156102b357600080fd5b50604080518082019091526014815273109bdc9959105c19565858da1d10d85c1a5d185b60621b60208201525b60405161025c919061271e565b3480156102f957600080fd5b5061030d6103083660046125a8565b61099f565b604051901515815260200161025c565b34801561032957600080fd5b50601654610248906001600160a01b031681565b34801561034957600080fd5b50683635c9adc5dea000005b60405190815260200161025c565b34801561036f57600080fd5b5061030d61037e366004612534565b6109b6565b34801561038f57600080fd5b5061028561039e3660046124c1565b610a1f565b3480156103af57600080fd5b50610355601a5481565b3480156103c557600080fd5b506040516009815260200161025c565b3480156103e157600080fd5b506102856103f03660046124c1565b610c0d565b34801561040157600080fd5b50601754610248906001600160a01b031681565b34801561042157600080fd5b50610285610c92565b34801561043657600080fd5b5061030d6104453660046124c1565b60066020526000908152604090205460ff1681565b34801561046657600080fd5b50610285610475366004612575565b610ccb565b34801561048657600080fd5b5061030d610495366004612611565b610d20565b3480156104a657600080fd5b506102856104b53660046124c1565b611088565b3480156104c657600080fd5b506103556104d53660046124c1565b6110d3565b3480156104e657600080fd5b5061035560185481565b3480156104fc57600080fd5b50601454610248906001600160a01b031681565b34801561051c57600080fd5b506000546001600160a01b0316610248565b34801561053a57600080fd5b5061035560195481565b34801561055057600080fd5b506040805180820190915260048152634241594360e01b60208201526102e0565b34801561057d57600080fd5b5061028561058c3660046126d3565b6110f5565b34801561059d57600080fd5b506102856105ac3660046126ec565b611124565b3480156105bd57600080fd5b5061030d6105cc3660046125a8565b611222565b3480156105dd57600080fd5b5060175461030d90600160b01b900460ff1681565b3480156105fe57600080fd5b5061030d61060d3660046124c1565b600b6020526000908152604090205460ff1681565b34801561062e57600080fd5b5061028561063d3660046124c1565b61122f565b34801561064e57600080fd5b5061035561065d3660046124fb565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561069457600080fd5b506102856106a33660046124c1565b611321565b3480156106b457600080fd5b506102856106c33660046126d3565b611413565b3480156106d457600080fd5b506102856106e33660046124c1565b611442565b3480156106f457600080fd5b506102856107033660046126d3565b6114bd565b34801561071457600080fd5b506102856107233660046124c1565b6114ec565b34801561073457600080fd5b506102856115d6565b6000546001600160a01b031633146107705760405162461bcd60e51b815260040161076790612773565b60405180910390fd5b60005b81518110156107d8576001600b600084848151811061079457610794612925565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806107d0816128de565b915050610773565b5050565b6000546001600160a01b031633146108065760405162461bcd60e51b815260040161076790612773565b6001600160a01b03811660009081526007602052604090205460ff1661087e5760405162461bcd60e51b815260206004820152602760248201527f4163636f756e74206973206e6f74206578636c756465642066726f6d207265666044820152663632b1ba34b7b760c91b6064820152608401610767565b60005b6008548110156107d857816001600160a01b0316600882815481106108a8576108a8612925565b6000918252602090912001546001600160a01b0316141561098d57600880546108d3906001906128c7565b815481106108e3576108e3612925565b600091825260209091200154600880546001600160a01b03909216918390811061090f5761090f612925565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600790925220805460ff1916905560088054806109675761096761290f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610997816128de565b915050610881565b60006109ac33848461161e565b5060015b92915050565b60006109c3848484611742565b610a158433610a1085604051806060016040528060288152602001612967602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190611c83565b61161e565b5060019392505050565b6000546001600160a01b03163314610a495760405162461bcd60e51b815260040161076790612773565b6001600160a01b03811660009081526007602052604090205460ff1615610ab25760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610767565b600854603290610ac390600161286e565b1115610b4d5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610767565b6001600160a01b03811660009081526002602052604090205415610ba7576001600160a01b038116600090815260026020526040902054610b8d90611cbd565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b03163314610c375760405162461bcd60e51b815260040161076790612773565b6001600160a01b038116600081815260056020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b6014546001600160a01b0316336001600160a01b031614610cb257600080fd5b6000610cbd306110d3565b9050610cc881611d41565b50565b6000546001600160a01b03163314610cf55760405162461bcd60e51b815260040161076790612773565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314610d4b5760405162461bcd60e51b815260040161076790612773565b601754600160b01b900460ff1615610db95760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610767565b60c8835110610e295760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610767565b60005b8351811015610e91576000848281518110610e4957610e49612925565b602002602001015190506000848381518110610e6757610e67612925565b60200260200101519050610e7c338383611742565b50508080610e89906128de565b915050610e2c565b50610e9a611eca565b7310ed43c718714eb63d5aa57b78b54704e256024e610eba816001610ccb565b601680546001600160a01b0319166001600160a01b038316908117909155610eed903090683635c9adc5dea0000061161e565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2657600080fd5b505afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e91906124de565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610fa657600080fd5b505afa158015610fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fde91906124de565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561102657600080fd5b505af115801561103a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105e91906124de565b601780546001600160a01b0319166001600160a01b03929092169182179055610a15906001610ccb565b6000546001600160a01b031633146110b25760405162461bcd60e51b815260040161076790612773565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6001600160a01b0381166000908152600260205260408120546109b090611cbd565b6000546001600160a01b0316331461111f5760405162461bcd60e51b815260040161076790612773565b601a55565b6000546001600160a01b0316331461114e5760405162461bcd60e51b815260040161076790612773565b600c849055600d829055600e839055600f819055601961116e838661286e565b11156111bc5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203235250000006044820152606401610767565b6019600f54600e546111ce919061286e565b111561121c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203235250000006044820152606401610767565b50505050565b60006109ac338484611742565b6000546001600160a01b031633146112595760405162461bcd60e51b815260040161076790612773565b6014546001600160a01b03166112b15760405162461bcd60e51b815260206004820152601860248201527f5f62617963416464726573732063616e6e6f74206265203000000000000000006044820152606401610767565b6001600160a01b039081166000908152600560209081526040808320805460ff199081169091556014805486168086529483902080549092166001179091555490519316835290917fb849b89e331d8b56f8968476d98655a9bebf9590acf39261bbce631b9b2ad6079101610c87565b6000546001600160a01b0316331461134b5760405162461bcd60e51b815260040161076790612773565b6015546001600160a01b03166113a35760405162461bcd60e51b815260206004820152601860248201527f5f6d6b7467416464726573732063616e6e6f74206265203000000000000000006044820152606401610767565b6001600160a01b039081166000908152600560209081526040808320805460ff199081169091556015805486168086529483902080549092166001179091555490519316835290917f4aeacdf11926d26257f8e9ea6e9091947978ac978705e15835bf04f21f4fa69b9101610c87565b6000546001600160a01b0316331461143d5760405162461bcd60e51b815260040161076790612773565b601955565b6000546001600160a01b0316331461146c5760405162461bcd60e51b815260040161076790612773565b6001600160a01b038116600081815260056020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101610c87565b6000546001600160a01b031633146114e75760405162461bcd60e51b815260040161076790612773565b601855565b6000546001600160a01b031633146115165760405162461bcd60e51b815260040161076790612773565b6001600160a01b03811661157b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610767565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6014546001600160a01b0316336001600160a01b0316148061160b57506015546001600160a01b0316336001600160a01b0316145b61161457600080fd5b47610cc881611f09565b6001600160a01b0383166116805760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610767565b6001600160a01b0382166116e15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610767565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117a65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610767565b6001600160a01b0382166118085760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610767565b6000811161186a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610767565b6000546001600160a01b0384811691161480159061189657506000546001600160a01b03838116911614155b15611aeb57601754600160b01b900460ff16611a5e576017546001600160a01b038381169116148015906118d857506016546001600160a01b03838116911614155b80156118fd57506001600160a01b03821660009081526005602052604090205460ff16155b15611a5e576019548161190f846110d3565b611919919061286e565b106119725760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b6064820152608401610767565b6018548111156119c45760405162461bcd60e51b815260206004820152601c60248201527f544f4b454e3a204d6178205472616e73616374696f6e204c696d6974000000006044820152606401610767565b6001600160a01b0383166000908152600b602052604090205460ff16158015611a0657506001600160a01b0382166000908152600b602052604090205460ff16155b611a5e5760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460448201526265642160e81b6064820152608401610767565b6000611a69306110d3565b601a54601854919250821015908210611a825760185491505b808015611a995750601754600160a01b900460ff16155b8015611ab357506017546001600160a01b03868116911614155b8015611ac85750601754600160a81b900460ff165b15611ae857611ad682611d41565b478015611ae657611ae647611f09565b505b50505b6001600160a01b03831660009081526005602052604090205460019060ff1680611b2d57506001600160a01b03831660009081526005602052604090205460ff165b80611b5f57506017546001600160a01b03858116911614801590611b5f57506017546001600160a01b03848116911614155b15611b6c57506000611c77565b6017546001600160a01b038581169116148015611b9757506016546001600160a01b03848116911614155b15611ba957600c54601055600d546011555b6001600160a01b03841660009081526005602052604090205460ff16611c3a57601854821115611c3a5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610767565b6017546001600160a01b038481169116148015611c6557506016546001600160a01b03858116911614155b15611c7757600e54601055600f546011555b61121c84848484611f8e565b60008184841115611ca75760405162461bcd60e51b8152600401610767919061271e565b506000611cb484866128c7565b95945050505050565b6000600954821115611d245760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610767565b6000611d2e611fbc565b9050611d3a8382611fdf565b9392505050565b6017805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611d8957611d89612925565b6001600160a01b03928316602091820292909201810191909152601654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611ddd57600080fd5b505afa158015611df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1591906124de565b81600181518110611e2857611e28612925565b6001600160a01b039283166020918202929092010152601654611e4e913091168461161e565b60165460405163791ac94760e01b81526001600160a01b039091169063791ac94790611e879085906000908690309042906004016127a8565b600060405180830381600087803b158015611ea157600080fd5b505af1158015611eb5573d6000803e3d6000fd5b50506017805460ff60a01b1916905550505050565b6000546001600160a01b03163314611ef45760405162461bcd60e51b815260040161076790612773565b6017805460ff60b01b1916600160b01b179055565b6014546001600160a01b03166108fc611f23836002611fdf565b6040518115909202916000818181858888f19350505050158015611f4b573d6000803e3d6000fd5b506015546001600160a01b03166108fc611f66836002611fdf565b6040518115909202916000818181858888f193505050501580156107d8573d6000803e3d6000fd5b80611f9b57611f9b612021565b611fa684848461204f565b8061121c5761121c601254601055601354601155565b6000806000611fc9612146565b9092509050611fd88282611fdf565b9250505090565b6000611d3a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612188565b6010541580156120315750601154155b1561203857565b601080546012556011805460135560009182905555565b600080600080600080612061876121b6565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506120939087612213565b6001600160a01b03808b1660009081526002602052604080822093909355908a16815220546120c29086612255565b6001600160a01b0389166000908152600260205260409020556120e4816122b4565b6120ee84836122fe565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161213391815260200190565b60405180910390a3505050505050505050565b6009546000908190683635c9adc5dea000006121628282611fdf565b82101561217f57505060095492683635c9adc5dea0000092509050565b90939092509050565b600081836121a95760405162461bcd60e51b8152600401610767919061271e565b506000611cb48486612886565b60008060008060008060008060006121d38a601054601154612322565b92509250925060006121e3611fbc565b905060008060006121f68e878787612377565b919e509c509a509598509396509194505050505091939550919395565b6000611d3a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c83565b600080612262838561286e565b905083811015611d3a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610767565b60006122be611fbc565b905060006122cc83836123c7565b306000908152600260205260409020549091506122e99082612255565b30600090815260026020526040902055505050565b60095461230b9083612213565b600955600a5461231b9082612255565b600a555050565b600080808061233c606461233689896123c7565b90611fdf565b9050600061234f60646123368a896123c7565b90506000612367826123618b86612213565b90612213565b9992985090965090945050505050565b600080808061238688866123c7565b9050600061239488876123c7565b905060006123a288886123c7565b905060006123b4826123618686612213565b939b939a50919850919650505050505050565b6000826123d6575060006109b0565b60006123e283856128a8565b9050826123ef8583612886565b14611d3a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610767565b600082601f83011261245757600080fd5b8135602061246c6124678361284a565b612819565b80838252828201915082860187848660051b890101111561248c57600080fd5b60005b858110156124b45781356124a281612951565b8452928401929084019060010161248f565b5090979650505050505050565b6000602082840312156124d357600080fd5b8135611d3a81612951565b6000602082840312156124f057600080fd5b8151611d3a81612951565b6000806040838503121561250e57600080fd5b823561251981612951565b9150602083013561252981612951565b809150509250929050565b60008060006060848603121561254957600080fd5b833561255481612951565b9250602084013561256481612951565b929592945050506040919091013590565b6000806040838503121561258857600080fd5b823561259381612951565b91506020830135801515811461252957600080fd5b600080604083850312156125bb57600080fd5b82356125c681612951565b946020939093013593505050565b6000602082840312156125e657600080fd5b813567ffffffffffffffff8111156125fd57600080fd5b61260984828501612446565b949350505050565b6000806040838503121561262457600080fd5b823567ffffffffffffffff8082111561263c57600080fd5b61264886838701612446565b935060209150818501358181111561265f57600080fd5b85019050601f8101861361267257600080fd5b80356126806124678261284a565b80828252848201915084840189868560051b87010111156126a057600080fd5b600094505b838510156126c35780358352600194909401939185019185016126a5565b5080955050505050509250929050565b6000602082840312156126e557600080fd5b5035919050565b6000806000806080858703121561270257600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b8181101561274b5785810183015185820160400152820161272f565b8181111561275d576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127f85784516001600160a01b0316835293830193918301916001016127d3565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156128425761284261293b565b604052919050565b600067ffffffffffffffff8211156128645761286461293b565b5060051b60200190565b60008219821115612881576128816128f9565b500190565b6000826128a357634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156128c2576128c26128f9565b500290565b6000828210156128d9576128d96128f9565b500390565b60006000198214156128f2576128f26128f9565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610cc857600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122093acbd957f8630a1f91886128b1180f07e928657c73a57b3afb86a89f7e215ad64736f6c63430008070033