60806040523480156200001157600080fd5b5060405162001cd138038062001cd183398101604081905262000034916200056f565b8282600362000044838262000682565b50600462000053828262000682565b50506006805460ff191660ff8416179055506200007360008033620000b1565b6200009060015b6040805160008082526020820190925262000201565b6200009c60026200007a565b620000a860036200007a565b505050620007a2565b826000808281526005602052604090206001015460ff166002811115620000dc57620000dc6200074e565b146200012f5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74207573652061207072652d6578697374696e6720726f6c65000060448201526064015b60405180910390fd5b60008481526005602052604090206001808201805460ff1916828002179055508381556200016d600282018462000347602090811b62000b0617901c565b60008481526005602052604081206001015460ff1660028111156200019657620001966200074e565b03620001fa5760405162461bcd60e51b815260206004820152603c602482015260008051602062001cb183398151915260448201527f20746f206d616e61676520616e206578636c757369766520726f6c6500000000606482015260840162000126565b5050505050565b826000808281526005602052604090206001015460ff1660028111156200022c576200022c6200074e565b146200027b5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74207573652061207072652d6578697374696e6720726f6c650000604482015260640162000126565b600084815260056020908152604090912060018101805460ff1916600217905584815590620002ba906003830190859062000b1062000357821b17901c565b60008481526005602052604081206001015460ff166002811115620002e357620002e36200074e565b03620001fa5760405162461bcd60e51b8152602060048201526038602482015260008051602062001cb183398151915260448201527f20746f206d616e61676520612073686172656420726f6c650000000000000000606482015260840162000126565b620003538282620003ac565b5050565b60005b8151811015620003a75762000392838383815181106200037e576200037e62000764565b60200260200101516200042d60201b60201c565b806200039e816200077a565b9150506200035a565b505050565b6001600160a01b038116620004105760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742073657420616e206578636c757369766520726f6c6520746f2060448201526203078360ec1b606482015260840162000126565b81546001600160a01b0319166001600160a01b0391909116179055565b6001600160a01b038116620004855760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74206164642030783020746f20612073686172656420726f6c6500604482015260640162000126565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620004d257600080fd5b81516001600160401b0380821115620004ef57620004ef620004aa565b604051601f8301601f19908116603f011681019082821181831017156200051a576200051a620004aa565b816040528381526020925086838588010111156200053757600080fd5b600091505b838210156200055b57858201830151818301840152908201906200053c565b600093810190920192909252949350505050565b6000806000606084860312156200058557600080fd5b83516001600160401b03808211156200059d57600080fd5b620005ab87838801620004c0565b94506020860151915080821115620005c257600080fd5b50620005d186828701620004c0565b925050604084015160ff81168114620005e957600080fd5b809150509250925092565b600181811c908216806200060957607f821691505b6020821081036200062a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003a757600081815260208120601f850160051c81016020861015620006595750805b601f850160051c820191505b818110156200067a5782815560010162000665565b505050505050565b81516001600160401b038111156200069e576200069e620004aa565b620006b681620006af8454620005f4565b8462000630565b602080601f831160018114620006ee5760008415620006d55750858301515b600019600386901b1c1916600185901b1785556200067a565b600085815260208120601f198616915b828110156200071f57888601518255948401946001909101908401620006fe565b50858210156200073e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000600182016200079b57634e487b7160e01b600052601160045260246000fd5b5060010190565b6114ff80620007b26000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806379cc6790116100de578063aaa14ca311610097578063d97c05be11610071578063d97c05be14610376578063dbad21fc14610389578063dd62ed3e1461039c578063f44637ba146103af57600080fd5b8063aaa14ca314610325578063ab3545e514610338578063b646c1941461036357600080fd5b806379cc6790146102be5780637cdc1cb9146102d157806395d89b41146102e4578063983b2d56146102ec578063a457c2d7146102ff578063a9059cbb1461031257600080fd5b806340c10f191161014b5780636be7658b116101255780636be7658b1461025c57806370a082311461026f57806373cc802a1461029857806374d0a676146102ab57600080fd5b806340c10f191461022157806342966c68146102345780635873b41a1461024957600080fd5b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101d457806323b872dd146101e6578063313ce567146101f9578063395093511461020e575b600080fd5b61019b6103c2565b6040516101a891906111a5565b60405180910390f35b6101c46101bf36600461120f565b610454565b60405190151581526020016101a8565b6002545b6040519081526020016101a8565b6101c46101f4366004611239565b61046e565b60065460405160ff90911681526020016101a8565b6101c461021c36600461120f565b610492565b6101c461022f36600461120f565b6104b4565b610247610242366004611275565b6104f1565b005b6101c461025736600461128e565b610527565b61024761026a3660046112c1565b61055e565b6101d861027d3660046112e4565b6001600160a01b031660009081526020819052604090205490565b6102476102a63660046112e4565b610634565b6102476102b93660046112c1565b610642565b6101c46102cc36600461120f565b610718565b6101c46102df3660046112c1565b61074c565b61019b610811565b6102476102fa3660046112e4565b610820565b6101c461030d36600461120f565b61082c565b6101c461032036600461120f565b6108a7565b610247610333366004611275565b6108b5565b61034b610346366004611275565b610971565b6040516001600160a01b0390911681526020016101a8565b6102476103713660046112e4565b6109dd565b6102476103843660046112c1565b6109e7565b6102476103973660046112e4565b610abd565b6101d86103aa36600461128e565b610ad1565b6102476103bd3660046112e4565b610afc565b6060600380546103d190611306565b80601f01602080910402602001604051908101604052809291908181526020018280546103fd90611306565b801561044a5780601f1061041f5761010080835404028352916020019161044a565b820191906000526020600020905b81548152906001019060200180831161042d57829003601f168201915b5050505050905090565b600033610462818585610b56565b60019150505b92915050565b60003361047c858285610c7a565b610487858585610cf4565b506001949350505050565b6000336104628185856104a58383610ad1565b6104af9190611350565b610b56565b600060016104c2813361074c565b6104e75760405162461bcd60e51b81526004016104de90611379565b60405180910390fd5b6104628484610e98565b60026104fd813361074c565b6105195760405162461bcd60e51b81526004016104de90611379565b6105233383610f57565b5050565b60006003610535813361074c565b6105515760405162461bcd60e51b81526004016104de90611379565b6104628484600019610b56565b81600260008281526005602052604090206001015460ff16600281111561058757610587611363565b146105a45760405162461bcd60e51b81526004016104de906113bb565b60008381526005602052604090205483906105bf903361074c565b6105db5760405162461bcd60e51b81526004016104de90611407565b60008481526005602052604090206105f69060030184611089565b60405133906001600160a01b0385169086907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af90600090a450505050565b61063f6000826109e7565b50565b81600260008281526005602052604090206001015460ff16600281111561066b5761066b611363565b146106885760405162461bcd60e51b81526004016104de906113bb565b60008381526005602052604090205483906106a3903361074c565b6106bf5760405162461bcd60e51b81526004016104de90611407565b60008481526005602052604090206106da90600301846110ab565b60405133906001600160a01b0385169086907f63502af7324ff6db91ab38f8236a648727d9385ea6c782073dd4882d8a61a48f90600090a450505050565b60006002610726813361074c565b6107425760405162461bcd60e51b81526004016104de90611379565b6104628484610f57565b600082815260056020526040812060018082015460ff16600281111561077457610774611363565b036107955760028101546001600160a01b038481169116145b915050610468565b6002600182015460ff1660028111156107b0576107b0611363565b036107d8576001600160a01b038316600090815260038201602052604090205460ff1661078d565b60405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a59081c9bdb19525960921b60448201526064016104de565b6060600480546103d190611306565b61063f60015b82610642565b6000338161083a8286610ad1565b90508381101561089a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104de565b6104878286868403610b56565b600033610462818585610cf4565b80600260008281526005602052604090206001015460ff1660028111156108de576108de611363565b146108fb5760405162461bcd60e51b81526004016104de906113bb565b81610906813361074c565b6109225760405162461bcd60e51b81526004016104de90611379565b600083815260056020526040902061093d9060030133611089565b6040513390819085907feb3e33034c392e69263b04ec0fa376dc12784a41b6676c7f31b936cbc0fbb5af90600090a4505050565b600081600160008281526005602052604090206001015460ff16600281111561099c5761099c611363565b146109b95760405162461bcd60e51b81526004016104de9061144b565b6000838152600560205260409020600201546001600160a01b031691505b50919050565b61063f6003610826565b81600160008281526005602052604090206001015460ff166002811115610a1057610a10611363565b14610a2d5760405162461bcd60e51b81526004016104de9061144b565b6000838152600560205260409020548390610a48903361074c565b610a645760405162461bcd60e51b81526004016104de90611407565b6000848152600560205260409020610a7f9060020184611126565b60405133906001600160a01b0385169086907f3b855c56b409b671c7112789d022675eb639d0bcb8896f1b6197c132f799e74690600090a450505050565b610ac76001610826565b6109dd6002610826565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61063f6002610826565b6105238282611126565b60005b8151811015610b5157610b3f83838381518110610b3257610b3261149a565b60200260200101516110ab565b80610b49816114b0565b915050610b13565b505050565b6001600160a01b038316610bb85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104de565b6001600160a01b038216610c195760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104de565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610c868484610ad1565b90506000198114610cee5781811015610ce15760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104de565b610cee8484848403610b56565b50505050565b6001600160a01b038316610d585760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104de565b6001600160a01b038216610dba5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104de565b6001600160a01b03831660009081526020819052604090205481811015610e325760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104de565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610cee565b6001600160a01b038216610eee5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104de565b8060026000828254610f009190611350565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610fb75760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104de565b6001600160a01b0382166000908152602081905260409020548181101561102b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104de565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b0381166111015760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74206164642030783020746f20612073686172656420726f6c650060448201526064016104de565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6001600160a01b0381166111885760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742073657420616e206578636c757369766520726f6c6520746f2060448201526203078360ec1b60648201526084016104de565b81546001600160a01b0319166001600160a01b0391909116179055565b600060208083528351808285015260005b818110156111d2578581018301518582016040015282016111b6565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461120a57600080fd5b919050565b6000806040838503121561122257600080fd5b61122b836111f3565b946020939093013593505050565b60008060006060848603121561124e57600080fd5b611257846111f3565b9250611265602085016111f3565b9150604084013590509250925092565b60006020828403121561128757600080fd5b5035919050565b600080604083850312156112a157600080fd5b6112aa836111f3565b91506112b8602084016111f3565b90509250929050565b600080604083850312156112d457600080fd5b823591506112b8602084016111f3565b6000602082840312156112f657600080fd5b6112ff826111f3565b9392505050565b600181811c9082168061131a57607f821691505b6020821081036109d757634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156104685761046861133a565b634e487b7160e01b600052602160045260246000fd5b60208082526022908201527f53656e64657220646f6573206e6f7420686f6c6420726571756972656420726f6040820152616c6560f01b606082015260800190565b6020808252602c908201527f4d7573742062652063616c6c6564206f6e20616e20696e697469616c697a656460408201526b2053686172656420726f6c6560a01b606082015260800190565b60208082526024908201527f43616e206f6e6c792062652063616c6c6564206279206120726f6c65206d616e60408201526330b3b2b960e11b606082015260800190565b6020808252602f908201527f4d7573742062652063616c6c6564206f6e20616e20696e697469616c697a656460408201526e204578636c757369766520726f6c6560881b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000600182016114c2576114c261133a565b506001019056fea2646970667358221220e736c65e909cf3948f11dc76e66a6baf3a3c102e784c105e8f5684c1d15e31d964736f6c63430008100033417474656d7074656420746f2075736520616e20696e76616c696420726f6c65000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035945530000000000000000000000000000000000000000000000000000000000