60806040526040518060400160405280600d81526020017f5665696c2050726f746f636f6c00000000000000000000000000000000000000815250600390816200004a91906200048f565b506040518060400160405280600481526020017f5645494c00000000000000000000000000000000000000000000000000000000815250600490816200009191906200048f565b506012600560006101000a81548160ff021916908360ff1602179055506064600655348015620000c057600080fd5b5033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560009054906101000a900460ff16600a62000122919062000706565b6298968062000132919062000757565b905080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620001859190620007a2565b92505081905550806000808282546200019f9190620007a2565b925050819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002069190620007ee565b60405180910390a3506200080b565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200029757607f821691505b602082108103620002ad57620002ac6200024f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002d8565b620003238683620002d8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003706200036a62000364846200033b565b62000345565b6200033b565b9050919050565b6000819050919050565b6200038c836200034f565b620003a46200039b8262000377565b848454620002e5565b825550505050565b600090565b620003bb620003ac565b620003c881848462000381565b505050565b5b81811015620003f057620003e4600082620003b1565b600181019050620003ce565b5050565b601f8211156200043f576200040981620002b3565b6200041484620002c8565b8101602085101562000424578190505b6200043c6200043385620002c8565b830182620003cd565b50505b505050565b600082821c905092915050565b6000620004646000198460080262000444565b1980831691505092915050565b60006200047f838362000451565b9150826002028217905092915050565b6200049a8262000215565b67ffffffffffffffff811115620004b657620004b562000220565b5b620004c282546200027e565b620004cf828285620003f4565b600060209050601f831160018114620005075760008415620004f2578287015190505b620004fe858262000471565b8655506200056e565b601f1984166200051786620002b3565b60005b8281101562000541578489015182556001820191506020850194506020810190506200051a565b868310156200056157848901516200055d601f89168262000451565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200060457808604811115620005dc57620005db62000576565b5b6001851615620005ec5780820291505b8081029050620005fc85620005a5565b9450620005bc565b94509492505050565b6000826200061f5760019050620006f2565b816200062f5760009050620006f2565b8160018114620006485760028114620006535762000689565b6001915050620006f2565b60ff84111562000668576200066762000576565b5b8360020a91508482111562000682576200068162000576565b5b50620006f2565b5060208310610133831016604e8410600b8410161715620006c35782820a905083811115620006bd57620006bc62000576565b5b620006f2565b620006d28484846001620005b2565b92509050818404811115620006ec57620006eb62000576565b5b81810290505b9392505050565b600060ff82169050919050565b600062000713826200033b565b91506200072083620006f9565b92506200074f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200060d565b905092915050565b600062000764826200033b565b915062000771836200033b565b925082820262000781816200033b565b915082820484148315176200079b576200079a62000576565b5b5092915050565b6000620007af826200033b565b9150620007bc836200033b565b9250828201905080821115620007d757620007d662000576565b5b92915050565b620007e8816200033b565b82525050565b6000602082019050620008056000830184620007dd565b92915050565b611280806200081b6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639122171611610097578063b0dd5ee011610066578063b0dd5ee0146102b3578063dd62ed3e146102cf578063e0650997146102ff578063f2fde38b1461031d57610100565b8063912217161461022b578063957aa58c1461024757806395d89b4114610265578063a9059cbb1461028357610100565b806323b872dd116100d357806323b872dd1461018f578063313ce567146101bf57806370a08231146101dd5780638da5cb5b1461020d57610100565b806306fdde0314610105578063095ea7b31461012357806316f0115b1461015357806318160ddd14610171575b600080fd5b61010d610339565b60405161011a9190610d18565b60405180910390f35b61013d60048036038101906101389190610dd3565b6103c7565b60405161014a9190610e2e565b60405180910390f35b61015b6104b9565b6040516101689190610e58565b60405180910390f35b6101796104df565b6040516101869190610e82565b60405180910390f35b6101a960048036038101906101a49190610e9d565b6104e5565b6040516101b69190610e2e565b60405180910390f35b6101c7610696565b6040516101d49190610f0c565b60405180910390f35b6101f760048036038101906101f29190610f27565b6106a9565b6040516102049190610e82565b60405180910390f35b6102156106c1565b6040516102229190610e58565b60405180910390f35b61024560048036038101906102409190610f27565b6106e7565b005b61024f6107d6565b60405161025c9190610e2e565b60405180910390f35b61026d6107e9565b60405161027a9190610d18565b60405180910390f35b61029d60048036038101906102989190610dd3565b610877565b6040516102aa9190610e2e565b60405180910390f35b6102cd60048036038101906102c89190610f54565b610a71565b005b6102e960048036038101906102e49190610f81565b610b0b565b6040516102f69190610e82565b60405180910390f35b610307610b30565b6040516103149190610e82565b60405180910390f35b61033760048036038101906103329190610f27565b610b36565b005b6003805461034690610ff0565b80601f016020809104026020016040519081016040528092919081815260200182805461037290610ff0565b80156103bf5780601f10610394576101008083540402835291602001916103bf565b820191906000526020600020905b8154815290600101906020018083116103a257829003601f168201915b505050505081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104a79190610e82565b60405180910390a36001905092915050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b600081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105739190611050565b9250508190555081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105c99190611050565b9250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461061f9190611084565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106839190610e82565b60405180910390a3600190509392505050565b600560009054906101000a900460ff1681565b60016020528060005260406000206000915090505481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076e9061112a565b60405180910390fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600560156101000a81548160ff02191690831515021790555050565b600560159054906101000a900460ff1681565b600480546107f690610ff0565b80601f016020809104026020016040519081016040528092919081815260200182805461082290610ff0565b801561086f5780601f106108445761010080835404028352916020019161086f565b820191906000526020600020905b81548152906001019060200180831161085257829003601f168201915b505050505081565b6000600560159054906101000a900460ff1661089257600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108e19190611050565b9250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109379190611084565b92505081905550600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610a025760006127106006546000546109a8919061114a565b6109b291906111bb565b9050600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811015610a0057600080fd5b505b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a5f9190610e82565b60405180910390a36001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af89061112a565b60405180910390fd5b8060068190555050565b6002602052816000526040600020602052806000526040600020600091509150505481565b60065481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b9057600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1681604051602401610bb89190610e58565b6040516020818303038152906040527ff2fde38b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610c429190611233565b600060405180830381855af49150503d8060008114610c7d576040519150601f19603f3d011682016040523d82523d6000602084013e610c82565b606091505b50505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610cc2578082015181840152602081019050610ca7565b60008484015250505050565b6000601f19601f8301169050919050565b6000610cea82610c88565b610cf48185610c93565b9350610d04818560208601610ca4565b610d0d81610cce565b840191505092915050565b60006020820190508181036000830152610d328184610cdf565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d6a82610d3f565b9050919050565b610d7a81610d5f565b8114610d8557600080fd5b50565b600081359050610d9781610d71565b92915050565b6000819050919050565b610db081610d9d565b8114610dbb57600080fd5b50565b600081359050610dcd81610da7565b92915050565b60008060408385031215610dea57610de9610d3a565b5b6000610df885828601610d88565b9250506020610e0985828601610dbe565b9150509250929050565b60008115159050919050565b610e2881610e13565b82525050565b6000602082019050610e436000830184610e1f565b92915050565b610e5281610d5f565b82525050565b6000602082019050610e6d6000830184610e49565b92915050565b610e7c81610d9d565b82525050565b6000602082019050610e976000830184610e73565b92915050565b600080600060608486031215610eb657610eb5610d3a565b5b6000610ec486828701610d88565b9350506020610ed586828701610d88565b9250506040610ee686828701610dbe565b9150509250925092565b600060ff82169050919050565b610f0681610ef0565b82525050565b6000602082019050610f216000830184610efd565b92915050565b600060208284031215610f3d57610f3c610d3a565b5b6000610f4b84828501610d88565b91505092915050565b600060208284031215610f6a57610f69610d3a565b5b6000610f7884828501610dbe565b91505092915050565b60008060408385031215610f9857610f97610d3a565b5b6000610fa685828601610d88565b9250506020610fb785828601610d88565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061100857607f821691505b60208210810361101b5761101a610fc1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061105b82610d9d565b915061106683610d9d565b925082820390508181111561107e5761107d611021565b5b92915050565b600061108f82610d9d565b915061109a83610d9d565b92508282019050808211156110b2576110b1611021565b5b92915050565b7f4d757374206265206f776e657220746f2063616c6c20746869732066756e637460008201527f696f6e2100000000000000000000000000000000000000000000000000000000602082015250565b6000611114602483610c93565b915061111f826110b8565b604082019050919050565b6000602082019050818103600083015261114381611107565b9050919050565b600061115582610d9d565b915061116083610d9d565b925082820261116e81610d9d565b9150828204841483151761118557611184611021565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006111c682610d9d565b91506111d183610d9d565b9250826111e1576111e061118c565b5b828204905092915050565b600081519050919050565b600081905092915050565b600061120d826111ec565b61121781856111f7565b9350611227818560208601610ca4565b80840191505092915050565b600061123f8284611202565b91508190509291505056fea26469706673582212204d77c67142a46e2184cdb6c2390a97a11dde27278fd727fd33c1febd6b30950164736f6c63430008130033