60806040525f600755348015610013575f80fd5b506040516126db3803806126db833981810160405281019061003591906102f0565b338282815f90816100469190610573565b5080600190816100569190610573565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100c9575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100c09190610681565b60405180910390fd5b6100d8816100e060201b60201c565b50505061069a565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610202826101bc565b810181811067ffffffffffffffff82111715610221576102206101cc565b5b80604052505050565b5f6102336101a3565b905061023f82826101f9565b919050565b5f67ffffffffffffffff82111561025e5761025d6101cc565b5b610267826101bc565b9050602081019050919050565b8281835e5f83830152505050565b5f61029461028f84610244565b61022a565b9050828152602081018484840111156102b0576102af6101b8565b5b6102bb848285610274565b509392505050565b5f82601f8301126102d7576102d66101b4565b5b81516102e7848260208601610282565b91505092915050565b5f8060408385031215610306576103056101ac565b5b5f83015167ffffffffffffffff811115610323576103226101b0565b5b61032f858286016102c3565b925050602083015167ffffffffffffffff8111156103505761034f6101b0565b5b61035c858286016102c3565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806103b457607f821691505b6020821081036103c7576103c6610370565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104297fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826103ee565b61043386836103ee565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61047761047261046d8461044b565b610454565b61044b565b9050919050565b5f819050919050565b6104908361045d565b6104a461049c8261047e565b8484546103fa565b825550505050565b5f90565b6104b86104ac565b6104c3818484610487565b505050565b5b818110156104e6576104db5f826104b0565b6001810190506104c9565b5050565b601f82111561052b576104fc816103cd565b610505846103df565b81016020851015610514578190505b610528610520856103df565b8301826104c8565b50505b505050565b5f82821c905092915050565b5f61054b5f1984600802610530565b1980831691505092915050565b5f610563838361053c565b9150826002028217905092915050565b61057c82610366565b67ffffffffffffffff811115610595576105946101cc565b5b61059f825461039d565b6105aa8282856104ea565b5f60209050601f8311600181146105db575f84156105c9578287015190505b6105d38582610558565b86555061063a565b601f1984166105e9866103cd565b5f5b82811015610610578489015182556001820191506020850194506020810190506105eb565b8683101561062d5784890151610629601f89168261053c565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61066b82610642565b9050919050565b61067b81610661565b82525050565b5f6020820190506106945f830184610672565b92915050565b612034806106a75f395ff3fe608060405234801561000f575f80fd5b5060043610610113575f3560e01c806370a08231116100a0578063a22cb4651161006f578063a22cb465146102c9578063b88d4fde146102e5578063c87b56dd14610301578063e985e9c514610331578063f2fde38b1461036157610113565b806370a0823114610253578063715018a6146102835780638da5cb5b1461028d57806395d89b41146102ab57610113565b8063095ea7b3116100e7578063095ea7b3146101b357806323b872dd146101cf57806342842e0e146101eb5780636352211e146102075780636a6278421461023757610113565b80629a9b7b1461011757806301ffc9a71461013557806306fdde0314610165578063081812fc14610183575b5f80fd5b61011f61037d565b60405161012c919061181d565b60405180910390f35b61014f600480360381019061014a919061189c565b610386565b60405161015c91906118e1565b60405180910390f35b61016d610467565b60405161017a919061196a565b60405180910390f35b61019d600480360381019061019891906119b4565b6104f6565b6040516101aa9190611a1e565b60405180910390f35b6101cd60048036038101906101c89190611a61565b610511565b005b6101e960048036038101906101e49190611a9f565b610527565b005b61020560048036038101906102009190611a9f565b610626565b005b610221600480360381019061021c91906119b4565b610645565b60405161022e9190611a1e565b60405180910390f35b610251600480360381019061024c9190611aef565b610656565b005b61026d60048036038101906102689190611aef565b610689565b60405161027a919061181d565b60405180910390f35b61028b61073f565b005b610295610752565b6040516102a29190611a1e565b60405180910390f35b6102b361077a565b6040516102c0919061196a565b60405180910390f35b6102e360048036038101906102de9190611b44565b61080a565b005b6102ff60048036038101906102fa9190611cae565b610820565b005b61031b600480360381019061031691906119b4565b61083d565b604051610328919061196a565b60405180910390f35b61034b60048036038101906103469190611d2e565b6108a3565b60405161035891906118e1565b60405180910390f35b61037b60048036038101906103769190611aef565b610931565b005b5f600754905090565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061045057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610460575061045f826109b5565b5b9050919050565b60605f805461047590611d99565b80601f01602080910402602001604051908101604052809291908181526020018280546104a190611d99565b80156104ec5780601f106104c3576101008083540402835291602001916104ec565b820191905f5260205f20905b8154815290600101906020018083116104cf57829003601f168201915b5050505050905090565b5f61050082610a1e565b5061050a82610aa4565b9050919050565b610523828261051e610add565b610ae4565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610597575f6040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161058e9190611a1e565b60405180910390fd5b5f6105aa83836105a5610add565b610af6565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610620578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161061793929190611dc9565b60405180910390fd5b50505050565b61064083838360405180602001604052805f815250610820565b505050565b5f61064f82610a1e565b9050919050565b61065e610d01565b5f600754905061066e8282610d88565b60075f81548092919061068090611e2b565b91905055505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106fa575f6040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016106f19190611a1e565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610747610d01565b6107505f610e7b565b565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461078990611d99565b80601f01602080910402602001604051908101604052809291908181526020018280546107b590611d99565b80156108005780601f106107d757610100808354040283529160200191610800565b820191905f5260205f20905b8154815290600101906020018083116107e357829003601f168201915b5050505050905090565b61081c610815610add565b8383610f3e565b5050565b61082b848484610527565b610837848484846110a7565b50505050565b606061084882610a1e565b505f610852611259565b90505f8151116108705760405180602001604052805f81525061089b565b8061087a8461126f565b60405160200161088b929190611eac565b6040516020818303038152906040525b915050919050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b610939610d01565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109a9575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016109a09190611a1e565b60405180910390fd5b6109b281610e7b565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f80610a2983611339565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a9b57826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610a92919061181d565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b610af18383836001611372565b505050565b5f80610b0184611339565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610b4257610b41818486611531565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bcd57610b815f855f80611372565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610c4c57600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b610d09610add565b73ffffffffffffffffffffffffffffffffffffffff16610d27610752565b73ffffffffffffffffffffffffffffffffffffffff1614610d8657610d4a610add565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610d7d9190611a1e565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610df8575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610def9190611a1e565b60405180910390fd5b5f610e0483835f610af6565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e76575f6040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600401610e6d9190611a1e565b60405180910390fd5b505050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fae57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610fa59190611a1e565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161109a91906118e1565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115611253578273ffffffffffffffffffffffffffffffffffffffff1663150b7a026110ea610add565b8685856040518563ffffffff1660e01b815260040161110c9493929190611f21565b6020604051808303815f875af192505050801561114757506040513d601f19601f820116820180604052508101906111449190611f7f565b60015b6111c8573d805f8114611175576040519150601f19603f3d011682016040523d82523d5f602084013e61117a565b606091505b505f8151036111c057836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016111b79190611a1e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461125157836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016112489190611a1e565b60405180910390fd5b505b50505050565b606060405180602001604052805f815250905090565b60605f600161127d846115f4565b0190505f8167ffffffffffffffff81111561129b5761129a611b8a565b5b6040519080825280601f01601f1916602001820160405280156112cd5781602001600182028036833780820191505090505b5090505f82602001820190505b60011561132e578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161132357611322611faa565b5b0494505f85036112da575b819350505050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806113aa57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156114dc575f6113b984610a1e565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561142357508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611436575061143481846108a3565b155b1561147857826040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040161146f9190611a1e565b60405180910390fd5b81156114da57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b61153c838383611745565b6115ef575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115b057806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016115a7919061181d565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016115e6929190611fd7565b60405180910390fd5b505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611650577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161164657611645611faa565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061168d576d04ee2d6d415b85acef8100000000838161168357611682611faa565b5b0492506020810190505b662386f26fc1000083106116bc57662386f26fc1000083816116b2576116b1611faa565b5b0492506010810190505b6305f5e10083106116e5576305f5e10083816116db576116da611faa565b5b0492506008810190505b612710831061170a576127108381611700576116ff611faa565b5b0492506004810190505b6064831061172d576064838161172357611722611faa565b5b0492506002810190505b600a831061173c576001810190505b80915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156117fc57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806117bd57506117bc84846108a3565b5b806117fb57508273ffffffffffffffffffffffffffffffffffffffff166117e383610aa4565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f819050919050565b61181781611805565b82525050565b5f6020820190506118305f83018461180e565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61187b81611847565b8114611885575f80fd5b50565b5f8135905061189681611872565b92915050565b5f602082840312156118b1576118b061183f565b5b5f6118be84828501611888565b91505092915050565b5f8115159050919050565b6118db816118c7565b82525050565b5f6020820190506118f45f8301846118d2565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61193c826118fa565b6119468185611904565b9350611956818560208601611914565b61195f81611922565b840191505092915050565b5f6020820190508181035f8301526119828184611932565b905092915050565b61199381611805565b811461199d575f80fd5b50565b5f813590506119ae8161198a565b92915050565b5f602082840312156119c9576119c861183f565b5b5f6119d6848285016119a0565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611a08826119df565b9050919050565b611a18816119fe565b82525050565b5f602082019050611a315f830184611a0f565b92915050565b611a40816119fe565b8114611a4a575f80fd5b50565b5f81359050611a5b81611a37565b92915050565b5f8060408385031215611a7757611a7661183f565b5b5f611a8485828601611a4d565b9250506020611a95858286016119a0565b9150509250929050565b5f805f60608486031215611ab657611ab561183f565b5b5f611ac386828701611a4d565b9350506020611ad486828701611a4d565b9250506040611ae5868287016119a0565b9150509250925092565b5f60208284031215611b0457611b0361183f565b5b5f611b1184828501611a4d565b91505092915050565b611b23816118c7565b8114611b2d575f80fd5b50565b5f81359050611b3e81611b1a565b92915050565b5f8060408385031215611b5a57611b5961183f565b5b5f611b6785828601611a4d565b9250506020611b7885828601611b30565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611bc082611922565b810181811067ffffffffffffffff82111715611bdf57611bde611b8a565b5b80604052505050565b5f611bf1611836565b9050611bfd8282611bb7565b919050565b5f67ffffffffffffffff821115611c1c57611c1b611b8a565b5b611c2582611922565b9050602081019050919050565b828183375f83830152505050565b5f611c52611c4d84611c02565b611be8565b905082815260208101848484011115611c6e57611c6d611b86565b5b611c79848285611c32565b509392505050565b5f82601f830112611c9557611c94611b82565b5b8135611ca5848260208601611c40565b91505092915050565b5f805f8060808587031215611cc657611cc561183f565b5b5f611cd387828801611a4d565b9450506020611ce487828801611a4d565b9350506040611cf5878288016119a0565b925050606085013567ffffffffffffffff811115611d1657611d15611843565b5b611d2287828801611c81565b91505092959194509250565b5f8060408385031215611d4457611d4361183f565b5b5f611d5185828601611a4d565b9250506020611d6285828601611a4d565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611db057607f821691505b602082108103611dc357611dc2611d6c565b5b50919050565b5f606082019050611ddc5f830186611a0f565b611de9602083018561180e565b611df66040830184611a0f565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611e3582611805565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611e6757611e66611dfe565b5b600182019050919050565b5f81905092915050565b5f611e86826118fa565b611e908185611e72565b9350611ea0818560208601611914565b80840191505092915050565b5f611eb78285611e7c565b9150611ec38284611e7c565b91508190509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f611ef382611ecf565b611efd8185611ed9565b9350611f0d818560208601611914565b611f1681611922565b840191505092915050565b5f608082019050611f345f830187611a0f565b611f416020830186611a0f565b611f4e604083018561180e565b8181036060830152611f608184611ee9565b905095945050505050565b5f81519050611f7981611872565b92915050565b5f60208284031215611f9457611f9361183f565b5b5f611fa184828501611f6b565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f604082019050611fea5f830185611a0f565b611ff7602083018461180e565b939250505056fea26469706673582212204ba2724275e996c7e847adf09e8b7d5ae5f3481f9edf03e869d337387ceef6ac64736f6c634300081a00330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000054f424e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054f424e4654000000000000000000000000000000000000000000000000000000