608060405234801561001057600080fd5b506040518060400160405280600a81526020017f4d79546f6b656e4e4654000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d544e0000000000000000000000000000000000000000000000000000000000815250816000908161008c91906102f4565b50806001908161009c91906102f4565b5050506103c6565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061012557607f821691505b602082108103610138576101376100de565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026101a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610163565b6101aa8683610163565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006101f16101ec6101e7846101c2565b6101cc565b6101c2565b9050919050565b6000819050919050565b61020b836101d6565b61021f610217826101f8565b848454610170565b825550505050565b600090565b610234610227565b61023f818484610202565b505050565b5b818110156102635761025860008261022c565b600181019050610245565b5050565b601f8211156102a8576102798161013e565b61028284610153565b81016020851015610291578190505b6102a561029d85610153565b830182610244565b50505b505050565b600082821c905092915050565b60006102cb600019846008026102ad565b1980831691505092915050565b60006102e483836102ba565b9150826002028217905092915050565b6102fd826100a4565b67ffffffffffffffff811115610316576103156100af565b5b610320825461010d565b61032b828285610267565b600060209050601f83116001811461035e576000841561034c578287015190505b61035685826102d8565b8655506103be565b601f19841661036c8661013e565b60005b828110156103945784890151825560018201915060208501945060208101905061036f565b868310156103b157848901516103ad601f8916826102ba565b8355505b6001600288020188555050505b505050505050565b611e90806103d56000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb4651461025b578063b88d4fde14610277578063c87b56dd14610293578063e985e9c5146102c3576100ea565b80636352211e146101dd57806370a082311461020d57806395d89b411461023d576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806340d097c3146101a557806342842e0e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b61010960048036038101906101049190611663565b6102f3565b60405161011691906116ab565b60405180910390f35b6101276103d5565b6040516101349190611756565b60405180910390f35b610157600480360381019061015291906117ae565b610467565b604051610164919061181c565b60405180910390f35b61018760048036038101906101829190611863565b610483565b005b6101a3600480360381019061019e91906118a3565b610499565b005b6101bf60048036038101906101ba91906118f6565b61059b565b005b6101db60048036038101906101d691906118a3565b6105c4565b005b6101f760048036038101906101f291906117ae565b6105e4565b604051610204919061181c565b60405180910390f35b610227600480360381019061022291906118f6565b6105f6565b6040516102349190611932565b60405180910390f35b6102456106b0565b6040516102529190611756565b60405180910390f35b61027560048036038101906102709190611979565b610742565b005b610291600480360381019061028c9190611aee565b610758565b005b6102ad60048036038101906102a891906117ae565b61077d565b6040516102ba9190611756565b60405180910390f35b6102dd60048036038101906102d89190611b71565b6107e6565b6040516102ea91906116ab565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103be57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103ce57506103cd8261087a565b5b9050919050565b6060600080546103e490611be0565b80601f016020809104026020016040519081016040528092919081815260200182805461041090611be0565b801561045d5780601f106104325761010080835404028352916020019161045d565b820191906000526020600020905b81548152906001019060200180831161044057829003601f168201915b5050505050905090565b6000610472826108e4565b5061047c8261096c565b9050919050565b61049582826104906109a9565b6109b1565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361050b5760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610502919061181c565b60405180910390fd5b600061051f838361051a6109a9565b6109c3565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610595578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161058c93929190611c11565b60405180910390fd5b50505050565b6000600660008154809291906105b090611c77565b9190505590506105c08282610bdd565b5050565b6105df83838360405180602001604052806000815250610758565b505050565b60006105ef826108e4565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106695760006040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610660919061181c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600180546106bf90611be0565b80601f01602080910402602001604051908101604052809291908181526020018280546106eb90611be0565b80156107385780601f1061070d57610100808354040283529160200191610738565b820191906000526020600020905b81548152906001019060200180831161071b57829003601f168201915b5050505050905090565b61075461074d6109a9565b8383610bfb565b5050565b610763848484610499565b61077761076e6109a9565b85858585610d6a565b50505050565b6060610788826108e4565b506000610793610f1b565b905060008151116107b357604051806020016040528060008152506107de565b806107bd84610f32565b6040516020016107ce929190611cfb565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000806108f083611000565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361096357826040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161095a9190611932565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b6109be838383600161103d565b505050565b6000806109cf84611000565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a1157610a10818486611202565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610aa257610a5360008560008061103d565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610b25576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b610bf78282604051806020016040528060008152506112c6565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c6c57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610c63919061181c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610d5d91906116ab565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115610f14578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02868685856040518563ffffffff1660e01b8152600401610dc99493929190611d74565b6020604051808303816000875af1925050508015610e0557506040513d601f19601f82011682018060405250810190610e029190611dd5565b60015b610e89573d8060008114610e35576040519150601f19603f3d011682016040523d82523d6000602084013e610e3a565b606091505b506000815103610e8157836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610e78919061181c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f1257836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610f09919061181c565b60405180910390fd5b505b5050505050565b606060405180602001604052806000815250905090565b606060006001610f41846112ea565b01905060008167ffffffffffffffff811115610f6057610f5f6119c3565b5b6040519080825280601f01601f191660200182016040528015610f925781602001600182028036833780820191505090505b509050600082602001820190505b600115610ff5578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581610fe957610fe8611e02565b5b04945060008503610fa0575b819350505050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806110765750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156111aa576000611086846108e4565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156110f157508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611104575061110281846107e6565b155b1561114657826040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040161113d919061181c565b60405180910390fd5b81156111a857838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b61120d83838361143d565b6112c157600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361128257806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016112799190611932565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016112b8929190611e31565b60405180910390fd5b505050565b6112d083836114fe565b6112e56112db6109a9565b6000858585610d6a565b505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611348577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161133e5761133d611e02565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611385576d04ee2d6d415b85acef8100000000838161137b5761137a611e02565b5b0492506020810190505b662386f26fc1000083106113b457662386f26fc1000083816113aa576113a9611e02565b5b0492506010810190505b6305f5e10083106113dd576305f5e10083816113d3576113d2611e02565b5b0492506008810190505b61271083106114025761271083816113f8576113f7611e02565b5b0492506004810190505b60648310611425576064838161141b5761141a611e02565b5b0492506002810190505b600a8310611434576001810190505b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156114f557508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806114b657506114b584846107e6565b5b806114f457508273ffffffffffffffffffffffffffffffffffffffff166114dc8361096c565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115705760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611567919061181c565b60405180910390fd5b600061157e838360006109c3565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146115f25760006040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016115e9919061181c565b60405180910390fd5b505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6116408161160b565b811461164b57600080fd5b50565b60008135905061165d81611637565b92915050565b60006020828403121561167957611678611601565b5b60006116878482850161164e565b91505092915050565b60008115159050919050565b6116a581611690565b82525050565b60006020820190506116c0600083018461169c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156117005780820151818401526020810190506116e5565b60008484015250505050565b6000601f19601f8301169050919050565b6000611728826116c6565b61173281856116d1565b93506117428185602086016116e2565b61174b8161170c565b840191505092915050565b60006020820190508181036000830152611770818461171d565b905092915050565b6000819050919050565b61178b81611778565b811461179657600080fd5b50565b6000813590506117a881611782565b92915050565b6000602082840312156117c4576117c3611601565b5b60006117d284828501611799565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611806826117db565b9050919050565b611816816117fb565b82525050565b6000602082019050611831600083018461180d565b92915050565b611840816117fb565b811461184b57600080fd5b50565b60008135905061185d81611837565b92915050565b6000806040838503121561187a57611879611601565b5b60006118888582860161184e565b925050602061189985828601611799565b9150509250929050565b6000806000606084860312156118bc576118bb611601565b5b60006118ca8682870161184e565b93505060206118db8682870161184e565b92505060406118ec86828701611799565b9150509250925092565b60006020828403121561190c5761190b611601565b5b600061191a8482850161184e565b91505092915050565b61192c81611778565b82525050565b60006020820190506119476000830184611923565b92915050565b61195681611690565b811461196157600080fd5b50565b6000813590506119738161194d565b92915050565b600080604083850312156119905761198f611601565b5b600061199e8582860161184e565b92505060206119af85828601611964565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6119fb8261170c565b810181811067ffffffffffffffff82111715611a1a57611a196119c3565b5b80604052505050565b6000611a2d6115f7565b9050611a3982826119f2565b919050565b600067ffffffffffffffff821115611a5957611a586119c3565b5b611a628261170c565b9050602081019050919050565b82818337600083830152505050565b6000611a91611a8c84611a3e565b611a23565b905082815260208101848484011115611aad57611aac6119be565b5b611ab8848285611a6f565b509392505050565b600082601f830112611ad557611ad46119b9565b5b8135611ae5848260208601611a7e565b91505092915050565b60008060008060808587031215611b0857611b07611601565b5b6000611b168782880161184e565b9450506020611b278782880161184e565b9350506040611b3887828801611799565b925050606085013567ffffffffffffffff811115611b5957611b58611606565b5b611b6587828801611ac0565b91505092959194509250565b60008060408385031215611b8857611b87611601565b5b6000611b968582860161184e565b9250506020611ba78582860161184e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611bf857607f821691505b602082108103611c0b57611c0a611bb1565b5b50919050565b6000606082019050611c26600083018661180d565b611c336020830185611923565b611c40604083018461180d565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c8282611778565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611cb457611cb3611c48565b5b600182019050919050565b600081905092915050565b6000611cd5826116c6565b611cdf8185611cbf565b9350611cef8185602086016116e2565b80840191505092915050565b6000611d078285611cca565b9150611d138284611cca565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000611d4682611d1f565b611d508185611d2a565b9350611d608185602086016116e2565b611d698161170c565b840191505092915050565b6000608082019050611d89600083018761180d565b611d96602083018661180d565b611da36040830185611923565b8181036060830152611db58184611d3b565b905095945050505050565b600081519050611dcf81611637565b92915050565b600060208284031215611deb57611dea611601565b5b6000611df984828501611dc0565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000604082019050611e46600083018561180d565b611e536020830184611923565b939250505056fea2646970667358221220f1a445fc203b855c91ee599f7e491d5be8bb8726b749b424cd8342dd1c39636564736f6c634300081b0033