60806040526064600c5562015180600d553480156200001d57600080fd5b506040516200224338038062002243833981016040819052620000409162000186565b6040805180820182526009808252681554d11515985d5b1d60ba1b6020808401829052845180860190955291845290830152908181600362000083838262000263565b50600462000092828262000263565b505050620000af620000a96200011360201b60201c565b62000117565b5050600a80546001600160a01b039384166001600160a01b031991821617909155600b80549290931691811691909117909155601080549091167392208bff3a44d2b0978c963bba07879467000ae2179055610bb86011556117706012556200032f565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200018157600080fd5b919050565b600080604083850312156200019a57600080fd5b620001a58362000169565b9150620001b56020840162000169565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001e957607f821691505b6020821081036200020a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200025e57600081815260208120601f850160051c81016020861015620002395750805b601f850160051c820191505b818110156200025a5782815560010162000245565b5050505b505050565b81516001600160401b038111156200027f576200027f620001be565b6200029781620002908454620001d4565b8462000210565b602080601f831160018114620002cf5760008415620002b65750858301515b600019600386901b1c1916600185901b1785556200025a565b600085815260208120601f198616915b828110156200030057888601518255948401946001909101908401620002df565b50858210156200031f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611f04806200033f6000396000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c806370a082311161013b578063a98ad46c116100b8578063dd62ed3e1161007c578063dd62ed3e1461052f578063e7c80f1714610542578063e9081ec714610555578063f2fde38b14610568578063f4d4a77e1461057b57600080fd5b8063a98ad46c14610473578063abae70c514610486578063baade7bc14610499578063c349e274146104ac578063c5e48ca21461051c57600080fd5b806395d89b41116100ff57806395d89b41146104295780639e15c93f14610431578063a457c2d71461043a578063a8602fea1461044d578063a9059cbb1461046057600080fd5b806370a08231146103cc578063715018a6146103f55780637564ac38146103fd57806382d1a0c9146104055780638da5cb5b1461041857600080fd5b8063313ce567116101c9578063490ae2101161018d578063490ae210146103815780634df9d6ba14610394578063551b7702146103a757806366e226bd146103b057806367a52793146103c357600080fd5b8063313ce56714610319578063362e496b1461032857806339509351146103305780633a740751146103435780634626402b1461036e57600080fd5b80631e1d55dd116102105780631e1d55dd146102a257806320d054fc146102b757806323b872dd146102e057806329d0b28e146102f35780632bac57231461030657600080fd5b806306fdde0314610242578063095ea7b3146102605780630f4317cf1461028357806318160ddd1461029a575b600080fd5b61024a61058e565b6040516102579190611c18565b60405180910390f35b61027361026e366004611c82565b610620565b6040519015158152602001610257565b61028c60125481565b604051908152602001610257565b60025461028c565b6102b56102b0366004611cac565b61063a565b005b61028c6102c5366004611cac565b6001600160a01b031660009081526008602052604090205490565b6102736102ee366004611cc7565b610666565b6102b5610301366004611d11565b61068a565b6102b5610314366004611d48565b6106f1565b60405160128152602001610257565b6102b5610742565b61027361033e366004611c82565b61091a565b600b54610356906001600160a01b031681565b6040516001600160a01b039091168152602001610257565b601054610356906001600160a01b031681565b6102b561038f366004611d48565b61093c565b61028c6103a2366004611cac565b610949565b61028c600d5481565b6102b56103be366004611cac565b6109c2565b61028c600c5481565b61028c6103da366004611cac565b6001600160a01b031660009081526020819052604090205490565b6102b56109ec565b6102b5610a00565b6102b5610413366004611cac565b610a33565b6005546001600160a01b0316610356565b61024a610a5d565b61028c60115481565b610273610448366004611c82565b610a6c565b6102b561045b366004611cac565b610ae7565b61027361046e366004611c82565b610b5c565b600a54610356906001600160a01b031681565b6102b5610494366004611d48565b610b6a565b6102b56104a7366004611d61565b610c92565b6105016104ba366004611cac565b6040805180820190915260008082526020820152506001600160a01b03166000908152600f6020908152604091829020825180840190935280548352600101549082015290565b60408051825181526020928301519281019290925201610257565b6102b561052a366004611cac565b610d73565b61028c61053d366004611d94565b610d9c565b6102b5610550366004611d48565b610dc7565b61028c610563366004611cac565b611027565b6102b5610576366004611cac565b611045565b6102b5610589366004611dc7565b6110bb565b60606003805461059d90611de9565b80601f01602080910402602001604051908101604052809291908181526020018280546105c990611de9565b80156106165780601f106105eb57610100808354040283529160200191610616565b820191906000526020600020905b8154815290600101906020018083116105f957829003601f168201915b5050505050905090565b60003361062e818585611115565b60019150505b92915050565b610642611239565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b600033610674858285611293565b61067f858585611307565b506001949350505050565b610692611239565b6001600160a01b038216600081815260096020908152604091829020805460ff191685151590811790915591519182527f39277ba45b2b30ba85884b2cd925b0472b583693ef8e63c413061c1896648fb2910160405180910390a25050565b6106f9611239565b80600d540361073d5760405162461bcd60e51b815260206004820152600b60248201526a105b1c9958591e4814d95d60aa1b60448201526064015b60405180910390fd5b600d55565b33600061074e82611027565b90508060000361075c575050565b6001600160a01b0382166000908152600f6020526040902080544210156107b75760405162461bcd60e51b815260206004820152600f60248201526e4c6f636b656420576974686472617760881b6044820152606401610734565b60008160010154116107fd5760405162461bcd60e51b815260206004820152600f60248201526e233ab6363c902bb4ba34323930bbb760891b6044820152606401610734565b600d5461080a9042611e39565b8155600181015461081c9083906114ab565b9150610836600182600101546114be90919063ffffffff16565b6001820155600061084684610949565b600a546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b89190611e4c565b90506108c484836114ca565b8110156109095784816108d786856114ca565b60405163de6c180d60e01b81526001600160a01b03909316600484015260248301919091526044820152606401610734565b61091385856114d6565b5050505050565b60003361062e81858561092d8383610d9c565b6109379190611e39565b611115565b610944611239565b600c55565b6001600160a01b03811660009081526008602090815260408083206006549284905290832054909183916ec097ce7bc90715b34b9f10000000009161098d91611e65565b6109979190611e7c565b9050816001015481116109ab5760006109ba565b60018201546109ba9082611e9e565b949350505050565b6109ca611239565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6109f4611239565b6109fe60006115af565b565b6000610a0b33611601565b905080600003610a3057604051632509371560e11b8152336004820152602401610734565b50565b610a3b611239565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60606004805461059d90611de9565b60003381610a7a8286610d9c565b905083811015610ada5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610734565b61067f8286868403611115565b610aef611239565b6010546001600160a01b03808316911603610b3a5760405162461bcd60e51b815260206004820152600b60248201526a105b1c9958591e4814d95d60aa1b6044820152606401610734565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60003361062e818585611307565b610b72611239565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdf9190611e4c565b90506000610c04612710610bfe6132c8610bf860025490565b90611693565b906114ab565b9050610c108184611e39565b8210610c8d57600a5460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8b9190611eb1565b505b505050565b336000908152600e602052604090205460ff16610ce55760405162461bcd60e51b8152602060048201526011602482015270139bdd0811d85b594810dbdb9d1c9858dd607a1b6044820152606401610734565b8115610d6457600a5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529091169063a9059cbb906044016020604051808303816000875af1158015610d3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d629190611eb1565b505b8015610c8d57610c8d8161169f565b610d7b611239565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3381610e0a5760405162461bcd60e51b8152602060048201526012602482015271139bdd1a1a5b99c81d1bc819195c1bdcda5d60721b6044820152606401610734565b600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e779190611e4c565b600a546040516323b872dd60e01b81526001600160a01b038581166004830152306024830152604482018790529293509116906323b872dd906064016020604051808303816000875af1158015610ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef69190611eb1565b50600a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190611e4c565b9050818111610fa75760405162461bcd60e51b815260206004820152600f60248201526e16995c9bc81d1bc819195c1bdcda5d608a1b6044820152606401610734565b610fb18282611e9e565b93506000610fd0612710610bfe600c548861169390919063ffffffff16565b9050610fdc85826114be565b9450610fe8848661184f565b610ff18161169f565b6001600160a01b0384166000908152600f60205260409020600d546110169042611e39565b815560046001909101555050505050565b6001600160a01b038116600090815260208190526040812054610634565b61104d611239565b6001600160a01b0381166110b25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610734565b610a30816115af565b6110c3611239565b6127106110d08284611e39565b111561110a5760405162461bcd60e51b81526020600482015260096024820152684f766572203130302560b81b6044820152606401610734565b601191909155601255565b6001600160a01b0383166111775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610734565b6001600160a01b0382166111d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610734565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b031633146109fe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610734565b600061129f8484610d9c565b90506000198114610c8b57818110156112fa5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610734565b610c8b8484848403611115565b6001600160a01b03831661136b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610734565b6001600160a01b0382166113cd5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610734565b6001600160a01b038316600090815260208190526040902054818110156114455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610734565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610c8b565b60006114b78284611e7c565b9392505050565b60006114b78284611e9e565b60006114b78284611e39565b6114df82611601565b506001600160a01b038216600090815260086020908152604080832091839052909120548083111561152e57604051632edd9e6760e11b81526004810182905260248101849052604401610734565b6115388382611e9e565b90506ec097ce7bc90715b34b9f1000000000600654826115589190611e65565b6115629190611e7c565b60018301556115718484611900565b4283856001600160a01b03167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56860405160405180910390a450505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008061160d83611a32565b9050801561063457600a5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015611668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168c9190611eb1565b5092915050565b60006114b78284611e65565b60006116bc612710610bfe6011548561169390919063ffffffff16565b905060006116db612710610bfe6012548661169390919063ffffffff16565b905060006116f3826116ed86866114be565b906114be565b90506116fe83611acd565b600a54600b5460405163095ea7b360e01b81526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015611753573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117779190611eb1565b50600b54604051631d3793b160e21b8152600481018490526001600160a01b03909116906374de4ec490602401600060405180830381600087803b1580156117be57600080fd5b505af11580156117d2573d6000803e3d6000fd5b5050600a5460105460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018690529116925063a9059cbb91506044016020604051808303816000875af115801561182b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109139190611eb1565b61185882611601565b506001600160a01b038216600090815260086020908152604080832091839052822054909190611889908490611e39565b90506ec097ce7bc90715b34b9f1000000000600654826118a99190611e65565b6118b39190611e7c565b60018301556118c28484611b59565b4283856001600160a01b03167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1560405160405180910390a450505050565b6001600160a01b0382166119605760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610734565b6001600160a01b038216600090815260208190526040902054818110156119d45760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610734565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b038116600090815260086020526040812081611a5484610949565b905080156114b75780826001016000828254611a709190611e39565b9091555050815481908390600090611a89908490611e39565b9091555050604051429082906001600160a01b038716907f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf790600090a49392505050565b6000611ad860025490565b90508015611b3d5760075415611afd57600754611af59083611e39565b600060075591505b80611b17836ec097ce7bc90715b34b9f1000000000611e65565b611b219190611e7c565b60066000828254611b329190611e39565b90915550611b559050565b8160076000828254611b4f9190611e39565b90915550505b5050565b6001600160a01b038216611baf5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610734565b8060026000828254611bc19190611e39565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600060208083528351808285015260005b81811015611c4557858101830151858201604001528201611c29565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611c7d57600080fd5b919050565b60008060408385031215611c9557600080fd5b611c9e83611c66565b946020939093013593505050565b600060208284031215611cbe57600080fd5b6114b782611c66565b600080600060608486031215611cdc57600080fd5b611ce584611c66565b9250611cf360208501611c66565b9150604084013590509250925092565b8015158114610a3057600080fd5b60008060408385031215611d2457600080fd5b611d2d83611c66565b91506020830135611d3d81611d03565b809150509250929050565b600060208284031215611d5a57600080fd5b5035919050565b600080600060608486031215611d7657600080fd5b611d7f84611c66565b95602085013595506040909401359392505050565b60008060408385031215611da757600080fd5b611db083611c66565b9150611dbe60208401611c66565b90509250929050565b60008060408385031215611dda57600080fd5b50508035926020909101359150565b600181811c90821680611dfd57607f821691505b602082108103611e1d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561063457610634611e23565b600060208284031215611e5e57600080fd5b5051919050565b808202811582820484141761063457610634611e23565b600082611e9957634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561063457610634611e23565b600060208284031215611ec357600080fd5b81516114b781611d0356fea264697066735822122054285ddb636a75ba6f2da225691caec48b92b021b9704ab4e7d2994675f0d46664736f6c63430008120033000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000919382e57c132b5ebe6e5e2b19830bacfbb61d90