60806040523480156200001157600080fd5b50336040518060400160405280600581526020017f4d794e46540000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d4e465400000000000000000000000000000000000000000000000000000000815250816000908162000090919062000472565b508060019081620000a2919062000472565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200011a5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200011191906200059e565b60405180910390fd5b6200012b816200013260201b60201c565b50620005bb565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200027a57607f821691505b60208210810362000290576200028f62000232565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002bb565b620003068683620002bb565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003536200034d62000347846200031e565b62000328565b6200031e565b9050919050565b6000819050919050565b6200036f8362000332565b620003876200037e826200035a565b848454620002c8565b825550505050565b600090565b6200039e6200038f565b620003ab81848462000364565b505050565b5b81811015620003d357620003c760008262000394565b600181019050620003b1565b5050565b601f8211156200042257620003ec8162000296565b620003f784620002ab565b8101602085101562000407578190505b6200041f6200041685620002ab565b830182620003b0565b50505b505050565b600082821c905092915050565b6000620004476000198460080262000427565b1980831691505092915050565b600062000462838362000434565b9150826002028217905092915050565b6200047d82620001f8565b67ffffffffffffffff81111562000499576200049862000203565b5b620004a5825462000261565b620004b2828285620003d7565b600060209050601f831160018114620004ea5760008415620004d5578287015190505b620004e1858262000454565b86555062000551565b601f198416620004fa8662000296565b60005b828110156200052457848901518255600182019150602085019450602081019050620004fd565b8683101562000544578489015162000540601f89168262000434565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620005868262000559565b9050919050565b620005988162000579565b82525050565b6000602082019050620005b560008301846200058d565b92915050565b61213180620005cb6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063715018a6116100a2578063a22cb46511610071578063a22cb465146102cd578063b88d4fde146102e9578063c87b56dd14610305578063e985e9c514610335578063f2fde38b1461036557610116565b8063715018a61461026957806375794a3c146102735780638da5cb5b1461029157806395d89b41146102af57610116565b806323b872dd116100e957806323b872dd146101b557806342842e0e146101d15780636352211e146101ed5780636a6278421461021d57806370a082311461023957610116565b806301ffc9a71461011b57806306fdde031461014b578063081812fc14610169578063095ea7b314610199575b600080fd5b61013560048036038101906101309190611904565b610381565b604051610142919061194c565b60405180910390f35b610153610463565b60405161016091906119f7565b60405180910390f35b610183600480360381019061017e9190611a4f565b6104f5565b6040516101909190611abd565b60405180910390f35b6101b360048036038101906101ae9190611b04565b610511565b005b6101cf60048036038101906101ca9190611b44565b610527565b005b6101eb60048036038101906101e69190611b44565b610629565b005b61020760048036038101906102029190611a4f565b610649565b6040516102149190611abd565b60405180910390f35b61023760048036038101906102329190611b97565b61065b565b005b610253600480360381019061024e9190611b97565b61068a565b6040516102609190611bd3565b60405180910390f35b610271610744565b005b61027b610758565b6040516102889190611bd3565b60405180910390f35b61029961075e565b6040516102a69190611abd565b60405180910390f35b6102b7610788565b6040516102c491906119f7565b60405180910390f35b6102e760048036038101906102e29190611c1a565b61081a565b005b61030360048036038101906102fe9190611d8f565b610830565b005b61031f600480360381019061031a9190611a4f565b61084d565b60405161032c91906119f7565b60405180910390f35b61034f600480360381019061034a9190611e12565b6108b6565b60405161035c919061194c565b60405180910390f35b61037f600480360381019061037a9190611b97565b61094a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061044c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061045c575061045b826109d0565b5b9050919050565b60606000805461047290611e81565b80601f016020809104026020016040519081016040528092919081815260200182805461049e90611e81565b80156104eb5780601f106104c0576101008083540402835291602001916104eb565b820191906000526020600020905b8154815290600101906020018083116104ce57829003601f168201915b5050505050905090565b600061050082610a3a565b5061050a82610ac2565b9050919050565b610523828261051e610aff565b610b07565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105995760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016105909190611abd565b60405180910390fd5b60006105ad83836105a8610aff565b610b19565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610623578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161061a93929190611eb2565b60405180910390fd5b50505050565b61064483838360405180602001604052806000815250610830565b505050565b600061065482610a3a565b9050919050565b610663610d33565b61066f81600754610dba565b6007600081548092919061068290611f18565b919050555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106fd5760006040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016106f49190611abd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61074c610d33565b6107566000610dd8565b565b60075481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461079790611e81565b80601f01602080910402602001604051908101604052809291908181526020018280546107c390611e81565b80156108105780601f106107e557610100808354040283529160200191610810565b820191906000526020600020905b8154815290600101906020018083116107f357829003601f168201915b5050505050905090565b61082c610825610aff565b8383610e9e565b5050565b61083b848484610527565b6108478484848461100d565b50505050565b606061085882610a3a565b5060006108636111c4565b9050600081511161088357604051806020016040528060008152506108ae565b8061088d846111db565b60405160200161089e929190611f9c565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610952610d33565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109c45760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016109bb9190611abd565b60405180910390fd5b6109cd81610dd8565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080610a46836112a9565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ab957826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610ab09190611bd3565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b610b1483838360016112e6565b505050565b600080610b25846112a9565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610b6757610b668184866114ab565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bf857610ba96000856000806112e6565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610c7b576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b610d3b610aff565b73ffffffffffffffffffffffffffffffffffffffff16610d5961075e565b73ffffffffffffffffffffffffffffffffffffffff1614610db857610d7c610aff565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610daf9190611abd565b60405180910390fd5b565b610dd482826040518060200160405280600081525061156f565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f0f57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610f069190611abd565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611000919061194c565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b11156111be578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02611051610aff565b8685856040518563ffffffff1660e01b81526004016110739493929190612015565b6020604051808303816000875af19250505080156110af57506040513d601f19601f820116820180604052508101906110ac9190612076565b60015b611133573d80600081146110df576040519150601f19603f3d011682016040523d82523d6000602084013e6110e4565b606091505b50600081510361112b57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016111229190611abd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146111bc57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016111b39190611abd565b60405180910390fd5b505b50505050565b606060405180602001604052806000815250905090565b6060600060016111ea8461158b565b01905060008167ffffffffffffffff81111561120957611208611c64565b5b6040519080825280601f01601f19166020018201604052801561123b5781602001600182028036833780820191505090505b509050600082602001820190505b60011561129e578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611292576112916120a3565b5b04945060008503611249575b819350505050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061131f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561145357600061132f84610a3a565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561139a57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156113ad57506113ab81846108b6565b155b156113ef57826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016113e69190611abd565b60405180910390fd5b811561145157838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6114b68383836116de565b61156a57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361152b57806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016115229190611bd3565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016115619291906120d2565b60405180910390fd5b505050565b611579838361179f565b611586600084848461100d565b505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115e9577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816115df576115de6120a3565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611626576d04ee2d6d415b85acef8100000000838161161c5761161b6120a3565b5b0492506020810190505b662386f26fc10000831061165557662386f26fc10000838161164b5761164a6120a3565b5b0492506010810190505b6305f5e100831061167e576305f5e1008381611674576116736120a3565b5b0492506008810190505b61271083106116a3576127108381611699576116986120a3565b5b0492506004810190505b606483106116c657606483816116bc576116bb6120a3565b5b0492506002810190505b600a83106116d5576001810190505b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561179657508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611757575061175684846108b6565b5b8061179557508273ffffffffffffffffffffffffffffffffffffffff1661177d83610ac2565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118115760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016118089190611abd565b60405180910390fd5b600061181f83836000610b19565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146118935760006040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040161188a9190611abd565b60405180910390fd5b505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6118e1816118ac565b81146118ec57600080fd5b50565b6000813590506118fe816118d8565b92915050565b60006020828403121561191a576119196118a2565b5b6000611928848285016118ef565b91505092915050565b60008115159050919050565b61194681611931565b82525050565b6000602082019050611961600083018461193d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156119a1578082015181840152602081019050611986565b60008484015250505050565b6000601f19601f8301169050919050565b60006119c982611967565b6119d38185611972565b93506119e3818560208601611983565b6119ec816119ad565b840191505092915050565b60006020820190508181036000830152611a1181846119be565b905092915050565b6000819050919050565b611a2c81611a19565b8114611a3757600080fd5b50565b600081359050611a4981611a23565b92915050565b600060208284031215611a6557611a646118a2565b5b6000611a7384828501611a3a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611aa782611a7c565b9050919050565b611ab781611a9c565b82525050565b6000602082019050611ad26000830184611aae565b92915050565b611ae181611a9c565b8114611aec57600080fd5b50565b600081359050611afe81611ad8565b92915050565b60008060408385031215611b1b57611b1a6118a2565b5b6000611b2985828601611aef565b9250506020611b3a85828601611a3a565b9150509250929050565b600080600060608486031215611b5d57611b5c6118a2565b5b6000611b6b86828701611aef565b9350506020611b7c86828701611aef565b9250506040611b8d86828701611a3a565b9150509250925092565b600060208284031215611bad57611bac6118a2565b5b6000611bbb84828501611aef565b91505092915050565b611bcd81611a19565b82525050565b6000602082019050611be86000830184611bc4565b92915050565b611bf781611931565b8114611c0257600080fd5b50565b600081359050611c1481611bee565b92915050565b60008060408385031215611c3157611c306118a2565b5b6000611c3f85828601611aef565b9250506020611c5085828601611c05565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c9c826119ad565b810181811067ffffffffffffffff82111715611cbb57611cba611c64565b5b80604052505050565b6000611cce611898565b9050611cda8282611c93565b919050565b600067ffffffffffffffff821115611cfa57611cf9611c64565b5b611d03826119ad565b9050602081019050919050565b82818337600083830152505050565b6000611d32611d2d84611cdf565b611cc4565b905082815260208101848484011115611d4e57611d4d611c5f565b5b611d59848285611d10565b509392505050565b600082601f830112611d7657611d75611c5a565b5b8135611d86848260208601611d1f565b91505092915050565b60008060008060808587031215611da957611da86118a2565b5b6000611db787828801611aef565b9450506020611dc887828801611aef565b9350506040611dd987828801611a3a565b925050606085013567ffffffffffffffff811115611dfa57611df96118a7565b5b611e0687828801611d61565b91505092959194509250565b60008060408385031215611e2957611e286118a2565b5b6000611e3785828601611aef565b9250506020611e4885828601611aef565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611e9957607f821691505b602082108103611eac57611eab611e52565b5b50919050565b6000606082019050611ec76000830186611aae565b611ed46020830185611bc4565b611ee16040830184611aae565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611f2382611a19565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f5557611f54611ee9565b5b600182019050919050565b600081905092915050565b6000611f7682611967565b611f808185611f60565b9350611f90818560208601611983565b80840191505092915050565b6000611fa88285611f6b565b9150611fb48284611f6b565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000611fe782611fc0565b611ff18185611fcb565b9350612001818560208601611983565b61200a816119ad565b840191505092915050565b600060808201905061202a6000830187611aae565b6120376020830186611aae565b6120446040830185611bc4565b81810360608301526120568184611fdc565b905095945050505050565b600081519050612070816118d8565b92915050565b60006020828403121561208c5761208b6118a2565b5b600061209a84828501612061565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006040820190506120e76000830185611aae565b6120f46020830184611bc4565b939250505056fea264697066735822122092edb55db73c4bddb46f2c4e7d56eaf82de09999f5bd2a9fc328ab29b008e95664736f6c63430008180033