60806040523480156200001157600080fd5b50604080518082018252600680825265596f62616d6160d01b602080840182905284518086019095529184529083015290600362000050838262000829565b5060046200005f828262000829565b5050506200007c620000766200016b60201b60201c565b6200016f565b7369a28d9d5569597a2bf7a8daa1b77f02a9215069620000c6600a620000a460128262000a0a565b620000b4906314b05b9762000a22565b620000c0919062000a3c565b620001c1565b620000e57369a28d9d5569597a2bf7a8daa1b77f02a921506962000207565b620000f4604580600062000304565b6200010181600162000513565b6200010e30600162000513565b6200014581600a6200012260128262000a0a565b620001339064a1a1cb84a862000a22565b6200013f919062000a3c565b6200057c565b620001647369a28d9d5569597a2bf7a8daa1b77f02a92150696200016f565b5062000ab8565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620001cb6200065b565b60068190556040518181527f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd06476906020015b60405180910390a150565b620002116200065b565b6001600160a01b038116620002a25760405162461bcd60e51b815260206004820152604660248201527f546178657344656661756c74526f7574657257616c6c65743a2057616c6c657460448201527f2074617820726563697069656e742063616e6e6f74206265206120307830206160648201526564647265737360d01b608482015260a4015b60405180910390fd5b600880546001600160a01b0319166001600160a01b038316179055620002ca81600162000513565b6040516001600160a01b03821681527f9e4894beffbdbd76a8fa3bfd5c2ebeb5ed955735156ae87914de5669c93ceb1c90602001620001fc565b6200030e6200065b565b600954600b548491620003299161ffff918216911662000a5f565b62000335919062000a84565b600b805461ffff191661ffff928316179081905560095484926200036792620100009283900482169290041662000a5f565b62000373919062000a84565b600b805463ffff000019166201000061ffff9384160217908190556009548392620003ae926401000000009283900482169290041662000a5f565b620003ba919062000a84565b600b805461ffff9283166401000000000261ffff60201b19821681179092556109c4908316919092161711801590620004025750600b546109c46201000090910461ffff1611155b8015620004205750600b546109c464010000000090910461ffff1611155b620004945760405162461bcd60e51b815260206004820152603660248201527f546178657344656661756c74526f757465723a2043616e6e6f7420657863656560448201527f64206d617820746f74616c20666565206f662032352500000000000000000000606482015260840162000299565b6040805160608101825261ffff80861682528481166020830152831691810191909152620004c7906009906003620006d1565b506040805161ffff8581168252848116602083015283168183015290517fede8560b47d4c517d17e5fa1b33ed31b5d71d59df63b986ee6c084da9d436ac49181900360600190a1505050565b6200051d6200065b565b6001600160a01b0382166000818152600a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005d45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000299565b620005e260008383620006b9565b8060026000828254620005f6919062000aa2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36200065760008383620006b9565b5050565b6005546001600160a01b03163314620006b75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000299565b565b620006cc8383836001600160e01b038416565b505050565b6001830191839082156200075c5791602002820160005b838211156200072a57835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302620006e8565b80156200075a5782816101000a81549061ffff02191690556002016020816001010492830192600103026200072a565b505b506200076a9291506200076e565b5090565b5b808211156200076a57600081556001016200076f565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007b057607f821691505b602082108103620007d157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006cc57600081815260208120601f850160051c81016020861015620008005750805b601f850160051c820191505b8181101562000821578281556001016200080c565b505050505050565b81516001600160401b0381111562000845576200084562000785565b6200085d816200085684546200079b565b84620007d7565b602080601f8311600181146200089557600084156200087c5750858301515b600019600386901b1c1916600185901b17855562000821565b600085815260208120601f198616915b82811015620008c657888601518255948401946001909101908401620008a5565b5085821015620008e55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200094c578160001904821115620009305762000930620008f5565b808516156200093e57918102915b93841c939080029062000910565b509250929050565b600082620009655750600162000a04565b81620009745750600062000a04565b81600181146200098d57600281146200099857620009b8565b600191505062000a04565b60ff841115620009ac57620009ac620008f5565b50506001821b62000a04565b5060208310610133831016604e8410600b8410161715620009dd575081810a62000a04565b620009e983836200090b565b806000190482111562000a005762000a00620008f5565b0290505b92915050565b600062000a1b60ff84168362000954565b9392505050565b808202811582820484141762000a045762000a04620008f5565b60008262000a5a57634e487b7160e01b600052601260045260246000fd5b500490565b61ffff82811682821603908082111562000a7d5762000a7d620008f5565b5092915050565b61ffff81811683821601908082111562000a7d5762000a7d620008f5565b8082018082111562000a045762000a04620008f5565b611e4f8062000ac86000396000f3fe6080604052600436106101dc5760003560e01c80637685655711610102578063a9059cbb11610095578063ce790bbf11610064578063ce790bbf146105a4578063dd62ed3e146105c4578063f112ba72146105e4578063f2fde38b146105f957600080fd5b8063a9059cbb14610524578063c024666814610544578063c4d66de814610564578063cc274b291461058457600080fd5b806395d89b41116100d157806395d89b41146104af5780639a62a55a146104c4578063a2ac149a146104e4578063a457c2d71461050457600080fd5b8063768565571461042157806379cc6790146104515780638da5cb5b146104715780638fffabed1461048f57600080fd5b8063313ce5671161017a5780634fbee193116101495780634fbee19314610369578063502f74461461039957806370a08231146103d6578063715018a61461040c57600080fd5b8063313ce567146102ed5780633950935114610309578063408ccbdf1461032957806342966c681461034957600080fd5b806318160ddd116101b657806318160ddd1461026357806323b872dd14610278578063255bf6b3146102985780632d99d32e146102cb57600080fd5b80630445b667146101e857806306fdde0314610211578063095ea7b31461023357600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b506101fe60065481565b6040519081526020015b60405180910390f35b34801561021d57600080fd5b50610226610619565b6040516102089190611ab6565b34801561023f57600080fd5b5061025361024e366004611b19565b6106ab565b6040519015158152602001610208565b34801561026f57600080fd5b506002546101fe565b34801561028457600080fd5b50610253610293366004611b45565b6106c5565b3480156102a457600080fd5b506102b86102b3366004611b86565b6106e9565b60405161ffff9091168152602001610208565b3480156102d757600080fd5b506102eb6102e6366004611b9f565b610717565b005b3480156102f957600080fd5b5060405160128152602001610208565b34801561031557600080fd5b50610253610324366004611b19565b6107ac565b34801561033557600080fd5b506102b8610344366004611b86565b6107ce565b34801561035557600080fd5b506102eb610364366004611b86565b6107de565b34801561037557600080fd5b50610253610384366004611bdd565b600a6020526000908152604090205460ff1681565b3480156103a557600080fd5b50600c546103be9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610208565b3480156103e257600080fd5b506101fe6103f1366004611bdd565b6001600160a01b031660009081526020819052604090205490565b34801561041857600080fd5b506102eb6107eb565b34801561042d57600080fd5b5061025361043c366004611bdd565b600e6020526000908152604090205460ff1681565b34801561045d57600080fd5b506102eb61046c366004611b19565b6107ff565b34801561047d57600080fd5b506005546001600160a01b03166103be565b34801561049b57600080fd5b50600d546103be906001600160a01b031681565b3480156104bb57600080fd5b50610226610814565b3480156104d057600080fd5b506102eb6104df366004611c18565b610823565b3480156104f057600080fd5b506008546103be906001600160a01b031681565b34801561051057600080fd5b5061025361051f366004611b19565b610a18565b34801561053057600080fd5b5061025361053f366004611b19565b610a93565b34801561055057600080fd5b506102eb61055f366004611b9f565b610aa1565b34801561057057600080fd5b506102eb61057f366004611bdd565b610b09565b34801561059057600080fd5b506102eb61059f366004611b86565b610bd8565b3480156105b057600080fd5b506102eb6105bf366004611bdd565b610c1c565b3480156105d057600080fd5b506101fe6105df366004611c5b565b610d0e565b3480156105f057600080fd5b506101fe610d39565b34801561060557600080fd5b506102eb610614366004611bdd565b610d4f565b60606003805461062890611c89565b80601f016020809104026020016040519081016040528092919081815260200182805461065490611c89565b80156106a15780601f10610676576101008083540402835291602001916106a1565b820191906000526020600020905b81548152906001019060200180831161068457829003601f168201915b5050505050905090565b6000336106b9818585610dc5565b60019150505b92915050565b6000336106d3858285610ee9565b6106de858585610f63565b506001949350505050565b600981600381106106f957600080fd5b60109182820401919006600202915054906101000a900461ffff1681565b61071f6112be565b600d546001600160a01b039081169083160361079e5760405162461bcd60e51b815260206004820152603360248201527f44656661756c74526f757465723a2043616e6e6f742072656d6f766520696e696044820152721d1a585b081c185a5c88199c9bdb481b1a5cdd606a1b60648201526084015b60405180910390fd5b6107a88282611318565b5050565b6000336106b98185856107bf8383610d0e565b6107c99190611cd9565b610dc5565b600b81600381106106f957600080fd5b6107e83382611370565b50565b6107f36112be565b6107fd60006114a2565b565b61080a823383610ee9565b6107a88282611370565b60606004805461062890611c89565b61082b6112be565b600954600b5484916108449161ffff9182169116611d02565b61084e9190611d24565b600b805461ffff191661ffff9283161790819055600954849261087e926201000092839004821692900416611d02565b6108889190611d24565b600b805463ffff000019166201000061ffff93841602179081905560095483926108c19264010000000092839004821692900416611d02565b6108cb9190611d24565b600b805461ffff9283166401000000000265ffff0000000019821681179092556109c49083169190921617118015906109135750600b546109c46201000090910461ffff1611155b80156109305750600b546109c464010000000090910461ffff1611155b61099b5760405162461bcd60e51b815260206004820152603660248201527f546178657344656661756c74526f757465723a2043616e6e6f7420657863656560448201527564206d617820746f74616c20666565206f662032352560501b6064820152608401610795565b6040805160608101825261ffff808616825284811660208301528316918101919091526109cc906009906003611a0b565b506040805161ffff8581168252848116602083015283168183015290517fede8560b47d4c517d17e5fa1b33ed31b5d71d59df63b986ee6c084da9d436ac49181900360600190a1505050565b60003381610a268286610d0e565b905083811015610a865760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610795565b6106de8286868403610dc5565b6000336106b9818585610f63565b610aa96112be565b6001600160a01b0382166000818152600a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b600554600160a81b900460ff1680610b2b5750600554600160a01b900460ff16155b610b8e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610795565b600554600160a81b900460ff16158015610bb8576005805461ffff60a01b191661010160a01b1790555b610bc1826114f4565b80156107a8576005805460ff60a81b191690555050565b610be06112be565b60068190556040518181527f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd06476906020015b60405180910390a150565b610c246112be565b6001600160a01b038116610caf5760405162461bcd60e51b815260206004820152604660248201527f546178657344656661756c74526f7574657257616c6c65743a2057616c6c657460448201527f2074617820726563697069656e742063616e6e6f74206265206120307830206160648201526564647265737360d01b608482015260a401610795565b600880546001600160a01b0319166001600160a01b038316179055610cd5816001610aa1565b6040516001600160a01b03821681527f9e4894beffbdbd76a8fa3bfd5c2ebeb5ed955735156ae87914de5669c93ceb1c90602001610c11565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60006007546000610d4a9190611cd9565b905090565b610d576112be565b6001600160a01b038116610dbc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610795565b6107e8816114a2565b6001600160a01b038316610e275760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610795565b6001600160a01b038216610e885760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610795565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610ef58484610d0e565b90506000198114610f5d5781811015610f505760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610795565b610f5d8484848403610dc5565b50505050565b6000600654610f70610d39565b600c54911115915060ff16158015610fa157506001600160a01b0384166000908152600e602052604090205460ff16155b8015610faa5750805b1561109857600c805460ff191660011790556000600754111561108d5760006007546000610fd89190611cd9565b90506000610fe5826116ea565b60075447906000908490610ff99084611d3f565b6110039190611d56565b90508015611083576008546040516001600160a01b039091169082156108fc029083906000818181858888f193505050509250821561108357600854604080516001600160a01b039092168252602082018390527fba6a0513882c0f8c787e327ccdda91d94cec09fc57ccc1cf6de5bcb647f07169910160405180910390a15b5050600060075550505b600c805460ff191690555b600c5460ff161580156110ab5750600082115b80156110ca5750600c546001600160a01b038481166101009092041614155b80156110ef57506001600160a01b0384166000908152600a602052604090205460ff16155b801561111457506001600160a01b0383166000908152600a602052604090205460ff16155b156112b3576001600160a01b0384166000908152600e602052604081205460039060ff161561115257600b5461ffff161561114d575060005b6111a5565b6001600160a01b0385166000908152600e602052604090205460ff161561118d57600b5462010000900461ffff161561114d575060016111a5565b600b54640100000000900461ffff16156111a5575060025b60038160ff16101561129f57612710600b8260ff16600381106111ca576111ca611cec565b601091828204019190066002029054906101000a900461ffff1661ffff16856111f39190611d3f565b6111fd9190611d56565b91506112098285611d78565b9350600b8160ff166003811061122157611221611cec565b601091828204019190066002029054906101000a900461ffff1661ffff1660098260ff166003811061125557611255611cec565b601091828204019190066002029054906101000a900461ffff1661ffff168361127e9190611d3f565b6112889190611d56565b600760008282546112999190611cd9565b90915550505b81156112b0576112b0863084611867565b50505b610f5d848484611867565b6005546001600160a01b031633146107fd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610795565b6001600160a01b0382166000818152600e6020908152604091829020805460ff191685151590811790915591519182527f911aa18ddbbbc33c9b4c704a71bdaa0984b0aa2e82726a7f51e64bad0b0a84559101610afd565b6001600160a01b0382166113d05760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610795565b6001600160a01b038216600090815260208190526040902054818110156114445760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610795565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80600c60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550600c60019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115929190611d8b565b6001600160a01b031663c9c6539630600c60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116189190611d8b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611665573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116899190611d8b565b600d80546001600160a01b0319166001600160a01b039290921691821790556116b3906001611318565b6040516001600160a01b038216907fbc052db65df144ad4f71f02da93cae3d4401104c30ac374d7cc10d87ee07b60290600090a250565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061171f5761171f611cec565b60200260200101906001600160a01b031690816001600160a01b031681525050600c60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b69190611d8b565b816001815181106117c9576117c9611cec565b6001600160a01b039283166020918202929092010152600c546117f491309161010090041684610dc5565b600c5460405163791ac94760e01b81526101009091046001600160a01b03169063791ac94790611831908590600090869030904290600401611da8565b600060405180830381600087803b15801561184b57600080fd5b505af115801561185f573d6000803e3d6000fd5b505050505050565b6001600160a01b0383166118cb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610795565b6001600160a01b03821661192d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610795565b6001600160a01b038316600090815260208190526040902054818110156119a55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610795565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610f5d565b600183019183908215611a915791602002820160005b83821115611a6157835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302611a21565b8015611a8f5782816101000a81549061ffff0219169055600201602081600101049283019260010302611a61565b505b50611a9d929150611aa1565b5090565b5b80821115611a9d5760008155600101611aa2565b600060208083528351808285015260005b81811015611ae357858101830151858201604001528201611ac7565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146107e857600080fd5b60008060408385031215611b2c57600080fd5b8235611b3781611b04565b946020939093013593505050565b600080600060608486031215611b5a57600080fd5b8335611b6581611b04565b92506020840135611b7581611b04565b929592945050506040919091013590565b600060208284031215611b9857600080fd5b5035919050565b60008060408385031215611bb257600080fd5b8235611bbd81611b04565b915060208301358015158114611bd257600080fd5b809150509250929050565b600060208284031215611bef57600080fd5b8135611bfa81611b04565b9392505050565b803561ffff81168114611c1357600080fd5b919050565b600080600060608486031215611c2d57600080fd5b611c3684611c01565b9250611c4460208501611c01565b9150611c5260408501611c01565b90509250925092565b60008060408385031215611c6e57600080fd5b8235611c7981611b04565b91506020830135611bd281611b04565b600181811c90821680611c9d57607f821691505b602082108103611cbd57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156106bf576106bf611cc3565b634e487b7160e01b600052603260045260246000fd5b61ffff828116828216039080821115611d1d57611d1d611cc3565b5092915050565b61ffff818116838216019080821115611d1d57611d1d611cc3565b80820281158282048414176106bf576106bf611cc3565b600082611d7357634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156106bf576106bf611cc3565b600060208284031215611d9d57600080fd5b8151611bfa81611b04565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611df85784516001600160a01b031683529383019391830191600101611dd3565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212200a467f550f6147a3de00f837b2d1e244c1d53c185767631f87b61eccee4ca36864736f6c63430008130033