60806040526040518060400160405280600681526020017f546f6b656e580000000000000000000000000000000000000000000000000000815250600390816200004a91906200052b565b506040518060400160405280600281526020017f5458000000000000000000000000000000000000000000000000000000000000815250600490816200009191906200052b565b506012600560006101000a81548160ff021916908360ff160217905550348015620000bb57600080fd5b506000600560009054906101000a900460ff16600a620000dc9190620007a2565b612710620000eb9190620007f3565b9050806001600073aa9860cd1e0a18a7935458c76a85e011358f188e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806001600073590ff65f5646d4cea4b9a956b7bef55dc34b046773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555073aa9860cd1e0a18a7935458c76a85e011358f188e73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200021191906200084f565b60405180910390a373590ff65f5646d4cea4b9a956b7bef55dc34b046773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200028d91906200084f565b60405180910390a3600281620002a49190620007f3565b600081905550506200086c565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200033357607f821691505b602082108103620003495762000348620002eb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003b37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000374565b620003bf868362000374565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200040c620004066200040084620003d7565b620003e1565b620003d7565b9050919050565b6000819050919050565b6200042883620003eb565b62000440620004378262000413565b84845462000381565b825550505050565b600090565b6200045762000448565b620004648184846200041d565b505050565b5b818110156200048c57620004806000826200044d565b6001810190506200046a565b5050565b601f821115620004db57620004a5816200034f565b620004b08462000364565b81016020851015620004c0578190505b620004d8620004cf8562000364565b83018262000469565b50505b505050565b600082821c905092915050565b60006200050060001984600802620004e0565b1980831691505092915050565b60006200051b8383620004ed565b9150826002028217905092915050565b6200053682620002b1565b67ffffffffffffffff811115620005525762000551620002bc565b5b6200055e82546200031a565b6200056b82828562000490565b600060209050601f831160018114620005a357600084156200058e578287015190505b6200059a85826200050d565b8655506200060a565b601f198416620005b3866200034f565b60005b82811015620005dd57848901518255600182019150602085019450602081019050620005b6565b86831015620005fd5784890151620005f9601f891682620004ed565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620006a05780860481111562000678576200067762000612565b5b6001851615620006885780820291505b8081029050620006988562000641565b945062000658565b94509492505050565b600082620006bb57600190506200078e565b81620006cb57600090506200078e565b8160018114620006e45760028114620006ef5762000725565b60019150506200078e565b60ff84111562000704576200070362000612565b5b8360020a9150848211156200071e576200071d62000612565b5b506200078e565b5060208310610133831016604e8410600b84101617156200075f5782820a90508381111562000759576200075862000612565b5b6200078e565b6200076e84848460016200064e565b9250905081840481111562000788576200078762000612565b5b81810290505b9392505050565b600060ff82169050919050565b6000620007af82620003d7565b9150620007bc8362000795565b9250620007eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620006a9565b905092915050565b60006200080082620003d7565b91506200080d83620003d7565b92508282026200081d81620003d7565b9150828204841483151762000837576200083662000612565b5b5092915050565b6200084981620003d7565b82525050565b60006020820190506200086660008301846200083e565b92915050565b610fbb806200087c6000396000f3fe608060405234801561001057600080fd5b50600436106100d35760003560e01c806342966c681161008c5780639b4e6573116100665780639b4e657314610251578063a0712d681461026f578063a9059cbb1461028b578063dd62ed3e146102bb576100d4565b806342966c68146101e757806370a082311461020357806395d89b4114610233576100d4565b80630351b6311461010f57806306fdde031461012d578063095ea7b31461014b57806318160ddd1461017b57806323b872dd14610199578063313ce567146101c9576100d4565b5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010690610ada565b60405180910390fd5b6101176102eb565b6040516101249190610b3b565b60405180910390f35b610135610303565b6040516101429190610bd5565b60405180910390f35b61016560048036038101906101609190610c5e565b610391565b6040516101729190610cb9565b60405180910390f35b610183610483565b6040516101909190610ce3565b60405180910390f35b6101b360048036038101906101ae9190610cfe565b610489565b6040516101c09190610cb9565b60405180910390f35b6101d161063a565b6040516101de9190610d6d565b60405180910390f35b61020160048036038101906101fc9190610d88565b61064d565b005b61021d60048036038101906102189190610db5565b6107a6565b60405161022a9190610ce3565b60405180910390f35b61023b6107be565b6040516102489190610bd5565b60405180910390f35b61025961084c565b6040516102669190610b3b565b60405180910390f35b61028960048036038101906102849190610d88565b610864565b005b6102a560048036038101906102a09190610c5e565b61093b565b6040516102b29190610cb9565b60405180910390f35b6102d560048036038101906102d09190610de2565b610a58565b6040516102e29190610ce3565b60405180910390f35b73aa9860cd1e0a18a7935458c76a85e011358f188e81565b6003805461031090610e51565b80601f016020809104026020016040519081016040528092919081815260200182805461033c90610e51565b80156103895780601f1061035e57610100808354040283529160200191610389565b820191906000526020600020905b81548152906001019060200180831161036c57829003601f168201915b505050505081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104719190610ce3565b60405180910390a36001905092915050565b60005481565b600081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105179190610eb1565b9250508190555081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461056d9190610eb1565b9250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105c39190610ee5565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106279190610ce3565b60405180910390a3600190509392505050565b600560009054906101000a900460ff1681565b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156106cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c690610f65565b60405180910390fd5b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461071e9190610eb1565b92505081905550806000808282546107369190610eb1565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161079b9190610ce3565b60405180910390a350565b60016020528060005260406000206000915090505481565b600480546107cb90610e51565b80601f01602080910402602001604051908101604052809291908181526020018280546107f790610e51565b80156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b505050505081565b73590ff65f5646d4cea4b9a956b7bef55dc34b046781565b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108b39190610ee5565b92505081905550806000808282546108cb9190610ee5565b925050819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516109309190610ce3565b60405180910390a350565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461098c9190610eb1565b9250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109e29190610ee5565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a469190610ce3565b60405180910390a36001905092915050565b6002602052816000526040600020602052806000526040600020600091509150505481565b600082825260208201905092915050565b7f496e76616c6964205472616e73616374696f6e00000000000000000000000000600082015250565b6000610ac4601383610a7d565b9150610acf82610a8e565b602082019050919050565b60006020820190508181036000830152610af381610ab7565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610b2582610afa565b9050919050565b610b3581610b1a565b82525050565b6000602082019050610b506000830184610b2c565b92915050565b600081519050919050565b60005b83811015610b7f578082015181840152602081019050610b64565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ba782610b56565b610bb18185610a7d565b9350610bc1818560208601610b61565b610bca81610b8b565b840191505092915050565b60006020820190508181036000830152610bef8184610b9c565b905092915050565b600080fd5b610c0581610b1a565b8114610c1057600080fd5b50565b600081359050610c2281610bfc565b92915050565b6000819050919050565b610c3b81610c28565b8114610c4657600080fd5b50565b600081359050610c5881610c32565b92915050565b60008060408385031215610c7557610c74610bf7565b5b6000610c8385828601610c13565b9250506020610c9485828601610c49565b9150509250929050565b60008115159050919050565b610cb381610c9e565b82525050565b6000602082019050610cce6000830184610caa565b92915050565b610cdd81610c28565b82525050565b6000602082019050610cf86000830184610cd4565b92915050565b600080600060608486031215610d1757610d16610bf7565b5b6000610d2586828701610c13565b9350506020610d3686828701610c13565b9250506040610d4786828701610c49565b9150509250925092565b600060ff82169050919050565b610d6781610d51565b82525050565b6000602082019050610d826000830184610d5e565b92915050565b600060208284031215610d9e57610d9d610bf7565b5b6000610dac84828501610c49565b91505092915050565b600060208284031215610dcb57610dca610bf7565b5b6000610dd984828501610c13565b91505092915050565b60008060408385031215610df957610df8610bf7565b5b6000610e0785828601610c13565b9250506020610e1885828601610c13565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610e6957607f821691505b602082108103610e7c57610e7b610e22565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610ebc82610c28565b9150610ec783610c28565b9250828203905081811115610edf57610ede610e82565b5b92915050565b6000610ef082610c28565b9150610efb83610c28565b9250828201905080821115610f1357610f12610e82565b5b92915050565b7f4e6f7420656e6f7567682062616c616e636520746f206275726e2e0000000000600082015250565b6000610f4f601b83610a7d565b9150610f5a82610f19565b602082019050919050565b60006020820190508181036000830152610f7e81610f42565b905091905056fea264697066735822122067a8be7c5153ab9a4a6cc60f371e09847becb811665640c471d6ceb1a4a6314664736f6c63430008110033