60806040526040518060400160405280601381526020017f536f6c6964697479206279204578616d706c6500000000000000000000000000815250600490816100489190610496565b506040518060400160405280600781526020017f5041484c415649000000000000000000000000000000000000000000000000008152506005908161008d9190610496565b50601260065f6101000a81548160ff021916908360ff1602179055505f600660016101000a81548160ff02191690831515021790555060016007553480156100d3575f80fd5b50335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610145575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161013c91906105a4565b60405180910390fd5b6101548161019b60201b60201c565b5033600660026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506105bd565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806102d757607f821691505b6020821081036102ea576102e9610293565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261034c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610311565b6103568683610311565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61039a6103956103908461036e565b610377565b61036e565b9050919050565b5f819050919050565b6103b383610380565b6103c76103bf826103a1565b84845461031d565b825550505050565b5f90565b6103db6103cf565b6103e68184846103aa565b505050565b5b81811015610409576103fe5f826103d3565b6001810190506103ec565b5050565b601f82111561044e5761041f816102f0565b61042884610302565b81016020851015610437578190505b61044b61044385610302565b8301826103eb565b50505b505050565b5f82821c905092915050565b5f61046e5f1984600802610453565b1980831691505092915050565b5f610486838361045f565b9150826002028217905092915050565b61049f8261025c565b67ffffffffffffffff8111156104b8576104b7610266565b5b6104c282546102c0565b6104cd82828561040d565b5f60209050601f8311600181146104fe575f84156104ec578287015190505b6104f6858261047b565b86555061055d565b601f19841661050c866102f0565b5f5b828110156105335784890151825560018201915060208501945060208101905061050e565b86831015610550578489015161054c601f89168261045f565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61058e82610565565b9050919050565b61059e81610584565b82525050565b5f6020820190506105b75f830184610595565b92915050565b6119e4806105ca5f395ff3fe608060405234801561000f575f80fd5b5060043610610135575f3560e01c80638456cb59116100b6578063a42dce801161007a578063a42dce80146102f1578063a9059cbb1461030d578063ae06c1b71461033d578063c415b95c14610359578063dd62ed3e14610377578063f2fde38b146103a757610135565b80638456cb59146102715780638da5cb5b1461027b57806395d89b4114610299578063a001ecdd146102b7578063a0712d68146102d557610135565b80633f4ba83a116100fd5780633f4ba83a146101f357806342966c68146101fd5780635c975abb1461021957806370a0823114610237578063715018a61461026757610135565b806306fdde0314610139578063095ea7b31461015757806318160ddd1461018757806323b872dd146101a5578063313ce567146101d5575b5f80fd5b6101416103c3565b60405161014e919061138e565b60405180910390f35b610171600480360381019061016c919061143f565b61044f565b60405161017e9190611497565b60405180910390f35b61018f61058c565b60405161019c91906114bf565b60405180910390f35b6101bf60048036038101906101ba91906114d8565b610592565b6040516101cc9190611497565b60405180910390f35b6101dd610965565b6040516101ea9190611543565b60405180910390f35b6101fb610977565b005b6102176004803603810190610212919061155c565b6109c7565b005b610221610bb8565b60405161022e9190611497565b60405180910390f35b610251600480360381019061024c9190611587565b610bcb565b60405161025e91906114bf565b60405180910390f35b61026f610be0565b005b610279610bf3565b005b610283610c44565b60405161029091906115c1565b60405180910390f35b6102a1610c6b565b6040516102ae919061138e565b60405180910390f35b6102bf610cf7565b6040516102cc91906114bf565b60405180910390f35b6102ef60048036038101906102ea919061155c565b610cfd565b005b61030b60048036038101906103069190611587565b610e1e565b005b6103276004803603810190610322919061143f565b610e6a565b6040516103349190611497565b60405180910390f35b6103576004803603810190610352919061155c565b6110f3565b005b610361611105565b60405161036e91906115c1565b60405180910390f35b610391600480360381019061038c91906115da565b61112b565b60405161039e91906114bf565b60405180910390f35b6103c160048036038101906103bc9190611587565b61114b565b005b600480546103d090611645565b80601f01602080910402602001604051908101604052809291908181526020018280546103fc90611645565b80156104475780601f1061041e57610100808354040283529160200191610447565b820191905f5260205f20905b81548152906001019060200180831161042a57829003601f168201915b505050505081565b5f600660019054906101000a900460ff16156104a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610497906116bf565b60405180910390fd5b8160035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161057a91906114bf565b60405180910390a36001905092915050565b60015481565b5f600660019054906101000a900460ff16156105e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105da906116bf565b60405180910390fd5b8160035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054101561069e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069590611727565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054101561071e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107159061178f565b60405180910390fd5b5f60646007548461072f91906117da565b6107399190611848565b90505f81846107489190611878565b90508360035f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546107d19190611878565b925050819055508360025f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108249190611878565b925050819055508060025f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461087791906118ab565b925050819055508160025f600660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108ec91906118ab565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161095091906114bf565b60405180910390a36001925050509392505050565b60065f9054906101000a900460ff1681565b61097f6111cf565b5f600660016101000a81548160ff0219169083151502179055507fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693360405160405180910390a1565b600660019054906101000a900460ff1615610a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0e906116bf565b60405180910390fd5b8060025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8e90611928565b60405180910390fd5b8060025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610ae39190611878565b925050819055508060015f828254610afb9190611878565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca582604051610b4891906114bf565b60405180910390a25f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bad91906114bf565b60405180910390a350565b600660019054906101000a900460ff1681565b6002602052805f5260405f205f915090505481565b610be86111cf565b610bf15f611256565b565b610bfb6111cf565b6001600660016101000a81548160ff0219169083151502179055507f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75260405160405180910390a1565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610c7890611645565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca490611645565b8015610cef5780601f10610cc657610100808354040283529160200191610cef565b820191905f5260205f20905b815481529060010190602001808311610cd257829003601f168201915b505050505081565b60075481565b8060025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610d4991906118ab565b925050819055508060015f828254610d6191906118ab565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688582604051610dae91906114bf565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e1391906114bf565b60405180910390a350565b610e266111cf565b80600660026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f600660019054906101000a900460ff1615610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb2906116bf565b60405180910390fd5b8160025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3290611990565b60405180910390fd5b5f606460075484610f4c91906117da565b610f569190611848565b90505f8184610f659190611878565b90508360025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610fb39190611878565b925050819055508060025f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461100691906118ab565b925050819055508160025f600660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461107b91906118ab565b925050819055508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110df91906114bf565b60405180910390a360019250505092915050565b6110fb6111cf565b8060078190555050565b600660029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6003602052815f5260405f20602052805f5260405f205f91509150505481565b6111536111cf565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111c3575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016111ba91906115c1565b60405180910390fd5b6111cc81611256565b50565b6111d7611317565b73ffffffffffffffffffffffffffffffffffffffff166111f5610c44565b73ffffffffffffffffffffffffffffffffffffffff161461125457611218611317565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161124b91906115c1565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6113608261131e565b61136a8185611328565b935061137a818560208601611338565b61138381611346565b840191505092915050565b5f6020820190508181035f8301526113a68184611356565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6113db826113b2565b9050919050565b6113eb816113d1565b81146113f5575f80fd5b50565b5f81359050611406816113e2565b92915050565b5f819050919050565b61141e8161140c565b8114611428575f80fd5b50565b5f8135905061143981611415565b92915050565b5f8060408385031215611455576114546113ae565b5b5f611462858286016113f8565b92505060206114738582860161142b565b9150509250929050565b5f8115159050919050565b6114918161147d565b82525050565b5f6020820190506114aa5f830184611488565b92915050565b6114b98161140c565b82525050565b5f6020820190506114d25f8301846114b0565b92915050565b5f805f606084860312156114ef576114ee6113ae565b5b5f6114fc868287016113f8565b935050602061150d868287016113f8565b925050604061151e8682870161142b565b9150509250925092565b5f60ff82169050919050565b61153d81611528565b82525050565b5f6020820190506115565f830184611534565b92915050565b5f60208284031215611571576115706113ae565b5b5f61157e8482850161142b565b91505092915050565b5f6020828403121561159c5761159b6113ae565b5b5f6115a9848285016113f8565b91505092915050565b6115bb816113d1565b82525050565b5f6020820190506115d45f8301846115b2565b92915050565b5f80604083850312156115f0576115ef6113ae565b5b5f6115fd858286016113f8565b925050602061160e858286016113f8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061165c57607f821691505b60208210810361166f5761166e611618565b5b50919050565b7f5472616e736665727320617265207061757365640000000000000000000000005f82015250565b5f6116a9601483611328565b91506116b482611675565b602082019050919050565b5f6020820190508181035f8301526116d68161169d565b9050919050565b7f496e73756666696369656e7420616c6c6f77616e6365000000000000000000005f82015250565b5f611711601683611328565b915061171c826116dd565b602082019050919050565b5f6020820190508181035f83015261173e81611705565b9050919050565b7f53656e64657227732062616c616e636520697320696e73756666696369656e745f82015250565b5f611779602083611328565b915061178482611745565b602082019050919050565b5f6020820190508181035f8301526117a68161176d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6117e48261140c565b91506117ef8361140c565b92508282026117fd8161140c565b91508282048414831517611814576118136117ad565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6118528261140c565b915061185d8361140c565b92508261186d5761186c61181b565b5b828204905092915050565b5f6118828261140c565b915061188d8361140c565b92508282039050818111156118a5576118a46117ad565b5b92915050565b5f6118b58261140c565b91506118c08361140c565b92508282019050808211156118d8576118d76117ad565b5b92915050565b7f496e73756666696369656e742062616c616e636520746f206275726e000000005f82015250565b5f611912601c83611328565b915061191d826118de565b602082019050919050565b5f6020820190508181035f83015261193f81611906565b9050919050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f61197a601483611328565b915061198582611946565b602082019050919050565b5f6020820190508181035f8301526119a78161196e565b905091905056fea2646970667358221220c2bdafd8eeb53a92abdd25ab601b3a572c91941e7e585828fdbe39bae43dca1c64736f6c634300081a0033