60806040526040518060400160405280601081526020017f426c7565446f6765204f6e2042617365000000000000000000000000000000008152505f90816100479190610879565b506040518060400160405280600781526020017f424c5545444f47000000000000000000000000000000000000000000000000008152506001908161008c9190610879565b50734752ba5dbc23f44d87826276bf6fd6b1c372ad2460085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733b3800f6b5b8f36f98d4784ff5199bbbb4e95413600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015610140575f80fd5b505f8060405180606001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281525060025f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201559050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555033600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506102df33336105bb60201b60201c565b606460326012600a6102f19190610aa4565b6305f5e1006103009190610aee565b61030a9190610aee565b6103149190610b5c565b60055f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012600a6103f49190610aa4565b6305f5e1006104039190610aee565b6040516104109190610b9b565b60405180910390a3606460326012600a61042a9190610aa4565b6305f5e1006104399190610aee565b6104439190610aee565b61044d9190610b5c565b60055f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60055f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040516105ac9190610b9b565b60405180910390a35050610bb4565b8160095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806106ba57607f821691505b6020821081036106cd576106cc610676565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261072f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826106f4565b61073986836106f4565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61077d61077861077384610751565b61075a565b610751565b9050919050565b5f819050919050565b61079683610763565b6107aa6107a282610784565b848454610700565b825550505050565b5f90565b6107be6107b2565b6107c981848461078d565b505050565b5b818110156107ec576107e15f826107b6565b6001810190506107cf565b5050565b601f82111561083157610802816106d3565b61080b846106e5565b8101602085101561081a578190505b61082e610826856106e5565b8301826107ce565b50505b505050565b5f82821c905092915050565b5f6108515f1984600802610836565b1980831691505092915050565b5f6108698383610842565b9150826002028217905092915050565b6108828261063f565b67ffffffffffffffff81111561089b5761089a610649565b5b6108a582546106a3565b6108b08282856107f0565b5f60209050601f8311600181146108e1575f84156108cf578287015190505b6108d9858261085e565b865550610940565b601f1984166108ef866106d3565b5f5b82811015610916578489015182556001820191506020850194506020810190506108f1565b86831015610933578489015161092f601f891682610842565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156109ca578086048111156109a6576109a5610948565b5b60018516156109b55780820291505b80810290506109c385610975565b945061098a565b94509492505050565b5f826109e25760019050610a9d565b816109ef575f9050610a9d565b8160018114610a055760028114610a0f57610a3e565b6001915050610a9d565b60ff841115610a2157610a20610948565b5b8360020a915084821115610a3857610a37610948565b5b50610a9d565b5060208310610133831016604e8410600b8410161715610a735782820a905083811115610a6e57610a6d610948565b5b610a9d565b610a808484846001610981565b92509050818404811115610a9757610a96610948565b5b81810290505b9392505050565b5f610aae82610751565b9150610ab983610751565b9250610ae67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846109d3565b905092915050565b5f610af882610751565b9150610b0383610751565b9250828202610b1181610751565b91508282048414831517610b2857610b27610948565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610b6682610751565b9150610b7183610751565b925082610b8157610b80610b2f565b5b828204905092915050565b610b9581610751565b82525050565b5f602082019050610bae5f830184610b8c565b92915050565b611dfa80610bc15f395ff3fe6080604052600436106100f6575f3560e01c806370a0823111610089578063a8aa1b3111610058578063a8aa1b3114610329578063a9059cbb14610353578063c9567bf91461038f578063dd62ed3e146103a5576100fd565b806370a08231146102735780637c879f5b146102af5780638187f516146102d757806395d89b41146102ff576100fd565b8063313ce567116100c5578063313ce567146101cd5780634abe3052146101f7578063554652ce146102235780636e669d7a1461024b576100fd565b806306fdde0314610101578063095ea7b31461012b57806318160ddd1461016757806323b872dd14610191576100fd565b366100fd57005b5f80fd5b34801561010c575f80fd5b506101156103e1565b60405161012291906114d2565b60405180910390f35b348015610136575f80fd5b50610151600480360381019061014c9190611587565b610470565b60405161015e91906115df565b60405180910390f35b348015610172575f80fd5b5061017b61055d565b6040516101889190611607565b60405180910390f35b34801561019c575f80fd5b506101b760048036038101906101b29190611620565b61057d565b6040516101c491906115df565b60405180910390f35b3480156101d8575f80fd5b506101e1610620565b6040516101ee9190611607565b60405180910390f35b348015610202575f80fd5b5061020b610625565b60405161021a9392919061167f565b60405180910390f35b34801561022e575f80fd5b506102496004803603810190610244919061176a565b61065b565b005b348015610256575f80fd5b50610271600480360381019061026c91906117e8565b6108bd565b005b34801561027e575f80fd5b5061029960048036038101906102949190611813565b610963565b6040516102a69190611607565b60405180910390f35b3480156102ba575f80fd5b506102d560048036038101906102d0919061183e565b610978565b005b3480156102e2575f80fd5b506102fd60048036038101906102f89190611813565b6109f2565b005b34801561030a575f80fd5b50610313610aa1565b60405161032091906114d2565b60405180910390f35b348015610334575f80fd5b5061033d610b31565b60405161034a919061187c565b60405180910390f35b34801561035e575f80fd5b5061037960048036038101906103749190611587565b610b56565b60405161038691906115df565b60405180910390f35b34801561039a575f80fd5b506103a3610b6a565b005b3480156103b0575f80fd5b506103cb60048036038101906103c69190611895565b610bde565b6040516103d89190611607565b60405180910390f35b60605f80546103ef90611900565b80601f016020809104026020016040519081016040528092919081815260200182805461041b90611900565b80156104665780601f1061043d57610100808354040283529160200191610466565b820191905f5260205f20905b81548152906001019060200180831161044957829003601f168201915b5050505050905090565b5f8160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161054b9190611607565b60405180910390a36001905092915050565b6012600a61056b9190611a8c565b6305f5e10061057a9190611ad6565b81565b5f8160065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546106059190611b17565b92505081905550610617848484610bfe565b90509392505050565b601281565b6002805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b610663611421565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106c7576040517f9af2b10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b848490508110156108b6578282828181106106e7576106e6611b4a565b5b9050602002013560055f87878581811061070457610703611b4a565b5b90506020020160208101906107199190611813565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555082828281811061076957610768611b4a565b5b9050602002013560055f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546107dc9190611b17565b925050819055508484828181106107f6576107f5611b4a565b5b905060200201602081019061080b9190611813565b73ffffffffffffffffffffffffffffffffffffffff16600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85858581811061088d5761088c611b4a565b5b905060200201356040516108a19190611607565b60405180910390a380806001019150506106c9565b5050505050565b6108c5611421565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610929576040517f9af2b10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f19755d25ea178146bd0c80065bb3baa90da55af45e342cf3c07de168a277da02816040516109589190611607565b60405180910390a150565b6005602052805f5260405f205f915090505481565b610980611421565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109e4576040517f9af2b10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109ee828261144b565b5050565b6109fa611421565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a5e576040517f9af2b10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060018054610ab090611900565b80601f0160208091040260200160405190810160405280929190818152602001828054610adc90611900565b8015610b275780601f10610afe57610100808354040283529160200191610b27565b820191905f5260205f20905b815481529060010190602001808311610b0a57829003601f168201915b5050505050905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f610b62338484610bfe565b905092915050565b610b72611421565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ba8575f80fd5b600860159054906101000a900460ff1615610bc1575f80fd5b6001600860156101000a81548160ff021916908315150217905550565b6006602052815f5260405f20602052805f5260405f205f91509150505481565b5f80610c08611421565b9050600860159054906101000a900460ff1680610c5057508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80610c8657508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b610c8e575f80fd5b8260055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610cda9190611b17565b9250508190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015610d4a5750600860149054906101000a900460ff16155b8015610dbb575060646012600a610d619190611a8c565b6305f5e100610d709190611ad6565b610d7a9190611ba4565b60055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b8015610df357508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561105d576001600860146101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115610e2f57610e2e611bd4565b5b604051908082528060200260200182016040528015610e5d5781602001602082028036833780820191505090505b50905030815f81518110610e7457610e73611b4a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f18573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3c9190611c15565b81600181518110610f5057610f4f611b4a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eb6f613960646012600a610fd79190611a8c565b6305f5e100610fe69190611ad6565b610ff09190611ba4565b5f8430426040518663ffffffff1660e01b8152600401611014959493929190611d39565b5f604051808303815f87803b15801561102b575f80fd5b505af115801561103d573d5f803e3d5ffd5b505050505f600860146101000a81548160ff021916908315150217905550505b5f806002600101546002800154915091503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141580156110bd575060011515600860159054906101000a900460ff161515145b1561119b575f606460075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461111f5783611121565b825b8761112c9190611ad6565b6111369190611ba4565b905080866111449190611b17565b95508060055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546111929190611d91565b92505081905550505b8460055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546111e79190611d91565b92505081905550600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16036112cd578573ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516112c09190611607565b60405180910390a3611413565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036113ac5760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161139f9190611607565b60405180910390a3611412565b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516114099190611607565b60405180910390a35b5b600193505050509392505050565b5f60025f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b816002600101819055508060028001819055505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6114a482611462565b6114ae818561146c565b93506114be81856020860161147c565b6114c78161148a565b840191505092915050565b5f6020820190508181035f8301526114ea818461149a565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611523826114fa565b9050919050565b61153381611519565b811461153d575f80fd5b50565b5f8135905061154e8161152a565b92915050565b5f819050919050565b61156681611554565b8114611570575f80fd5b50565b5f813590506115818161155d565b92915050565b5f806040838503121561159d5761159c6114f2565b5b5f6115aa85828601611540565b92505060206115bb85828601611573565b9150509250929050565b5f8115159050919050565b6115d9816115c5565b82525050565b5f6020820190506115f25f8301846115d0565b92915050565b61160181611554565b82525050565b5f60208201905061161a5f8301846115f8565b92915050565b5f805f60608486031215611637576116366114f2565b5b5f61164486828701611540565b935050602061165586828701611540565b925050604061166686828701611573565b9150509250925092565b61167981611519565b82525050565b5f6060820190506116925f830186611670565b61169f60208301856115f8565b6116ac60408301846115f8565b949350505050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126116d5576116d46116b4565b5b8235905067ffffffffffffffff8111156116f2576116f16116b8565b5b60208301915083602082028301111561170e5761170d6116bc565b5b9250929050565b5f8083601f84011261172a576117296116b4565b5b8235905067ffffffffffffffff811115611747576117466116b8565b5b602083019150836020820283011115611763576117626116bc565b5b9250929050565b5f805f8060408587031215611782576117816114f2565b5b5f85013567ffffffffffffffff81111561179f5761179e6114f6565b5b6117ab878288016116c0565b9450945050602085013567ffffffffffffffff8111156117ce576117cd6114f6565b5b6117da87828801611715565b925092505092959194509250565b5f602082840312156117fd576117fc6114f2565b5b5f61180a84828501611573565b91505092915050565b5f60208284031215611828576118276114f2565b5b5f61183584828501611540565b91505092915050565b5f8060408385031215611854576118536114f2565b5b5f61186185828601611573565b925050602061187285828601611573565b9150509250929050565b5f60208201905061188f5f830184611670565b92915050565b5f80604083850312156118ab576118aa6114f2565b5b5f6118b885828601611540565b92505060206118c985828601611540565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061191757607f821691505b60208210810361192a576119296118d3565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156119b25780860481111561198e5761198d611930565b5b600185161561199d5780820291505b80810290506119ab8561195d565b9450611972565b94509492505050565b5f826119ca5760019050611a85565b816119d7575f9050611a85565b81600181146119ed57600281146119f757611a26565b6001915050611a85565b60ff841115611a0957611a08611930565b5b8360020a915084821115611a2057611a1f611930565b5b50611a85565b5060208310610133831016604e8410600b8410161715611a5b5782820a905083811115611a5657611a55611930565b5b611a85565b611a688484846001611969565b92509050818404811115611a7f57611a7e611930565b5b81810290505b9392505050565b5f611a9682611554565b9150611aa183611554565b9250611ace7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846119bb565b905092915050565b5f611ae082611554565b9150611aeb83611554565b9250828202611af981611554565b91508282048414831517611b1057611b0f611930565b5b5092915050565b5f611b2182611554565b9150611b2c83611554565b9250828203905081811115611b4457611b43611930565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611bae82611554565b9150611bb983611554565b925082611bc957611bc8611b77565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050611c0f8161152a565b92915050565b5f60208284031215611c2a57611c296114f2565b5b5f611c3784828501611c01565b91505092915050565b5f819050919050565b5f819050919050565b5f611c6c611c67611c6284611c40565b611c49565b611554565b9050919050565b611c7c81611c52565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611cb481611519565b82525050565b5f611cc58383611cab565b60208301905092915050565b5f602082019050919050565b5f611ce782611c82565b611cf18185611c8c565b9350611cfc83611c9c565b805f5b83811015611d2c578151611d138882611cba565b9750611d1e83611cd1565b925050600181019050611cff565b5085935050505092915050565b5f60a082019050611d4c5f8301886115f8565b611d596020830187611c73565b8181036040830152611d6b8186611cdd565b9050611d7a6060830185611670565b611d8760808301846115f8565b9695505050505050565b5f611d9b82611554565b9150611da683611554565b9250828201905080821115611dbe57611dbd611930565b5b9291505056fea264697066735822122036f29c499f6be081246ec96a6f44e6cf10d51d47832895f0caa9adbe9a1e228a64736f6c63430008190033