60806040526001600560146101000a81548160ff02191690831515021790555061002d6102cb60201b60201c565b600a6100399190610720565b62010d88610047919061076a565b6006556100586102cb60201b60201c565b600a6100649190610720565b610190610071919061076a565b6007556040518060400160405280600c81526020017f5949505050494545454545450000000000000000000000000000000000000000815250600890816100b891906109dc565b506040518060400160405280600681526020017f4141414141410000000000000000000000000000000000000000000000000000815250600990816100fd91906109dc565b50336008805461010c9061080f565b80601f01602080910402602001604051908101604052809291908181526020018280546101389061080f565b80156101835780601f1061015a57610100808354040283529160200191610183565b820191905f5260205f20905b81548152906001019060200180831161016657829003601f168201915b5050505050600980546101959061080f565b80601f01602080910402602001604051908101604052809291908181526020018280546101c19061080f565b801561020c5780601f106101e35761010080835404028352916020019161020c565b820191905f5260205f20905b8154815290600101906020018083116101ef57829003601f168201915b5050505050816003908161022091906109dc565b50806004908161023091906109dc565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036102a3575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161029a9190610aea565b60405180910390fd5b6102b2816102d360201b60201c565b506102c65f3360065461039660201b60201c565b610b93565b5f6012905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036103e6578060025f8282546103da9190610b03565b925050819055506104b4565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561046f578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161046693929190610b45565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036104fb578060025f8282540392505081905550610545565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105a29190610b7a565b60405180910390a3505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156106315780860481111561060d5761060c6105af565b5b600185161561061c5780820291505b808102905061062a856105dc565b94506105f1565b94509492505050565b5f826106495760019050610704565b81610656575f9050610704565b816001811461066c5760028114610676576106a5565b6001915050610704565b60ff841115610688576106876105af565b5b8360020a91508482111561069f5761069e6105af565b5b50610704565b5060208310610133831016604e8410600b84101617156106da5782820a9050838111156106d5576106d46105af565b5b610704565b6106e784848460016105e8565b925090508184048111156106fe576106fd6105af565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f61072a8261070b565b915061073583610714565b92506107627fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461063a565b905092915050565b5f6107748261070b565b915061077f8361070b565b925082820261078d8161070b565b915082820484148315176107a4576107a36105af565b5b5092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061082657607f821691505b602082108103610839576108386107e2565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261089b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610860565b6108a58683610860565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6108e06108db6108d68461070b565b6108bd565b61070b565b9050919050565b5f819050919050565b6108f9836108c6565b61090d610905826108e7565b84845461086c565b825550505050565b5f90565b610921610915565b61092c8184846108f0565b505050565b5b8181101561094f576109445f82610919565b600181019050610932565b5050565b601f821115610994576109658161083f565b61096e84610851565b8101602085101561097d578190505b61099161098985610851565b830182610931565b50505b505050565b5f82821c905092915050565b5f6109b45f1984600802610999565b1980831691505092915050565b5f6109cc83836109a5565b9150826002028217905092915050565b6109e5826107ab565b67ffffffffffffffff8111156109fe576109fd6107b5565b5b610a08825461080f565b610a13828285610953565b5f60209050601f831160018114610a44575f8415610a32578287015190505b610a3c85826109c1565b865550610aa3565b601f198416610a528661083f565b5f5b82811015610a7957848901518255600182019150602085019450602081019050610a54565b86831015610a965784890151610a92601f8916826109a5565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ad482610aab565b9050919050565b610ae481610aca565b82525050565b5f602082019050610afd5f830184610adb565b92915050565b5f610b0d8261070b565b9150610b188361070b565b9250828201905080821115610b3057610b2f6105af565b5b92915050565b610b3f8161070b565b82525050565b5f606082019050610b585f830186610adb565b610b656020830185610b36565b610b726040830184610b36565b949350505050565b5f602082019050610b8d5f830184610b36565b92915050565b6117fa80610ba05f395ff3fe6080604052600436106100f6575f3560e01c806370a0823111610089578063a9059cbb11610058578063a9059cbb14610307578063bc33718214610343578063dd62ed3e1461036b578063f2fde38b146103a7576100fd565b806370a0823114610261578063715018a61461029d5780638da5cb5b146102b357806395d89b41146102dd576100fd565b8063313ce567116100c5578063313ce567146101cd5780633b18eab4146101f757806349ace8c314610221578063676c845814610237576100fd565b806306fdde0314610101578063095ea7b31461012b57806318160ddd1461016757806323b872dd14610191576100fd565b366100fd57005b5f80fd5b34801561010c575f80fd5b506101156103cf565b604051610122919061107c565b60405180910390f35b348015610136575f80fd5b50610151600480360381019061014c919061112d565b61045f565b60405161015e9190611185565b60405180910390f35b348015610172575f80fd5b5061017b610481565b60405161018891906111ad565b60405180910390f35b34801561019c575f80fd5b506101b760048036038101906101b291906111c6565b61048a565b6040516101c49190611185565b60405180910390f35b3480156101d8575f80fd5b506101e16104b8565b6040516101ee9190611231565b60405180910390f35b348015610202575f80fd5b5061020b6104c0565b6040516102189190611185565b60405180910390f35b34801561022c575f80fd5b506102356104d3565b005b348015610242575f80fd5b5061024b610507565b60405161025891906111ad565b60405180910390f35b34801561026c575f80fd5b506102876004803603810190610282919061124a565b61050d565b60405161029491906111ad565b60405180910390f35b3480156102a8575f80fd5b506102b1610552565b005b3480156102be575f80fd5b506102c7610565565b6040516102d49190611284565b60405180910390f35b3480156102e8575f80fd5b506102f161058d565b6040516102fe919061107c565b60405180910390f35b348015610312575f80fd5b5061032d6004803603810190610328919061112d565b61061d565b60405161033a9190611185565b60405180910390f35b34801561034e575f80fd5b506103696004803603810190610364919061129d565b61063f565b005b348015610376575f80fd5b50610391600480360381019061038c91906112c8565b61066f565b60405161039e91906111ad565b60405180910390f35b3480156103b2575f80fd5b506103cd60048036038101906103c8919061124a565b6106f1565b005b6060600380546103de90611333565b80601f016020809104026020016040519081016040528092919081815260200182805461040a90611333565b80156104555780601f1061042c57610100808354040283529160200191610455565b820191905f5260205f20905b81548152906001019060200180831161043857829003601f168201915b5050505050905090565b5f80610469610775565b905061047681858561077c565b600191505092915050565b5f600254905090565b5f80610494610775565b90506104a185828561078e565b6104ac858585610820565b60019150509392505050565b5f6012905090565b600560149054906101000a900460ff1681565b6104db610910565b600560149054906101000a900460ff1615600560146101000a81548160ff021916908315150217905550565b60075481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61055a610910565b6105635f610997565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461059c90611333565b80601f01602080910402602001604051908101604052809291908181526020018280546105c890611333565b80156106135780601f106105ea57610100808354040283529160200191610613565b820191905f5260205f20905b8154815290600101906020018083116105f657829003601f168201915b5050505050905090565b5f80610627610775565b9050610634818585610820565b600191505092915050565b610647610910565b61064f6104b8565b600a61065b91906114bf565b816106669190611509565b60078190555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6106f9610910565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610769575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016107609190611284565b60405180910390fd5b61077281610997565b50565b5f33905090565b6107898383836001610a5a565b505050565b5f610799848461066f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461081a578181101561080b578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016108029392919061154a565b60405180910390fd5b61081984848484035f610a5a565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610890575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016108879190611284565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610900575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016108f79190611284565b60405180910390fd5b61090b838383610c29565b505050565b610918610775565b73ffffffffffffffffffffffffffffffffffffffff16610936610565565b73ffffffffffffffffffffffffffffffffffffffff161461099557610959610775565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161098c9190611284565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610aca575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610ac19190611284565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b3a575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610b319190611284565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610c23578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c1a91906111ad565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e906115ef565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfc9061167d565b60405180910390fd5b5f8111610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e9061170b565b60405180910390fd5b610d4f610565565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610de35760011515600560149054906101000a900460ff16151503610de257600754811115610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd890611773565b60405180910390fd5b5b5b610dee838383610df3565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e43578060025f828254610e379190611791565b92505081905550610f11565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610ecc578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610ec39392919061154a565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f58578060025f8282540392505081905550610fa2565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610fff91906111ad565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61104e8261100c565b6110588185611016565b9350611068818560208601611026565b61107181611034565b840191505092915050565b5f6020820190508181035f8301526110948184611044565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110c9826110a0565b9050919050565b6110d9816110bf565b81146110e3575f80fd5b50565b5f813590506110f4816110d0565b92915050565b5f819050919050565b61110c816110fa565b8114611116575f80fd5b50565b5f8135905061112781611103565b92915050565b5f80604083850312156111435761114261109c565b5b5f611150858286016110e6565b925050602061116185828601611119565b9150509250929050565b5f8115159050919050565b61117f8161116b565b82525050565b5f6020820190506111985f830184611176565b92915050565b6111a7816110fa565b82525050565b5f6020820190506111c05f83018461119e565b92915050565b5f805f606084860312156111dd576111dc61109c565b5b5f6111ea868287016110e6565b93505060206111fb868287016110e6565b925050604061120c86828701611119565b9150509250925092565b5f60ff82169050919050565b61122b81611216565b82525050565b5f6020820190506112445f830184611222565b92915050565b5f6020828403121561125f5761125e61109c565b5b5f61126c848285016110e6565b91505092915050565b61127e816110bf565b82525050565b5f6020820190506112975f830184611275565b92915050565b5f602082840312156112b2576112b161109c565b5b5f6112bf84828501611119565b91505092915050565b5f80604083850312156112de576112dd61109c565b5b5f6112eb858286016110e6565b92505060206112fc858286016110e6565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061134a57607f821691505b60208210810361135d5761135c611306565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156113e5578086048111156113c1576113c0611363565b5b60018516156113d05780820291505b80810290506113de85611390565b94506113a5565b94509492505050565b5f826113fd57600190506114b8565b8161140a575f90506114b8565b8160018114611420576002811461142a57611459565b60019150506114b8565b60ff84111561143c5761143b611363565b5b8360020a91508482111561145357611452611363565b5b506114b8565b5060208310610133831016604e8410600b841016171561148e5782820a90508381111561148957611488611363565b5b6114b8565b61149b848484600161139c565b925090508184048111156114b2576114b1611363565b5b81810290505b9392505050565b5f6114c9826110fa565b91506114d483611216565b92506115017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846113ee565b905092915050565b5f611513826110fa565b915061151e836110fa565b925082820261152c816110fa565b9150828204841483151761154357611542611363565b5b5092915050565b5f60608201905061155d5f830186611275565b61156a602083018561119e565b611577604083018461119e565b949350505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6115d9602583611016565b91506115e48261157f565b604082019050919050565b5f6020820190508181035f830152611606816115cd565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f611667602383611016565b91506116728261160d565b604082019050919050565b5f6020820190508181035f8301526116948161165b565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f6116f5602983611016565b91506117008261169b565b604082019050919050565b5f6020820190508181035f830152611722816116e9565b9050919050565b7f4d617820416d6f756e74206f6620746f6b656e7320696e2074780000000000005f82015250565b5f61175d601a83611016565b915061176882611729565b602082019050919050565b5f6020820190508181035f83015261178a81611751565b9050919050565b5f61179b826110fa565b91506117a6836110fa565b92508282019050808211156117be576117bd611363565b5b9291505056fea2646970667358221220fe2ca5331d734c672b7d3cf45ff528fe4857d6a8904638f1269fd9afe8f7685164736f6c634300081a0033