0x608060405234801561001057600080fd5b50600354610100900460ff168061002a575060035460ff16155b6100915760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b600354610100900460ff161580156100b3576003805461ffff19166101011790555b80156100c5576003805461ff00191690555b50611eb8806100d56000396000f3fe60806040526004361061014f5760003560e01c8063a3c699b4116100b6578063dc5b68a61161006f578063dc5b68a6146103ee578063e336215e1461040e578063ef20accb1461042e578063ef7d5aa814610443578063f851a44014610463578063fe1977f91461048157600080fd5b8063a3c699b414610342578063a4baf75014610362578063a61c19a614610382578063b702697814610398578063ce77c573146103ae578063d9803cb2146103ce57600080fd5b80634c402b31116101085780634c402b311461024457806354fd4d50146102745780636c2dde88146102b5578063719a0f8c146102ed5780638456cb591461030d5780638f2839701461032257600080fd5b8063046f7da21461015b578063059f31591461017257806311b9f45b1461019257806322396bc4146101cf5780632f73bb46146101f35780634ba876511461021357600080fd5b3661015657005b600080fd5b34801561016757600080fd5b506101706104a1565b005b34801561017e57600080fd5b5061017061018d366004611999565b610552565b34801561019e57600080fd5b506001546101b2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101db57600080fd5b506101e560065481565b6040519081526020016101c6565b3480156101ff57600080fd5b506008546101b2906001600160a01b031681565b34801561021f57600080fd5b5060015461023490600160a01b900460ff1681565b60405190151581526020016101c6565b34801561025057600080fd5b5061023461025f366004611a2a565b60026020526000908152604090205460ff1681565b34801561028057600080fd5b5060408051808201825260128152714d65726b6c65436c61696d65722076312e3160701b602082015290516101c69190611a71565b3480156102c157600080fd5b506101e56102d0366004611aa4565b600760209081526000928352604080842090915290825290205481565b3480156102f957600080fd5b50610170610308366004611a2a565b6107cd565b34801561031957600080fd5b50610170610840565b34801561032e57600080fd5b5061017061033d366004611a2a565b6108eb565b34801561034e57600080fd5b5061017061035d366004611ad7565b610994565b34801561036e57600080fd5b506000546101b2906001600160a01b031681565b34801561038e57600080fd5b506101e560055481565b3480156103a457600080fd5b506101e560045481565b3480156103ba57600080fd5b506101706103c9366004611b03565b610a93565b3480156103da57600080fd5b506101706103e9366004611a2a565b610d74565b3480156103fa57600080fd5b50610170610409366004611c14565b610dea565b34801561041a57600080fd5b50610234610429366004611a2a565b610eb5565b34801561043a57600080fd5b50610170610eef565b34801561044f57600080fd5b5061017061045e366004611c79565b610f7d565b34801561046f57600080fd5b506000546001600160a01b03166101b2565b34801561048d57600080fd5b5061017061049c366004611a2a565b611196565b6000546001600160a01b031633146104d45760405162461bcd60e51b81526004016104cb90611ce5565b60405180910390fd5b600154600160a01b900460ff1661051a5760405162461bcd60e51b815260206004820152600a602482015269139bdd081c185d5cd95960b21b60448201526064016104cb565b6001805460ff60a01b191690556040517f490d6d11e278f168be9be39e46297f72ea877136d5bccad9cf4993e63a29568f90600090a1565b6000546001600160a01b0316331461057c5760405162461bcd60e51b81526004016104cb90611ce5565b60005b61ffff81168211156107c85782828261ffff168181106105a1576105a1611d0a565b90506060020160400135600014156105f25760405162461bcd60e51b815260206004820152601460248201527316995c9bc81dda5d1a191c985dc8185b5bdd5b9d60621b60448201526064016104cb565b6000838361ffff841681811061060a5761060a611d0a565b90506060020160200160208101906106229190611a2a565b6001600160a01b031614156106725760405162461bcd60e51b81526020600482015260166024820152755a65726f20726563697069656e74206164647265737360501b60448201526064016104cb565b6106f483838361ffff1681811061068b5761068b611d0a565b6106a19260206060909202019081019150611a2a565b84848461ffff168181106106b7576106b7611d0a565b90506060020160200160208101906106cf9190611a2a565b85858561ffff168181106106e5576106e5611d0a565b905060600201604001356111cc565b82828261ffff1681811061070a5761070a611d0a565b90506060020160200160208101906107229190611a2a565b6001600160a01b031683838361ffff1681811061074157610741611d0a565b6107579260206060909202019081019150611a2a565b6001600160a01b03167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb85858561ffff1681811061079757610797611d0a565b905060600201604001356040516107b091815260200190565b60405180910390a36107c181611d36565b905061057f565b505050565b6000546001600160a01b031633146107f75760405162461bcd60e51b81526004016104cb90611ce5565b6001600160a01b038116600081815260026020526040808220805460ff19169055517f63b0fb1e9058dad8959388dc6f23854bb64bdd01d3aaefd4410c86a5600f3a3a9190a250565b6000546001600160a01b0316331461086a5760405162461bcd60e51b81526004016104cb90611ce5565b600154600160a01b900460ff16156108ad5760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b60448201526064016104cb565b6001805460ff60a01b1916600160a01b1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b6000546001600160a01b031633146109155760405162461bcd60e51b81526004016104cb90611ce5565b6001546001600160a01b03828116911614156109435760405162461bcd60e51b81526004016104cb90611d58565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fabadef65e57dcbc94a1edc7f70476a3abca7121015c7358dd71b9ad8e434895f9190a350565b61099d33610eb5565b6109b95760405162461bcd60e51b81526004016104cb90611ce5565b6006548314610a015760405162461bcd60e51b8152602060048201526014602482015273092dcecc2d8d2c840eae0c8c2e8ca40d2dcc8caf60631b60448201526064016104cb565b81600454141580610a1457508060055414155b610a305760405162461bcd60e51b81526004016104cb90611d58565b600660008154610a3f90611d7e565b909155506004829055600581905560408051848152602081018490529081018290527fc6943d7f0f8e95de292297e12e520b50c7bae363871ce4723f3224ac314fbb779060600160405180910390a1505050565b600154600160a01b900460ff1615610ad65760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b60448201526064016104cb565b600046338686604051602401610aef9493929190611d99565b60408051601f19818403018152918152602080830180516001600160e01b0316632b62907160e21b1790528151601f8601829004820281018201909252848252919250610b5991839190869086908190840183828082843760009201919091525061128a92505050565b60008060005b61ffff8116871115610d6a5733600090815260076020526040812090898961ffff8516818110610b9157610b91611d0a565b610ba79260206040909202019081019150611a2a565b6001600160a01b03166001600160a01b031681526020019081526020016000205492508288888361ffff16818110610be157610be1611d0a565b905060400201602001351115610d5a578288888361ffff16818110610c0857610c08611d0a565b90506040020160200135610c1c9190611e08565b915087878261ffff16818110610c3457610c34611d0a565b9050604002016020013560076000336001600160a01b03166001600160a01b0316815260200190815260200160002060008a8a8561ffff16818110610c7b57610c7b611d0a565b610c919260206040909202019081019150611a2a565b6001600160a01b03168152602081019190915260400160002055610ce1888861ffff8416818110610cc457610cc4611d0a565b610cda9260206040909202019081019150611a2a565b33846111cc565b87878261ffff16818110610cf757610cf7611d0a565b610d0d9260206040909202019081019150611a2a565b6001600160a01b0316336001600160a01b03167f70eb43c4a8ae8c40502dcf22436c509c28d6ff421cf07c491be56984bd98706884604051610d5191815260200190565b60405180910390a35b610d6381611d36565b9050610b5f565b5050505050505050565b6000546001600160a01b03163314610d9e5760405162461bcd60e51b81526004016104cb90611ce5565b6001600160a01b038116600081815260026020526040808220805460ff19166001179055517f045b2f346753b076ce503d6e0a65c02692b3a2af8511bd1ee2150685e08621259190a250565b600354610100900460ff1680610e03575060035460ff16155b610e665760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104cb565b600354610100900460ff16158015610e88576003805461ffff19166101011790555b610e93858585611360565b610e9c82611441565b8015610eae576003805461ff00191690555b5050505050565b6001600160a01b03811660009081526002602052604081205460ff1680610ee957506000546001600160a01b038381169116145b92915050565b6001546001600160a01b03163314610f195760405162461bcd60e51b81526004016104cb90611ce5565b600154600080546040516001600160a01b0393841693909116917f7cb6040a31264d0f3fa4024e96aa137a3c4afbd8bb1162e1046ee09c5d7e162a91a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b03163314610fa75760405162461bcd60e51b81526004016104cb90611ce5565b82151580610fb457508015155b610fee5760405162461bcd60e51b815260206004820152600b60248201526a456d707479206c6973747360a81b60448201526064016104cb565b60005b61ffff81168211156110bd576002600084848461ffff1681811061101757611017611d0a565b905060200201602081019061102c9190611a2a565b6001600160a01b031681526020810191909152604001600020805460ff19169055828261ffff831681811061106357611063611d0a565b90506020020160208101906110789190611a2a565b6001600160a01b03167f63b0fb1e9058dad8959388dc6f23854bb64bdd01d3aaefd4410c86a5600f3a3a60405160405180910390a26110b681611d36565b9050610ff1565b5060005b61ffff8116841115610eae5760016002600087878561ffff168181106110e9576110e9611d0a565b90506020020160208101906110fe9190611a2a565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055848461ffff831681811061113c5761113c611d0a565b90506020020160208101906111519190611a2a565b6001600160a01b03167f045b2f346753b076ce503d6e0a65c02692b3a2af8511bd1ee2150685e086212560405160405180910390a261118f81611d36565b90506110c1565b6000546001600160a01b031633146111c05760405162461bcd60e51b81526004016104cb90611ce5565b6111c981611441565b50565b6001600160a01b038316611276576000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611227576040519150601f19603f3d011682016040523d82523d6000602084013e61122c565b606091505b50509050806112705760405162461bcd60e51b815260206004820152601060248201526f10dbda5b881cd95b990819985a5b195960821b60448201526064016104cb565b50505050565b6107c86001600160a01b038416838361150f565b60008260405160200161129d9190611e1f565b60408051601f198184030181529082905280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000091830191909152603c820152605c01604051602081830303815290604052805190602001209050600061130a8284611561565b6008549091506001600160a01b038083169116146112705760405162461bcd60e51b81526020600482015260136024820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b60448201526064016104cb565b611369836116a5565b60005b61ffff81168211156112705760016002600085858561ffff1681811061139457611394611d0a565b90506020020160208101906113a99190611a2a565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055828261ffff83168181106113e7576113e7611d0a565b90506020020160208101906113fc9190611a2a565b6001600160a01b03167f045b2f346753b076ce503d6e0a65c02692b3a2af8511bd1ee2150685e086212560405160405180910390a261143a81611d36565b905061136c565b6001600160a01b0381166114975760405162461bcd60e51b815260206004820152601760248201527f5a65726f207369676e206f776e6572206164647265737300000000000000000060448201526064016104cb565b6008546001600160a01b03828116911614156114c55760405162461bcd60e51b81526004016104cb90611d58565b600880546001600160a01b0319166001600160a01b0383169081179091556040517f9b241d596f17ea3c25eea12ba142e686e0767427a36604881ba5bcf81137594d90600090a250565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526107c89084906116ae565b60008060008084516041146115b85760405162461bcd60e51b815260206004820152601a60248201527f5f7265636f7665723a20696e76616c6964207369672073697a6500000000000060448201526064016104cb565b50505060208201516040830151606084015160001a601b8110156115e4576115e1601b82611e3b565b90505b8060ff16601b14806115f957508060ff16601c145b61163d5760405162461bcd60e51b81526020600482015260156024820152745f7265636f7665723a20696e76616c69642073696760581b60448201526064016104cb565b60408051600081526020810180835288905260ff831691810191909152606081018490526080810183905260019060a0016020604051602081039080840390855afa158015611690573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6111c981611780565b6000611703826040518060400160405280602081526020017f53616665546f6b656e3a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166118169092919063ffffffff16565b8051909150156107c857808060200190518101906117219190611e60565b6107c85760405162461bcd60e51b815260206004820152602a60248201527f53616665546f6b656e3a20546f6b656e206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104cb565b6001600160a01b0381166117cb5760405162461bcd60e51b81526020600482015260126024820152715a65726f2061646d696e206164647265737360701b60448201526064016104cb565b600080546001600160a01b0319166001600160a01b03831690811782556040519091907f7cb6040a31264d0f3fa4024e96aa137a3c4afbd8bb1162e1046ee09c5d7e162a908290a350565b6060611825848460008561182f565b90505b9392505050565b6060824710156118905760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016104cb565b6001600160a01b0385163b6118e75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104cb565b600080866001600160a01b031685876040516119039190611e1f565b60006040518083038185875af1925050503d8060008114611940576040519150601f19603f3d011682016040523d82523d6000602084013e611945565b606091505b5091509150611955828286611960565b979650505050505050565b6060831561196f575081611828565b82511561197f5782518084602001fd5b8160405162461bcd60e51b81526004016104cb9190611a71565b600080602083850312156119ac57600080fd5b823567ffffffffffffffff808211156119c457600080fd5b818501915085601f8301126119d857600080fd5b8135818111156119e757600080fd5b8660206060830285010111156119fc57600080fd5b60209290920196919550909350505050565b80356001600160a01b0381168114611a2557600080fd5b919050565b600060208284031215611a3c57600080fd5b61182882611a0e565b60005b83811015611a60578181015183820152602001611a48565b838111156112705750506000910152565b6020815260008251806020840152611a90816040850160208701611a45565b601f01601f19169190910160400192915050565b60008060408385031215611ab757600080fd5b611ac083611a0e565b9150611ace60208401611a0e565b90509250929050565b600080600060608486031215611aec57600080fd5b505081359360208301359350604090920135919050565b60008060008060408587031215611b1957600080fd5b843567ffffffffffffffff80821115611b3157600080fd5b818701915087601f830112611b4557600080fd5b813581811115611b5457600080fd5b8860208260061b8501011115611b6957600080fd5b602092830196509450908601359080821115611b8457600080fd5b818701915087601f830112611b9857600080fd5b813581811115611ba757600080fd5b886020828501011115611bb957600080fd5b95989497505060200194505050565b60008083601f840112611bda57600080fd5b50813567ffffffffffffffff811115611bf257600080fd5b6020830191508360208260051b8501011115611c0d57600080fd5b9250929050565b60008060008060608587031215611c2a57600080fd5b611c3385611a0e565b9350602085013567ffffffffffffffff811115611c4f57600080fd5b611c5b87828801611bc8565b9094509250611c6e905060408601611a0e565b905092959194509250565b60008060008060408587031215611c8f57600080fd5b843567ffffffffffffffff80821115611ca757600080fd5b611cb388838901611bc8565b90965094506020870135915080821115611ccc57600080fd5b50611cd987828801611bc8565b95989497509550505050565b6020808252600b908201526a105d5d1a0819985a5b195960aa1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600061ffff80831681811415611d4e57611d4e611d20565b6001019392505050565b6020808252600c908201526b416c726561647920646f6e6560a01b604082015260600190565b6000600019821415611d9257611d92611d20565b5060010190565b8481526001600160a01b038481166020808401919091526060604080850182905290840185905260009286929160808601855b88811015611df95783611dde87611a0e565b16825285850135858301529482019490820190600101611dcc565b509a9950505050505050505050565b600082821015611e1a57611e1a611d20565b500390565b60008251611e31818460208701611a45565b9190910192915050565b600060ff821660ff84168060ff03821115611e5857611e58611d20565b019392505050565b600060208284031215611e7257600080fd5b8151801515811461182857600080fdfea26469706673582212209fa4f483a7ecfee9ed6477b1ab0af2f2d562018428b57d305358ce056d83d9c664736f6c63430008090033