60806040526012600a0a620186a0026000556012600a0a61fde8026001556012600a0a61c350026002556012600a0a614e20026003556012600a0a613a9802600455600060055560006006556000600755600060085560006009556000600a5533600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736fdbd9a7037e82acd075e0ff071d6eab73870caa600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b84463700487608a3e7d1fad3f098c0f3a149308600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f95d91ab28548038f6cd5391c32e3e166e4d335f600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426010553480156101f057600080fd5b50600154601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6001546040518082815260200191505060405180910390a3611d34806102986000396000f3006080604052600436106101a1576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146101a6578063095ea7b3146102365780630e71983c1461029b57806318160ddd146102c657806323b872dd146102f1578063313ce5671461037657806337f91fe4146103a157806339509351146103cc5780634687794914610431578063488d86951461045c5780634b940256146104875780634f8a81aa146104de5780636d4625a01461050957806370a08231146105345780637990ea4f1461058b5780638690ea3a146105a25780638da5cb5b146105cf5780638f2839701461062657806394b0780f1461066957806395d89b4114610696578063a253c06e14610726578063a393dc4414610751578063a457c2d71461077c578063a9059cbb146107e1578063b17e38a41461082e578063b49aa87514610859578063bc17a8a014610886578063dd62ed3e146108dd578063e089374414610954578063e6c512331461097f578063e9f1c56a146109d6578063f6c6cf7414610a01578063f851a44014610a2c575b600080fd5b3480156101b257600080fd5b506101bb610a83565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101fb5780820151818401526020810190506101e0565b50505050905090810190601f1680156102285780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561024257600080fd5b50610281600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610abc565b604051808215151515815260200191505060405180910390f35b3480156102a757600080fd5b506102b0610ad3565b6040518082815260200191505060405180910390f35b3480156102d257600080fd5b506102db610ad9565b6040518082815260200191505060405180910390f35b3480156102fd57600080fd5b5061035c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ae2565b604051808215151515815260200191505060405180910390f35b34801561038257600080fd5b5061038b610d57565b6040518082815260200191505060405180910390f35b3480156103ad57600080fd5b506103b6610d5c565b6040518082815260200191505060405180910390f35b3480156103d857600080fd5b50610417600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d62565b604051808215151515815260200191505060405180910390f35b34801561043d57600080fd5b50610446610dfe565b6040518082815260200191505060405180910390f35b34801561046857600080fd5b50610471610e04565b6040518082815260200191505060405180910390f35b34801561049357600080fd5b5061049c610e0a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104ea57600080fd5b506104f3610e30565b6040518082815260200191505060405180910390f35b34801561051557600080fd5b5061051e610e36565b6040518082815260200191505060405180910390f35b34801561054057600080fd5b50610575600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e3c565b6040518082815260200191505060405180910390f35b34801561059757600080fd5b506105a0610e85565b005b3480156105ae57600080fd5b506105cd60048036038101908080359060200190929190505050611076565b005b3480156105db57600080fd5b506105e4611255565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561063257600080fd5b50610667600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061127b565b005b34801561067557600080fd5b506106946004803603810190808035906020019092919050505061131b565b005b3480156106a257600080fd5b506106ab611473565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106eb5780820151818401526020810190506106d0565b50505050905090810190601f1680156107185780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561073257600080fd5b5061073b6114ac565b6040518082815260200191505060405180910390f35b34801561075d57600080fd5b506107666114b2565b6040518082815260200191505060405180910390f35b34801561078857600080fd5b506107c7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114b8565b604051808215151515815260200191505060405180910390f35b3480156107ed57600080fd5b5061082c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611554565b005b34801561083a57600080fd5b50610843611730565b6040518082815260200191505060405180910390f35b34801561086557600080fd5b5061088460048036038101908080359060200190929190505050611736565b005b34801561089257600080fd5b5061089b611945565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108e957600080fd5b5061093e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061196b565b6040518082815260200191505060405180910390f35b34801561096057600080fd5b506109696119f2565b6040518082815260200191505060405180910390f35b34801561098b57600080fd5b506109946119f8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109e257600080fd5b506109eb611a1e565b6040518082815260200191505060405180910390f35b348015610a0d57600080fd5b50610a16611a24565b6040518082815260200191505060405180910390f35b348015610a3857600080fd5b50610a41611a2a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6040805190810160405280601681526020017f48756d616e2050726f746f636f6c2046696e616e63650000000000000000000081525081565b6000610ac9338484611a50565b6001905092915050565b60075481565b60008054905090565b600081601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015610b34575060008210155b1515610b3f57600080fd5b610b88601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611cd1565b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c14601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611cea565b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3610d4c8433610d47601260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205486611cd1565b611a50565b600190509392505050565b601281565b60065481565b6000610df43384610def601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205486611cea565b611a50565b6001905092915050565b60105481565b60045481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60035481565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ee357600080fd5b69010f0cf064dd59200000905062278d00600a540142111515610f0557600080fd5b60045460075411151515610f1857600080fd5b610f2460075482611cea565b600781905550610f9560116000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611cea565b60116000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600a81905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156110d257600080fd5b600254600554111515156110e557600080fd5b6110f160055482611cea565b60058190555061110360005482611cea565b60008190555061117460116000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611cea565b60116000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600881905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112d757600080fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561137757600080fd5b80601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156113c7575060008110155b15156113d257600080fd5b6113de60005482611cd1565b60008190555061142d601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611cd1565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6040805190810160405280600581526020017f48554d414e00000000000000000000000000000000000000000000000000000081525081565b60015481565b60005481565b600061154a3384611545601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205486611cd1565b611a50565b6001905092915050565b80601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156115a4575060008110155b15156115af57600080fd5b6115f8601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611cd1565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611684601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611cea565b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60055481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561179257600080fd5b62ed4e0060105401421115156117a757600080fd5b686c6b935b8bbd40000081111515156117bf57600080fd5b62278d0060095401421115156117d457600080fd5b600354600654111515156117e757600080fd5b6117f360065482611cea565b60068190555061186460116000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611cea565b60116000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600981905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b600a5481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f45524332303a20617070726f76652066726f6d20746865207a65726f2061646481526020017f726573730000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611be6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f45524332303a20617070726f766520746f20746865207a65726f20616464726581526020017f737300000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b80601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000828211151515611cdf57fe5b818303905092915050565b6000808284019050838110151515611cfe57fe5b80915050929150505600a165627a7a72305820d48bf1b36b327b9e552e02007785400db66b82788285e7d947ee9f1e2b3b87710029