608060405234801561000f575f80fd5b5060405161212b38038061212b833981810160405281019061003191906105e5565b33828281600390816100439190610868565b5080600490816100539190610868565b5050505f60055f6101000a81548160ff0219169083151502179055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100df575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100d69190610976565b60405180910390fd5b6100ee8161012d60201b60201c565b50610126336101016101f260201b60201c565b600a61010d9190610af7565b620f424061011b9190610b41565b6101fa60201b60201c565b5050610c12565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361026a575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102619190610976565b60405180910390fd5b61027b5f838361027f60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036102cf578060025f8282546102c39190610b82565b9250508190555061039d565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610358578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161034f93929190610bc4565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036103e4578060025f828254039250508190555061042e565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161048b9190610bf9565b60405180910390a3505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6104f7826104b1565b810181811067ffffffffffffffff82111715610516576105156104c1565b5b80604052505050565b5f610528610498565b905061053482826104ee565b919050565b5f67ffffffffffffffff821115610553576105526104c1565b5b61055c826104b1565b9050602081019050919050565b8281835e5f83830152505050565b5f61058961058484610539565b61051f565b9050828152602081018484840111156105a5576105a46104ad565b5b6105b0848285610569565b509392505050565b5f82601f8301126105cc576105cb6104a9565b5b81516105dc848260208601610577565b91505092915050565b5f80604083850312156105fb576105fa6104a1565b5b5f83015167ffffffffffffffff811115610618576106176104a5565b5b610624858286016105b8565b925050602083015167ffffffffffffffff811115610645576106446104a5565b5b610651858286016105b8565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806106a957607f821691505b6020821081036106bc576106bb610665565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261071e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826106e3565b61072886836106e3565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61076c61076761076284610740565b610749565b610740565b9050919050565b5f819050919050565b61078583610752565b61079961079182610773565b8484546106ef565b825550505050565b5f90565b6107ad6107a1565b6107b881848461077c565b505050565b5b818110156107db576107d05f826107a5565b6001810190506107be565b5050565b601f821115610820576107f1816106c2565b6107fa846106d4565b81016020851015610809578190505b61081d610815856106d4565b8301826107bd565b50505b505050565b5f82821c905092915050565b5f6108405f1984600802610825565b1980831691505092915050565b5f6108588383610831565b9150826002028217905092915050565b6108718261065b565b67ffffffffffffffff81111561088a576108896104c1565b5b6108948254610692565b61089f8282856107df565b5f60209050601f8311600181146108d0575f84156108be578287015190505b6108c8858261084d565b86555061092f565b601f1984166108de866106c2565b5f5b82811015610905578489015182556001820191506020850194506020810190506108e0565b86831015610922578489015161091e601f891682610831565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61096082610937565b9050919050565b61097081610956565b82525050565b5f6020820190506109895f830184610967565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115610a11578086048111156109ed576109ec61098f565b5b60018516156109fc5780820291505b8081029050610a0a856109bc565b94506109d1565b94509492505050565b5f82610a295760019050610ae4565b81610a36575f9050610ae4565b8160018114610a4c5760028114610a5657610a85565b6001915050610ae4565b60ff841115610a6857610a6761098f565b5b8360020a915084821115610a7f57610a7e61098f565b5b50610ae4565b5060208310610133831016604e8410600b8410161715610aba5782820a905083811115610ab557610ab461098f565b5b610ae4565b610ac784848460016109c8565b92509050818404811115610ade57610add61098f565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610b0182610740565b9150610b0c83610aeb565b9250610b397fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610a1a565b905092915050565b5f610b4b82610740565b9150610b5683610740565b9250828202610b6481610740565b91508282048414831517610b7b57610b7a61098f565b5b5092915050565b5f610b8c82610740565b9150610b9783610740565b9250828201905080821115610baf57610bae61098f565b5b92915050565b610bbe81610740565b82525050565b5f606082019050610bd75f830186610967565b610be46020830185610bb5565b610bf16040830184610bb5565b949350505050565b5f602082019050610c0c5f830184610bb5565b92915050565b61150c80610c1f5f395ff3fe608060405234801561000f575f80fd5b5060043610610114575f3560e01c806370a08231116100a05780638da5cb5b1161006f5780638da5cb5b1461029257806395d89b41146102b0578063a9059cbb146102ce578063dd62ed3e146102fe578063f2fde38b1461032e57610114565b806370a0823114610232578063715018a61461026257806379cc67901461026c5780638456cb591461028857610114565b8063313ce567116100e7578063313ce567146101b45780633f4ba83a146101d257806340c10f19146101dc57806342966c68146101f85780635c975abb1461021457610114565b806306fdde0314610118578063095ea7b31461013657806318160ddd1461016657806323b872dd14610184575b5f80fd5b61012061034a565b60405161012d919061108a565b60405180910390f35b610150600480360381019061014b919061113b565b6103da565b60405161015d9190611193565b60405180910390f35b61016e6103fc565b60405161017b91906111bb565b60405180910390f35b61019e600480360381019061019991906111d4565b610405565b6040516101ab9190611193565b60405180910390f35b6101bc610433565b6040516101c9919061123f565b60405180910390f35b6101da61043b565b005b6101f660048036038101906101f1919061113b565b61044d565b005b610212600480360381019061020d9190611258565b610463565b005b61021c610477565b6040516102299190611193565b60405180910390f35b61024c60048036038101906102479190611283565b61048c565b60405161025991906111bb565b60405180910390f35b61026a6104d1565b005b6102866004803603810190610281919061113b565b6104e4565b005b610290610504565b005b61029a610516565b6040516102a791906112bd565b60405180910390f35b6102b861053f565b6040516102c5919061108a565b60405180910390f35b6102e860048036038101906102e3919061113b565b6105cf565b6040516102f59190611193565b60405180910390f35b610318600480360381019061031391906112d6565b6105f1565b60405161032591906111bb565b60405180910390f35b61034860048036038101906103439190611283565b610673565b005b60606003805461035990611341565b80601f016020809104026020016040519081016040528092919081815260200182805461038590611341565b80156103d05780601f106103a7576101008083540402835291602001916103d0565b820191905f5260205f20905b8154815290600101906020018083116103b357829003601f168201915b5050505050905090565b5f806103e46106f7565b90506103f18185856106fe565b600191505092915050565b5f600254905090565b5f8061040f6106f7565b905061041c858285610710565b6104278585856107a2565b60019150509392505050565b5f6012905090565b610443610892565b61044b610919565b565b610455610892565b61045f828261097a565b5050565b61047461046e6106f7565b826109f9565b50565b5f60055f9054906101000a900460ff16905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6104d9610892565b6104e25f610a78565b565b6104f6826104f06106f7565b83610710565b61050082826109f9565b5050565b61050c610892565b610514610b3d565b565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461054e90611341565b80601f016020809104026020016040519081016040528092919081815260200182805461057a90611341565b80156105c55780601f1061059c576101008083540402835291602001916105c5565b820191905f5260205f20905b8154815290600101906020018083116105a857829003601f168201915b5050505050905090565b5f806105d96106f7565b90506105e68185856107a2565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61067b610892565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106eb575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016106e291906112bd565b60405180910390fd5b6106f481610a78565b50565b5f33905090565b61070b8383836001610b9f565b505050565b5f61071b84846105f1565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461079c578181101561078d578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161078493929190611371565b60405180910390fd5b61079b84848484035f610b9f565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610812575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161080991906112bd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610882575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161087991906112bd565b60405180910390fd5b61088d838383610d6e565b505050565b61089a6106f7565b73ffffffffffffffffffffffffffffffffffffffff166108b8610516565b73ffffffffffffffffffffffffffffffffffffffff1614610917576108db6106f7565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161090e91906112bd565b60405180910390fd5b565b610921610f87565b5f60055f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6109636106f7565b60405161097091906112bd565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109ea575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016109e191906112bd565b60405180910390fd5b6109f55f8383610d6e565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a69575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610a6091906112bd565b60405180910390fd5b610a74825f83610d6e565b5050565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610b45610fd0565b600160055f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b886106f7565b604051610b9591906112bd565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610c0f575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610c0691906112bd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c7f575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610c7691906112bd565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610d68578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610d5f91906111bb565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dbe578060025f828254610db291906113d3565b92505081905550610e8c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610e47578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610e3e93929190611371565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ed3578060025f8282540392505081905550610f1d565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f7a91906111bb565b60405180910390a3505050565b610f8f610477565b610fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc590611450565b60405180910390fd5b565b610fd8610477565b15611018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100f906114b8565b60405180910390fd5b565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61105c8261101a565b6110668185611024565b9350611076818560208601611034565b61107f81611042565b840191505092915050565b5f6020820190508181035f8301526110a28184611052565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110d7826110ae565b9050919050565b6110e7816110cd565b81146110f1575f80fd5b50565b5f81359050611102816110de565b92915050565b5f819050919050565b61111a81611108565b8114611124575f80fd5b50565b5f8135905061113581611111565b92915050565b5f8060408385031215611151576111506110aa565b5b5f61115e858286016110f4565b925050602061116f85828601611127565b9150509250929050565b5f8115159050919050565b61118d81611179565b82525050565b5f6020820190506111a65f830184611184565b92915050565b6111b581611108565b82525050565b5f6020820190506111ce5f8301846111ac565b92915050565b5f805f606084860312156111eb576111ea6110aa565b5b5f6111f8868287016110f4565b9350506020611209868287016110f4565b925050604061121a86828701611127565b9150509250925092565b5f60ff82169050919050565b61123981611224565b82525050565b5f6020820190506112525f830184611230565b92915050565b5f6020828403121561126d5761126c6110aa565b5b5f61127a84828501611127565b91505092915050565b5f60208284031215611298576112976110aa565b5b5f6112a5848285016110f4565b91505092915050565b6112b7816110cd565b82525050565b5f6020820190506112d05f8301846112ae565b92915050565b5f80604083850312156112ec576112eb6110aa565b5b5f6112f9858286016110f4565b925050602061130a858286016110f4565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061135857607f821691505b60208210810361136b5761136a611314565b5b50919050565b5f6060820190506113845f8301866112ae565b61139160208301856111ac565b61139e60408301846111ac565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6113dd82611108565b91506113e883611108565b9250828201905080821115611400576113ff6113a6565b5b92915050565b7f5061757361626c653a206e6f74207061757365640000000000000000000000005f82015250565b5f61143a601483611024565b915061144582611406565b602082019050919050565b5f6020820190508181035f8301526114678161142e565b9050919050565b7f5061757361626c653a20706175736564000000000000000000000000000000005f82015250565b5f6114a2601083611024565b91506114ad8261146e565b602082019050919050565b5f6020820190508181035f8301526114cf81611496565b905091905056fea2646970667358221220c08e8058e5825618f5be567379fa47be64180e5928901df527919b156fa31fd064736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000008686973746f72696300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034849530000000000000000000000000000000000000000000000000000000000