0x60a06040523480156200001157600080fd5b5060405162002c7838038062002c788339810160408190526200003491620001c0565b600160005533806200006057604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200006b8162000150565b50600380546001600160a01b039092166001600160a01b031990921691909117905563ffffffff42166080526004805463ffffffff60a01b1916600160a01b179055670de0b6b3a7640000600555600f6020527f3e674ca654b1063e821161bbf601452dd0f1671d575d614ba17ca7f3cdc76039805463ffffffff199081166009179091557fa0835dfb354942c4a57679bdba1260f10db93588b8148170551e7265ba885c2f80548216605117905560f360008190527f0aaf2fba39124db2f1c6dcd9f4c3cd5cea685e4df4e8c8da06c01a1136ac9f2b8054909216179055620001f2565b600280546001600160a01b03191690556200016b816200016e565b50565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215620001d357600080fd5b81516001600160a01b0381168114620001eb57600080fd5b9392505050565b608051612a6362000215600039600081816103b801526113650152612a636000f3fe6080604052600436106101fd5760003560e01c806392013f731161010d578063c0e764cb116100a0578063e30c39781161006f578063e30c39781461070d578063e3eb8fec1461072b578063f2fde38b14610740578063faa94d3b14610760578063fbf9529d1461079657600080fd5b8063c0e764cb14610681578063c36e60a9146106a1578063c61697aa146106b6578063cf9a3361146106ed57600080fd5b8063b45efcc9116100dc578063b45efcc9146105fb578063b48a8fa01461061b578063b729bd241461063b578063b92f46cd1461065057600080fd5b806392013f7314610532578063a84dd99314610582578063ad815179146105b9578063aea80d8e146105d957600080fd5b80636e952cb4116101905780637a58ad241161015f5780637a58ad241461048757806386491dd9146104ca5780638ac81ba2146104df5780638da5cb5b146104ff5780638e48426f1461051d57600080fd5b80636e952cb4146103ef578063715018a61461040457806373b714d31461041957806379ba50971461047257600080fd5b8063283c45fd116101cc578063283c45fd146103325780632c1fc4921461035f57806360484f1b1461038f57806364deb928146103a657600080fd5b806301a4146f1461022157806310d3872a1461028e57806313480222146102d257806317b1f1d21461030457600080fd5b3661021c5734600b60008282546102149190612570565b925050819055005b600080fd5b34801561022d57600080fd5b5061027461023c36600461259f565b6001600160a01b039190911660009081526016602090815260408083209383529290522060018101549054909163ffffffff90911690565b604080519283526020830191909152015b60405180910390f35b34801561029a57600080fd5b506102ae6102a93660046125db565b6107ab565b6040805163ffffffff90931683526001600160601b03909116602083015201610285565b3480156102de57600080fd5b506004546001600160a01b03165b6040516001600160a01b039091168152602001610285565b34801561031057600080fd5b5061032461031f36600461260e565b6107f3565b6040516102859291906126ca565b34801561033e57600080fd5b5061035261034d36600461259f565b610986565b6040516102859190612738565b34801561036b57600080fd5b50610374610a73565b60408051938452602084019290925290820152606001610285565b34801561039b57600080fd5b506103a4610a99565b005b3480156103b257600080fd5b506103da7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610285565b3480156103fb57600080fd5b50610374610b2e565b34801561041057600080fd5b506103a4610b49565b34801561042557600080fd5b50610464610434366004612746565b6001600160a01b031660009081526016602090815260408083206015835281842054845290915290206001015490565b604051908152602001610285565b34801561047e57600080fd5b506103a4610b5b565b34801561049357600080fd5b506104646104a236600461259f565b6001600160a01b03919091166000908152601760209081526040808320938352929052205490565b3480156104d657600080fd5b506103a4610ba4565b3480156104eb57600080fd5b50600c5460ff166040516102859190612761565b34801561050b57600080fd5b506001546001600160a01b03166102ec565b34801561052957600080fd5b506103a4610c1d565b34801561053e57600080fd5b5061027461054d366004612774565b61ffff91909116600090815260106020908152604080832063ffffffff94851684529091529020600181015490549092911690565b34801561058e57600080fd5b5061046461059d3660046127b4565b61ffff166000908152600f602052604090205463ffffffff1690565b3480156105c557600080fd5b506103a46105d43660046127cf565b610c25565b3480156105e557600080fd5b50600454600160a01b900463ffffffff16610464565b34801561060757600080fd5b506103a461061636600461259f565b610ee6565b34801561062757600080fd5b506102746106363660046127cf565b610f27565b34801561064757600080fd5b50600b54610464565b34801561065c57600080fd5b5061046461066b3660046127b4565b61ffff166000908152600d602052604090205490565b34801561068d57600080fd5b506103a461069c366004612746565b610fa9565b3480156106ad57600080fd5b506103a4611046565b3480156106c257600080fd5b506104646106d13660046127b4565b61ffff166000908152600e602052604090205463ffffffff1690565b3480156106f957600080fd5b50610464610708366004612746565b611274565b34801561071957600080fd5b506002546001600160a01b03166102ec565b34801561073757600080fd5b50600954610464565b34801561074c57600080fd5b506103a461075b366004612746565b6112d3565b34801561076c57600080fd5b5061046461077b366004612746565b6001600160a01b031660009081526015602052604090205490565b3480156107a257600080fd5b50600554610464565b6001600160a01b0391909116600090815260116020908152604080832061ffff949094168352929052205463ffffffff8116916401000000009091046001600160601b031690565b6001600160a01b0383166000908152601260205260408120546060919080808610610857576040805160008082526020820190925290610849565b610836612506565b81526020019060019003908161082e5790505b50600093509350505061097e565b60006108638688612570565b9050818111156108705750805b61087a8782612807565b67ffffffffffffffff811115610892576108926127f1565b6040519080825280602002602001820160405280156108cb57816020015b6108b8612506565b8152602001906001900390816108b05790505b50945060005b818810156109785760405180606001604052808960016108f19190612570565b81526001600160a01b038b16600090815260136020908152604082209201919061091c8c6001612570565b81526020019081526020016000205481526020016109418b8b600161034d9190612570565b8152508682815181106109565761095661281a565b60200260200101819052508061096b90612830565b90508760010197506108d1565b50925050505b935093915050565b6109bc6040805160c08101825260008082526020820181905291810182905260608101829052608081018290529060a082015290565b6001600160a01b038316600090815260136020908152604080832085845282528083205483526014825291829020825160c0810184528154815260018083015493820193909352600282015461ffff81169482019490945263ffffffff62010000850481166060830152600160301b850416608082015292909160a084019160ff600160501b9091041690811115610a5657610a56612641565b6001811115610a6757610a67612641565b90525090505b92915050565b6000806000600754600854600854600754610a8e9190612807565b925092509250909192565b610aa1611344565b610aa9611467565b6000610ab56009611491565b9050610ac16051611491565b610acb9082612570565b9050610ad760f3611491565b610ae19082612570565b90508015610af457610af4335b826114c1565b604051819033907f2871b64e3818cfce24806c82238518bcaa75f39220abe2118583210f29c7af6090600090a350610b2c6001600055565b565b6000806000600654600a54600a54600654610a8e9190612807565b610b51611569565b610b2c6000611596565b60025433906001600160a01b03168114610b985760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610ba181611596565b50565b610bac611344565b610bb4611467565b600080610bbf6115af565b60045491935091506001600160a01b0316610bec5760405162461bcd60e51b8152600401610b8f90612849565b600454610c02906001600160a01b0316836114c1565b8015610c1157610c1133610aee565b5050610b2c6001600055565b610b2c611344565b610c2d611344565b610c35611467565b33600090815260126020526040812080548290610c5190612830565b9182905550905060458210801590610c6b575061074d8211155b610cce5760405162461bcd60e51b815260206004820152602e60248201527f4265654b656570696e673a686f6e6579206265654b656570657273206475726160448201526d1d1a5bdb881b9bdd081d985b1a5960921b6064820152608401610b8f565b6000610cda8484610f27565b5090506000600660008154610cee90612830565b91829055503360009081526013602090815260408083208784529091528120829055909150610d20620151808661289b565b610d2a9042612570565b905060006040518060c001604052808881526020018581526020018761ffff1681526020014263ffffffff1681526020018363ffffffff16815260200160006001811115610d7a57610d7a612641565b90526000848152601460209081526040918290208351815590830151600180830191909155918301516002820180546060860151608087015163ffffffff908116600160301b0269ffffffff0000000000001991909216620100000265ffffffffffff1990931661ffff90951694909417919091179283168117825560a086015195965086959394919260ff60501b199091166affffffffff000000000000199091161790600160501b908490811115610e3657610e36612641565b02179055509050506000610e53610e4a3390565b868a60006116fe565b90508060ff16600103610e6957610e69336118e2565b61074c198701610e7d57610e7d3389611a72565b610e95336003546001600160a01b031690308b611b5c565b60408051888152602081018a9052859133917f9a5b046195c693d2a14799e1711179489a2026d7f03fd15fdcc48fd52778865e910160405180910390a3505050505050610ee26001600055565b5050565b610eee611344565b610ef6611467565b6000610f028383611bc9565b600354909150610f1c906001600160a01b03168483611e55565b50610ee26001600055565b81600061031e670de0b6b3a7640000610f41604586612807565b610f4b919061289b565b610f5591906128c8565b9050670de0b6b3a7640000610f6a828461289b565b610f7491906128c8565b610f7e9083612570565b600554909250610f96670de0b6b3a76400008461289b565b610fa091906128c8565b91509250929050565b610fb1611569565b6001600160a01b0381166110245760405162461bcd60e51b815260206004820152603460248201527f4265654b656570696e673a6c61737420646973747269627574696f6e20616464604482015273726573732063616e206e6f74206265207a65726f60601b6064820152608401610b8f565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b61104e611344565b611056611467565b600080600b546000146110715761106b6115af565b90925090505b60006008546007546110839190612807565b9050600181116110d55760405162461bcd60e51b815260206004820152601b60248201527f4265654b656570696e673a6e6f206163746976652073686172657300000000006044820152606401610b8f565b600454600160a01b900463ffffffff166000806110f460098486611e86565b9050600181600181111561110a5761110a612641565b1480156111285750600082600181111561112657611126612641565b145b1561113257600191505b61113e60518486611e86565b9050600181600181111561115457611154612641565b1480156111725750600082600181111561117057611170612641565b145b1561117c57600191505b61118860f38486611e86565b9050600181600181111561119e5761119e612641565b1480156111bc575060008260018111156111ba576111ba612641565b145b156111c657600191505b60018260018111156111da576111da612641565b1480156111fd57506000600c5460ff1660018111156111fb576111fb612641565b145b1561121057600c805460ff191660011790555b6004546001600160a01b03166112385760405162461bcd60e51b8152600401610b8f90612849565b851561125457600454611254906001600160a01b0316876114c1565b84156112645761126433866114c1565b505050505050610b2c6001600055565b600080611282836009611f3a565b5090915061129290508183612570565b915061129f836051611f3a565b509091506112af90508183612570565b91506112bc8360f3611f3a565b509091506112cc90508183612570565b9392505050565b6112db611569565b600280546001600160a01b0383166001600160a01b0319909116811790915561130c6001546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60045463ffffffff600160a01b909104811690600090620151809061138b907f00000000000000000000000000000000000000000000000000000000000000001642612807565b61139591906128c8565b6113a0906001612570565b90508163ffffffff168163ffffffff161115610ee25760055460006113c584846128dc565b90508360005b8263ffffffff168163ffffffff16101561142f576113e882612900565b91506113f5600883612923565b63ffffffff1660000361142757612710611410607e8661289b565b61141a91906128c8565b6114249085612807565b93505b6001016113cb565b5050506005556004805463ffffffff92909216600160a01b0263ffffffff60a01b1990921691909117905550600c805460ff19169055565b60026000540361148a57604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b60008080806114a03386611f3a565b9250925092506114b86114b03390565b8683856120b8565b50909392505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461150e576040519150601f19603f3d011682016040523d82523d6000602084013e611513565b606091505b50509050806115645760405162461bcd60e51b815260206004820152601e60248201527f4265654b656570696e673a706c73207472616e73666572206661696c656400006044820152606401610b8f565b505050565b6001546001600160a01b03163314610b2c5760405163118cdaa760e01b8152336004820152602401610b8f565b600280546001600160a01b0319169055610ba1816121c2565b600b546000908190806116045760405162461bcd60e51b815260206004820181905260248201527f4265654b656570696e673a4e6f206665657320746f20646973747269627574656044820152606401610b8f565b6000600b55620f424061161860c88361289b565b61162291906128c8565b915061162e8282612807565b90506000612710611641610d488461289b565b61164b91906128c8565b9050600061271061165e610a288561289b565b61166891906128c8565b9050600061271061167b6108988661289b565b61168591906128c8565b9050806116928385612570565b61169c9190612570565b6116a69085612807565b95506116b3600984612214565b6116be605183612214565b6116c960f382612214565b604051849033907feab944d0de099af55840ee65a8af30d47e7a43a69c4bfb49f1442ff48d64901b90600090a3505050509091565b6001600160a01b038416600090815260156020908152604080832054601683528184208185529092528220600101548284600181111561174057611740612641565b036117cc578160000361175257600192505b61175c8682612570565b6001600160a01b03881660009081526016602052604081209061177e85612830565b94508481526020019081526020016000206001018190555085600760008282546117a89190612570565b9250508190555084600960008282546117c19190612570565b909155506118419050565b6117d68682612807565b6001600160a01b0388166000908152601660205260408120906117f885612830565b94508481526020019081526020016000206001018190555085600860008282546118229190612570565b92505081905550846009600082825461183b9190612807565b90915550505b6000600c5460ff16600181111561185a5761185a612641565b1461187f5760045461187a90600160a01b900463ffffffff166001612946565b611890565b600454600160a01b900463ffffffff165b6001600160a01b039790971660008181526016602090815260408083208684528252808320805463ffffffff191663ffffffff909c169b909b17909a5591815260159091529690962055949350505050565b6009600052600e6020527f0d5ccdc17421fca5ca768ae29a27b8b2aa886c9e56e3482f9ba55d79d3a806645463ffffffff1615610ba1576009600052600e6020527f0d5ccdc17421fca5ca768ae29a27b8b2aa886c9e56e3482f9ba55d79d3a80664546119569063ffffffff166001612946565b6001600160a01b03821660009081526011602090815260408083206009845282528220805463ffffffff191663ffffffff9485161790556051909152600e90527f3d93d1f18e63ff82f719b54b2294465011fdc4419ba836e6e16c0bf957906931546119c491166001612946565b6001600160a01b03821660009081526011602090815260408083206051845282528220805463ffffffff191663ffffffff94851617905560f3909152600e90527f9a0cf041909e937fd1e75131a371e687381d27f3c1aff93583e14fa98fb5496754611a3291166001612946565b6001600160a01b0391909116600090815260116020908152604080832060f384529091529020805463ffffffff191663ffffffff92909216919091179055565b6004805460408051633c42b34160e01b8152905160009384936001600160a01b031692633c42b34192818301926060928290030181865afa158015611abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611adf9190612963565b5090925090506000611af2600183612807565b611afe9061022b61289b565b90506000611b0e8261016d612570565b9050808411801590611b53576001600160a01b038716600090815260176020908152604080832087845290915281208054889290611b4d908490612570565b90915550505b50505050505050565b6040516001600160a01b038481166024830152838116604483015260648201839052611bc39186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612240565b50505050565b6001600160a01b0382166000908152601360209081526040808320848452909152812054808203611c4d5760405162461bcd60e51b815260206004820152602860248201527f4265654b656570696e673a686f6e6579206265654b656570657273206964206e6044820152671bdd081d985b1a5960c21b6064820152608401610b8f565b6000818152601460209081526040808320815160c0810183528154815260018083015494820194909452600282015461ffff81169382019390935262010000830463ffffffff9081166060830152600160301b840416608082015292909160a0840191600160501b90910460ff1690811115611ccb57611ccb612641565b6001811115611cdc57611cdc612641565b905250905060018160a001516001811115611cf957611cf9612641565b03611d5c5760405162461bcd60e51b815260206004820152602d60248201527f4265654b656570696e673a686f6e6579206265654b656570657273206861732060448201526c185b1c9958591e48195b991959609a1b6064820152608401610b8f565b806080015163ffffffff16421015611dc65760405162461bcd60e51b815260206004820152602760248201527f4265654b656570696e673a686f6e6579206265654b656570657273206e6f74206044820152661b585d1d5c995960ca1b6064820152608401610b8f565b60208101518151611ddc908790839060016116fe565b50600a60008154611dec90612830565b90915550600083815260146020526040808220600201805460ff60501b1916600160501b17905583519051909550859185916001600160a01b038a16917fa72d38f9c4fda61ecfc65d251134f9b2b4bd8709df9815dbc997632641a862bf91a450505092915050565b6040516001600160a01b0383811660248301526044820183905261156491859182169063a9059cbb90606401611b91565b61ffff83166000908152600f602052604081205463ffffffff9081169084161015611eb3575060006112cc565b611ebc846122a3565b61ffff84166000908152600d602052604081205490819003611ee25760009150506112cc565b611eee85858584612356565b61ffff85166000818152600d60205260408082208290555183929133917f330997f7612b0eba67ced5af32716e9afe967ad3b31a80bf6601294e5055feea9190a4506001949350505050565b61ffff81166000908152600e60205260408120548190819063ffffffff16611f6286866107ab565b6001600160a01b0388166000908152601560205260409020546001600160601b039091169450909250825b8263ffffffff168163ffffffff16116120ae5761ffff8716600090815260106020908152604080832063ffffffff858116855292528220600181015490549092911690875b85811161204f576001600160a01b038c16600090815260166020908152604080832084845290915290205463ffffffff168310612037576001600160a01b038c166000908152601660209081526040808320848452909152902060010154915061203c565b61204f565b97508761204881612830565b9050611fd2565b50821580159061205e57508015155b1561208d57670de0b6b3a7640000612076848361289b565b61208091906128c8565b61208a908a612570565b98505b612098846001612946565b9650505050806120a790612900565b9050611f8d565b5050509250925092565b6001600160a01b038416600090815260116020908152604080832061ffff8716845290915290205463ffffffff83811691161461212a576001600160a01b038416600090815260116020908152604080832061ffff871684529091529020805463ffffffff191663ffffffff84161790555b6001600160a01b038416600090815260116020908152604080832061ffff8716845290915290205464010000000090046001600160601b03168114611bc3576001600160a01b038416600090815260116020908152604080832061ffff871684529091529020805464010000000067ffffffffffffffff8416026fffffffffffffffffffffffff000000001990911617905550505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61ffff82166000908152600d602052604081208054839290612237908490612570565b90915550505050565b60006122556001600160a01b038416836123ff565b9050805160001415801561227a5750808060200190518101906122789190612991565b155b1561156457604051635274afe760e01b81526001600160a01b0384166004820152602401610b8f565b61ffff81166000908152600f602052604090205460045463ffffffff91821691600160a01b9091041681811061156457600061ffff84166122e484846128dc565b6122ee91906129b3565b6122f9906001612946565b90506123098161ffff86166129d6565b61ffff85166000908152600f60205260408120805490919061233290849063ffffffff16612946565b92506101000a81548163ffffffff021916908363ffffffff16021790555050505050565b61ffff84166000908152600e602052604081208054829061237c9063ffffffff16612900565b91906101000a81548163ffffffff021916908363ffffffff1602179055905082670de0b6b3a7640000836123b0919061289b565b6123ba91906128c8565b61ffff95909516600090815260106020908152604080832063ffffffff948516845290915290206001810195909555845463ffffffff19169316929092179092555050565b60606112cc8383600084600080856001600160a01b0316848660405161242591906129fe565b60006040518083038185875af1925050503d8060008114612462576040519150601f19603f3d011682016040523d82523d6000602084013e612467565b606091505b5091509150612477868383612481565b9695505050505050565b60608261249657612491826124dd565b6112cc565b81511580156124ad57506001600160a01b0384163b155b156124d657604051639996b31560e01b81526001600160a01b0385166004820152602401610b8f565b50806112cc565b8051156124ed5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b604051806060016040528060008152602001600081526020016125556040805160c08101825260008082526020820181905291810182905260608101829052608081018290529060a082015290565b905290565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a6d57610a6d61255a565b80356001600160a01b038116811461259a57600080fd5b919050565b600080604083850312156125b257600080fd5b6125bb83612583565b946020939093013593505050565b803561ffff8116811461259a57600080fd5b600080604083850312156125ee57600080fd5b6125f783612583565b9150612605602084016125c9565b90509250929050565b60008060006060848603121561262357600080fd5b61262c84612583565b95602085013595506040909401359392505050565b634e487b7160e01b600052602160045260246000fd5b60028110610ba157634e487b7160e01b600052602160045260246000fd5b805182526020810151602083015261ffff6040820151166040830152606081015163ffffffff8082166060850152806080840151166080850152505060a08101516126bf81612657565b8060a0840152505050565b60408082528351828201819052600091906020906060850190828801855b8281101561272257815180518552858101518686015286015161270d87860182612675565b506101009390930192908401906001016126e8565b5050508093505050508260208301529392505050565b60c08101610a6d8284612675565b60006020828403121561275857600080fd5b6112cc82612583565b6020810161276e83612657565b91905290565b6000806040838503121561278757600080fd5b612790836125c9565b9150602083013563ffffffff811681146127a957600080fd5b809150509250929050565b6000602082840312156127c657600080fd5b6112cc826125c9565b600080604083850312156127e257600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b81810381811115610a6d57610a6d61255a565b634e487b7160e01b600052603260045260246000fd5b6000600182016128425761284261255a565b5060010190565b60208082526032908201527f4265654b656570696e673a6c617374206379636c6520646973747269627574696040820152711bdb881859191c995cdcc81b9bdd081cd95d60721b606082015260800190565b8082028115828204841417610a6d57610a6d61255a565b634e487b7160e01b600052601260045260246000fd5b6000826128d7576128d76128b2565b500490565b63ffffffff8281168282160390808211156128f9576128f961255a565b5092915050565b600063ffffffff8083168181036129195761291961255a565b6001019392505050565b600063ffffffff8084168061293a5761293a6128b2565b92169190910692915050565b63ffffffff8181168382160190808211156128f9576128f961255a565b60008060006060848603121561297857600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156129a357600080fd5b815180151581146112cc57600080fd5b600063ffffffff808416806129ca576129ca6128b2565b92169190910492915050565b63ffffffff8181168382160280821691908281146129f6576129f661255a565b505092915050565b6000825160005b81811015612a1f5760208186018101518583015201612a05565b50600092019182525091905056fea2646970667358221220efb919f9d921a6bac5ee5c626573a2bbe5b566a15d30e4eed57bde1727c7b57b64736f6c63430008180033000000000000000000000000db42c5559249bffbc917f052a54fe92eec427aff
0x6080604052600436106101fd5760003560e01c806392013f731161010d578063c0e764cb116100a0578063e30c39781161006f578063e30c39781461070d578063e3eb8fec1461072b578063f2fde38b14610740578063faa94d3b14610760578063fbf9529d1461079657600080fd5b8063c0e764cb14610681578063c36e60a9146106a1578063c61697aa146106b6578063cf9a3361146106ed57600080fd5b8063b45efcc9116100dc578063b45efcc9146105fb578063b48a8fa01461061b578063b729bd241461063b578063b92f46cd1461065057600080fd5b806392013f7314610532578063a84dd99314610582578063ad815179146105b9578063aea80d8e146105d957600080fd5b80636e952cb4116101905780637a58ad241161015f5780637a58ad241461048757806386491dd9146104ca5780638ac81ba2146104df5780638da5cb5b146104ff5780638e48426f1461051d57600080fd5b80636e952cb4146103ef578063715018a61461040457806373b714d31461041957806379ba50971461047257600080fd5b8063283c45fd116101cc578063283c45fd146103325780632c1fc4921461035f57806360484f1b1461038f57806364deb928146103a657600080fd5b806301a4146f1461022157806310d3872a1461028e57806313480222146102d257806317b1f1d21461030457600080fd5b3661021c5734600b60008282546102149190612570565b925050819055005b600080fd5b34801561022d57600080fd5b5061027461023c36600461259f565b6001600160a01b039190911660009081526016602090815260408083209383529290522060018101549054909163ffffffff90911690565b604080519283526020830191909152015b60405180910390f35b34801561029a57600080fd5b506102ae6102a93660046125db565b6107ab565b6040805163ffffffff90931683526001600160601b03909116602083015201610285565b3480156102de57600080fd5b506004546001600160a01b03165b6040516001600160a01b039091168152602001610285565b34801561031057600080fd5b5061032461031f36600461260e565b6107f3565b6040516102859291906126ca565b34801561033e57600080fd5b5061035261034d36600461259f565b610986565b6040516102859190612738565b34801561036b57600080fd5b50610374610a73565b60408051938452602084019290925290820152606001610285565b34801561039b57600080fd5b506103a4610a99565b005b3480156103b257600080fd5b506103da7f0000000000000000000000000000000000000000000000000000000068c1a2e781565b60405163ffffffff9091168152602001610285565b3480156103fb57600080fd5b50610374610b2e565b34801561041057600080fd5b506103a4610b49565b34801561042557600080fd5b50610464610434366004612746565b6001600160a01b031660009081526016602090815260408083206015835281842054845290915290206001015490565b604051908152602001610285565b34801561047e57600080fd5b506103a4610b5b565b34801561049357600080fd5b506104646104a236600461259f565b6001600160a01b03919091166000908152601760209081526040808320938352929052205490565b3480156104d657600080fd5b506103a4610ba4565b3480156104eb57600080fd5b50600c5460ff166040516102859190612761565b34801561050b57600080fd5b506001546001600160a01b03166102ec565b34801561052957600080fd5b506103a4610c1d565b34801561053e57600080fd5b5061027461054d366004612774565b61ffff91909116600090815260106020908152604080832063ffffffff94851684529091529020600181015490549092911690565b34801561058e57600080fd5b5061046461059d3660046127b4565b61ffff166000908152600f602052604090205463ffffffff1690565b3480156105c557600080fd5b506103a46105d43660046127cf565b610c25565b3480156105e557600080fd5b50600454600160a01b900463ffffffff16610464565b34801561060757600080fd5b506103a461061636600461259f565b610ee6565b34801561062757600080fd5b506102746106363660046127cf565b610f27565b34801561064757600080fd5b50600b54610464565b34801561065c57600080fd5b5061046461066b3660046127b4565b61ffff166000908152600d602052604090205490565b34801561068d57600080fd5b506103a461069c366004612746565b610fa9565b3480156106ad57600080fd5b506103a4611046565b3480156106c257600080fd5b506104646106d13660046127b4565b61ffff166000908152600e602052604090205463ffffffff1690565b3480156106f957600080fd5b50610464610708366004612746565b611274565b34801561071957600080fd5b506002546001600160a01b03166102ec565b34801561073757600080fd5b50600954610464565b34801561074c57600080fd5b506103a461075b366004612746565b6112d3565b34801561076c57600080fd5b5061046461077b366004612746565b6001600160a01b031660009081526015602052604090205490565b3480156107a257600080fd5b50600554610464565b6001600160a01b0391909116600090815260116020908152604080832061ffff949094168352929052205463ffffffff8116916401000000009091046001600160601b031690565b6001600160a01b0383166000908152601260205260408120546060919080808610610857576040805160008082526020820190925290610849565b610836612506565b81526020019060019003908161082e5790505b50600093509350505061097e565b60006108638688612570565b9050818111156108705750805b61087a8782612807565b67ffffffffffffffff811115610892576108926127f1565b6040519080825280602002602001820160405280156108cb57816020015b6108b8612506565b8152602001906001900390816108b05790505b50945060005b818810156109785760405180606001604052808960016108f19190612570565b81526001600160a01b038b16600090815260136020908152604082209201919061091c8c6001612570565b81526020019081526020016000205481526020016109418b8b600161034d9190612570565b8152508682815181106109565761095661281a565b60200260200101819052508061096b90612830565b90508760010197506108d1565b50925050505b935093915050565b6109bc6040805160c08101825260008082526020820181905291810182905260608101829052608081018290529060a082015290565b6001600160a01b038316600090815260136020908152604080832085845282528083205483526014825291829020825160c0810184528154815260018083015493820193909352600282015461ffff81169482019490945263ffffffff62010000850481166060830152600160301b850416608082015292909160a084019160ff600160501b9091041690811115610a5657610a56612641565b6001811115610a6757610a67612641565b90525090505b92915050565b6000806000600754600854600854600754610a8e9190612807565b925092509250909192565b610aa1611344565b610aa9611467565b6000610ab56009611491565b9050610ac16051611491565b610acb9082612570565b9050610ad760f3611491565b610ae19082612570565b90508015610af457610af4335b826114c1565b604051819033907f2871b64e3818cfce24806c82238518bcaa75f39220abe2118583210f29c7af6090600090a350610b2c6001600055565b565b6000806000600654600a54600a54600654610a8e9190612807565b610b51611569565b610b2c6000611596565b60025433906001600160a01b03168114610b985760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610ba181611596565b50565b610bac611344565b610bb4611467565b600080610bbf6115af565b60045491935091506001600160a01b0316610bec5760405162461bcd60e51b8152600401610b8f90612849565b600454610c02906001600160a01b0316836114c1565b8015610c1157610c1133610aee565b5050610b2c6001600055565b610b2c611344565b610c2d611344565b610c35611467565b33600090815260126020526040812080548290610c5190612830565b9182905550905060458210801590610c6b575061074d8211155b610cce5760405162461bcd60e51b815260206004820152602e60248201527f4265654b656570696e673a686f6e6579206265654b656570657273206475726160448201526d1d1a5bdb881b9bdd081d985b1a5960921b6064820152608401610b8f565b6000610cda8484610f27565b5090506000600660008154610cee90612830565b91829055503360009081526013602090815260408083208784529091528120829055909150610d20620151808661289b565b610d2a9042612570565b905060006040518060c001604052808881526020018581526020018761ffff1681526020014263ffffffff1681526020018363ffffffff16815260200160006001811115610d7a57610d7a612641565b90526000848152601460209081526040918290208351815590830151600180830191909155918301516002820180546060860151608087015163ffffffff908116600160301b0269ffffffff0000000000001991909216620100000265ffffffffffff1990931661ffff90951694909417919091179283168117825560a086015195965086959394919260ff60501b199091166affffffffff000000000000199091161790600160501b908490811115610e3657610e36612641565b02179055509050506000610e53610e4a3390565b868a60006116fe565b90508060ff16600103610e6957610e69336118e2565b61074c198701610e7d57610e7d3389611a72565b610e95336003546001600160a01b031690308b611b5c565b60408051888152602081018a9052859133917f9a5b046195c693d2a14799e1711179489a2026d7f03fd15fdcc48fd52778865e910160405180910390a3505050505050610ee26001600055565b5050565b610eee611344565b610ef6611467565b6000610f028383611bc9565b600354909150610f1c906001600160a01b03168483611e55565b50610ee26001600055565b81600061031e670de0b6b3a7640000610f41604586612807565b610f4b919061289b565b610f5591906128c8565b9050670de0b6b3a7640000610f6a828461289b565b610f7491906128c8565b610f7e9083612570565b600554909250610f96670de0b6b3a76400008461289b565b610fa091906128c8565b91509250929050565b610fb1611569565b6001600160a01b0381166110245760405162461bcd60e51b815260206004820152603460248201527f4265654b656570696e673a6c61737420646973747269627574696f6e20616464604482015273726573732063616e206e6f74206265207a65726f60601b6064820152608401610b8f565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b61104e611344565b611056611467565b600080600b546000146110715761106b6115af565b90925090505b60006008546007546110839190612807565b9050600181116110d55760405162461bcd60e51b815260206004820152601b60248201527f4265654b656570696e673a6e6f206163746976652073686172657300000000006044820152606401610b8f565b600454600160a01b900463ffffffff166000806110f460098486611e86565b9050600181600181111561110a5761110a612641565b1480156111285750600082600181111561112657611126612641565b145b1561113257600191505b61113e60518486611e86565b9050600181600181111561115457611154612641565b1480156111725750600082600181111561117057611170612641565b145b1561117c57600191505b61118860f38486611e86565b9050600181600181111561119e5761119e612641565b1480156111bc575060008260018111156111ba576111ba612641565b145b156111c657600191505b60018260018111156111da576111da612641565b1480156111fd57506000600c5460ff1660018111156111fb576111fb612641565b145b1561121057600c805460ff191660011790555b6004546001600160a01b03166112385760405162461bcd60e51b8152600401610b8f90612849565b851561125457600454611254906001600160a01b0316876114c1565b84156112645761126433866114c1565b505050505050610b2c6001600055565b600080611282836009611f3a565b5090915061129290508183612570565b915061129f836051611f3a565b509091506112af90508183612570565b91506112bc8360f3611f3a565b509091506112cc90508183612570565b9392505050565b6112db611569565b600280546001600160a01b0383166001600160a01b0319909116811790915561130c6001546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60045463ffffffff600160a01b909104811690600090620151809061138b907f0000000000000000000000000000000000000000000000000000000068c1a2e71642612807565b61139591906128c8565b6113a0906001612570565b90508163ffffffff168163ffffffff161115610ee25760055460006113c584846128dc565b90508360005b8263ffffffff168163ffffffff16101561142f576113e882612900565b91506113f5600883612923565b63ffffffff1660000361142757612710611410607e8661289b565b61141a91906128c8565b6114249085612807565b93505b6001016113cb565b5050506005556004805463ffffffff92909216600160a01b0263ffffffff60a01b1990921691909117905550600c805460ff19169055565b60026000540361148a57604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b60008080806114a03386611f3a565b9250925092506114b86114b03390565b8683856120b8565b50909392505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461150e576040519150601f19603f3d011682016040523d82523d6000602084013e611513565b606091505b50509050806115645760405162461bcd60e51b815260206004820152601e60248201527f4265654b656570696e673a706c73207472616e73666572206661696c656400006044820152606401610b8f565b505050565b6001546001600160a01b03163314610b2c5760405163118cdaa760e01b8152336004820152602401610b8f565b600280546001600160a01b0319169055610ba1816121c2565b600b546000908190806116045760405162461bcd60e51b815260206004820181905260248201527f4265654b656570696e673a4e6f206665657320746f20646973747269627574656044820152606401610b8f565b6000600b55620f424061161860c88361289b565b61162291906128c8565b915061162e8282612807565b90506000612710611641610d488461289b565b61164b91906128c8565b9050600061271061165e610a288561289b565b61166891906128c8565b9050600061271061167b6108988661289b565b61168591906128c8565b9050806116928385612570565b61169c9190612570565b6116a69085612807565b95506116b3600984612214565b6116be605183612214565b6116c960f382612214565b604051849033907feab944d0de099af55840ee65a8af30d47e7a43a69c4bfb49f1442ff48d64901b90600090a3505050509091565b6001600160a01b038416600090815260156020908152604080832054601683528184208185529092528220600101548284600181111561174057611740612641565b036117cc578160000361175257600192505b61175c8682612570565b6001600160a01b03881660009081526016602052604081209061177e85612830565b94508481526020019081526020016000206001018190555085600760008282546117a89190612570565b9250508190555084600960008282546117c19190612570565b909155506118419050565b6117d68682612807565b6001600160a01b0388166000908152601660205260408120906117f885612830565b94508481526020019081526020016000206001018190555085600860008282546118229190612570565b92505081905550846009600082825461183b9190612807565b90915550505b6000600c5460ff16600181111561185a5761185a612641565b1461187f5760045461187a90600160a01b900463ffffffff166001612946565b611890565b600454600160a01b900463ffffffff165b6001600160a01b039790971660008181526016602090815260408083208684528252808320805463ffffffff191663ffffffff909c169b909b17909a5591815260159091529690962055949350505050565b6009600052600e6020527f0d5ccdc17421fca5ca768ae29a27b8b2aa886c9e56e3482f9ba55d79d3a806645463ffffffff1615610ba1576009600052600e6020527f0d5ccdc17421fca5ca768ae29a27b8b2aa886c9e56e3482f9ba55d79d3a80664546119569063ffffffff166001612946565b6001600160a01b03821660009081526011602090815260408083206009845282528220805463ffffffff191663ffffffff9485161790556051909152600e90527f3d93d1f18e63ff82f719b54b2294465011fdc4419ba836e6e16c0bf957906931546119c491166001612946565b6001600160a01b03821660009081526011602090815260408083206051845282528220805463ffffffff191663ffffffff94851617905560f3909152600e90527f9a0cf041909e937fd1e75131a371e687381d27f3c1aff93583e14fa98fb5496754611a3291166001612946565b6001600160a01b0391909116600090815260116020908152604080832060f384529091529020805463ffffffff191663ffffffff92909216919091179055565b6004805460408051633c42b34160e01b8152905160009384936001600160a01b031692633c42b34192818301926060928290030181865afa158015611abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611adf9190612963565b5090925090506000611af2600183612807565b611afe9061022b61289b565b90506000611b0e8261016d612570565b9050808411801590611b53576001600160a01b038716600090815260176020908152604080832087845290915281208054889290611b4d908490612570565b90915550505b50505050505050565b6040516001600160a01b038481166024830152838116604483015260648201839052611bc39186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612240565b50505050565b6001600160a01b0382166000908152601360209081526040808320848452909152812054808203611c4d5760405162461bcd60e51b815260206004820152602860248201527f4265654b656570696e673a686f6e6579206265654b656570657273206964206e6044820152671bdd081d985b1a5960c21b6064820152608401610b8f565b6000818152601460209081526040808320815160c0810183528154815260018083015494820194909452600282015461ffff81169382019390935262010000830463ffffffff9081166060830152600160301b840416608082015292909160a0840191600160501b90910460ff1690811115611ccb57611ccb612641565b6001811115611cdc57611cdc612641565b905250905060018160a001516001811115611cf957611cf9612641565b03611d5c5760405162461bcd60e51b815260206004820152602d60248201527f4265654b656570696e673a686f6e6579206265654b656570657273206861732060448201526c185b1c9958591e48195b991959609a1b6064820152608401610b8f565b806080015163ffffffff16421015611dc65760405162461bcd60e51b815260206004820152602760248201527f4265654b656570696e673a686f6e6579206265654b656570657273206e6f74206044820152661b585d1d5c995960ca1b6064820152608401610b8f565b60208101518151611ddc908790839060016116fe565b50600a60008154611dec90612830565b90915550600083815260146020526040808220600201805460ff60501b1916600160501b17905583519051909550859185916001600160a01b038a16917fa72d38f9c4fda61ecfc65d251134f9b2b4bd8709df9815dbc997632641a862bf91a450505092915050565b6040516001600160a01b0383811660248301526044820183905261156491859182169063a9059cbb90606401611b91565b61ffff83166000908152600f602052604081205463ffffffff9081169084161015611eb3575060006112cc565b611ebc846122a3565b61ffff84166000908152600d602052604081205490819003611ee25760009150506112cc565b611eee85858584612356565b61ffff85166000818152600d60205260408082208290555183929133917f330997f7612b0eba67ced5af32716e9afe967ad3b31a80bf6601294e5055feea9190a4506001949350505050565b61ffff81166000908152600e60205260408120548190819063ffffffff16611f6286866107ab565b6001600160a01b0388166000908152601560205260409020546001600160601b039091169450909250825b8263ffffffff168163ffffffff16116120ae5761ffff8716600090815260106020908152604080832063ffffffff858116855292528220600181015490549092911690875b85811161204f576001600160a01b038c16600090815260166020908152604080832084845290915290205463ffffffff168310612037576001600160a01b038c166000908152601660209081526040808320848452909152902060010154915061203c565b61204f565b97508761204881612830565b9050611fd2565b50821580159061205e57508015155b1561208d57670de0b6b3a7640000612076848361289b565b61208091906128c8565b61208a908a612570565b98505b612098846001612946565b9650505050806120a790612900565b9050611f8d565b5050509250925092565b6001600160a01b038416600090815260116020908152604080832061ffff8716845290915290205463ffffffff83811691161461212a576001600160a01b038416600090815260116020908152604080832061ffff871684529091529020805463ffffffff191663ffffffff84161790555b6001600160a01b038416600090815260116020908152604080832061ffff8716845290915290205464010000000090046001600160601b03168114611bc3576001600160a01b038416600090815260116020908152604080832061ffff871684529091529020805464010000000067ffffffffffffffff8416026fffffffffffffffffffffffff000000001990911617905550505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61ffff82166000908152600d602052604081208054839290612237908490612570565b90915550505050565b60006122556001600160a01b038416836123ff565b9050805160001415801561227a5750808060200190518101906122789190612991565b155b1561156457604051635274afe760e01b81526001600160a01b0384166004820152602401610b8f565b61ffff81166000908152600f602052604090205460045463ffffffff91821691600160a01b9091041681811061156457600061ffff84166122e484846128dc565b6122ee91906129b3565b6122f9906001612946565b90506123098161ffff86166129d6565b61ffff85166000908152600f60205260408120805490919061233290849063ffffffff16612946565b92506101000a81548163ffffffff021916908363ffffffff16021790555050505050565b61ffff84166000908152600e602052604081208054829061237c9063ffffffff16612900565b91906101000a81548163ffffffff021916908363ffffffff1602179055905082670de0b6b3a7640000836123b0919061289b565b6123ba91906128c8565b61ffff95909516600090815260106020908152604080832063ffffffff948516845290915290206001810195909555845463ffffffff19169316929092179092555050565b60606112cc8383600084600080856001600160a01b0316848660405161242591906129fe565b60006040518083038185875af1925050503d8060008114612462576040519150601f19603f3d011682016040523d82523d6000602084013e612467565b606091505b5091509150612477868383612481565b9695505050505050565b60608261249657612491826124dd565b6112cc565b81511580156124ad57506001600160a01b0384163b155b156124d657604051639996b31560e01b81526001600160a01b0385166004820152602401610b8f565b50806112cc565b8051156124ed5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b604051806060016040528060008152602001600081526020016125556040805160c08101825260008082526020820181905291810182905260608101829052608081018290529060a082015290565b905290565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a6d57610a6d61255a565b80356001600160a01b038116811461259a57600080fd5b919050565b600080604083850312156125b257600080fd5b6125bb83612583565b946020939093013593505050565b803561ffff8116811461259a57600080fd5b600080604083850312156125ee57600080fd5b6125f783612583565b9150612605602084016125c9565b90509250929050565b60008060006060848603121561262357600080fd5b61262c84612583565b95602085013595506040909401359392505050565b634e487b7160e01b600052602160045260246000fd5b60028110610ba157634e487b7160e01b600052602160045260246000fd5b805182526020810151602083015261ffff6040820151166040830152606081015163ffffffff8082166060850152806080840151166080850152505060a08101516126bf81612657565b8060a0840152505050565b60408082528351828201819052600091906020906060850190828801855b8281101561272257815180518552858101518686015286015161270d87860182612675565b506101009390930192908401906001016126e8565b5050508093505050508260208301529392505050565b60c08101610a6d8284612675565b60006020828403121561275857600080fd5b6112cc82612583565b6020810161276e83612657565b91905290565b6000806040838503121561278757600080fd5b612790836125c9565b9150602083013563ffffffff811681146127a957600080fd5b809150509250929050565b6000602082840312156127c657600080fd5b6112cc826125c9565b600080604083850312156127e257600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b81810381811115610a6d57610a6d61255a565b634e487b7160e01b600052603260045260246000fd5b6000600182016128425761284261255a565b5060010190565b60208082526032908201527f4265654b656570696e673a6c617374206379636c6520646973747269627574696040820152711bdb881859191c995cdcc81b9bdd081cd95d60721b606082015260800190565b8082028115828204841417610a6d57610a6d61255a565b634e487b7160e01b600052601260045260246000fd5b6000826128d7576128d76128b2565b500490565b63ffffffff8281168282160390808211156128f9576128f961255a565b5092915050565b600063ffffffff8083168181036129195761291961255a565b6001019392505050565b600063ffffffff8084168061293a5761293a6128b2565b92169190910692915050565b63ffffffff8181168382160190808211156128f9576128f961255a565b60008060006060848603121561297857600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156129a357600080fd5b815180151581146112cc57600080fd5b600063ffffffff808416806129ca576129ca6128b2565b92169190910492915050565b63ffffffff8181168382160280821691908281146129f6576129f661255a565b505092915050565b6000825160005b81811015612a1f5760208186018101518583015201612a05565b50600092019182525091905056fea2646970667358221220efb919f9d921a6bac5ee5c626573a2bbe5b566a15d30e4eed57bde1727c7b57b64736f6c63430008180033