608060405234801561000f575f80fd5b506040516121f53803806121f583398181016040528101906100319190610267565b806040518060400160405280600b81526020017f5374616b656420456269740000000000000000000000000000000000000000008152506040518060400160405280600581526020017f734542495400000000000000000000000000000000000000000000000000000081525081600390816100ad91906104cc565b5080600490816100bd91906104cc565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610130575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161012791906105aa565b60405180910390fd5b61013f8161014660201b60201c565b50506105c3565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6102368261020d565b9050919050565b6102468161022c565b8114610250575f80fd5b50565b5f815190506102618161023d565b92915050565b5f6020828403121561027c5761027b610209565b5b5f61028984828501610253565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061030d57607f821691505b6020821081036103205761031f6102c9565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610347565b61038c8683610347565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6103d06103cb6103c6846103a4565b6103ad565b6103a4565b9050919050565b5f819050919050565b6103e9836103b6565b6103fd6103f5826103d7565b848454610353565b825550505050565b5f90565b610411610405565b61041c8184846103e0565b505050565b5b8181101561043f576104345f82610409565b600181019050610422565b5050565b601f8211156104845761045581610326565b61045e84610338565b8101602085101561046d578190505b61048161047985610338565b830182610421565b50505b505050565b5f82821c905092915050565b5f6104a45f1984600802610489565b1980831691505092915050565b5f6104bc8383610495565b9150826002028217905092915050565b6104d582610292565b67ffffffffffffffff8111156104ee576104ed61029c565b5b6104f882546102f6565b610503828285610443565b5f60209050601f831160018114610534575f8415610522578287015190505b61052c85826104b1565b865550610593565b601f19841661054286610326565b5f5b8281101561056957848901518255600182019150602085019450602081019050610544565b868310156105865784890151610582601f891682610495565b8355505b6001600288020188555050505b505050505050565b6105a48161022c565b82525050565b5f6020820190506105bd5f83018461059b565b92915050565b611c25806105d05f395ff3fe608060405234801561000f575f80fd5b506004361061014b575f3560e01c8063715018a6116100c1578063a9059cbb1161007a578063a9059cbb14610389578063dd62ed3e146103b9578063e7a1107f146103e9578063ea596a3414610405578063f2fde38b14610423578063fa906d761461043f5761014b565b8063715018a6146102ef57806379cc6790146102f95780638da5cb5b1461031557806395d89b4114610333578063a515e59814610351578063a694fc3a1461036d5761014b565b806328f0e0931161011357806328f0e0931461021b5780632e17de781461024b578063313ce5671461026757806342966c68146102855780636aa662b5146102a157806370a08231146102bf5761014b565b806306fdde031461014f578063095ea7b31461016d57806318160ddd1461019d57806319262d30146101bb57806323b872dd146101eb575b5f80fd5b61015761046f565b6040516101649190611523565b60405180910390f35b610187600480360381019061018291906115d4565b6104ff565b604051610194919061162c565b60405180910390f35b6101a5610521565b6040516101b29190611654565b60405180910390f35b6101d560048036038101906101d0919061166d565b61052a565b6040516101e2919061162c565b60405180910390f35b61020560048036038101906102009190611698565b610573565b604051610212919061162c565b60405180910390f35b6102356004803603810190610230919061166d565b6105a1565b6040516102429190611654565b60405180910390f35b610265600480360381019061026091906116e8565b6105b6565b005b61026f610734565b60405161027c919061172e565b60405180910390f35b61029f600480360381019061029a91906116e8565b61073c565b005b6102a9610750565b6040516102b69190611654565b60405180910390f35b6102d960048036038101906102d4919061166d565b610756565b6040516102e69190611654565b60405180910390f35b6102f761079b565b005b610313600480360381019061030e91906115d4565b6107ae565b005b61031d6107ce565b60405161032a9190611756565b60405180910390f35b61033b6107f6565b6040516103489190611523565b60405180910390f35b61036b6004803603810190610366919061166d565b610886565b005b610387600480360381019061038291906116e8565b6108e6565b005b6103a3600480360381019061039e91906115d4565b610af0565b6040516103b0919061162c565b60405180910390f35b6103d360048036038101906103ce919061176f565b610b9b565b6040516103e09190611654565b60405180910390f35b61040360048036038101906103fe91906116e8565b610c1d565b005b61040d610c2f565b60405161041a9190611808565b60405180910390f35b61043d6004803603810190610438919061166d565b610c47565b005b6104596004803603810190610454919061166d565b610ccb565b604051610466919061162c565b60405180910390f35b60606003805461047e9061184e565b80601f01602080910402602001604051908101604052809291908181526020018280546104aa9061184e565b80156104f55780601f106104cc576101008083540402835291602001916104f5565b820191905f5260205f20905b8154815290600101906020018083116104d857829003601f168201915b5050505050905090565b5f80610509610ce8565b9050610516818585610cef565b600191505092915050565b5f600254905090565b5f4260075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411159050919050565b5f8061057d610ce8565b905061058a858285610d01565b610595858585610d93565b60019150509392505050565b6007602052805f5260405f205f915090505481565b806105c033610756565b1015610601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f8906118c8565b60405180910390fd5b61060a3361052a565b610649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064090611956565b60405180910390fd5b6106533382610e83565b734f14ba78a51925ee934c373a2cf56b2d8da63f7f73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016106a2929190611974565b6020604051808303815f875af11580156106be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e291906119c5565b503373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040516107299190611654565b60405180910390a250565b5f6012905090565b61074d610747610ce8565b82610e83565b50565b60065481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6107a3610f02565b6107ac5f610f89565b565b6107c0826107ba610ce8565b83610d01565b6107ca8282610e83565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546108059061184e565b80601f01602080910402602001604051908101604052809291908181526020018280546108319061184e565b801561087c5780601f106108535761010080835404028352916020019161087c565b820191905f5260205f20905b81548152906001019060200180831161085f57829003601f168201915b5050505050905090565b61088e610f02565b600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b80734f14ba78a51925ee934c373a2cf56b2d8da63f7f73ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016109349190611756565b602060405180830381865afa15801561094f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109739190611a04565b10156109b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab90611a79565b60405180910390fd5b600654426109c29190611ac4565b60075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550734f14ba78a51925ee934c373a2cf56b2d8da63f7f73ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610a5493929190611af7565b6020604051808303815f875af1158015610a70573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9491906119c5565b50610a9f338261104c565b3373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d82604051610ae59190611654565b60405180910390a250565b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7190611b9c565b60405180910390fd5b5f610b83610ce8565b9050610b90818585610d93565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610c25610f02565b8060068190555050565b734f14ba78a51925ee934c373a2cf56b2d8da63f7f81565b610c4f610f02565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cbf575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610cb69190611756565b60405180910390fd5b610cc881610f89565b50565b6008602052805f5260405f205f915054906101000a900460ff1681565b5f33905090565b610cfc83838360016110cb565b505050565b5f610d0c8484610b9b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d8d5781811015610d7e578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610d7593929190611bba565b60405180910390fd5b610d8c84848484035f6110cb565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e03575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610dfa9190611756565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e73575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610e6a9190611756565b60405180910390fd5b610e7e83838361129a565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ef3575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610eea9190611756565b60405180910390fd5b610efe825f8361129a565b5050565b610f0a610ce8565b73ffffffffffffffffffffffffffffffffffffffff16610f286107ce565b73ffffffffffffffffffffffffffffffffffffffff1614610f8757610f4b610ce8565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610f7e9190611756565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110bc575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016110b39190611756565b60405180910390fd5b6110c75f838361129a565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361113b575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016111329190611756565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111ab575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016111a29190611756565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611294578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161128b9190611654565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112ea578060025f8282546112de9190611ac4565b925050819055506113b8565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611373578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161136a93929190611bba565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113ff578060025f8282540392505081905550611449565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114a69190611654565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6114f5826114b3565b6114ff81856114bd565b935061150f8185602086016114cd565b611518816114db565b840191505092915050565b5f6020820190508181035f83015261153b81846114eb565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61157082611547565b9050919050565b61158081611566565b811461158a575f80fd5b50565b5f8135905061159b81611577565b92915050565b5f819050919050565b6115b3816115a1565b81146115bd575f80fd5b50565b5f813590506115ce816115aa565b92915050565b5f80604083850312156115ea576115e9611543565b5b5f6115f78582860161158d565b9250506020611608858286016115c0565b9150509250929050565b5f8115159050919050565b61162681611612565b82525050565b5f60208201905061163f5f83018461161d565b92915050565b61164e816115a1565b82525050565b5f6020820190506116675f830184611645565b92915050565b5f6020828403121561168257611681611543565b5b5f61168f8482850161158d565b91505092915050565b5f805f606084860312156116af576116ae611543565b5b5f6116bc8682870161158d565b93505060206116cd8682870161158d565b92505060406116de868287016115c0565b9150509250925092565b5f602082840312156116fd576116fc611543565b5b5f61170a848285016115c0565b91505092915050565b5f60ff82169050919050565b61172881611713565b82525050565b5f6020820190506117415f83018461171f565b92915050565b61175081611566565b82525050565b5f6020820190506117695f830184611747565b92915050565b5f806040838503121561178557611784611543565b5b5f6117928582860161158d565b92505060206117a38582860161158d565b9150509250929050565b5f819050919050565b5f6117d06117cb6117c684611547565b6117ad565b611547565b9050919050565b5f6117e1826117b6565b9050919050565b5f6117f2826117d7565b9050919050565b611802816117e8565b82525050565b5f60208201905061181b5f8301846117f9565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061186557607f821691505b60208210810361187857611877611821565b5b50919050565b7f496e73756666696369656e74205374616b65642042616c616e636500000000005f82015250565b5f6118b2601b836114bd565b91506118bd8261187e565b602082019050919050565b5f6020820190508181035f8301526118df816118a6565b9050919050565b7f43616e6e6f74207769746864726177206265666f726520756e6c6f636b2074695f8201527f6d657374616d7000000000000000000000000000000000000000000000000000602082015250565b5f6119406027836114bd565b915061194b826118e6565b604082019050919050565b5f6020820190508181035f83015261196d81611934565b9050919050565b5f6040820190506119875f830185611747565b6119946020830184611645565b9392505050565b6119a481611612565b81146119ae575f80fd5b50565b5f815190506119bf8161199b565b92915050565b5f602082840312156119da576119d9611543565b5b5f6119e7848285016119b1565b91505092915050565b5f815190506119fe816115aa565b92915050565b5f60208284031215611a1957611a18611543565b5b5f611a26848285016119f0565b91505092915050565b7f496e73756666696369656e742042616c616e63650000000000000000000000005f82015250565b5f611a636014836114bd565b9150611a6e82611a2f565b602082019050919050565b5f6020820190508181035f830152611a9081611a57565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611ace826115a1565b9150611ad9836115a1565b9250828201905080821115611af157611af0611a97565b5b92915050565b5f606082019050611b0a5f830186611747565b611b176020830185611747565b611b246040830184611645565b949350505050565b7f526563697069656e74206e6565647320746f2062652077686974656c697374655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f611b866021836114bd565b9150611b9182611b2c565b604082019050919050565b5f6020820190508181035f830152611bb381611b7a565b9050919050565b5f606082019050611bcd5f830186611747565b611bda6020830185611645565b611be76040830184611645565b94935050505056fea2646970667358221220db3f7af955f162121dae0c3409522913acdb4f31346a2163a47e36b797f4403464736f6c634300081a0033000000000000000000000000404661413a2c230c426d48de27296959efd4455c