608060405234801561001057600080fd5b506040518060400160405280600381526020017f4d544b00000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d544b0000000000000000000000000000000000000000000000000000000000815250816003908161008c9190610479565b50806004908161009c9190610479565b5050506100b26000801b336100b860201b60201c565b5061054b565b60006100ca83836101b660201b60201c565b6101ab5760016005600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061014861022160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506101b0565b600090505b92915050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806102aa57607f821691505b6020821081036102bd576102bc610263565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026103257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826102e8565b61032f86836102e8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600061037661037161036c84610347565b610351565b610347565b9050919050565b6000819050919050565b6103908361035b565b6103a461039c8261037d565b8484546102f5565b825550505050565b600090565b6103b96103ac565b6103c4818484610387565b505050565b5b818110156103e8576103dd6000826103b1565b6001810190506103ca565b5050565b601f82111561042d576103fe816102c3565b610407846102d8565b81016020851015610416578190505b61042a610422856102d8565b8301826103c9565b50505b505050565b600082821c905092915050565b600061045060001984600802610432565b1980831691505092915050565b6000610469838361043f565b9150826002028217905092915050565b61048282610229565b67ffffffffffffffff81111561049b5761049a610234565b5b6104a58254610292565b6104b08282856103ec565b600060209050601f8311600181146104e357600084156104d1578287015190505b6104db858261045d565b865550610543565b601f1984166104f1866102c3565b60005b82811015610519578489015182556001820191506020850194506020810190506104f4565b868310156105365784890151610532601f89168261043f565b8355505b6001600288020188555050505b505050505050565b6117b18061055a6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806340c10f19116100ad578063a217fddf11610071578063a217fddf14610355578063a9059cbb14610373578063d5391393146103a3578063d547741f146103c1578063dd62ed3e146103dd5761012c565b806340c10f191461029f57806369e2f0fb146102bb57806370a08231146102d757806391d148541461030757806395d89b41146103375761012c565b8063248a9ca3116100f4578063248a9ca3146101fd5780632f2ff15d1461022d578063313ce5671461024957806336568abe146102675780633dd1eb61146102835761012c565b806301ffc9a71461013157806306fdde0314610161578063095ea7b31461017f57806318160ddd146101af57806323b872dd146101cd575b600080fd5b61014b60048036038101906101469190611257565b61040d565b604051610158919061129f565b60405180910390f35b610169610487565b604051610176919061134a565b60405180910390f35b61019960048036038101906101949190611400565b610519565b6040516101a6919061129f565b60405180910390f35b6101b761053c565b6040516101c4919061144f565b60405180910390f35b6101e760048036038101906101e2919061146a565b610546565b6040516101f4919061129f565b60405180910390f35b610217600480360381019061021291906114f3565b610575565b604051610224919061152f565b60405180910390f35b6102476004803603810190610242919061154a565b610595565b005b6102516105b7565b60405161025e91906115a6565b60405180910390f35b610281600480360381019061027c919061154a565b6105c0565b005b61029d600480360381019061029891906115c1565b61063b565b005b6102b960048036038101906102b49190611400565b610676565b005b6102d560048036038101906102d091906115c1565b6106af565b005b6102f160048036038101906102ec91906115c1565b6106ea565b6040516102fe919061144f565b60405180910390f35b610321600480360381019061031c919061154a565b610732565b60405161032e919061129f565b60405180910390f35b61033f61079d565b60405161034c919061134a565b60405180910390f35b61035d61082f565b60405161036a919061152f565b60405180910390f35b61038d60048036038101906103889190611400565b610836565b60405161039a919061129f565b60405180910390f35b6103ab610859565b6040516103b8919061152f565b60405180910390f35b6103db60048036038101906103d6919061154a565b61087d565b005b6103f760048036038101906103f291906115ee565b61089f565b604051610404919061144f565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610480575061047f82610926565b5b9050919050565b6060600380546104969061165d565b80601f01602080910402602001604051908101604052809291908181526020018280546104c29061165d565b801561050f5780601f106104e45761010080835404028352916020019161050f565b820191906000526020600020905b8154815290600101906020018083116104f257829003601f168201915b5050505050905090565b600080610524610990565b9050610531818585610998565b600191505092915050565b6000600254905090565b600080610551610990565b905061055e8582856109aa565b610569858585610a3e565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b61059e82610575565b6105a781610b32565b6105b18383610b46565b50505050565b60006012905090565b6105c8610990565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461062c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106368282610c38565b505050565b6000801b61064881610b32565b6106727f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a683610595565b5050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66106a081610b32565b6106aa8383610d2b565b505050565b6000801b6106bc81610b32565b6106e67f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68361087d565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600480546107ac9061165d565b80601f01602080910402602001604051908101604052809291908181526020018280546107d89061165d565b80156108255780601f106107fa57610100808354040283529160200191610825565b820191906000526020600020905b81548152906001019060200180831161080857829003601f168201915b5050505050905090565b6000801b81565b600080610841610990565b905061084e818585610a3e565b600191505092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61088682610575565b61088f81610b32565b6108998383610c38565b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6109a58383836001610dad565b505050565b60006109b6848461089f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a385781811015610a28578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610a1f9392919061169d565b60405180910390fd5b610a3784848484036000610dad565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ab05760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610aa791906116d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b225760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610b1991906116d4565b60405180910390fd5b610b2d838383610f84565b505050565b610b4381610b3e610990565b6111a9565b50565b6000610b528383610732565b610c2d5760016005600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610bca610990565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050610c32565b600090505b92915050565b6000610c448383610732565b15610d205760006005600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610cbd610990565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050610d25565b600090505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d9d5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d9491906116d4565b60405180910390fd5b610da960008383610f84565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e1f5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610e1691906116d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e915760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610e8891906116d4565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610f7e578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f75919061144f565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fd6578060026000828254610fca919061171e565b925050819055506110a9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611062578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016110599392919061169d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110f2578060026000828254039250508190555061113f565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161119c919061144f565b60405180910390a3505050565b6111b38282610732565b6111f65780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016111ed929190611752565b60405180910390fd5b5050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611234816111ff565b811461123f57600080fd5b50565b6000813590506112518161122b565b92915050565b60006020828403121561126d5761126c6111fa565b5b600061127b84828501611242565b91505092915050565b60008115159050919050565b61129981611284565b82525050565b60006020820190506112b46000830184611290565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156112f45780820151818401526020810190506112d9565b60008484015250505050565b6000601f19601f8301169050919050565b600061131c826112ba565b61132681856112c5565b93506113368185602086016112d6565b61133f81611300565b840191505092915050565b600060208201905081810360008301526113648184611311565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113978261136c565b9050919050565b6113a78161138c565b81146113b257600080fd5b50565b6000813590506113c48161139e565b92915050565b6000819050919050565b6113dd816113ca565b81146113e857600080fd5b50565b6000813590506113fa816113d4565b92915050565b60008060408385031215611417576114166111fa565b5b6000611425858286016113b5565b9250506020611436858286016113eb565b9150509250929050565b611449816113ca565b82525050565b60006020820190506114646000830184611440565b92915050565b600080600060608486031215611483576114826111fa565b5b6000611491868287016113b5565b93505060206114a2868287016113b5565b92505060406114b3868287016113eb565b9150509250925092565b6000819050919050565b6114d0816114bd565b81146114db57600080fd5b50565b6000813590506114ed816114c7565b92915050565b600060208284031215611509576115086111fa565b5b6000611517848285016114de565b91505092915050565b611529816114bd565b82525050565b60006020820190506115446000830184611520565b92915050565b60008060408385031215611561576115606111fa565b5b600061156f858286016114de565b9250506020611580858286016113b5565b9150509250929050565b600060ff82169050919050565b6115a08161158a565b82525050565b60006020820190506115bb6000830184611597565b92915050565b6000602082840312156115d7576115d66111fa565b5b60006115e5848285016113b5565b91505092915050565b60008060408385031215611605576116046111fa565b5b6000611613858286016113b5565b9250506020611624858286016113b5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061167557607f821691505b6020821081036116885761168761162e565b5b50919050565b6116978161138c565b82525050565b60006060820190506116b2600083018661168e565b6116bf6020830185611440565b6116cc6040830184611440565b949350505050565b60006020820190506116e9600083018461168e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611729826113ca565b9150611734836113ca565b925082820190508082111561174c5761174b6116ef565b5b92915050565b6000604082019050611767600083018561168e565b6117746020830184611520565b939250505056fea264697066735822122089d2d03b9b85e651ee38b4c95bb8d33cd59f2d38cca868144221bd4ca042648064736f6c634300081c0033