60806040526000600a557318dc1a839cbc37b57bad4264d97c49f13ae444f4600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006b57600080fd5b506040516200279b3803806200279b833981810160405281019062000091919062000744565b6000620000a3620003e860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35084600590805190602001906200015992919062000419565b5083600690805190602001906200017292919062000419565b5081600760006101000a81548160ff021916908360ff1602179055508260088190555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060085460016000620001ed620003e860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016004600062000241620003f060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000374620003e860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600854604051620003d591906200081b565b60405180910390a350505050506200089c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620004279062000867565b90600052602060002090601f0160209004810192826200044b576000855562000497565b82601f106200046657805160ff191683800117855562000497565b8280016001018555821562000497579182015b828111156200049657825182559160200191906001019062000479565b5b509050620004a69190620004aa565b5090565b5b80821115620004c5576000816000905550600101620004ab565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200053282620004e7565b810181811067ffffffffffffffff82111715620005545762000553620004f8565b5b80604052505050565b600062000569620004c9565b905062000577828262000527565b919050565b600067ffffffffffffffff8211156200059a5762000599620004f8565b5b620005a582620004e7565b9050602081019050919050565b60005b83811015620005d2578082015181840152602081019050620005b5565b83811115620005e2576000848401525b50505050565b6000620005ff620005f9846200057c565b6200055d565b9050828152602081018484840111156200061e576200061d620004e2565b5b6200062b848285620005b2565b509392505050565b600082601f8301126200064b576200064a620004dd565b5b81516200065d848260208601620005e8565b91505092915050565b6000819050919050565b6200067b8162000666565b81146200068757600080fd5b50565b6000815190506200069b8162000670565b92915050565b600060ff82169050919050565b620006b981620006a1565b8114620006c557600080fd5b50565b600081519050620006d981620006ae565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200070c82620006df565b9050919050565b6200071e81620006ff565b81146200072a57600080fd5b50565b6000815190506200073e8162000713565b92915050565b600080600080600060a08688031215620007635762000762620004d3565b5b600086015167ffffffffffffffff811115620007845762000783620004d8565b5b620007928882890162000633565b955050602086015167ffffffffffffffff811115620007b657620007b5620004d8565b5b620007c48882890162000633565b9450506040620007d7888289016200068a565b9350506060620007ea88828901620006c8565b9250506080620007fd888289016200072d565b9150509295509295909350565b620008158162000666565b82525050565b60006020820190506200083260008301846200080a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200088057607f821691505b60208210810362000896576200089562000838565b5b50919050565b611eef80620008ac6000396000f3fe608060405234801561001057600080fd5b50600436106100ff5760003560e01c80638674c9a5116100975780639ebbaef7116100665780639ebbaef71461028c578063a9059cbb146102a8578063b1da93c3146102d8578063dd62ed3e146102f6576100ff565b80638674c9a5146102025780638da5cb5b14610232578063956236411461025057806395d89b411461026e576100ff565b806323b872dd116100d357806323b872dd1461017a578063313ce567146101aa57806370a08231146101c8578063715018a6146101f8576100ff565b80622e34c71461010457806306fdde031461010e578063095ea7b31461012c57806318160ddd1461015c575b600080fd5b61010c610326565b005b610116610485565b604051610123919061140e565b60405180910390f35b610146600480360381019061014191906114d8565b610517565b6040516101539190611533565b60405180910390f35b610164610535565b604051610171919061155d565b60405180910390f35b610194600480360381019061018f9190611578565b61053f565b6040516101a19190611533565b60405180910390f35b6101b26108e9565b6040516101bf91906115e7565b60405180910390f35b6101e260048036038101906101dd9190611602565b610900565b6040516101ef919061155d565b60405180910390f35b610200610949565b005b61021c600480360381019061021791906114d8565b610a83565b6040516102299190611533565b60405180910390f35b61023a610b83565b604051610247919061163e565b60405180910390f35b610258610bac565b604051610265919061163e565b60405180910390f35b610276610bd2565b604051610283919061140e565b60405180910390f35b6102a660048036038101906102a191906117a1565b610c64565b005b6102c260048036038101906102bd91906114d8565b610d51565b6040516102cf9190611533565b60405180910390f35b6102e06110f7565b6040516102ed919061163e565b60405180910390f35b610310600480360381019061030b91906117fd565b61111d565b60405161031d919061155d565b60405180910390f35b61032e6111a4565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461038757600080fd5b61038f6111a4565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036104825760006103ed6108e9565b600a6103f9919061199f565b6403f5476a0061040991906119ea565b90506000620126ec8261041c91906119ea565b9050806001600061042b6111a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104749190611a44565b925050819055505050610483565b5b565b60606005805461049490611ac9565b80601f01602080910402602001604051908101604052809291908181526020018280546104c090611ac9565b801561050d5780601f106104e25761010080835404028352916020019161050d565b820191906000526020600020905b8154815290600101906020018083116104f057829003601f168201915b5050505050905090565b600061052b6105246111a4565b84846111ac565b6001905092915050565b6000600854905090565b600081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061058b6111a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fe90611b6c565b60405180910390fd5b60006064600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461065691906119ea565b6106609190611bbb565b9050600081846106709190611bec565b905083600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106c19190611bec565b9250508190555080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107179190611a44565b9250508190555083600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107686111a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107b19190611bec565b92505081905550816001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108099190611a44565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161086d919061155d565b60405180910390a361dead73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516108d4919061155d565b60405180910390a36001925050509392505050565b6000600760009054906101000a900460ff16905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109516111a4565b73ffffffffffffffffffffffffffffffffffffffff1661096f610b83565b73ffffffffffffffffffffffffffffffffffffffff16146109c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bc90611c6c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008160026000610a926111a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff16610b2c6111a4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b71919061155d565b60405180910390a36001905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060068054610be190611ac9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0d90611ac9565b8015610c5a5780601f10610c2f57610100808354040283529160200191610c5a565b820191906000526020600020905b815481529060010190602001808311610c3d57829003601f168201915b5050505050905090565b6064811115610c7257600080fd5b610c7a6111a4565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610d4d5760005b8251811015610d4b578160036000858481518110610cf257610cf1611c8c565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610d4390611cbb565b915050610cd1565b505b5050565b60008160016000610d606111a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd390611d75565b60405180910390fd5b6000606460036000610dec6111a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484610e3291906119ea565b610e3c9190611bbb565b905060006064600a5485610e5091906119ea565b610e5a9190611bbb565b90506000818386610e6b9190611bec565b610e759190611bec565b90508460016000610e846111a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ecd9190611bec565b9250508190555080600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f239190611a44565b92505081905550826001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f7b9190611a44565b925050819055508573ffffffffffffffffffffffffffffffffffffffff16610fa16111a4565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610fe6919061155d565b60405180910390a361dead73ffffffffffffffffffffffffffffffffffffffff1661100f6111a4565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611054919061155d565b60405180910390a3600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661109d6111a4565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110e2919061155d565b60405180910390a36001935050505092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361121b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121290611e07565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361128a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128190611e99565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611368919061155d565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156113af578082015181840152602081019050611394565b838111156113be576000848401525b50505050565b6000601f19601f8301169050919050565b60006113e082611375565b6113ea8185611380565b93506113fa818560208601611391565b611403816113c4565b840191505092915050565b6000602082019050818103600083015261142881846113d5565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061146f82611444565b9050919050565b61147f81611464565b811461148a57600080fd5b50565b60008135905061149c81611476565b92915050565b6000819050919050565b6114b5816114a2565b81146114c057600080fd5b50565b6000813590506114d2816114ac565b92915050565b600080604083850312156114ef576114ee61143a565b5b60006114fd8582860161148d565b925050602061150e858286016114c3565b9150509250929050565b60008115159050919050565b61152d81611518565b82525050565b60006020820190506115486000830184611524565b92915050565b611557816114a2565b82525050565b6000602082019050611572600083018461154e565b92915050565b6000806000606084860312156115915761159061143a565b5b600061159f8682870161148d565b93505060206115b08682870161148d565b92505060406115c1868287016114c3565b9150509250925092565b600060ff82169050919050565b6115e1816115cb565b82525050565b60006020820190506115fc60008301846115d8565b92915050565b6000602082840312156116185761161761143a565b5b60006116268482850161148d565b91505092915050565b61163881611464565b82525050565b6000602082019050611653600083018461162f565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611696826113c4565b810181811067ffffffffffffffff821117156116b5576116b461165e565b5b80604052505050565b60006116c8611430565b90506116d4828261168d565b919050565b600067ffffffffffffffff8211156116f4576116f361165e565b5b602082029050602081019050919050565b600080fd5b600061171d611718846116d9565b6116be565b905080838252602082019050602084028301858111156117405761173f611705565b5b835b818110156117695780611755888261148d565b845260208401935050602081019050611742565b5050509392505050565b600082601f83011261178857611787611659565b5b813561179884826020860161170a565b91505092915050565b600080604083850312156117b8576117b761143a565b5b600083013567ffffffffffffffff8111156117d6576117d561143f565b5b6117e285828601611773565b92505060206117f3858286016114c3565b9150509250929050565b600080604083850312156118145761181361143a565b5b60006118228582860161148d565b92505060206118338582860161148d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156118c35780860481111561189f5761189e61183d565b5b60018516156118ae5780820291505b80810290506118bc8561186c565b9450611883565b94509492505050565b6000826118dc5760019050611998565b816118ea5760009050611998565b8160018114611900576002811461190a57611939565b6001915050611998565b60ff84111561191c5761191b61183d565b5b8360020a9150848211156119335761193261183d565b5b50611998565b5060208310610133831016604e8410600b841016171561196e5782820a9050838111156119695761196861183d565b5b611998565b61197b8484846001611879565b925090508184048111156119925761199161183d565b5b81810290505b9392505050565b60006119aa826114a2565b91506119b5836115cb565b92506119e27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846118cc565b905092915050565b60006119f5826114a2565b9150611a00836114a2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611a3957611a3861183d565b5b828202905092915050565b6000611a4f826114a2565b9150611a5a836114a2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611a8f57611a8e61183d565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611ae157607f821691505b602082108103611af457611af3611a9a565b5b50919050565b7f5075743a207472616e7366657220616d6f756e74206578636565647320616c6c60008201527f6f77616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611b56602683611380565b9150611b6182611afa565b604082019050919050565b60006020820190508181036000830152611b8581611b49565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611bc6826114a2565b9150611bd1836114a2565b925082611be157611be0611b8c565b5b828204905092915050565b6000611bf7826114a2565b9150611c02836114a2565b925082821015611c1557611c1461183d565b5b828203905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611c56602083611380565b9150611c6182611c20565b602082019050919050565b60006020820190508181036000830152611c8581611c49565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611cc6826114a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611cf857611cf761183d565b5b600182019050919050565b7f5075743a207472616e7366657220616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000611d5f602483611380565b9150611d6a82611d03565b604082019050919050565b60006020820190508181036000830152611d8e81611d52565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611df1602483611380565b9150611dfc82611d95565b604082019050919050565b60006020820190508181036000830152611e2081611de4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611e83602283611380565b9150611e8e82611e27565b604082019050919050565b60006020820190508181036000830152611eb281611e76565b905091905056fea26469706673582212205996661269c55401d93b688c37ed95e0b0cab7573228297057a8208e5a2b10e564736f6c634300080e003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000018dc1a839cbc37b57bad4264d97c49f13ae444f4000000000000000000000000000000000000000000000000000000000000000f42524f54484552204f4620504550450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000446726f6700000000000000000000000000000000000000000000000000000000