60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90816200004a91906200074b565b506032600d5561025d600e556001600f5567016345785d8a00006010556000601560006101000a81548160ff0219169083151502179055503480156200008f57600080fd5b50604051620051b6380380620051b68339818101604052810190620000b59190620008e5565b6040518060400160405280601781526020017f53616c7661746f72204d756e6469204f726967696e616c0000000000000000008152506040518060400160405280601781526020017f53616c7661746f72204d756e6469204f726967696e616c00000000000000000081525081600290816200013291906200074b565b5080600390816200014491906200074b565b5062000155620001c260201b60201c565b60008190555050506200017d62000171620001cb60201b60201c565b620001d360201b60201c565b6200018d6200029960201b60201c565b6001601260006101000a81548160ff021916908315150217905550620001ba8282620002c260201b60201c565b505062000a47565b60006001905090565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002c0733cc6cdda760b79bafa08df41ecfa224f810dceb660016200046560201b60201c565b565b620002d2620004c760201b60201c565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff16111562000333576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200032a90620009b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620003a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200039c9062000a25565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600860008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b637d3e3dbe8260601b60601c9250816200049457826200048c57634420e486905062000494565b63a0af290390505b8060e01b600052306004528260245260008060446000806daaeb6d7670e522a718067333cd4e5af1506000602452505050565b6000612710905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200055357607f821691505b6020821081036200056957620005686200050b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005d37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000594565b620005df868362000594565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200062c620006266200062084620005f7565b62000601565b620005f7565b9050919050565b6000819050919050565b62000648836200060b565b62000660620006578262000633565b848454620005a1565b825550505050565b600090565b6200067762000668565b620006848184846200063d565b505050565b5b81811015620006ac57620006a06000826200066d565b6001810190506200068a565b5050565b601f821115620006fb57620006c5816200056f565b620006d08462000584565b81016020851015620006e0578190505b620006f8620006ef8562000584565b83018262000689565b50505b505050565b600082821c905092915050565b6000620007206000198460080262000700565b1980831691505092915050565b60006200073b83836200070d565b9150826002028217905092915050565b6200075682620004d1565b67ffffffffffffffff811115620007725762000771620004dc565b5b6200077e82546200053a565b6200078b828285620006b0565b600060209050601f831160018114620007c35760008415620007ae578287015190505b620007ba85826200072d565b8655506200082a565b601f198416620007d3866200056f565b60005b82811015620007fd57848901518255600182019150602085019450602081019050620007d6565b868310156200081d578489015162000819601f8916826200070d565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620008648262000837565b9050919050565b620008768162000857565b81146200088257600080fd5b50565b60008151905062000896816200086b565b92915050565b60006bffffffffffffffffffffffff82169050919050565b620008bf816200089c565b8114620008cb57600080fd5b50565b600081519050620008df81620008b4565b92915050565b60008060408385031215620008ff57620008fe62000832565b5b60006200090f8582860162000885565b92505060206200092285828601620008ce565b9150509250929050565b600082825260208201905092915050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b60006200099b602a836200092c565b9150620009a8826200093d565b604082019050919050565b60006020820190508181036000830152620009ce816200098c565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b600062000a0d6019836200092c565b915062000a1a82620009d5565b602082019050919050565b6000602082019050818103600083015262000a4081620009fe565b9050919050565b61475f8062000a576000396000f3fe6080604052600436106102885760003560e01c8063715018a61161015a578063c1e1ce29116100c1578063dc33e6811161007a578063dc33e68114610988578063e75179a4146109c5578063e985e9c5146109ee578063f2fde38b14610a2b578063f4a0a52814610a54578063fb796e6c14610a7d57610288565b8063c1e1ce2914610878578063c21b471b146108a3578063c6682862146108cc578063c6ab67a3146108f7578063c87b56dd14610922578063da3ef23f1461095f57610288565b8063a810e6ff11610113578063a810e6ff14610765578063aa592f251461078e578063b629f192146107b9578063b7c0b8e8146107f6578063b88d4fde1461081f578063bbadfe761461083b57610288565b8063715018a61461067b57806378acea1e146106925780638342083a146106bb5780638da5cb5b146106e657806395d89b4114610711578063a22cb4651461073c57610288565b80633418f565116101fe578063559c55b9116101b7578063559c55b91461055957806355f804b314610582578063601e5e77146105ab5780636352211e146105d65780636817c76c1461061357806370a082311461063e57610288565b80633418f5651461047b57806334531828146104b85780633ccfd60b146104e1578063402c3856146104f857806342842e0e1461051457806348c5bdaa1461053057610288565b80631096952311610250578063109695231461037957806318160ddd146103a257806323b872dd146103cd57806326aa420a146103e95780632a55205a1461041257806332cb6b0c1461045057610288565b806301ffc9a71461028d578063066453df146102ca57806306fdde03146102f5578063081812fc14610320578063095ea7b31461035d575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af91906131c2565b610aa8565b6040516102c1919061320a565b60405180910390f35b3480156102d657600080fd5b506102df610aca565b6040516102ec919061323e565b60405180910390f35b34801561030157600080fd5b5061030a610ad0565b60405161031791906132e9565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613337565b610b62565b60405161035491906133a5565b60405180910390f35b610377600480360381019061037291906133ec565b610be1565b005b34801561038557600080fd5b506103a0600480360381019061039b9190613491565b610c50565b005b3480156103ae57600080fd5b506103b7610d6f565b6040516103c4919061323e565b60405180910390f35b6103e760048036038101906103e291906134de565b610d86565b005b3480156103f557600080fd5b50610410600480360381019061040b9190613337565b610dff565b005b34801561041e57600080fd5b5061043960048036038101906104349190613531565b610e11565b604051610447929190613571565b60405180910390f35b34801561045c57600080fd5b50610465610ffb565b604051610472919061323e565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d919061359a565b611001565b6040516104af919061323e565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da91906131c2565b611019565b005b3480156104ed57600080fd5b506104f661108e565b005b610512600480360381019061050d91906135f3565b61113c565b005b61052e600480360381019061052991906134de565b611488565b005b34801561053c57600080fd5b5061055760048036038101906105529190613337565b611501565b005b34801561056557600080fd5b50610580600480360381019061057b9190613337565b611513565b005b34801561058e57600080fd5b506105a960048036038101906105a49190613491565b611525565b005b3480156105b757600080fd5b506105c06115fc565b6040516105cd919061323e565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190613337565b611602565b60405161060a91906133a5565b60405180910390f35b34801561061f57600080fd5b50610628611614565b604051610635919061323e565b60405180910390f35b34801561064a57600080fd5b506106656004803603810190610660919061359a565b61161a565b604051610672919061323e565b60405180910390f35b34801561068757600080fd5b506106906116d2565b005b34801561069e57600080fd5b506106b960048036038101906106b49190613646565b6116e6565b005b3480156106c757600080fd5b506106d061170b565b6040516106dd919061323e565b60405180910390f35b3480156106f257600080fd5b506106fb611711565b60405161070891906133a5565b60405180910390f35b34801561071d57600080fd5b5061072661173b565b60405161073391906132e9565b60405180910390f35b34801561074857600080fd5b50610763600480360381019061075e9190613673565b6117cd565b005b34801561077157600080fd5b5061078c6004803603810190610787919061359a565b61183c565b005b34801561079a57600080fd5b506107a3611965565b6040516107b0919061323e565b60405180910390f35b3480156107c557600080fd5b506107e060048036038101906107db919061359a565b61196a565b6040516107ed919061320a565b60405180910390f35b34801561080257600080fd5b5061081d60048036038101906108189190613646565b61198a565b005b610839600480360381019061083491906137e3565b611a68565b005b34801561084757600080fd5b50610862600480360381019061085d91906131c2565b611ae3565b60405161086f919061320a565b60405180910390f35b34801561088457600080fd5b5061088d611b03565b60405161089a919061320a565b60405180910390f35b3480156108af57600080fd5b506108ca60048036038101906108c591906138aa565b611b16565b005b3480156108d857600080fd5b506108e1611b2c565b6040516108ee91906132e9565b60405180910390f35b34801561090357600080fd5b5061090c611bba565b60405161091991906132e9565b60405180910390f35b34801561092e57600080fd5b5061094960048036038101906109449190613337565b611c48565b60405161095691906132e9565b60405180910390f35b34801561096b57600080fd5b506109866004803603810190610981919061398b565b611cf2565b005b34801561099457600080fd5b506109af60048036038101906109aa919061359a565b611d0d565b6040516109bc919061323e565b60405180910390f35b3480156109d157600080fd5b506109ec60048036038101906109e7919061359a565b611d1f565b005b3480156109fa57600080fd5b50610a156004803603810190610a1091906139d4565b611e2f565b604051610a22919061320a565b60405180910390f35b348015610a3757600080fd5b50610a526004803603810190610a4d919061359a565b611ec3565b005b348015610a6057600080fd5b50610a7b6004803603810190610a769190613337565b611f46565b005b348015610a8957600080fd5b50610a92611f58565b604051610a9f919061320a565b60405180910390f35b6000610ab382611f6b565b80610ac35750610ac282611ffd565b5b9050919050565b600f5481565b606060028054610adf90613a43565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0b90613a43565b8015610b585780601f10610b2d57610100808354040283529160200191610b58565b820191906000526020600020905b815481529060010190602001808311610b3b57829003601f168201915b5050505050905090565b6000610b6d82612077565b610ba3576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81601260009054906101000a900460ff168015610c405769c617113400112233445560005230601a528160601b60601c603a52600080604460166daaeb6d7670e522a718067333cd4e5afa610c3a573d6000803e3d6000fd5b6000603a525b610c4a84846120d6565b50505050565b6013600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615610d09576040517f8bf9b99f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d1161221a565b600060118054610d2090613a43565b905014610d59576040517f19e24c1100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818160119182610d6a929190613c2b565b505050565b6000610d79612298565b6001546000540303905090565b82601260009054906101000a900460ff168015610ded57338260601b60601c14610dec5769c617113400112233445560005230601a5233603a52600080604460166daaeb6d7670e522a718067333cd4e5afa610de6573d6000803e3d6000fd5b6000603a525b5b610df88585856122a1565b5050505050565b610e0761221a565b80600e8190555050565b6000806000600960008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610fa65760086040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610fb06125c3565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610fdc9190613d2a565b610fe69190613d9b565b90508160000151819350935050509250929050565b61029481565b60146020528060005260406000206000915090505481565b61102161221a565b600160136000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61109661221a565b60003373ffffffffffffffffffffffffffffffffffffffff16476040516110bc90613dfd565b60006040518083038185875af1925050503d80600081146110f9576040519150601f19603f3d011682016040523d82523d6000602084013e6110fe565b606091505b5050905080611139576040517f750b219c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600e54821115611181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117890613e5e565b60405180910390fd5b60011515601560009054906101000a900460ff161515146111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce90613eca565b60405180910390fd5b600f5482111561121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121390613f5c565b60405180910390fd5b600f5482601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461126a9190613f7c565b11156112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290614022565b60405180910390fd5b610294826112b76125cd565b6112c19190613f7c565b1115611302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f99061408e565b60405180910390fd5b6000601054836113129190613d2a565b905080341015611357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134e906140fa565b60405180910390fd5b61136184846125e0565b82600e6000828254611373919061411a565b9250508190555082601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113c99190613f7c565b9250508190555081601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080341115611482573373ffffffffffffffffffffffffffffffffffffffff166108fc8234611455919061411a565b9081150290604051600060405180830381858888f19350505050158015611480573d6000803e3d6000fd5b505b50505050565b82601260009054906101000a900460ff1680156114ef57338260601b60601c146114ee5769c617113400112233445560005230601a5233603a52600080604460166daaeb6d7670e522a718067333cd4e5afa6114e8573d6000803e3d6000fd5b6000603a525b5b6114fa85858561279b565b5050505050565b61150961221a565b80600f8190555050565b61151b61221a565b80600d8190555050565b6013600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16156115de576040517f8bf9b99f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115e661221a565b8181600b91826115f7929190613c2b565b505050565b600d5481565b600061160d826127bb565b9050919050565b60105481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611681576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6116da61221a565b6116e46000612887565b565b6116ee61221a565b80601560006101000a81548160ff02191690831515021790555050565b600e5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461174a90613a43565b80601f016020809104026020016040519081016040528092919081815260200182805461177690613a43565b80156117c35780601f10611798576101008083540402835291602001916117c3565b820191906000526020600020905b8154815290600101906020018083116117a657829003601f168201915b5050505050905090565b81601260009054906101000a900460ff16801561182c5769c617113400112233445560005230601a528160601b60601c603a52600080604460166daaeb6d7670e522a718067333cd4e5afa611826573d6000803e3d6000fd5b6000603a525b611836848461294d565b50505050565b6013600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16156118f5576040517f8bf9b99f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118fd61221a565b610294600d5461190b6125cd565b6119159190613f7c565b1115611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d9061408e565b60405180910390fd5b61196281600d546125e0565b50565b600581565b60166020528060005260406000206000915054906101000a900460ff1681565b6013600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615611a43576040517f8bf9b99f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a4b61221a565b80601260006101000a81548160ff02191690831515021790555050565b83601260009054906101000a900460ff168015611acf57338260601b60601c14611ace5769c617113400112233445560005230601a5233603a52600080604460166daaeb6d7670e522a718067333cd4e5afa611ac8573d6000803e3d6000fd5b6000603a525b5b611adb86868686612a58565b505050505050565b60136020528060005260406000206000915054906101000a900460ff1681565b601560009054906101000a900460ff1681565b611b1e61221a565b611b288282612acb565b5050565b600c8054611b3990613a43565b80601f0160208091040260200160405190810160405280929190818152602001828054611b6590613a43565b8015611bb25780601f10611b8757610100808354040283529160200191611bb2565b820191906000526020600020905b815481529060010190602001808311611b9557829003601f168201915b505050505081565b60118054611bc790613a43565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf390613a43565b8015611c405780601f10611c1557610100808354040283529160200191611c40565b820191906000526020600020905b815481529060010190602001808311611c2357829003601f168201915b505050505081565b6060611c5382612077565b611c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c89906141c0565b60405180910390fd5b6000611c9c612c60565b90506000815111611cbc5760405180602001604052806000815250611cea565b80611cc684612cf2565b600c604051602001611cda9392919061429f565b6040516020818303038152906040525b915050919050565b611cfa61221a565b80600c9081611d0991906142d0565b5050565b6000611d1882612e52565b9050919050565b6013600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615611dd8576040517f8bf9b99f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611de061221a565b6005611dea6125cd565b10611e21576040517f1f0f14ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e2c8160056125e0565b50565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ecb61221a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3190614414565b60405180910390fd5b611f4381612887565b50565b611f4e61221a565b8060108190555050565b601260009054906101000a900460ff1681565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611fc657506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ff65750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612070575061206f82612ea9565b5b9050919050565b600081612082612298565b11158015612091575060005482105b80156120cf575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b60006120e182611602565b90508073ffffffffffffffffffffffffffffffffffffffff16612102612f13565b73ffffffffffffffffffffffffffffffffffffffff16146121655761212e81612129612f13565b611e2f565b612164576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b612222612f1b565b73ffffffffffffffffffffffffffffffffffffffff16612240611711565b73ffffffffffffffffffffffffffffffffffffffff1614612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d90614480565b60405180910390fd5b565b60006001905090565b60006122ac826127bb565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612313576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061231f84612f23565b915091506123358187612330612f13565b612f4a565b6123815761234a86612345612f13565b611e2f565b612380576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036123e7576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123f48686866001612f8e565b80156123ff57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506124cd856124a9888887612f94565b7c020000000000000000000000000000000000000000000000000000000017612fbc565b600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036125535760006001850190506000600460008381526020019081526020016000205403612551576000548114612550578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125bb8686866001612fe7565b505050505050565b6000612710905090565b60006125d7612298565b60005403905090565b60008054905060008203612620576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61262d6000848385612f8e565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506126a4836126956000866000612f94565b61269e85612fed565b17612fbc565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461274557808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460018101905061270a565b5060008203612780576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008190555050506127966000848385612fe7565b505050565b6127b683838360405180602001604052806000815250611a68565b505050565b600080829050806127ca612298565b116128505760005481101561284f5760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082160361284d575b60008103612843576004600083600190039350838152602001908152602001600020549050612819565b8092505050612882565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b806007600061295a612f13565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612a07612f13565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a4c919061320a565b60405180910390a35050565b612a63848484610d86565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612ac557612a8e84848484612ffd565b612ac4576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b612ad36125c3565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115612b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2890614512565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b979061457e565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600860008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6060600b8054612c6f90613a43565b80601f0160208091040260200160405190810160405280929190818152602001828054612c9b90613a43565b8015612ce85780601f10612cbd57610100808354040283529160200191612ce8565b820191906000526020600020905b815481529060010190602001808311612ccb57829003601f168201915b5050505050905090565b606060008203612d39576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e4d565b600082905060005b60008214612d6b578080612d549061459e565b915050600a82612d649190613d9b565b9150612d41565b60008167ffffffffffffffff811115612d8757612d866136b8565b5b6040519080825280601f01601f191660200182016040528015612db95781602001600182028036833780820191505090505b5090505b60008514612e4657600182612dd2919061411a565b9150600a85612de191906145e6565b6030612ded9190613f7c565b60f81b818381518110612e0357612e02614617565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e3f9190613d9b565b9450612dbd565b8093505050505b919050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600033905090565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8612fab86868461314d565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b60006001821460e11b9050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613023612f13565b8786866040518563ffffffff1660e01b8152600401613045949392919061469b565b6020604051808303816000875af192505050801561308157506040513d601f19601f8201168201806040525081019061307e91906146fc565b60015b6130fa573d80600081146130b1576040519150601f19603f3d011682016040523d82523d6000602084013e6130b6565b606091505b5060008151036130f2576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60009392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61319f8161316a565b81146131aa57600080fd5b50565b6000813590506131bc81613196565b92915050565b6000602082840312156131d8576131d7613160565b5b60006131e6848285016131ad565b91505092915050565b60008115159050919050565b613204816131ef565b82525050565b600060208201905061321f60008301846131fb565b92915050565b6000819050919050565b61323881613225565b82525050565b6000602082019050613253600083018461322f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613293578082015181840152602081019050613278565b60008484015250505050565b6000601f19601f8301169050919050565b60006132bb82613259565b6132c58185613264565b93506132d5818560208601613275565b6132de8161329f565b840191505092915050565b6000602082019050818103600083015261330381846132b0565b905092915050565b61331481613225565b811461331f57600080fd5b50565b6000813590506133318161330b565b92915050565b60006020828403121561334d5761334c613160565b5b600061335b84828501613322565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061338f82613364565b9050919050565b61339f81613384565b82525050565b60006020820190506133ba6000830184613396565b92915050565b6133c981613384565b81146133d457600080fd5b50565b6000813590506133e6816133c0565b92915050565b6000806040838503121561340357613402613160565b5b6000613411858286016133d7565b925050602061342285828601613322565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126134515761345061342c565b5b8235905067ffffffffffffffff81111561346e5761346d613431565b5b60208301915083600182028301111561348a57613489613436565b5b9250929050565b600080602083850312156134a8576134a7613160565b5b600083013567ffffffffffffffff8111156134c6576134c5613165565b5b6134d28582860161343b565b92509250509250929050565b6000806000606084860312156134f7576134f6613160565b5b6000613505868287016133d7565b9350506020613516868287016133d7565b925050604061352786828701613322565b9150509250925092565b6000806040838503121561354857613547613160565b5b600061355685828601613322565b925050602061356785828601613322565b9150509250929050565b60006040820190506135866000830185613396565b613593602083018461322f565b9392505050565b6000602082840312156135b0576135af613160565b5b60006135be848285016133d7565b91505092915050565b6135d0816131ef565b81146135db57600080fd5b50565b6000813590506135ed816135c7565b92915050565b60008060006060848603121561360c5761360b613160565b5b600061361a868287016133d7565b935050602061362b86828701613322565b925050604061363c868287016135de565b9150509250925092565b60006020828403121561365c5761365b613160565b5b600061366a848285016135de565b91505092915050565b6000806040838503121561368a57613689613160565b5b6000613698858286016133d7565b92505060206136a9858286016135de565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136f08261329f565b810181811067ffffffffffffffff8211171561370f5761370e6136b8565b5b80604052505050565b6000613722613156565b905061372e82826136e7565b919050565b600067ffffffffffffffff82111561374e5761374d6136b8565b5b6137578261329f565b9050602081019050919050565b82818337600083830152505050565b600061378661378184613733565b613718565b9050828152602081018484840111156137a2576137a16136b3565b5b6137ad848285613764565b509392505050565b600082601f8301126137ca576137c961342c565b5b81356137da848260208601613773565b91505092915050565b600080600080608085870312156137fd576137fc613160565b5b600061380b878288016133d7565b945050602061381c878288016133d7565b935050604061382d87828801613322565b925050606085013567ffffffffffffffff81111561384e5761384d613165565b5b61385a878288016137b5565b91505092959194509250565b60006bffffffffffffffffffffffff82169050919050565b61388781613866565b811461389257600080fd5b50565b6000813590506138a48161387e565b92915050565b600080604083850312156138c1576138c0613160565b5b60006138cf858286016133d7565b92505060206138e085828601613895565b9150509250929050565b600067ffffffffffffffff821115613905576139046136b8565b5b61390e8261329f565b9050602081019050919050565b600061392e613929846138ea565b613718565b90508281526020810184848401111561394a576139496136b3565b5b613955848285613764565b509392505050565b600082601f8301126139725761397161342c565b5b813561398284826020860161391b565b91505092915050565b6000602082840312156139a1576139a0613160565b5b600082013567ffffffffffffffff8111156139bf576139be613165565b5b6139cb8482850161395d565b91505092915050565b600080604083850312156139eb576139ea613160565b5b60006139f9858286016133d7565b9250506020613a0a858286016133d7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a5b57607f821691505b602082108103613a6e57613a6d613a14565b5b50919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613ae17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613aa4565b613aeb8683613aa4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613b28613b23613b1e84613225565b613b03565b613225565b9050919050565b6000819050919050565b613b4283613b0d565b613b56613b4e82613b2f565b848454613ab1565b825550505050565b600090565b613b6b613b5e565b613b76818484613b39565b505050565b5b81811015613b9a57613b8f600082613b63565b600181019050613b7c565b5050565b601f821115613bdf57613bb081613a7f565b613bb984613a94565b81016020851015613bc8578190505b613bdc613bd485613a94565b830182613b7b565b50505b505050565b600082821c905092915050565b6000613c0260001984600802613be4565b1980831691505092915050565b6000613c1b8383613bf1565b9150826002028217905092915050565b613c358383613a74565b67ffffffffffffffff811115613c4e57613c4d6136b8565b5b613c588254613a43565b613c63828285613b9e565b6000601f831160018114613c925760008415613c80578287013590505b613c8a8582613c0f565b865550613cf2565b601f198416613ca086613a7f565b60005b82811015613cc857848901358255600182019150602085019450602081019050613ca3565b86831015613ce55784890135613ce1601f891682613bf1565b8355505b6001600288020188555050505b50505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d3582613225565b9150613d4083613225565b9250828202613d4e81613225565b91508282048414831517613d6557613d64613cfb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613da682613225565b9150613db183613225565b925082613dc157613dc0613d6c565b5b828204905092915050565b600081905092915050565b50565b6000613de7600083613dcc565b9150613df282613dd7565b600082019050919050565b6000613e0882613dda565b9150819050919050565b7f4e465420616d6f756e7420657863656564730000000000000000000000000000600082015250565b6000613e48601283613264565b9150613e5382613e12565b602082019050919050565b60006020820190508181036000830152613e7781613e3b565b9050919050565b7f4d696e74696e67206973206e6f7420796574206f70656e2e0000000000000000600082015250565b6000613eb4601883613264565b9150613ebf82613e7e565b602082019050919050565b60006020820190508181036000830152613ee381613ea7565b9050919050565b7f416d6f756e742045786365656473204d6178696d756d204d696e747320416c6c60008201527f6f77656420506572204163636f756e742e000000000000000000000000000000602082015250565b6000613f46603183613264565b9150613f5182613eea565b604082019050919050565b60006020820190508181036000830152613f7581613f39565b9050919050565b6000613f8782613225565b9150613f9283613225565b9250828201905080821115613faa57613fa9613cfb565b5b92915050565b7f596f752063616e206e6f74206d696e74206d6f7265207468616e204d6178204d60008201527f696e74204c696d69742e00000000000000000000000000000000000000000000602082015250565b600061400c602a83613264565b915061401782613fb0565b604082019050919050565b6000602082019050818103600083015261403b81613fff565b9050919050565b7f45786365656473204d6178696d756d20537570706c7900000000000000000000600082015250565b6000614078601683613264565b915061408382614042565b602082019050919050565b600060208201905081810360008301526140a78161406b565b9050919050565b7f45746865722073656e74206973206e6f7420636f72726563742e000000000000600082015250565b60006140e4601a83613264565b91506140ef826140ae565b602082019050919050565b60006020820190508181036000830152614113816140d7565b9050919050565b600061412582613225565b915061413083613225565b925082820390508181111561414857614147613cfb565b5b92915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006141aa602f83613264565b91506141b58261414e565b604082019050919050565b600060208201905081810360008301526141d98161419d565b9050919050565b600081905092915050565b60006141f682613259565b61420081856141e0565b9350614210818560208601613275565b80840191505092915050565b6000815461422981613a43565b61423381866141e0565b9450600182166000811461424e576001811461426357614296565b60ff1983168652811515820286019350614296565b61426c85613a7f565b60005b8381101561428e5781548189015260018201915060208101905061426f565b838801955050505b50505092915050565b60006142ab82866141eb565b91506142b782856141eb565b91506142c3828461421c565b9150819050949350505050565b6142d982613259565b67ffffffffffffffff8111156142f2576142f16136b8565b5b6142fc8254613a43565b614307828285613b9e565b600060209050601f83116001811461433a5760008415614328578287015190505b6143328582613c0f565b86555061439a565b601f19841661434886613a7f565b60005b828110156143705784890151825560018201915060208501945060208101905061434b565b8683101561438d5784890151614389601f891682613bf1565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006143fe602683613264565b9150614409826143a2565b604082019050919050565b6000602082019050818103600083015261442d816143f1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061446a602083613264565b915061447582614434565b602082019050919050565b600060208201905081810360008301526144998161445d565b9050919050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b60006144fc602a83613264565b9150614507826144a0565b604082019050919050565b6000602082019050818103600083015261452b816144ef565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b6000614568601983613264565b915061457382614532565b602082019050919050565b600060208201905081810360008301526145978161455b565b9050919050565b60006145a982613225565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145db576145da613cfb565b5b600182019050919050565b60006145f182613225565b91506145fc83613225565b92508261460c5761460b613d6c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b600061466d82614646565b6146778185614651565b9350614687818560208601613275565b6146908161329f565b840191505092915050565b60006080820190506146b06000830187613396565b6146bd6020830186613396565b6146ca604083018561322f565b81810360608301526146dc8184614662565b905095945050505050565b6000815190506146f681613196565b92915050565b60006020828403121561471257614711613160565b5b6000614720848285016146e7565b9150509291505056fea26469706673582212205fd919b19bfbff4249241b7fab02253c67f8e3658278511b2d88019c1cc41ce664736f6c63430008130033000000000000000000000000cc1d1872dae0c4a22bd1e243c292eac8bf48839500000000000000000000000000000000000000000000000000000000000003e8