608060405234801561000f575f80fd5b5060405161266838038061266883398181016040528101906100319190610283565b806040518060400160405280601381526020017f5765696768746564566f74696e67546f6b656e000000000000000000000000008152506040518060400160405280600381526020017f575654000000000000000000000000000000000000000000000000000000000081525081600390816100ad91906104e8565b5080600490816100bd91906104e8565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610130575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161012791906105c6565b60405180910390fd5b61013f8161016260201b60201c565b50600760018160018154018082558091505003905f5260205f20905050506105df565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61025282610229565b9050919050565b61026281610248565b811461026c575f80fd5b50565b5f8151905061027d81610259565b92915050565b5f6020828403121561029857610297610225565b5b5f6102a58482850161026f565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061032957607f821691505b60208210810361033c5761033b6102e5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261039e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610363565b6103a88683610363565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6103ec6103e76103e2846103c0565b6103c9565b6103c0565b9050919050565b5f819050919050565b610405836103d2565b610419610411826103f3565b84845461036f565b825550505050565b5f90565b61042d610421565b6104388184846103fc565b505050565b5b8181101561045b576104505f82610425565b60018101905061043e565b5050565b601f8211156104a05761047181610342565b61047a84610354565b81016020851015610489578190505b61049d61049585610354565b83018261043d565b50505b505050565b5f82821c905092915050565b5f6104c05f19846008026104a5565b1980831691505092915050565b5f6104d883836104b1565b9150826002028217905092915050565b6104f1826102ae565b67ffffffffffffffff81111561050a576105096102b8565b5b6105148254610312565b61051f82828561045f565b5f60209050601f831160018114610550575f841561053e578287015190505b61054885826104cd565b8655506105af565b601f19841661055e86610342565b5f5b8281101561058557848901518255600182019150602085019450602081019050610560565b868310156105a2578489015161059e601f8916826104b1565b8355505b6001600288020188555050505b505050505050565b6105c081610248565b82525050565b5f6020820190506105d95f8301846105b7565b92915050565b61207c806105ec5f395ff3fe608060405234801561000f575f80fd5b5060043610610135575f3560e01c806370a08231116100b6578063943e82161161007a578063943e82161461031757806395d89b4114610333578063976b311314610351578063a9059cbb14610389578063dd62ed3e146103b9578063f2fde38b146103e957610135565b806370a0823114610273578063715018a6146102a357806379cc6790146102ad5780638615d855146102c95780638da5cb5b146102f957610135565b8063270ef385116100fd578063270ef385146101f3578063313ce5671461021157806332cb6b0c1461022f57806342966c681461024d5780634e71d92d1461026957610135565b806306fdde0314610139578063095ea7b3146101575780630d4c47081461018757806318160ddd146101a557806323b872dd146101c3575b5f80fd5b610141610405565b60405161014e9190611729565b60405180910390f35b610171600480360381019061016c91906117de565b610495565b60405161017e9190611836565b60405180910390f35b61018f6104b7565b60405161019c919061185e565b60405180910390f35b6101ad6104c3565b6040516101ba919061185e565b60405180910390f35b6101dd60048036038101906101d89190611877565b6104cc565b6040516101ea9190611836565b60405180910390f35b6101fb6104fa565b604051610208919061185e565b60405180910390f35b6102196104ff565b60405161022691906118e2565b60405180910390f35b610237610507565b604051610244919061185e565b60405180910390f35b610267600480360381019061026291906118fb565b61050e565b005b610271610522565b005b61028d60048036038101906102889190611926565b610648565b60405161029a919061185e565b60405180910390f35b6102ab61068d565b005b6102c760048036038101906102c291906117de565b6106a0565b005b6102e360048036038101906102de91906119b2565b6106c0565b6040516102f0919061185e565b60405180910390f35b6103016107a8565b60405161030e9190611a1e565b60405180910390f35b610331600480360381019061032c9190611a5a565b6107d0565b005b61033b610a01565b6040516103489190611729565b60405180910390f35b61036b600480360381019061036691906118fb565b610a91565b60405161038099989796959493929190611b4f565b60405180910390f35b6103a3600480360381019061039e91906117de565b610c85565b6040516103b09190611836565b60405180910390f35b6103d360048036038101906103ce9190611be8565b610ca7565b6040516103e0919061185e565b60405180910390f35b61040360048036038101906103fe9190611926565b610d29565b005b60606003805461041490611c53565b80601f016020809104026020016040519081016040528092919081815260200182805461044090611c53565b801561048b5780601f106104625761010080835404028352916020019161048b565b820191905f5260205f20905b81548152906001019060200180831161046e57829003601f168201915b5050505050905090565b5f8061049f610dad565b90506104ac818585610db4565b600191505092915050565b5f600780549050905090565b5f600254905090565b5f806104d6610dad565b90506104e3858285610dc6565b6104ee858585610e58565b60019150509392505050565b606481565b5f6012905090565b620f424081565b61051f610519610dad565b82610f48565b50565b60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156105a3576040517f0b1327a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620f42406105af6104c3565b106105e6576040517fcbe2483100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610646336064610fc7565b565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610695611046565b61069e5f6110cd565b565b6106b2826106ac610dad565b83610dc6565b6106bc8282610f48565b5050565b5f806106cb33610648565b03610702576040517f8439960d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61070a6104c3565b82111561074e57816040517f589a4952000000000000000000000000000000000000000000000000000000008152600401610745919061185e565b60405180910390fd5b5f600760018160018154018082558091505003905f5260205f20906009020190508484826002019182610782929190611e57565b50828160070181905550600160078054905061079e9190611f51565b9150509392505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f600783815481106107e5576107e4611f84565b5b905f5260205f20906009020190508060080160019054906101000a900460ff161561083c576040517f66b6cb4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61085133825f0161119090919063ffffffff16565b15610888576040517f7c9a1cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61089233610648565b90506108a933835f016111bd90919063ffffffff16565b5080826006015f8282546108bd9190611fb1565b92505081905550600160028111156108d8576108d7611fe4565b5b8360028111156108eb576108ea611fe4565b5b0361090f5780826003015f8282546109039190611fb1565b925050819055506109a1565b5f600281111561092257610921611fe4565b5b83600281111561093557610934611fe4565b5b036109595780826004015f82825461094d9190611fb1565b925050819055506109a0565b60028081111561096c5761096b611fe4565b5b83600281111561097f5761097e611fe4565b5b0361099f5780826005015f8282546109979190611fb1565b925050819055505b5b5b81600701548260060154106109fb5760018260080160016101000a81548160ff0219169083151502179055508160040154826003015411156109fa576001826008015f6101000a81548160ff0219169083151502179055505b5b50505050565b606060048054610a1090611c53565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3c90611c53565b8015610a875780601f10610a5e57610100808354040283529160200191610a87565b820191905f5260205f20905b815481529060010190602001808311610a6a57829003601f168201915b5050505050905090565b60605f805f805f805f60605f60078b81548110610ab157610ab0611f84565b5b905f5260205f20906009020190505f610acb825f016111ea565b67ffffffffffffffff811115610ae457610ae3611c8d565b5b604051908082528060200260200182016040528015610b125781602001602082028036833780820191505090505b5090505f5b610b22835f016111ea565b811015610b9857610b3e81845f016111fd90919063ffffffff16565b828281518110610b5157610b50611f84565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050610b17565b508160020182600301548360040154846005015485600601548660070154876008015f9054906101000a900460ff168860080160019054906101000a900460ff1688888054610be690611c53565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1290611c53565b8015610c5d5780601f10610c3457610100808354040283529160200191610c5d565b820191905f5260205f20905b815481529060010190602001808311610c4057829003601f168201915b505050505098509a509a509a509a509a509a509a509a509a5050509193959799909294969850565b5f80610c8f610dad565b9050610c9c818585610e58565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610d31611046565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610da1575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610d989190611a1e565b60405180910390fd5b610daa816110cd565b50565b5f33905090565b610dc18383836001611214565b505050565b5f610dd18484610ca7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e525781811015610e43578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610e3a93929190612011565b60405180910390fd5b610e5184848484035f611214565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ec8575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610ebf9190611a1e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f38575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610f2f9190611a1e565b60405180910390fd5b610f438383836113e3565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fb8575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610faf9190611a1e565b60405180910390fd5b610fc3825f836113e3565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611037575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161102e9190611a1e565b60405180910390fd5b6110425f83836113e3565b5050565b61104e610dad565b73ffffffffffffffffffffffffffffffffffffffff1661106c6107a8565b73ffffffffffffffffffffffffffffffffffffffff16146110cb5761108f610dad565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016110c29190611a1e565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6111b5835f018373ffffffffffffffffffffffffffffffffffffffff165f1b6115fc565b905092915050565b5f6111e2835f018373ffffffffffffffffffffffffffffffffffffffff165f1b61161c565b905092915050565b5f6111f6825f01611683565b9050919050565b5f61120a835f0183611692565b5f1c905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611284575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161127b9190611a1e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112f4575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016112eb9190611a1e565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156113dd578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516113d4919061185e565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611433578060025f8282546114279190611fb1565b92505081905550611501565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156114bc578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016114b393929190612011565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611548578060025f8282540392505081905550611592565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115ef919061185e565b60405180910390a3505050565b5f80836001015f8481526020019081526020015f20541415905092915050565b5f61162783836115fc565b61167957825f0182908060018154018082558091505060019003905f5260205f20015f9091909190915055825f0180549050836001015f8481526020019081526020015f20819055506001905061167d565b5f90505b92915050565b5f815f01805490509050919050565b5f825f0182815481106116a8576116a7611f84565b5b905f5260205f200154905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6116fb826116b9565b61170581856116c3565b93506117158185602086016116d3565b61171e816116e1565b840191505092915050565b5f6020820190508181035f83015261174181846116f1565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61177a82611751565b9050919050565b61178a81611770565b8114611794575f80fd5b50565b5f813590506117a581611781565b92915050565b5f819050919050565b6117bd816117ab565b81146117c7575f80fd5b50565b5f813590506117d8816117b4565b92915050565b5f80604083850312156117f4576117f3611749565b5b5f61180185828601611797565b9250506020611812858286016117ca565b9150509250929050565b5f8115159050919050565b6118308161181c565b82525050565b5f6020820190506118495f830184611827565b92915050565b611858816117ab565b82525050565b5f6020820190506118715f83018461184f565b92915050565b5f805f6060848603121561188e5761188d611749565b5b5f61189b86828701611797565b93505060206118ac86828701611797565b92505060406118bd868287016117ca565b9150509250925092565b5f60ff82169050919050565b6118dc816118c7565b82525050565b5f6020820190506118f55f8301846118d3565b92915050565b5f602082840312156119105761190f611749565b5b5f61191d848285016117ca565b91505092915050565b5f6020828403121561193b5761193a611749565b5b5f61194884828501611797565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261197257611971611951565b5b8235905067ffffffffffffffff81111561198f5761198e611955565b5b6020830191508360018202830111156119ab576119aa611959565b5b9250929050565b5f805f604084860312156119c9576119c8611749565b5b5f84013567ffffffffffffffff8111156119e6576119e561174d565b5b6119f28682870161195d565b93509350506020611a05868287016117ca565b9150509250925092565b611a1881611770565b82525050565b5f602082019050611a315f830184611a0f565b92915050565b60038110611a43575f80fd5b50565b5f81359050611a5481611a37565b92915050565b5f8060408385031215611a7057611a6f611749565b5b5f611a7d858286016117ca565b9250506020611a8e85828601611a46565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611aca81611770565b82525050565b5f611adb8383611ac1565b60208301905092915050565b5f602082019050919050565b5f611afd82611a98565b611b078185611aa2565b9350611b1283611ab2565b805f5b83811015611b42578151611b298882611ad0565b9750611b3483611ae7565b925050600181019050611b15565b5085935050505092915050565b5f610120820190508181035f830152611b68818c6116f1565b9050611b77602083018b61184f565b611b84604083018a61184f565b611b91606083018961184f565b611b9e608083018861184f565b611bab60a083018761184f565b611bb860c0830186611827565b611bc560e0830185611827565b818103610100830152611bd88184611af3565b90509a9950505050505050505050565b5f8060408385031215611bfe57611bfd611749565b5b5f611c0b85828601611797565b9250506020611c1c85828601611797565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611c6a57607f821691505b602082108103611c7d57611c7c611c26565b5b50919050565b5f82905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302611d167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611cdb565b611d208683611cdb565b95508019841693508086168417925050509392505050565b5f819050919050565b5f611d5b611d56611d51846117ab565b611d38565b6117ab565b9050919050565b5f819050919050565b611d7483611d41565b611d88611d8082611d62565b848454611ce7565b825550505050565b5f90565b611d9c611d90565b611da7818484611d6b565b505050565b5b81811015611dca57611dbf5f82611d94565b600181019050611dad565b5050565b601f821115611e0f57611de081611cba565b611de984611ccc565b81016020851015611df8578190505b611e0c611e0485611ccc565b830182611dac565b50505b505050565b5f82821c905092915050565b5f611e2f5f1984600802611e14565b1980831691505092915050565b5f611e478383611e20565b9150826002028217905092915050565b611e618383611c83565b67ffffffffffffffff811115611e7a57611e79611c8d565b5b611e848254611c53565b611e8f828285611dce565b5f601f831160018114611ebc575f8415611eaa578287013590505b611eb48582611e3c565b865550611f1b565b601f198416611eca86611cba565b5f5b82811015611ef157848901358255600182019150602085019450602081019050611ecc565b86831015611f0e5784890135611f0a601f891682611e20565b8355505b6001600288020188555050505b50505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611f5b826117ab565b9150611f66836117ab565b9250828203905081811115611f7e57611f7d611f24565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f611fbb826117ab565b9150611fc6836117ab565b9250828201905080821115611fde57611fdd611f24565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f6060820190506120245f830186611a0f565b612031602083018561184f565b61203e604083018461184f565b94935050505056fea2646970667358221220dccaf857d5142b533ccd19970597163db2cb90c60584bd0b940f0798a919919164736f6c634300081a00330000000000000000000000002463ae2c35ac83d1278d624e181841000f4bcc15