0x60806040523480156200001157600080fd5b50336040518060400160405280601181526020017f566f74696e6720416363657373204e46540000000000000000000000000000008152506040518060400160405280600481526020017f564f544500000000000000000000000000000000000000000000000000000000815250816000908162000090919062000472565b508060019081620000a2919062000472565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200011a5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200011191906200059e565b60405180910390fd5b6200012b816200013260201b60201c565b50620005bb565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200027a57607f821691505b60208210810362000290576200028f62000232565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620002fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002bb565b620003068683620002bb565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003536200034d62000347846200031e565b62000328565b6200031e565b9050919050565b6000819050919050565b6200036f8362000332565b620003876200037e826200035a565b848454620002c8565b825550505050565b600090565b6200039e6200038f565b620003ab81848462000364565b505050565b5b81811015620003d357620003c760008262000394565b600181019050620003b1565b5050565b601f8211156200042257620003ec8162000296565b620003f784620002ab565b8101602085101562000407578190505b6200041f6200041685620002ab565b830182620003b0565b50505b505050565b600082821c905092915050565b6000620004476000198460080262000427565b1980831691505092915050565b600062000462838362000434565b9150826002028217905092915050565b6200047d82620001f8565b67ffffffffffffffff81111562000499576200049862000203565b5b620004a5825462000261565b620004b2828285620003d7565b600060209050601f831160018114620004ea5760008415620004d5578287015190505b620004e1858262000454565b86555062000551565b601f198416620004fa8662000296565b60005b828110156200052457848901518255600182019150602085019450602081019050620004fd565b8683101562000544578489015162000540601f89168262000434565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620005868262000559565b9050919050565b620005988162000579565b82525050565b6000602082019050620005b560008301846200058d565b92915050565b61266880620005cb6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063715018a6116100a2578063b88d4fde11610071578063b88d4fde146102a4578063c87b56dd146102c0578063d0def521146102f0578063e985e9c51461030c578063f2fde38b1461033c5761010b565b8063715018a6146102425780638da5cb5b1461024c57806395d89b411461026a578063a22cb465146102885761010b565b806323b872dd116100de57806323b872dd146101aa57806342842e0e146101c65780636352211e146101e257806370a08231146102125761010b565b806301ffc9a71461011057806306fdde0314610140578063081812fc1461015e578063095ea7b31461018e575b600080fd5b61012a60048036038101906101259190611ac0565b610358565b6040516101379190611b08565b60405180910390f35b6101486103b9565b6040516101559190611bb3565b60405180910390f35b61017860048036038101906101739190611c0b565b61044b565b6040516101859190611c79565b60405180910390f35b6101a860048036038101906101a39190611cc0565b610467565b005b6101c460048036038101906101bf9190611d00565b61047d565b005b6101e060048036038101906101db9190611d00565b61057f565b005b6101fc60048036038101906101f79190611c0b565b61059f565b6040516102099190611c79565b60405180910390f35b61022c60048036038101906102279190611d53565b6105b1565b6040516102399190611d8f565b60405180910390f35b61024a61066b565b005b61025461067f565b6040516102619190611c79565b60405180910390f35b6102726106a9565b60405161027f9190611bb3565b60405180910390f35b6102a2600480360381019061029d9190611dd6565b61073b565b005b6102be60048036038101906102b99190611f4b565b610751565b005b6102da60048036038101906102d59190611c0b565b610776565b6040516102e79190611bb3565b60405180910390f35b61030a6004803603810190610305919061206f565b610889565b005b610326600480360381019061032191906120cb565b6108c9565b6040516103339190611b08565b60405180910390f35b61035660048036038101906103519190611d53565b61095d565b005b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103b257506103b1826109e3565b5b9050919050565b6060600080546103c89061213a565b80601f01602080910402602001604051908101604052809291908181526020018280546103f49061213a565b80156104415780601f1061041657610100808354040283529160200191610441565b820191906000526020600020905b81548152906001019060200180831161042457829003601f168201915b5050505050905090565b600061045682610ac5565b5061046082610b4d565b9050919050565b6104798282610474610b8a565b610b92565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036104ef5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016104e69190611c79565b60405180910390fd5b600061050383836104fe610b8a565b610ba4565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610579578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016105709392919061216b565b60405180910390fd5b50505050565b61059a83838360405180602001604052806000815250610751565b505050565b60006105aa82610ac5565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106245760006040517f89c62b6400000000000000000000000000000000000000000000000000000000815260040161061b9190611c79565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610673610dbe565b61067d6000610e45565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546106b89061213a565b80601f01602080910402602001604051908101604052809291908181526020018280546106e49061213a565b80156107315780601f1061070657610100808354040283529160200191610731565b820191906000526020600020905b81548152906001019060200180831161071457829003601f168201915b5050505050905090565b61074d610746610b8a565b8383610f0b565b5050565b61075c84848461047d565b610770610767610b8a565b8585858561107a565b50505050565b606061078182610ac5565b5060006006600084815260200190815260200160002080546107a29061213a565b80601f01602080910402602001604051908101604052809291908181526020018280546107ce9061213a565b801561081b5780601f106107f05761010080835404028352916020019161081b565b820191906000526020600020905b8154815290600101906020018083116107fe57829003601f168201915b50505050509050600061082c61122b565b90506000815103610841578192505050610884565b60008251111561087657808260405160200161085e9291906121de565b60405160208183030381529060405292505050610884565b61087f84611242565b925050505b919050565b610891610dbe565b60006008549050600860008154809291906108ab90612231565b91905055506108ba83826112ab565b6108c481836112c9565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610965610dbe565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109d75760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016109ce9190611c79565b60405180910390fd5b6109e081610e45565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aae57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610abe5750610abd82611325565b5b9050919050565b600080610ad18361138f565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b4457826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610b3b9190611d8f565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b610b9f83838360016113cc565b505050565b600080610bb08461138f565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610bf257610bf1818486611591565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c8357610c346000856000806113cc565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610d06576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b610dc6610b8a565b73ffffffffffffffffffffffffffffffffffffffff16610de461067f565b73ffffffffffffffffffffffffffffffffffffffff1614610e4357610e07610b8a565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610e3a9190611c79565b60405180910390fd5b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f7c57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610f739190611c79565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161106d9190611b08565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115611224578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02868685856040518563ffffffff1660e01b81526004016110d994939291906122ce565b6020604051808303816000875af192505050801561111557506040513d601f19601f82011682018060405250810190611112919061232f565b60015b611199573d8060008114611145576040519150601f19603f3d011682016040523d82523d6000602084013e61114a565b606091505b50600081510361119157836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016111889190611c79565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461122257836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016112199190611c79565b60405180910390fd5b505b5050505050565b606060405180602001604052806000815250905090565b606061124d82610ac5565b50600061125861122b565b9050600081511161127857604051806020016040528060008152506112a3565b8061128284611655565b6040516020016112939291906121de565b6040516020818303038152906040525b915050919050565b6112c5828260405180602001604052806000815250611723565b5050565b806006600084815260200190815260200160002090816112e99190612508565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7826040516113199190611d8f565b60405180910390a15050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806114055750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561153957600061141584610ac5565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561148057508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611493575061149181846108c9565b155b156114d557826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016114cc9190611c79565b60405180910390fd5b811561153757838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b61159c838383611747565b61165057600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361161157806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016116089190611d8f565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016116479291906125da565b60405180910390fd5b505050565b60606000600161166484611808565b01905060008167ffffffffffffffff81111561168357611682611e20565b5b6040519080825280601f01601f1916602001820160405280156116b55781602001600182028036833780820191505090505b509050600082602001820190505b600115611718578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161170c5761170b612603565b5b049450600085036116c3575b819350505050919050565b61172d838361195b565b611742611738610b8a565b600085858561107a565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156117ff57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806117c057506117bf84846108c9565b5b806117fe57508273ffffffffffffffffffffffffffffffffffffffff166117e683610b4d565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611866577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161185c5761185b612603565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106118a3576d04ee2d6d415b85acef8100000000838161189957611898612603565b5b0492506020810190505b662386f26fc1000083106118d257662386f26fc1000083816118c8576118c7612603565b5b0492506010810190505b6305f5e10083106118fb576305f5e10083816118f1576118f0612603565b5b0492506008810190505b612710831061192057612710838161191657611915612603565b5b0492506004810190505b60648310611943576064838161193957611938612603565b5b0492506002810190505b600a8310611952576001810190505b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119cd5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016119c49190611c79565b60405180910390fd5b60006119db83836000610ba4565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a4f5760006040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600401611a469190611c79565b60405180910390fd5b505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611a9d81611a68565b8114611aa857600080fd5b50565b600081359050611aba81611a94565b92915050565b600060208284031215611ad657611ad5611a5e565b5b6000611ae484828501611aab565b91505092915050565b60008115159050919050565b611b0281611aed565b82525050565b6000602082019050611b1d6000830184611af9565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b5d578082015181840152602081019050611b42565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b8582611b23565b611b8f8185611b2e565b9350611b9f818560208601611b3f565b611ba881611b69565b840191505092915050565b60006020820190508181036000830152611bcd8184611b7a565b905092915050565b6000819050919050565b611be881611bd5565b8114611bf357600080fd5b50565b600081359050611c0581611bdf565b92915050565b600060208284031215611c2157611c20611a5e565b5b6000611c2f84828501611bf6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c6382611c38565b9050919050565b611c7381611c58565b82525050565b6000602082019050611c8e6000830184611c6a565b92915050565b611c9d81611c58565b8114611ca857600080fd5b50565b600081359050611cba81611c94565b92915050565b60008060408385031215611cd757611cd6611a5e565b5b6000611ce585828601611cab565b9250506020611cf685828601611bf6565b9150509250929050565b600080600060608486031215611d1957611d18611a5e565b5b6000611d2786828701611cab565b9350506020611d3886828701611cab565b9250506040611d4986828701611bf6565b9150509250925092565b600060208284031215611d6957611d68611a5e565b5b6000611d7784828501611cab565b91505092915050565b611d8981611bd5565b82525050565b6000602082019050611da46000830184611d80565b92915050565b611db381611aed565b8114611dbe57600080fd5b50565b600081359050611dd081611daa565b92915050565b60008060408385031215611ded57611dec611a5e565b5b6000611dfb85828601611cab565b9250506020611e0c85828601611dc1565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611e5882611b69565b810181811067ffffffffffffffff82111715611e7757611e76611e20565b5b80604052505050565b6000611e8a611a54565b9050611e968282611e4f565b919050565b600067ffffffffffffffff821115611eb657611eb5611e20565b5b611ebf82611b69565b9050602081019050919050565b82818337600083830152505050565b6000611eee611ee984611e9b565b611e80565b905082815260208101848484011115611f0a57611f09611e1b565b5b611f15848285611ecc565b509392505050565b600082601f830112611f3257611f31611e16565b5b8135611f42848260208601611edb565b91505092915050565b60008060008060808587031215611f6557611f64611a5e565b5b6000611f7387828801611cab565b9450506020611f8487828801611cab565b9350506040611f9587828801611bf6565b925050606085013567ffffffffffffffff811115611fb657611fb5611a63565b5b611fc287828801611f1d565b91505092959194509250565b600067ffffffffffffffff821115611fe957611fe8611e20565b5b611ff282611b69565b9050602081019050919050565b600061201261200d84611fce565b611e80565b90508281526020810184848401111561202e5761202d611e1b565b5b612039848285611ecc565b509392505050565b600082601f83011261205657612055611e16565b5b8135612066848260208601611fff565b91505092915050565b6000806040838503121561208657612085611a5e565b5b600061209485828601611cab565b925050602083013567ffffffffffffffff8111156120b5576120b4611a63565b5b6120c185828601612041565b9150509250929050565b600080604083850312156120e2576120e1611a5e565b5b60006120f085828601611cab565b925050602061210185828601611cab565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061215257607f821691505b6020821081036121655761216461210b565b5b50919050565b60006060820190506121806000830186611c6a565b61218d6020830185611d80565b61219a6040830184611c6a565b949350505050565b600081905092915050565b60006121b882611b23565b6121c281856121a2565b93506121d2818560208601611b3f565b80840191505092915050565b60006121ea82856121ad565b91506121f682846121ad565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061223c82611bd5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361226e5761226d612202565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b60006122a082612279565b6122aa8185612284565b93506122ba818560208601611b3f565b6122c381611b69565b840191505092915050565b60006080820190506122e36000830187611c6a565b6122f06020830186611c6a565b6122fd6040830185611d80565b818103606083015261230f8184612295565b905095945050505050565b60008151905061232981611a94565b92915050565b60006020828403121561234557612344611a5e565b5b60006123538482850161231a565b91505092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026123be7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612381565b6123c88683612381565b95508019841693508086168417925050509392505050565b6000819050919050565b60006124056124006123fb84611bd5565b6123e0565b611bd5565b9050919050565b6000819050919050565b61241f836123ea565b61243361242b8261240c565b84845461238e565b825550505050565b600090565b61244861243b565b612453818484612416565b505050565b5b818110156124775761246c600082612440565b600181019050612459565b5050565b601f8211156124bc5761248d8161235c565b61249684612371565b810160208510156124a5578190505b6124b96124b185612371565b830182612458565b50505b505050565b600082821c905092915050565b60006124df600019846008026124c1565b1980831691505092915050565b60006124f883836124ce565b9150826002028217905092915050565b61251182611b23565b67ffffffffffffffff81111561252a57612529611e20565b5b612534825461213a565b61253f82828561247b565b600060209050601f8311600181146125725760008415612560578287015190505b61256a85826124ec565b8655506125d2565b601f1984166125808661235c565b60005b828110156125a857848901518255600182019150602085019450602081019050612583565b868310156125c557848901516125c1601f8916826124ce565b8355505b6001600288020188555050505b505050505050565b60006040820190506125ef6000830185611c6a565b6125fc6020830184611d80565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea26469706673582212206d9437b34b7e40388817f98040c190d0102e6155e41957f8fd80826219222d2364736f6c63430008180033