608060405234801561000f575f5ffd5b50336040518060600160405280603d8152602001611970603d91396040518060400160405280600681526020017f4d6f64656c320000000000000000000000000000000000000000000000000000815250816003908161006f91906106ef565b50806004908161007f91906106ef565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100f2575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100e991906107fd565b60405180910390fd5b6101018161015160201b60201c565b505f670de0b6b3a764000090505f639502f90090505f73e2a9198e6d47f5f7b6677e5d6eadda7d88315fbb905061014981848461013e9190610843565b61021460201b60201c565b505050610914565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610284575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161027b91906107fd565b60405180910390fd5b6102955f838361029960201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036102e9578060025f8282546102dd9190610884565b925050819055506103b7565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610372578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610369939291906108c6565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036103fe578060025f8282540392505081905550610448565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516104a591906108fb565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061052d57607f821691505b6020821081036105405761053f6104e9565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026105a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610567565b6105ac8683610567565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6105f06105eb6105e6846105c4565b6105cd565b6105c4565b9050919050565b5f819050919050565b610609836105d6565b61061d610615826105f7565b848454610573565b825550505050565b5f5f905090565b610634610625565b61063f818484610600565b505050565b5b81811015610662576106575f8261062c565b600181019050610645565b5050565b601f8211156106a75761067881610546565b61068184610558565b81016020851015610690578190505b6106a461069c85610558565b830182610644565b50505b505050565b5f82821c905092915050565b5f6106c75f19846008026106ac565b1980831691505092915050565b5f6106df83836106b8565b9150826002028217905092915050565b6106f8826104b2565b67ffffffffffffffff811115610711576107106104bc565b5b61071b8254610516565b610726828285610666565b5f60209050601f831160018114610757575f8415610745578287015190505b61074f85826106d4565b8655506107b6565b601f19841661076586610546565b5f5b8281101561078c57848901518255600182019150602085019450602081019050610767565b868310156107a957848901516107a5601f8916826106b8565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6107e7826107be565b9050919050565b6107f7816107dd565b82525050565b5f6020820190506108105f8301846107ee565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61084d826105c4565b9150610858836105c4565b9250828202610866816105c4565b9150828204841483151761087d5761087c610816565b5b5092915050565b5f61088e826105c4565b9150610899836105c4565b92508282019050808211156108b1576108b0610816565b5b92915050565b6108c0816105c4565b82525050565b5f6060820190506108d95f8301866107ee565b6108e660208301856108b7565b6108f360408301846108b7565b949350505050565b5f60208201905061090e5f8301846108b7565b92915050565b61104f806109215f395ff3fe608060405234801561000f575f5ffd5b50600436106100b2575f3560e01c8063715018a61161006f578063715018a6146101a05780638da5cb5b146101aa57806395d89b41146101c8578063a9059cbb146101e6578063dd62ed3e14610216578063f2fde38b14610246576100b2565b806306fdde03146100b6578063095ea7b3146100d457806318160ddd1461010457806323b872dd14610122578063313ce5671461015257806370a0823114610170575b5f5ffd5b6100be610262565b6040516100cb9190610cc8565b60405180910390f35b6100ee60048036038101906100e99190610d79565b6102f2565b6040516100fb9190610dd1565b60405180910390f35b61010c610314565b6040516101199190610df9565b60405180910390f35b61013c60048036038101906101379190610e12565b61031d565b6040516101499190610dd1565b60405180910390f35b61015a61034b565b6040516101679190610e7d565b60405180910390f35b61018a60048036038101906101859190610e96565b610353565b6040516101979190610df9565b60405180910390f35b6101a8610398565b005b6101b26103ab565b6040516101bf9190610ed0565b60405180910390f35b6101d06103d3565b6040516101dd9190610cc8565b60405180910390f35b61020060048036038101906101fb9190610d79565b610463565b60405161020d9190610dd1565b60405180910390f35b610230600480360381019061022b9190610ee9565b610485565b60405161023d9190610df9565b60405180910390f35b610260600480360381019061025b9190610e96565b610507565b005b60606003805461027190610f54565b80601f016020809104026020016040519081016040528092919081815260200182805461029d90610f54565b80156102e85780601f106102bf576101008083540402835291602001916102e8565b820191905f5260205f20905b8154815290600101906020018083116102cb57829003601f168201915b5050505050905090565b5f5f6102fc61058b565b9050610309818585610592565b600191505092915050565b5f600254905090565b5f5f61032761058b565b90506103348582856105a4565b61033f858585610636565b60019150509392505050565b5f6012905090565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6103a0610726565b6103a95f6107ad565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546103e290610f54565b80601f016020809104026020016040519081016040528092919081815260200182805461040e90610f54565b80156104595780601f1061043057610100808354040283529160200191610459565b820191905f5260205f20905b81548152906001019060200180831161043c57829003601f168201915b5050505050905090565b5f5f61046d61058b565b905061047a818585610636565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61050f610726565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361057f575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016105769190610ed0565b60405180910390fd5b610588816107ad565b50565b5f33905090565b61059f8383836001610870565b505050565b5f6105af8484610485565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106305781811015610621578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161061893929190610f84565b60405180910390fd5b61062f84848484035f610870565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106a6575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161069d9190610ed0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610716575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161070d9190610ed0565b60405180910390fd5b610721838383610a3f565b505050565b61072e61058b565b73ffffffffffffffffffffffffffffffffffffffff1661074c6103ab565b73ffffffffffffffffffffffffffffffffffffffff16146107ab5761076f61058b565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016107a29190610ed0565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036108e0575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016108d79190610ed0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610950575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016109479190610ed0565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610a39578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a309190610df9565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a8f578060025f828254610a839190610fe6565b92505081905550610b5d565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610b18578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610b0f93929190610f84565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ba4578060025f8282540392505081905550610bee565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c4b9190610df9565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610c9a82610c58565b610ca48185610c62565b9350610cb4818560208601610c72565b610cbd81610c80565b840191505092915050565b5f6020820190508181035f830152610ce08184610c90565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610d1582610cec565b9050919050565b610d2581610d0b565b8114610d2f575f5ffd5b50565b5f81359050610d4081610d1c565b92915050565b5f819050919050565b610d5881610d46565b8114610d62575f5ffd5b50565b5f81359050610d7381610d4f565b92915050565b5f5f60408385031215610d8f57610d8e610ce8565b5b5f610d9c85828601610d32565b9250506020610dad85828601610d65565b9150509250929050565b5f8115159050919050565b610dcb81610db7565b82525050565b5f602082019050610de45f830184610dc2565b92915050565b610df381610d46565b82525050565b5f602082019050610e0c5f830184610dea565b92915050565b5f5f5f60608486031215610e2957610e28610ce8565b5b5f610e3686828701610d32565b9350506020610e4786828701610d32565b9250506040610e5886828701610d65565b9150509250925092565b5f60ff82169050919050565b610e7781610e62565b82525050565b5f602082019050610e905f830184610e6e565b92915050565b5f60208284031215610eab57610eaa610ce8565b5b5f610eb884828501610d32565b91505092915050565b610eca81610d0b565b82525050565b5f602082019050610ee35f830184610ec1565b92915050565b5f5f60408385031215610eff57610efe610ce8565b5b5f610f0c85828601610d32565b9250506020610f1d85828601610d32565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610f6b57607f821691505b602082108103610f7e57610f7d610f27565b5b50919050565b5f606082019050610f975f830186610ec1565b610fa46020830185610dea565b610fb16040830184610dea565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610ff082610d46565b9150610ffb83610d46565b925082820190508082111561101357611012610fb9565b5b9291505056fea2646970667358221220dc768079fad7f1125e9d9f5bd9dd6dbdafba8426b9daf96b8d16d42d716e7fa864736f6c634300081b00334861727279506f747465725465736c614d6f646c65324379626572636162526f626f74617869526f61647374657246726565456c6f6e6d75736b496e75