608060405234801561001057600080fd5b506040516119f23803806119f2833981810160405260a081101561003357600080fd5b50805160208201516040830151606084015160809094015160018055929391929091906001600160a01b0384161580159061007657506001600160a01b03831615155b801561008a57506001600160a01b03851615155b6100c8576040805162461bcd60e51b815260206004820152600a6024820152696164647265737328302960b01b604482015290519081900360640190fd5b60008111610111576040805162461bcd60e51b81526020600482015260116024820152700726577617264734475726174696f6e3d3607c1b604482015290519081900360640190fd5b600080546001600160a01b039586166001600160a01b0319918216178255600680549587169582169590951790945560078054851693861693909317909255600280549093169490931693909317905560055561187e90819061017490396000f3fe608060405234801561001057600080fd5b50600436106101415760003560e01c806372f702f3116100b8578063a694fc3a1161007c578063a694fc3a14610304578063c8f33c9114610321578063cea0196214610329578063e0c6c19d14610346578063ebe2b12b14610363578063ecd9ba821461036b57610141565b806372f702f31461029d5780637bb7bed1146102a557806380faa57d146102c2578063874c120b146102ca578063882324b4146102e757610141565b8063372500ab1161010a578063372500ab146101eb578063386a9525146101f35780633e491d47146101fb5780633f2a55401461022757806346f907481461024b57806370a082311461027757610141565b8062a47ddd146101465780630e213a3d1461018457806318160ddd146101a1578063246132f9146101a95780632e17de78146101ce575b600080fd5b6101726004803603604081101561015c57600080fd5b50803590602001356001600160a01b03166103a3565b60408051918252519081900360200190f35b6101726004803603602081101561019a57600080fd5b50356103c3565b6101726103ee565b6101cc600480360360408110156101bf57600080fd5b50803590602001356103f4565b005b6101cc600480360360208110156101e457600080fd5b503561089b565b6101cc6109b6565b610172610adb565b6101726004803603604081101561021157600080fd5b506001600160a01b038135169060200135610ae1565b61022f610b93565b604080516001600160a01b039092168252519081900360200190f35b6101726004803603604081101561026157600080fd5b50803590602001356001600160a01b0316610ba2565b6101726004803603602081101561028d57600080fd5b50356001600160a01b0316610baf565b61022f610bca565b61022f600480360360208110156102bb57600080fd5b5035610bd9565b610172610bf6565b610172600480360360208110156102e057600080fd5b5035610c09565b610172600480360360208110156102fd57600080fd5b5035610c88565b6101cc6004803603602081101561031a57600080fd5b5035610c9c565b610172610d5c565b6101726004803603602081101561033f57600080fd5b5035610d62565b6101cc6004803603602081101561035c57600080fd5b5035610d6f565b610172610e43565b6101cc600480360360a081101561038157600080fd5b5080359060208101359060ff6040820135169060608101359060800135610e49565b600c82600281106103b057fe5b0160205260009081526040902054905081565b60006103e6600554600884600281106103d857fe5b01549063ffffffff6110cf16565b90505b919050565b60105490565b6000546001600160a01b03163314610449576040805162461bcd60e51b815260206004820152601360248201527210b932bbb0b93239a234b9ba3934b13aba37b960691b604482015290519081900360640190fd5b60006104556000610c09565b600a556007546001600160a01b031615610477576104736001610c09565b600b555b61047f610bf6565b6003556001600160a01b038116156104f75761049c816000610ae1565b6001600160a01b0382166000908152600e60205260409020556104c0816001610ae1565b6001600160a01b0382166000908152600f6020908152604080832093909355600a54600c825283832055600b54600d909152919020555b8115610551576007546001600160a01b0316610551576040805162461bcd60e51b815260206004820152601460248201527306578747261526577617264546f6b656e3d3078360641b604482015290519081900360640190fd5b60045442106105945760055461056e90849063ffffffff61112816565b600855811561058f5760055461058b90839063ffffffff61112816565b6009555b610620565b6004546000906105aa904263ffffffff61119216565b905060006105c46008825b0154839063ffffffff6110cf16565b6005549091506105ea906105de878463ffffffff6111ef16565b9063ffffffff61112816565b600855831561061d576105ff600860016105b5565b600554909150610619906105de868463ffffffff6111ef16565b6009555b50505b600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561066b57600080fd5b505afa15801561067f573d6000803e3d6000fd5b505050506040513d602081101561069557600080fd5b50516005549091506106ae90829063ffffffff61112816565b6008541115610704576040805162461bcd60e51b815260206004820152601860248201527f50726f76696465642072657761726420746f6f20686967680000000000000000604482015290519081900360640190fd5b82156107ee57600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561075557600080fd5b505afa158015610769573d6000803e3d6000fd5b505050506040513d602081101561077f57600080fd5b505160055490915061079890829063ffffffff61112816565b60095411156107ee576040805162461bcd60e51b815260206004820152601e60248201527f50726f76696465642065787472612072657761726420746f6f20686967680000604482015290519081900360640190fd5b426003819055600554610807919063ffffffff6111ef16565b6004556006546040805186815290516001600160a01b03909216917fac24935fd910bc682b5ccb1a07b718cadf8cf2f6d1404c4f3ddc3662dae40e299181900360200190a28215610895576007546040805185815290516001600160a01b03909216917fac24935fd910bc682b5ccb1a07b718cadf8cf2f6d1404c4f3ddc3662dae40e299181900360200190a25b50505050565b60018054810190819055336108b06000610c09565b600a556007546001600160a01b0316156108d2576108ce6001610c09565b600b555b6108da610bf6565b6003556001600160a01b03811615610952576108f7816000610ae1565b6001600160a01b0382166000908152600e602052604090205561091b816001610ae1565b6001600160a01b0382166000908152600f6020908152604080832093909355600a54600c825283832055600b54600d909152919020555b61095b83611249565b5060015481146109b2576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b5050565b60018054810190819055336109cb6000610c09565b600a556007546001600160a01b0316156109ed576109e96001610c09565b600b555b6109f5610bf6565b6003556001600160a01b03811615610a6d57610a12816000610ae1565b6001600160a01b0382166000908152600e6020526040902055610a36816001610ae1565b6001600160a01b0382166000908152600f6020908152604080832093909355600a54600c825283832055600b54600d909152919020555b610a77600061132c565b610a81600161132c565b506001548114610ad8576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b50565b60055481565b6000610b8a600e8360028110610af357fe5b6001600160a01b038616600090815291016020526040902054610b7e670de0b6b3a76400006105de610b59600c8860028110610b2b57fe5b6001600160a01b038b16600090815291016020526040902054610b4d89610c09565b9063ffffffff61119216565b6001600160a01b0389166000908152601160205260409020549063ffffffff6110cf16565b9063ffffffff6111ef16565b90505b92915050565b6000546001600160a01b031681565b600e82600281106103b057fe5b6001600160a01b031660009081526011602052604090205490565b6002546001600160a01b031681565b60068160028110610be657fe5b01546001600160a01b0316905081565b6000610c0442600454611497565b905090565b600060105460001415610c2c57600a8260028110610c2357fe5b015490506103e9565b6103e6610c6d6010546105de670de0b6b3a7640000610c6160088860028110610c5157fe5b0154610c61600354610b4d610bf6565b9063ffffffff6110cf16565b600a8460028110610c7a57fe5b01549063ffffffff6111ef16565b600a8160028110610c9557fe5b0154905081565b6001805481019081905533610cb16000610c09565b600a556007546001600160a01b031615610cd357610ccf6001610c09565b600b555b610cdb610bf6565b6003556001600160a01b03811615610d5357610cf8816000610ae1565b6001600160a01b0382166000908152600e6020526040902055610d1c816001610ae1565b6001600160a01b0382166000908152600f6020908152604080832093909355600a54600c825283832055600b54600d909152919020555b61095b836114ad565b60035481565b60088160028110610c9557fe5b6001805481019081905533610d846000610c09565b600a556007546001600160a01b031615610da657610da26001610c09565b600b555b610dae610bf6565b6003556001600160a01b03811615610e2657610dcb816000610ae1565b6001600160a01b0382166000908152600e6020526040902055610def816001610ae1565b6001600160a01b0382166000908152600f6020908152604080832093909355600a54600c825283832055600b54600d909152919020555b610e2f83611249565b610e39600061132c565b61095b600161132c565b60045481565b6001805481019081905533610e5e6000610c09565b600a556007546001600160a01b031615610e8057610e7c6001610c09565b600b555b610e88610bf6565b6003556001600160a01b03811615610f0057610ea5816000610ae1565b6001600160a01b0382166000908152600e6020526040902055610ec9816001610ae1565b6001600160a01b0382166000908152600f6020908152604080832093909355600a54600c825283832055600b54600d909152919020555b60008711610f46576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b601054610f59908863ffffffff6111ef16565b60105533600090815260116020526040902054610f7c908863ffffffff6111ef16565b3360008181526011602052604080822093909355600254835163d505accf60e01b81526004810193909352306024840152604483018b9052606483018a905260ff8916608484015260a4830188905260c4830187905292516001600160a01b039093169263d505accf9260e480820193929182900301818387803b15801561100357600080fd5b505af1158015611017573d6000803e3d6000fd5b505060025461103a92506001600160a01b0316905033308a63ffffffff61158f16565b60408051888152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25060015481146110c7576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b505050505050565b6000826110de57506000610b8d565b828202828482816110eb57fe5b0414610b8a5760405162461bcd60e51b81526004018080602001828103825260218152602001806117ff6021913960400191505060405180910390fd5b600080821161117e576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161118957fe5b04949350505050565b6000828211156111e9576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015610b8a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008111611291576040805162461bcd60e51b815260206004820152601060248201526f043616e6e6f7420756e7374616b6520360841b604482015290519081900360640190fd5b6010546112a4908263ffffffff61119216565b601055336000908152601160205260409020546112c7908263ffffffff61119216565b336000818152601160205260409020919091556002546112f3916001600160a01b0390911690836115e9565b60408051828152905133917f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75919081900360200190a250565b6000600e826002811061133b57fe5b33600090815291016020526040902054905080156109b2576000600e836002811061136257fe5b336000908152910160205260408120919091556006836002811061138257fe5b0154604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156113cc57600080fd5b505afa1580156113e0573d6000803e3d6000fd5b505050506040513d60208110156113f657600080fd5b5051905080611406575050610ad8565b8181106114135781611415565b805b915061144133836006866002811061142957fe5b01546001600160a01b0316919063ffffffff6115e916565b6006836002811061144e57fe5b01546040805184815290516001600160a01b039092169133917f540798df468d7b23d11f156fdb954cb19ad414d150722a7b6d55ba369dea792e919081900360200190a3505050565b60008183106114a65781610b8a565b5090919050565b600081116114f3576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b601054611506908263ffffffff6111ef16565b60105533600090815260116020526040902054611529908263ffffffff6111ef16565b33600081815260116020526040902091909155600254611556916001600160a01b0390911690308461158f565b60408051828152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a250565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610895908590611640565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261163b908490611640565b505050565b611652826001600160a01b03166117f8565b6116a3576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106116e15780518252601f1990920191602091820191016116c2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611743576040519150601f19603f3d011682016040523d82523d6000602084013e611748565b606091505b50915091508161179f576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610895578080602001905160208110156117bb57600080fd5b50516108955760405162461bcd60e51b815260040180806020018281038252602a815260200180611820602a913960400191505060405180910390fd5b3b15159056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a723158207c45efe56c5f655a65ecc78b3fc54b5fe127a565c4bd07f4afda0d0cbb13e81864736f6c63430005100032000000000000000000000000639916bb4b29859fadf7a272185a3212157f8ce10000000000000000000000004085174546a2638525540bda32496250f742141d00000000000000000000000028cb7e841ee97947a86b06fa4090c8451f64c0be000000000000000000000000aaaebe6fe48e54f431b0c390cfaf0b017d09d42d000000000000000000000000000000000000000000000000000000000049d400