0x608060405234801561001057600080fd5b50600436106101425760003560e01c806395d89b41116100b8578063c587396b1161007c578063c587396b146102f3578063d8fb9361146102fb578063dd62ed3e1461030e578063e03504af14610347578063e156b1b61461036d578063f300240b1461038057600080fd5b806395d89b411461029d578063a713fd53146102bd578063a73677ea146102c5578063a9059cbb146102d8578063c345cf23146102eb57600080fd5b8063313ce5671161010a578063313ce567146101ed5780633f5160181461020257806355195c27146102175780635c01b60c1461022857806370a082311461024b5780637425e6751461027457600080fd5b806306fdde0314610147578063095ea7b31461017c57806318160ddd1461019f57806323b872dd146101b55780632a85c48b146101c8575b600080fd5b6040805180820190915260078152665041414c20414960c81b60208201525b6040516101739190610c4d565b60405180910390f35b61018f61018a366004610cb7565b610393565b6040519015158152602001610173565b6101a76103fb565b604051908152602001610173565b61018f6101c3366004610ce1565b61041b565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610173565b60125b60405160ff9091168152602001610173565b610215610210366004610d1d565b6105db565b005b6004546001600160a01b03166101d5565b610166604051806040016040528060048152602001631410505360e21b81525081565b6101a7610259366004610d1d565b6001600160a01b031660009081526002602052604090205490565b6101a7610282366004610d1d565b6001600160a01b031660009081526003602052604090205490565b6040805180820190915260048152631410505360e21b6020820152610166565b6101f0601281565b61018f6102d3366004610e8e565b610627565b61018f6102e6366004610cb7565b610883565b6101a76109c5565b6102156109e1565b610215610309366004610f59565b610a5b565b6101a761031c366004610f9e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610166604051806040016040528060078152602001665041414c20414960c81b81525081565b61018f61037b366004610ce1565b610b85565b61021561038e366004610fd1565b610bba565b3360008181526001602090815260408083206001600160a01b03871680855290835281842086905590518581529293909290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b60006104096012600a611146565b6104169062989680611155565b905090565b6001600160a01b03831660009081526001602090815260408083203384529091528120548211156104935760405162461bcd60e51b815260206004820152601960248201527f416c6c6f77616e6365206c696d6974207375727061737365640000000000000060448201526064015b60405180910390fd5b6001600160a01b0384166000908152600360205260409020548015610501578083146105015760405162461bcd60e51b815260206004820181905260248201527f436f6d70756c736f7279207472616e736665722073756d206d69736d61746368604482015260640161048a565b6001600160a01b0385166000908152600260205260408120805485929061052990849061116c565b90915550506001600160a01b0384166000908152600260205260408120805485929061055690849061117f565b90915550506001600160a01b03851660009081526001602090815260408083203384529091528120805485929061058e90849061116c565b92505081905550836001600160a01b0316856001600160a01b0316600080516020611278833981519152856040516105c891815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106055760405162461bcd60e51b815260040161048a90611192565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000805b875181101561087457878181518110610646576106466111e0565b60200260200101516001600160a01b0316896001600160a01b0316600080516020611278833981519152898481518110610682576106826111e0565b602002602001015160405161069991815260200190565b60405180910390a38781815181106106b3576106b36111e0565b60200260200101516001600160a01b0316737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822898481518110610715576107156111e0565b60200260200101516000808b8781518110610732576107326111e0565b6020908102919091018101516040805195865291850193909352830152606082015260800160405180910390a3846001600160a01b031663e156b1b6898381518110610780576107806111e0565b60200260200101518b89858151811061079b5761079b6111e0565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af11580156107fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081e91906111f6565b50604080516001600160701b038087168252851660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a18061086c81611218565b91505061062b565b50600198975050505050505050565b336000908152600260205260408120548211156108d95760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161048a565b60006108e433610282565b9050801561093b5780831461093b5760405162461bcd60e51b815260206004820181905260248201527f436f6d70756c736f7279207472616e736665722073756d206d69736d61746368604482015260640161048a565b336000908152600260205260408120805485929061095a90849061116c565b90915550506001600160a01b0384166000908152600260205260408120805485929061098790849061117f565b90915550506040518381526001600160a01b038516903390600080516020611278833981519152906020015b60405180910390a35060019392505050565b6109d16012600a611146565b6109de9062989680611155565b81565b6000546001600160a01b03163314610a0b5760405162461bcd60e51b815260040161048a90611192565b6000805460405161dead926001600160a01b03909216917f2e7a15f9b81baf1ce20ddf406f35b22e54608ada95c1cf5ee5221da0d0ccb76a91a3600080546001600160a01b03191661dead179055565b6004546001600160a01b03163314610a855760405162461bcd60e51b815260040161048a90611231565b60005b8251811015610b80576000838281518110610aa557610aa56111e0565b6020026020010151905060006001600160a01b0316816001600160a01b031603610b115760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420616464726573732073706563696669656400000000000000604482015260640161048a565b6001600160a01b038116600081815260026020908152604091829020805490879055825181815291820187905292917ff4e3f146ef01bfe65e811aade3a860b33927625771e1f2c45ae705ae2e44d3e8910160405180910390a250508080610b7890611218565b915050610a88565b505050565b6000826001600160a01b0316846001600160a01b0316600080516020611278833981519152846040516109b391815260200190565b6004546001600160a01b03163314610be45760405162461bcd60e51b815260040161048a90611231565b60005b82811015610c47578160036000868685818110610c0657610c066111e0565b9050602002016020810190610c1b9190610d1d565b6001600160a01b0316815260208101919091526040016000205580610c3f81611218565b915050610be7565b50505050565b600060208083528351808285015260005b81811015610c7a57858101830151858201604001528201610c5e565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610cb257600080fd5b919050565b60008060408385031215610cca57600080fd5b610cd383610c9b565b946020939093013593505050565b600080600060608486031215610cf657600080fd5b610cff84610c9b565b9250610d0d60208501610c9b565b9150604084013590509250925092565b600060208284031215610d2f57600080fd5b610d3882610c9b565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d7e57610d7e610d3f565b604052919050565b600067ffffffffffffffff821115610da057610da0610d3f565b5060051b60200190565b600082601f830112610dbb57600080fd5b81356020610dd0610dcb83610d86565b610d55565b82815260059290921b84018101918181019086841115610def57600080fd5b8286015b84811015610e1157610e0481610c9b565b8352918301918301610df3565b509695505050505050565b600082601f830112610e2d57600080fd5b81356020610e3d610dcb83610d86565b82815260059290921b84018101918181019086841115610e5c57600080fd5b8286015b84811015610e115780358352918301918301610e60565b80356001600160701b0381168114610cb257600080fd5b600080600080600080600060e0888a031215610ea957600080fd5b610eb288610c9b565b9650602088013567ffffffffffffffff80821115610ecf57600080fd5b610edb8b838c01610daa565b975060408a0135915080821115610ef157600080fd5b610efd8b838c01610e1c565b965060608a0135915080821115610f1357600080fd5b50610f208a828b01610e1c565b945050610f2f60808901610c9b565b9250610f3d60a08901610e77565b9150610f4b60c08901610e77565b905092959891949750929550565b60008060408385031215610f6c57600080fd5b823567ffffffffffffffff811115610f8357600080fd5b610f8f85828601610daa565b95602094909401359450505050565b60008060408385031215610fb157600080fd5b610fba83610c9b565b9150610fc860208401610c9b565b90509250929050565b600080600060408486031215610fe657600080fd5b833567ffffffffffffffff80821115610ffe57600080fd5b818601915086601f83011261101257600080fd5b81358181111561102157600080fd5b8760208260051b850101111561103657600080fd5b6020928301989097509590910135949350505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561109d5781600019048211156110835761108361104c565b8085161561109057918102915b93841c9390800290611067565b509250929050565b6000826110b4575060016103f5565b816110c1575060006103f5565b81600181146110d757600281146110e1576110fd565b60019150506103f5565b60ff8411156110f2576110f261104c565b50506001821b6103f5565b5060208310610133831016604e8410600b8410161715611120575081810a6103f5565b61112a8383611062565b806000190482111561113e5761113e61104c565b029392505050565b6000610d3860ff8416836110a5565b80820281158282048414176103f5576103f561104c565b818103818111156103f5576103f561104c565b808201808211156103f5576103f561104c565b6020808252602e908201527f556e617574686f72697a65643a204578636c7573697665204f776e657220616360408201526d31b2b9b9903932b8bab4b932b21760911b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561120857600080fd5b81518015158114610d3857600080fd5b60006001820161122a5761122a61104c565b5060010190565b60208082526026908201527f556e617574686f72697a65643a2043726561746f7220616363657373207265716040820152653ab4b932b21760d11b60608201526080019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203d0012158a5b96a8caaa7500943233191c90f64436cf0ed9c6675e0f0dee6fc664736f6c63430008120033
0x60806040523480156200001157600080fd5b50600080546001600160a01b031916339081178255604051909182917f2e7a15f9b81baf1ce20ddf406f35b22e54608ada95c1cf5ee5221da0d0ccb76a908290a350620000616012600a620001ee565b62000070906298968062000206565b33600081815260026020526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620000b36012600a620001ee565b620000c2906298968062000206565b60405190815260200160405180910390a362000220565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000130578160001904821115620001145762000114620000d9565b808516156200012257918102915b93841c9390800290620000f4565b509250929050565b6000826200014957506001620001e8565b816200015857506000620001e8565b81600181146200017157600281146200017c576200019c565b6001915050620001e8565b60ff841115620001905762000190620000d9565b50506001821b620001e8565b5060208310610133831016604e8410600b8410161715620001c1575081810a620001e8565b620001cd8383620000ef565b8060001904821115620001e457620001e4620000d9565b0290505b92915050565b6000620001ff60ff84168362000138565b9392505050565b8082028115828204841417620001e857620001e8620000d9565b6112cd80620002306000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806395d89b41116100b8578063c587396b1161007c578063c587396b146102f3578063d8fb9361146102fb578063dd62ed3e1461030e578063e03504af14610347578063e156b1b61461036d578063f300240b1461038057600080fd5b806395d89b411461029d578063a713fd53146102bd578063a73677ea146102c5578063a9059cbb146102d8578063c345cf23146102eb57600080fd5b8063313ce5671161010a578063313ce567146101ed5780633f5160181461020257806355195c27146102175780635c01b60c1461022857806370a082311461024b5780637425e6751461027457600080fd5b806306fdde0314610147578063095ea7b31461017c57806318160ddd1461019f57806323b872dd146101b55780632a85c48b146101c8575b600080fd5b6040805180820190915260078152665041414c20414960c81b60208201525b6040516101739190610c4d565b60405180910390f35b61018f61018a366004610cb7565b610393565b6040519015158152602001610173565b6101a76103fb565b604051908152602001610173565b61018f6101c3366004610ce1565b61041b565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610173565b60125b60405160ff9091168152602001610173565b610215610210366004610d1d565b6105db565b005b6004546001600160a01b03166101d5565b610166604051806040016040528060048152602001631410505360e21b81525081565b6101a7610259366004610d1d565b6001600160a01b031660009081526002602052604090205490565b6101a7610282366004610d1d565b6001600160a01b031660009081526003602052604090205490565b6040805180820190915260048152631410505360e21b6020820152610166565b6101f0601281565b61018f6102d3366004610e8e565b610627565b61018f6102e6366004610cb7565b610883565b6101a76109c5565b6102156109e1565b610215610309366004610f59565b610a5b565b6101a761031c366004610f9e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610166604051806040016040528060078152602001665041414c20414960c81b81525081565b61018f61037b366004610ce1565b610b85565b61021561038e366004610fd1565b610bba565b3360008181526001602090815260408083206001600160a01b03871680855290835281842086905590518581529293909290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b60006104096012600a611146565b6104169062989680611155565b905090565b6001600160a01b03831660009081526001602090815260408083203384529091528120548211156104935760405162461bcd60e51b815260206004820152601960248201527f416c6c6f77616e6365206c696d6974207375727061737365640000000000000060448201526064015b60405180910390fd5b6001600160a01b0384166000908152600360205260409020548015610501578083146105015760405162461bcd60e51b815260206004820181905260248201527f436f6d70756c736f7279207472616e736665722073756d206d69736d61746368604482015260640161048a565b6001600160a01b0385166000908152600260205260408120805485929061052990849061116c565b90915550506001600160a01b0384166000908152600260205260408120805485929061055690849061117f565b90915550506001600160a01b03851660009081526001602090815260408083203384529091528120805485929061058e90849061116c565b92505081905550836001600160a01b0316856001600160a01b0316600080516020611278833981519152856040516105c891815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b031633146106055760405162461bcd60e51b815260040161048a90611192565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000805b875181101561087457878181518110610646576106466111e0565b60200260200101516001600160a01b0316896001600160a01b0316600080516020611278833981519152898481518110610682576106826111e0565b602002602001015160405161069991815260200190565b60405180910390a38781815181106106b3576106b36111e0565b60200260200101516001600160a01b0316737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822898481518110610715576107156111e0565b60200260200101516000808b8781518110610732576107326111e0565b6020908102919091018101516040805195865291850193909352830152606082015260800160405180910390a3846001600160a01b031663e156b1b6898381518110610780576107806111e0565b60200260200101518b89858151811061079b5761079b6111e0565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af11580156107fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081e91906111f6565b50604080516001600160701b038087168252851660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a18061086c81611218565b91505061062b565b50600198975050505050505050565b336000908152600260205260408120548211156108d95760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161048a565b60006108e433610282565b9050801561093b5780831461093b5760405162461bcd60e51b815260206004820181905260248201527f436f6d70756c736f7279207472616e736665722073756d206d69736d61746368604482015260640161048a565b336000908152600260205260408120805485929061095a90849061116c565b90915550506001600160a01b0384166000908152600260205260408120805485929061098790849061117f565b90915550506040518381526001600160a01b038516903390600080516020611278833981519152906020015b60405180910390a35060019392505050565b6109d16012600a611146565b6109de9062989680611155565b81565b6000546001600160a01b03163314610a0b5760405162461bcd60e51b815260040161048a90611192565b6000805460405161dead926001600160a01b03909216917f2e7a15f9b81baf1ce20ddf406f35b22e54608ada95c1cf5ee5221da0d0ccb76a91a3600080546001600160a01b03191661dead179055565b6004546001600160a01b03163314610a855760405162461bcd60e51b815260040161048a90611231565b60005b8251811015610b80576000838281518110610aa557610aa56111e0565b6020026020010151905060006001600160a01b0316816001600160a01b031603610b115760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420616464726573732073706563696669656400000000000000604482015260640161048a565b6001600160a01b038116600081815260026020908152604091829020805490879055825181815291820187905292917ff4e3f146ef01bfe65e811aade3a860b33927625771e1f2c45ae705ae2e44d3e8910160405180910390a250508080610b7890611218565b915050610a88565b505050565b6000826001600160a01b0316846001600160a01b0316600080516020611278833981519152846040516109b391815260200190565b6004546001600160a01b03163314610be45760405162461bcd60e51b815260040161048a90611231565b60005b82811015610c47578160036000868685818110610c0657610c066111e0565b9050602002016020810190610c1b9190610d1d565b6001600160a01b0316815260208101919091526040016000205580610c3f81611218565b915050610be7565b50505050565b600060208083528351808285015260005b81811015610c7a57858101830151858201604001528201610c5e565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610cb257600080fd5b919050565b60008060408385031215610cca57600080fd5b610cd383610c9b565b946020939093013593505050565b600080600060608486031215610cf657600080fd5b610cff84610c9b565b9250610d0d60208501610c9b565b9150604084013590509250925092565b600060208284031215610d2f57600080fd5b610d3882610c9b565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d7e57610d7e610d3f565b604052919050565b600067ffffffffffffffff821115610da057610da0610d3f565b5060051b60200190565b600082601f830112610dbb57600080fd5b81356020610dd0610dcb83610d86565b610d55565b82815260059290921b84018101918181019086841115610def57600080fd5b8286015b84811015610e1157610e0481610c9b565b8352918301918301610df3565b509695505050505050565b600082601f830112610e2d57600080fd5b81356020610e3d610dcb83610d86565b82815260059290921b84018101918181019086841115610e5c57600080fd5b8286015b84811015610e115780358352918301918301610e60565b80356001600160701b0381168114610cb257600080fd5b600080600080600080600060e0888a031215610ea957600080fd5b610eb288610c9b565b9650602088013567ffffffffffffffff80821115610ecf57600080fd5b610edb8b838c01610daa565b975060408a0135915080821115610ef157600080fd5b610efd8b838c01610e1c565b965060608a0135915080821115610f1357600080fd5b50610f208a828b01610e1c565b945050610f2f60808901610c9b565b9250610f3d60a08901610e77565b9150610f4b60c08901610e77565b905092959891949750929550565b60008060408385031215610f6c57600080fd5b823567ffffffffffffffff811115610f8357600080fd5b610f8f85828601610daa565b95602094909401359450505050565b60008060408385031215610fb157600080fd5b610fba83610c9b565b9150610fc860208401610c9b565b90509250929050565b600080600060408486031215610fe657600080fd5b833567ffffffffffffffff80821115610ffe57600080fd5b818601915086601f83011261101257600080fd5b81358181111561102157600080fd5b8760208260051b850101111561103657600080fd5b6020928301989097509590910135949350505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561109d5781600019048211156110835761108361104c565b8085161561109057918102915b93841c9390800290611067565b509250929050565b6000826110b4575060016103f5565b816110c1575060006103f5565b81600181146110d757600281146110e1576110fd565b60019150506103f5565b60ff8411156110f2576110f261104c565b50506001821b6103f5565b5060208310610133831016604e8410600b8410161715611120575081810a6103f5565b61112a8383611062565b806000190482111561113e5761113e61104c565b029392505050565b6000610d3860ff8416836110a5565b80820281158282048414176103f5576103f561104c565b818103818111156103f5576103f561104c565b808201808211156103f5576103f561104c565b6020808252602e908201527f556e617574686f72697a65643a204578636c7573697665204f776e657220616360408201526d31b2b9b9903932b8bab4b932b21760911b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561120857600080fd5b81518015158114610d3857600080fd5b60006001820161122a5761122a61104c565b5060010190565b60208082526026908201527f556e617574686f72697a65643a2043726561746f7220616363657373207265716040820152653ab4b932b21760d11b60608201526080019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203d0012158a5b96a8caaa7500943233191c90f64436cf0ed9c6675e0f0dee6fc664736f6c63430008120033