0x6080604052600436106101fd5760003560e01c8063768565571161010d578063a9059cbb116100a0578063c18bc1951161006f578063c18bc1951461060b578063c400f5e71461062b578063cc274b291461064b578063dd62ed3e1461066b578063f2fde38b1461068b57600080fd5b8063a9059cbb14610595578063aa4bde28146105b5578063c0246668146105cb578063c0a904a2146105eb57600080fd5b80638e749a8f116100dc5780638e749a8f1461052057806395d89b4114610540578063a457c2d714610555578063a5ece9411461057557600080fd5b8063768565571461049257806379cc6790146104c25780638980f11f146104e25780638da5cb5b1461050257600080fd5b806339509351116101905780634a4dd9cd1161015f5780634a4dd9cd146103c75780634fbee193146103e75780635cce86cd1461041757806370a0823114610447578063715018a61461047d57600080fd5b80633950935114610334578063408ccbdf1461035457806342966c681461038757806349bd5a5e146103a757600080fd5b806318160ddd116101cc57806318160ddd146102c157806323b872dd146102d65780632d99d32e146102f6578063313ce5671461031857600080fd5b80630445b6671461020957806306fdde0314610232578063095ea7b3146102545780631694505e1461028457600080fd5b3661020457005b600080fd5b34801561021557600080fd5b5061021f60065481565b6040519081526020015b60405180910390f35b34801561023e57600080fd5b506102476106ab565b6040516102299190611c61565b34801561026057600080fd5b5061027461026f366004611bbc565b61073d565b6040519015158152602001610229565b34801561029057600080fd5b50600c546102a99061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610229565b3480156102cd57600080fd5b5060025461021f565b3480156102e257600080fd5b506102746102f1366004611b4d565b610755565b34801561030257600080fd5b50610316610311366004611b8e565b610779565b005b34801561032457600080fd5b5060405160128152602001610229565b34801561034057600080fd5b5061027461034f366004611bbc565b61080e565b34801561036057600080fd5b5061037461036f366004611c48565b610830565b60405161ffff9091168152602001610229565b34801561039357600080fd5b506103166103a2366004611c48565b61085e565b3480156103b357600080fd5b50600d546102a9906001600160a01b031681565b3480156103d357600080fd5b506103166103e2366004611c05565b61086b565b3480156103f357600080fd5b50610274610402366004611ad3565b600a6020526000908152604090205460ff1681565b34801561042357600080fd5b50610274610432366004611ad3565b600f6020526000908152604090205460ff1681565b34801561045357600080fd5b5061021f610462366004611ad3565b6001600160a01b031660009081526020819052604090205490565b34801561048957600080fd5b50610316610a2b565b34801561049e57600080fd5b506102746104ad366004611ad3565b600e6020526000908152604090205460ff1681565b3480156104ce57600080fd5b506103166104dd366004611bbc565b610a3f565b3480156104ee57600080fd5b506103166104fd366004611bbc565b610a54565b34801561050e57600080fd5b506005546001600160a01b03166102a9565b34801561052c57600080fd5b5061037461053b366004611c48565b610b6b565b34801561054c57600080fd5b50610247610b7b565b34801561056157600080fd5b50610274610570366004611bbc565b610b8a565b34801561058157600080fd5b506008546102a9906001600160a01b031681565b3480156105a157600080fd5b506102746105b0366004611bbc565b610c05565b3480156105c157600080fd5b5061021f60105481565b3480156105d757600080fd5b506103166105e6366004611b8e565b610c13565b3480156105f757600080fd5b50610316610606366004611b8e565b610c7b565b34801561061757600080fd5b50610316610626366004611c48565b610cdb565b34801561063757600080fd5b50610316610646366004611ad3565b610d1f565b34801561065757600080fd5b50610316610666366004611c48565b610d86565b34801561067757600080fd5b5061021f610686366004611b14565b610dc3565b34801561069757600080fd5b506103166106a6366004611ad3565b610dee565b6060600380546106ba90611dbd565b80601f01602080910402602001604051908101604052809291908181526020018280546106e690611dbd565b80156107335780601f1061070857610100808354040283529160200191610733565b820191906000526020600020905b81548152906001019060200180831161071657829003601f168201915b5050505050905090565b60003361074b818585610e64565b5060019392505050565b600033610763858285610f88565b61076e858585611002565b506001949350505050565b6107816113e9565b600d546001600160a01b03838116911614156108005760405162461bcd60e51b815260206004820152603360248201527f44656661756c74526f757465723a2043616e6e6f742072656d6f766520696e696044820152721d1a585b081c185a5c88199c9bdb481b1a5cdd606a1b60648201526084015b60405180910390fd5b61080a8282611443565b5050565b60003361074b8185856108218383610dc3565b61082b9190611d4d565b610e64565b600b816003811061084057600080fd5b60109182820401919006600202915054906101000a900461ffff1681565b61086833826114b8565b50565b6108736113e9565b6040805160608101825261ffff808616825284811660208301528316918101919091526108a4906009906003611a11565b506009546108b79061ffff166000611d27565b600b805461ffff191661ffff9283161790556009546108df9162010000909104166000611d27565b600b805463ffff000019166201000061ffff9384160217905560095461091091640100000000909104166000611d27565b600b805461ffff9283166401000000000265ffff0000000019821681179092556109c49083169190921617118015906109585750600b546109c46201000090910461ffff1611155b80156109755750600b546109c464010000000090910461ffff1611155b6109e05760405162461bcd60e51b815260206004820152603660248201527f546178657344656661756c74526f757465723a2043616e6e6f7420657863656560448201527564206d617820746f74616c20666565206f662032352560501b60648201526084016107f7565b6040805161ffff8581168252848116602083015283168183015290517f1e5d76e30cd4303515f118e75cbf9d9440bb68ab78b2c2fa46984200dc11ad649181900360600190a1505050565b610a336113e9565b610a3d60006115f1565b565b610a4a823383610f88565b61080a82826114b8565b610a5c6113e9565b6001600160a01b038216301415610ac55760405162461bcd60e51b815260206004820152602760248201527f546f6b656e5265636f7665723a2043616e6e6f74207265636f7665722074686960448201526639903a37b5b2b760c91b60648201526084016107f7565b816001600160a01b031663a9059cbb610ae66005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b158015610b2e57600080fd5b505af1158015610b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b669190611be8565b505050565b6009816003811061084057600080fd5b6060600480546106ba90611dbd565b60003381610b988286610dc3565b905083811015610bf85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107f7565b61076e8286868403610e64565b60003361074b818585611002565b610c1b6113e9565b6001600160a01b0382166000818152600a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b610c836113e9565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc929101610c6f565b610ce36113e9565b60108190556040518181527f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001906020015b60405180910390a150565b610d276113e9565b600880546001600160a01b0319166001600160a01b038316179055610d4d816001610c13565b6040516001600160a01b03821681527feaf1986d341c3096d2d5d32f86ed29a21fee4e0d8365cd2b6fa85c0ec6889cf690602001610d14565b610d8e6113e9565b60068190556040518181527f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd0647690602001610d14565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610df66113e9565b6001600160a01b038116610e5b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107f7565b610868816115f1565b6001600160a01b038316610ec65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107f7565b6001600160a01b038216610f275760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107f7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610f948484610dc3565b90506000198114610ffc5781811015610fef5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107f7565b610ffc8484848403610e64565b50505050565b600060065460075460006110169190611d4d565b600c54911115915060ff1615801561104757506001600160a01b0384166000908152600e602052604090205460ff16155b80156110505750805b156111c357600c805460ff19166001179055600060075411156111b8576000600754600061107e9190611d4d565b9050600061108b82611643565b6007544790600090849061109f9084611d87565b6110a99190611d65565b6008546040519192506001600160a01b0316908290600081818185875af1925050503d80600081146110f7576040519150601f19603f3d011682016040523d82523d6000602084013e6110fc565b606091505b505080935050826111685760405162461bcd60e51b815260206004820152603060248201527f546178657344656661756c74526f7574657257616c6c6574436f696e3a20466560448201526f32903a3930b739b332b91032b93937b960811b60648201526084016107f7565b600854604080516001600160a01b039092168252602082018390527f3e6afd69feef8f4cc1adbe6d3905e477db85aa5aa28d02674dc4bc6d39237fe4910160405180910390a15050600060075550505b600c805460ff191690555b600c5460ff161580156111d65750600082115b80156111f55750600c546001600160a01b038481166101009092041614155b801561121a57506001600160a01b0384166000908152600a602052604090205460ff16155b801561123f57506001600160a01b0383166000908152600a602052604090205460ff16155b156113de576001600160a01b0384166000908152600e602052604081205460039060ff161561127d57600b5461ffff1615611278575060005b6112d0565b6001600160a01b0385166000908152600e602052604090205460ff16156112b857600b5462010000900461ffff1615611278575060016112d0565b600b54640100000000900461ffff16156112d0575060025b60038160ff1610156113ca57612710600b8260ff16600381106112f5576112f5611e0e565b601091828204019190066002029054906101000a900461ffff1661ffff168561131e9190611d87565b6113289190611d65565b91506113348285611da6565b9350600b8160ff166003811061134c5761134c611e0e565b601091828204019190066002029054906101000a900461ffff1661ffff1660098260ff166003811061138057611380611e0e565b601091828204019190066002029054906101000a900461ffff1661ffff16836113a99190611d87565b6113b39190611d65565b600760008282546113c49190611d4d565b90915550505b81156113db576113db8630846117cf565b50505b610ffc8484846117cf565b6005546001600160a01b03163314610a3d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107f7565b6001600160a01b0382166000908152600e60205260409020805460ff1916821580159190911790915561147b5761147b826001610c7b565b816001600160a01b03167f911aa18ddbbbc33c9b4c704a71bdaa0984b0aa2e82726a7f51e64bad0b0a845582604051610c6f911515815260200190565b6001600160a01b0382166115185760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107f7565b6001600160a01b0382166000908152602081905260409020548181101561158c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016107f7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610b6683600084611975565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061167857611678611e0e565b60200260200101906001600160a01b031690816001600160a01b031681525050600c60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156116e657600080fd5b505afa1580156116fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171e9190611af7565b8160018151811061173157611731611e0e565b6001600160a01b039283166020918202929092010152600c5461175c91309161010090041684610e64565b600c5460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790611799908590600090869030904290600401611cb6565b600060405180830381600087803b1580156117b357600080fd5b505af11580156117c7573d6000803e3d6000fd5b505050505050565b6001600160a01b0383166118335760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107f7565b6001600160a01b0382166118955760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107f7565b6001600160a01b0383166000908152602081905260409020548181101561190d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107f7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ffc8484845b6001600160a01b0382166000908152600f602052604090205460ff16610b66576010546001600160a01b0383166000908152602081905260409020541115610b665760405162461bcd60e51b815260206004820152602960248201527f4d617857616c6c65743a2043616e6e6f7420657863656564206d61782077616c6044820152681b195d081b1a5b5a5d60ba1b60648201526084016107f7565b600183019183908215611a975791602002820160005b83821115611a6757835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302611a27565b8015611a955782816101000a81549061ffff0219169055600201602081600101049283019260010302611a67565b505b50611aa3929150611aa7565b5090565b5b80821115611aa35760008155600101611aa8565b803561ffff81168114611ace57600080fd5b919050565b600060208284031215611ae557600080fd5b8135611af081611e24565b9392505050565b600060208284031215611b0957600080fd5b8151611af081611e24565b60008060408385031215611b2757600080fd5b8235611b3281611e24565b91506020830135611b4281611e24565b809150509250929050565b600080600060608486031215611b6257600080fd5b8335611b6d81611e24565b92506020840135611b7d81611e24565b929592945050506040919091013590565b60008060408385031215611ba157600080fd5b8235611bac81611e24565b91506020830135611b4281611e39565b60008060408385031215611bcf57600080fd5b8235611bda81611e24565b946020939093013593505050565b600060208284031215611bfa57600080fd5b8151611af081611e39565b600080600060608486031215611c1a57600080fd5b611c2384611abc565b9250611c3160208501611abc565b9150611c3f60408501611abc565b90509250925092565b600060208284031215611c5a57600080fd5b5035919050565b600060208083528351808285015260005b81811015611c8e57858101830151858201604001528201611c72565b81811115611ca0576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611d065784516001600160a01b031683529383019391830191600101611ce1565b50506001600160a01b03969096166060850152505050608001529392505050565b600061ffff808316818516808303821115611d4457611d44611df8565b01949350505050565b60008219821115611d6057611d60611df8565b500190565b600082611d8257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611da157611da1611df8565b500290565b600082821015611db857611db8611df8565b500390565b600181811c90821680611dd157607f821691505b60208210811415611df257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461086857600080fd5b801515811461086857600080fdfea2646970667358221220402ffd8a358187627af9604e2fe49b41d8f77b0d506177405b4d5f3955a7089e64736f6c63430008070033
0x60806040523480156200001157600080fd5b50604080518082018252600d81526c29b434b130b934bab690233ab960991b60208083019182528351808501909452600784526629a424a1232aa960c91b908401528151919291620000669160039162000a9e565b5080516200007c90600490602084019062000a9e565b5050506200009962000093620001f460201b60201c565b620001f8565b73ef76e630f53b3a5e1c4ce3774cbb5e38f3ed031a620000d4620000c06012600a62000c96565b620000ce906101f462000d57565b6200024a565b620000f373ef76e630f53b3a5e1c4ce3774cbb5e38f3ed031a62000290565b620001056101906103206000620002fc565b62000112816001620004d4565b6200011f306001620004d4565b6200013e737a250d5630b4cf539739df2c5dacb4c659f2488d6200053e565b6200014b81600162000789565b6200015830600162000789565b620001666000600162000789565b6008546200017f906001600160a01b0316600162000789565b620001a6620001916012600a62000c96565b620001a090620124f862000d57565b620007ec565b620001ce81620001b96012600a62000c96565b620001c890620f424062000d57565b6200082c565b620001ed73ef76e630f53b3a5e1c4ce3774cbb5e38f3ed031a620001f8565b5062000dcc565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620002546200090b565b60068190556040518181527f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd06476906020015b60405180910390a150565b6200029a6200090b565b600880546001600160a01b0319166001600160a01b038316179055620002c2816001620004d4565b6040516001600160a01b03821681527feaf1986d341c3096d2d5d32f86ed29a21fee4e0d8365cd2b6fa85c0ec6889cf69060200162000285565b620003066200090b565b6040805160608101825261ffff808616825284811660208301528316918101919091526200033990600990600362000b2d565b506009546200034e9061ffff16600062000c09565b600b805461ffff191661ffff92831617905560095462000378916201000090910416600062000c09565b600b805463ffff000019166201000061ffff93841602179055600954620003ab9164010000000090910416600062000c09565b600b805461ffff9283166401000000000261ffff60201b19821681179092556109c4908316919092161711801590620003f35750600b546109c46201000090910461ffff1611155b8015620004115750600b546109c464010000000090910461ffff1611155b620004895760405162461bcd60e51b815260206004820152603660248201527f546178657344656661756c74526f757465723a2043616e6e6f7420657863656560448201527f64206d617820746f74616c20666565206f66203235250000000000000000000060648201526084015b60405180910390fd5b6040805161ffff8581168252848116602083015283168183015290517f1e5d76e30cd4303515f118e75cbf9d9440bb68ab78b2c2fa46984200dc11ad649181900360600190a1505050565b620004de6200090b565b6001600160a01b0382166000818152600a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b80600c60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550600c60019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620005b457600080fd5b505afa158015620005c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005ef919062000bd7565b6001600160a01b031663c9c6539630600c60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200064d57600080fd5b505afa15801562000662573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000688919062000bd7565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620006d157600080fd5b505af1158015620006e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200070c919062000bd7565b600d80546001600160a01b0319166001600160a01b03929092169190911790556200073981600162000789565b600d5462000752906001600160a01b0316600162000969565b6040516001600160a01b038216907f7e0f425e693a3591da35eee37f8ada3aadc3632fa8ffbcecac1341351c8ece6690600090a250565b620007936200090b565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92910162000532565b620007f66200090b565b60108190556040518181527f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e0019060200162000285565b6001600160a01b038216620008845760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000480565b6200089260008383620009e2565b8060026000828254620008a6919062000c32565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36200090760008383620009ff565b5050565b6005546001600160a01b03163314620009675760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000480565b565b6001600160a01b0382166000908152600e60205260409020805460ff19168215801591909117909155620009a457620009a482600162000789565b816001600160a01b03167f911aa18ddbbbc33c9b4c704a71bdaa0984b0aa2e82726a7f51e64bad0b0a84558260405162000532911515815260200190565b620009fa838383620009fa60201b62000b661760201c565b505050565b6001600160a01b0382166000908152600f602052604090205460ff16620009e2576010546001600160a01b0383166000908152602081905260409020541115620009e25760405162461bcd60e51b815260206004820152602960248201527f4d617857616c6c65743a2043616e6e6f7420657863656564206d61782077616c6044820152681b195d081b1a5b5a5d60ba1b606482015260840162000480565b82805462000aac9062000d79565b90600052602060002090601f01602090048101928262000ad0576000855562000b1b565b82601f1062000aeb57805160ff191683800117855562000b1b565b8280016001018555821562000b1b579182015b8281111562000b1b57825182559160200191906001019062000afe565b5062000b2992915062000bc0565b5090565b60018301918390821562000b1b5791602002820160005b8382111562000b8657835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262000b44565b801562000bb65782816101000a81549061ffff021916905560020160208160010104928301926001030262000b86565b505062000b299291505b5b8082111562000b29576000815560010162000bc1565b60006020828403121562000bea57600080fd5b81516001600160a01b038116811462000c0257600080fd5b9392505050565b600061ffff80831681851680830382111562000c295762000c2962000db6565b01949350505050565b6000821982111562000c485762000c4862000db6565b500190565b600181815b8085111562000c8e57816000190482111562000c725762000c7262000db6565b8085161562000c8057918102915b93841c939080029062000c52565b509250929050565b600062000c0260ff84168360008262000cb25750600162000d51565b8162000cc15750600062000d51565b816001811462000cda576002811462000ce55762000d05565b600191505062000d51565b60ff84111562000cf95762000cf962000db6565b50506001821b62000d51565b5060208310610133831016604e8410600b841016171562000d2a575081810a62000d51565b62000d36838362000c4d565b806000190482111562000d4d5762000d4d62000db6565b0290505b92915050565b600081600019048311821515161562000d745762000d7462000db6565b500290565b600181811c9082168062000d8e57607f821691505b6020821081141562000db057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b611e7d8062000ddc6000396000f3fe6080604052600436106101fd5760003560e01c8063768565571161010d578063a9059cbb116100a0578063c18bc1951161006f578063c18bc1951461060b578063c400f5e71461062b578063cc274b291461064b578063dd62ed3e1461066b578063f2fde38b1461068b57600080fd5b8063a9059cbb14610595578063aa4bde28146105b5578063c0246668146105cb578063c0a904a2146105eb57600080fd5b80638e749a8f116100dc5780638e749a8f1461052057806395d89b4114610540578063a457c2d714610555578063a5ece9411461057557600080fd5b8063768565571461049257806379cc6790146104c25780638980f11f146104e25780638da5cb5b1461050257600080fd5b806339509351116101905780634a4dd9cd1161015f5780634a4dd9cd146103c75780634fbee193146103e75780635cce86cd1461041757806370a0823114610447578063715018a61461047d57600080fd5b80633950935114610334578063408ccbdf1461035457806342966c681461038757806349bd5a5e146103a757600080fd5b806318160ddd116101cc57806318160ddd146102c157806323b872dd146102d65780632d99d32e146102f6578063313ce5671461031857600080fd5b80630445b6671461020957806306fdde0314610232578063095ea7b3146102545780631694505e1461028457600080fd5b3661020457005b600080fd5b34801561021557600080fd5b5061021f60065481565b6040519081526020015b60405180910390f35b34801561023e57600080fd5b506102476106ab565b6040516102299190611c61565b34801561026057600080fd5b5061027461026f366004611bbc565b61073d565b6040519015158152602001610229565b34801561029057600080fd5b50600c546102a99061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610229565b3480156102cd57600080fd5b5060025461021f565b3480156102e257600080fd5b506102746102f1366004611b4d565b610755565b34801561030257600080fd5b50610316610311366004611b8e565b610779565b005b34801561032457600080fd5b5060405160128152602001610229565b34801561034057600080fd5b5061027461034f366004611bbc565b61080e565b34801561036057600080fd5b5061037461036f366004611c48565b610830565b60405161ffff9091168152602001610229565b34801561039357600080fd5b506103166103a2366004611c48565b61085e565b3480156103b357600080fd5b50600d546102a9906001600160a01b031681565b3480156103d357600080fd5b506103166103e2366004611c05565b61086b565b3480156103f357600080fd5b50610274610402366004611ad3565b600a6020526000908152604090205460ff1681565b34801561042357600080fd5b50610274610432366004611ad3565b600f6020526000908152604090205460ff1681565b34801561045357600080fd5b5061021f610462366004611ad3565b6001600160a01b031660009081526020819052604090205490565b34801561048957600080fd5b50610316610a2b565b34801561049e57600080fd5b506102746104ad366004611ad3565b600e6020526000908152604090205460ff1681565b3480156104ce57600080fd5b506103166104dd366004611bbc565b610a3f565b3480156104ee57600080fd5b506103166104fd366004611bbc565b610a54565b34801561050e57600080fd5b506005546001600160a01b03166102a9565b34801561052c57600080fd5b5061037461053b366004611c48565b610b6b565b34801561054c57600080fd5b50610247610b7b565b34801561056157600080fd5b50610274610570366004611bbc565b610b8a565b34801561058157600080fd5b506008546102a9906001600160a01b031681565b3480156105a157600080fd5b506102746105b0366004611bbc565b610c05565b3480156105c157600080fd5b5061021f60105481565b3480156105d757600080fd5b506103166105e6366004611b8e565b610c13565b3480156105f757600080fd5b50610316610606366004611b8e565b610c7b565b34801561061757600080fd5b50610316610626366004611c48565b610cdb565b34801561063757600080fd5b50610316610646366004611ad3565b610d1f565b34801561065757600080fd5b50610316610666366004611c48565b610d86565b34801561067757600080fd5b5061021f610686366004611b14565b610dc3565b34801561069757600080fd5b506103166106a6366004611ad3565b610dee565b6060600380546106ba90611dbd565b80601f01602080910402602001604051908101604052809291908181526020018280546106e690611dbd565b80156107335780601f1061070857610100808354040283529160200191610733565b820191906000526020600020905b81548152906001019060200180831161071657829003601f168201915b5050505050905090565b60003361074b818585610e64565b5060019392505050565b600033610763858285610f88565b61076e858585611002565b506001949350505050565b6107816113e9565b600d546001600160a01b03838116911614156108005760405162461bcd60e51b815260206004820152603360248201527f44656661756c74526f757465723a2043616e6e6f742072656d6f766520696e696044820152721d1a585b081c185a5c88199c9bdb481b1a5cdd606a1b60648201526084015b60405180910390fd5b61080a8282611443565b5050565b60003361074b8185856108218383610dc3565b61082b9190611d4d565b610e64565b600b816003811061084057600080fd5b60109182820401919006600202915054906101000a900461ffff1681565b61086833826114b8565b50565b6108736113e9565b6040805160608101825261ffff808616825284811660208301528316918101919091526108a4906009906003611a11565b506009546108b79061ffff166000611d27565b600b805461ffff191661ffff9283161790556009546108df9162010000909104166000611d27565b600b805463ffff000019166201000061ffff9384160217905560095461091091640100000000909104166000611d27565b600b805461ffff9283166401000000000265ffff0000000019821681179092556109c49083169190921617118015906109585750600b546109c46201000090910461ffff1611155b80156109755750600b546109c464010000000090910461ffff1611155b6109e05760405162461bcd60e51b815260206004820152603660248201527f546178657344656661756c74526f757465723a2043616e6e6f7420657863656560448201527564206d617820746f74616c20666565206f662032352560501b60648201526084016107f7565b6040805161ffff8581168252848116602083015283168183015290517f1e5d76e30cd4303515f118e75cbf9d9440bb68ab78b2c2fa46984200dc11ad649181900360600190a1505050565b610a336113e9565b610a3d60006115f1565b565b610a4a823383610f88565b61080a82826114b8565b610a5c6113e9565b6001600160a01b038216301415610ac55760405162461bcd60e51b815260206004820152602760248201527f546f6b656e5265636f7665723a2043616e6e6f74207265636f7665722074686960448201526639903a37b5b2b760c91b60648201526084016107f7565b816001600160a01b031663a9059cbb610ae66005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b158015610b2e57600080fd5b505af1158015610b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b669190611be8565b505050565b6009816003811061084057600080fd5b6060600480546106ba90611dbd565b60003381610b988286610dc3565b905083811015610bf85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107f7565b61076e8286868403610e64565b60003361074b818585611002565b610c1b6113e9565b6001600160a01b0382166000818152600a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b610c836113e9565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc929101610c6f565b610ce36113e9565b60108190556040518181527f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001906020015b60405180910390a150565b610d276113e9565b600880546001600160a01b0319166001600160a01b038316179055610d4d816001610c13565b6040516001600160a01b03821681527feaf1986d341c3096d2d5d32f86ed29a21fee4e0d8365cd2b6fa85c0ec6889cf690602001610d14565b610d8e6113e9565b60068190556040518181527f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd0647690602001610d14565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610df66113e9565b6001600160a01b038116610e5b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107f7565b610868816115f1565b6001600160a01b038316610ec65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107f7565b6001600160a01b038216610f275760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107f7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610f948484610dc3565b90506000198114610ffc5781811015610fef5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107f7565b610ffc8484848403610e64565b50505050565b600060065460075460006110169190611d4d565b600c54911115915060ff1615801561104757506001600160a01b0384166000908152600e602052604090205460ff16155b80156110505750805b156111c357600c805460ff19166001179055600060075411156111b8576000600754600061107e9190611d4d565b9050600061108b82611643565b6007544790600090849061109f9084611d87565b6110a99190611d65565b6008546040519192506001600160a01b0316908290600081818185875af1925050503d80600081146110f7576040519150601f19603f3d011682016040523d82523d6000602084013e6110fc565b606091505b505080935050826111685760405162461bcd60e51b815260206004820152603060248201527f546178657344656661756c74526f7574657257616c6c6574436f696e3a20466560448201526f32903a3930b739b332b91032b93937b960811b60648201526084016107f7565b600854604080516001600160a01b039092168252602082018390527f3e6afd69feef8f4cc1adbe6d3905e477db85aa5aa28d02674dc4bc6d39237fe4910160405180910390a15050600060075550505b600c805460ff191690555b600c5460ff161580156111d65750600082115b80156111f55750600c546001600160a01b038481166101009092041614155b801561121a57506001600160a01b0384166000908152600a602052604090205460ff16155b801561123f57506001600160a01b0383166000908152600a602052604090205460ff16155b156113de576001600160a01b0384166000908152600e602052604081205460039060ff161561127d57600b5461ffff1615611278575060005b6112d0565b6001600160a01b0385166000908152600e602052604090205460ff16156112b857600b5462010000900461ffff1615611278575060016112d0565b600b54640100000000900461ffff16156112d0575060025b60038160ff1610156113ca57612710600b8260ff16600381106112f5576112f5611e0e565b601091828204019190066002029054906101000a900461ffff1661ffff168561131e9190611d87565b6113289190611d65565b91506113348285611da6565b9350600b8160ff166003811061134c5761134c611e0e565b601091828204019190066002029054906101000a900461ffff1661ffff1660098260ff166003811061138057611380611e0e565b601091828204019190066002029054906101000a900461ffff1661ffff16836113a99190611d87565b6113b39190611d65565b600760008282546113c49190611d4d565b90915550505b81156113db576113db8630846117cf565b50505b610ffc8484846117cf565b6005546001600160a01b03163314610a3d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107f7565b6001600160a01b0382166000908152600e60205260409020805460ff1916821580159190911790915561147b5761147b826001610c7b565b816001600160a01b03167f911aa18ddbbbc33c9b4c704a71bdaa0984b0aa2e82726a7f51e64bad0b0a845582604051610c6f911515815260200190565b6001600160a01b0382166115185760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107f7565b6001600160a01b0382166000908152602081905260409020548181101561158c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016107f7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610b6683600084611975565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061167857611678611e0e565b60200260200101906001600160a01b031690816001600160a01b031681525050600c60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156116e657600080fd5b505afa1580156116fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171e9190611af7565b8160018151811061173157611731611e0e565b6001600160a01b039283166020918202929092010152600c5461175c91309161010090041684610e64565b600c5460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790611799908590600090869030904290600401611cb6565b600060405180830381600087803b1580156117b357600080fd5b505af11580156117c7573d6000803e3d6000fd5b505050505050565b6001600160a01b0383166118335760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107f7565b6001600160a01b0382166118955760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107f7565b6001600160a01b0383166000908152602081905260409020548181101561190d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107f7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ffc8484845b6001600160a01b0382166000908152600f602052604090205460ff16610b66576010546001600160a01b0383166000908152602081905260409020541115610b665760405162461bcd60e51b815260206004820152602960248201527f4d617857616c6c65743a2043616e6e6f7420657863656564206d61782077616c6044820152681b195d081b1a5b5a5d60ba1b60648201526084016107f7565b600183019183908215611a975791602002820160005b83821115611a6757835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302611a27565b8015611a955782816101000a81549061ffff0219169055600201602081600101049283019260010302611a67565b505b50611aa3929150611aa7565b5090565b5b80821115611aa35760008155600101611aa8565b803561ffff81168114611ace57600080fd5b919050565b600060208284031215611ae557600080fd5b8135611af081611e24565b9392505050565b600060208284031215611b0957600080fd5b8151611af081611e24565b60008060408385031215611b2757600080fd5b8235611b3281611e24565b91506020830135611b4281611e24565b809150509250929050565b600080600060608486031215611b6257600080fd5b8335611b6d81611e24565b92506020840135611b7d81611e24565b929592945050506040919091013590565b60008060408385031215611ba157600080fd5b8235611bac81611e24565b91506020830135611b4281611e39565b60008060408385031215611bcf57600080fd5b8235611bda81611e24565b946020939093013593505050565b600060208284031215611bfa57600080fd5b8151611af081611e39565b600080600060608486031215611c1a57600080fd5b611c2384611abc565b9250611c3160208501611abc565b9150611c3f60408501611abc565b90509250925092565b600060208284031215611c5a57600080fd5b5035919050565b600060208083528351808285015260005b81811015611c8e57858101830151858201604001528201611c72565b81811115611ca0576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611d065784516001600160a01b031683529383019391830191600101611ce1565b50506001600160a01b03969096166060850152505050608001529392505050565b600061ffff808316818516808303821115611d4457611d44611df8565b01949350505050565b60008219821115611d6057611d60611df8565b500190565b600082611d8257634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611da157611da1611df8565b500290565b600082821015611db857611db8611df8565b500390565b600181811c90821680611dd157607f821691505b60208210811415611df257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461086857600080fd5b801515811461086857600080fdfea2646970667358221220402ffd8a358187627af9604e2fe49b41d8f77b0d506177405b4d5f3955a7089e64736f6c63430008070033