60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c908051906020019062000051929190620003b2565b5066354a6ba7a18000600d55661c6bf526340000600e55612710600f5560326010556000601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff021916908315150217905550348015620000b657600080fd5b506040518060400160405280601a81526020017f5448454348494c444f46474f444d494e445345544b494c4c45520000000000008152506040518060400160405280600581526020017f47444d535400000000000000000000000000000000000000000000000000000081525081600090805190602001906200013b929190620003b2565b50806001908051906020019062000154929190620003b2565b505050620001776200016b620001d160201b60201c565b620001d960201b60201c565b620001a160405180606001604052806036815260200162004e2c603691396200029f60201b60201c565b620001cb6040518060600160405280602e815260200162004dfe602e9139620002cb60201b60201c565b6200054a565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002af620002f760201b60201c565b80600b9080519060200190620002c7929190620003b2565b5050565b620002db620002f760201b60201c565b8060129080519060200190620002f3929190620003b2565b5050565b62000307620001d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200032d6200038860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000386576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037d9062000489565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003c090620004bc565b90600052602060002090601f016020900481019282620003e4576000855562000430565b82601f10620003ff57805160ff191683800117855562000430565b8280016001018555821562000430579182015b828111156200042f57825182559160200191906001019062000412565b5b5090506200043f919062000443565b5090565b5b808211156200045e57600081600090555060010162000444565b5090565b600062000471602083620004ab565b91506200047e8262000521565b602082019050919050565b60006020820190508181036000830152620004a48162000462565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620004d557607f821691505b60208210811415620004ec57620004eb620004f2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6148a4806200055a6000396000f3fe60806040526004361061027d5760003560e01c806355f804b31161014f578063a475b5dd116100c1578063d936547e1161007a578063d936547e14610968578063da3ef23f146109a5578063e985e9c5146109ce578063ed931e1714610a0b578063f2c4ce1e14610a34578063f2fde38b14610a5d5761027d565b8063a475b5dd1461086c578063b2f3e85e14610883578063b88d4fde146108ac578063c6682862146108d5578063c87b56dd14610900578063d5abeb011461093d5761027d565b8063715018a611610113578063715018a6146107845780637f00c7a61461079b5780638da5cb5b146107c45780638fdcf942146107ef57806395d89b4114610818578063a22cb465146108435761027d565b806355f804b31461068b5780635c975abb146106b45780636352211e146106df5780636c0360eb1461071c57806370a08231146107475761027d565b80632f745c59116101f3578063438b6300116101ac578063438b63001461056b57806344a0d68a146105a85780634a4c560d146105d15780634f6ccce7146105fa5780635183022714610637578063546857c7146106625761027d565b80632f745c591461047957806330b2264e146104b657806330cc7ae0146104f35780633ccfd60b1461051c57806340c10f191461052657806342842e0e146105425761027d565b8063095ea7b311610245578063095ea7b31461037b57806313faede6146103a457806318160ddd146103cf578063239c70ae146103fa57806323b872dd146104255780632a23d07d1461044e5761027d565b806301ffc9a71461028257806302329a29146102bf57806306fdde03146102e8578063081812fc14610313578063081c8c4414610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a4919061365a565b610a86565b6040516102b69190613c43565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e1919061362d565b610b00565b005b3480156102f457600080fd5b506102fd610b25565b60405161030a9190613c5e565b60405180910390f35b34801561031f57600080fd5b5061033a600480360381019061033591906136fd565b610bb7565b6040516103479190613bba565b60405180910390f35b34801561035c57600080fd5b50610365610bfd565b6040516103729190613c5e565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d91906135bf565b610c8b565b005b3480156103b057600080fd5b506103b9610da3565b6040516103c69190613ea0565b60405180910390f35b3480156103db57600080fd5b506103e4610da9565b6040516103f19190613ea0565b60405180910390f35b34801561040657600080fd5b5061040f610db6565b60405161041c9190613ea0565b60405180910390f35b34801561043157600080fd5b5061044c600480360381019061044791906134a9565b610dbc565b005b34801561045a57600080fd5b50610463610e1c565b6040516104709190613ea0565b60405180910390f35b34801561048557600080fd5b506104a0600480360381019061049b91906135bf565b610e22565b6040516104ad9190613ea0565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d8919061343c565b610ec7565b6040516104ea9190613c43565b60405180910390f35b3480156104ff57600080fd5b5061051a6004803603810190610515919061343c565b610ee7565b005b610524610f4a565b005b610540600480360381019061053b91906135bf565b610fcb565b005b34801561054e57600080fd5b50610569600480360381019061056491906134a9565b611189565b005b34801561057757600080fd5b50610592600480360381019061058d919061343c565b6111a9565b60405161059f9190613c21565b60405180910390f35b3480156105b457600080fd5b506105cf60048036038101906105ca91906136fd565b611257565b005b3480156105dd57600080fd5b506105f860048036038101906105f3919061343c565b611269565b005b34801561060657600080fd5b50610621600480360381019061061c91906136fd565b6112cc565b60405161062e9190613ea0565b60405180910390f35b34801561064357600080fd5b5061064c61133d565b6040516106599190613c43565b60405180910390f35b34801561066e57600080fd5b50610689600480360381019061068491906135ff565b611350565b005b34801561069757600080fd5b506106b260048036038101906106ad91906136b4565b6113ea565b005b3480156106c057600080fd5b506106c961140c565b6040516106d69190613c43565b60405180910390f35b3480156106eb57600080fd5b50610706600480360381019061070191906136fd565b61141f565b6040516107139190613bba565b60405180910390f35b34801561072857600080fd5b506107316114a6565b60405161073e9190613c5e565b60405180910390f35b34801561075357600080fd5b5061076e6004803603810190610769919061343c565b611534565b60405161077b9190613ea0565b60405180910390f35b34801561079057600080fd5b506107996115ec565b005b3480156107a757600080fd5b506107c260048036038101906107bd91906136fd565b611600565b005b3480156107d057600080fd5b506107d9611612565b6040516107e69190613bba565b60405180910390f35b3480156107fb57600080fd5b50610816600480360381019061081191906136fd565b61163c565b005b34801561082457600080fd5b5061082d61164e565b60405161083a9190613c5e565b60405180910390f35b34801561084f57600080fd5b5061086a6004803603810190610865919061357f565b6116e0565b005b34801561087857600080fd5b506108816116f6565b005b34801561088f57600080fd5b506108aa60048036038101906108a5919061343c565b61171b565b005b3480156108b857600080fd5b506108d360048036038101906108ce91906134fc565b61177e565b005b3480156108e157600080fd5b506108ea6117e0565b6040516108f79190613c5e565b60405180910390f35b34801561090c57600080fd5b50610927600480360381019061092291906136fd565b61186e565b6040516109349190613c5e565b60405180910390f35b34801561094957600080fd5b506109526119c7565b60405161095f9190613ea0565b60405180910390f35b34801561097457600080fd5b5061098f600480360381019061098a919061343c565b6119cd565b60405161099c9190613c43565b60405180910390f35b3480156109b157600080fd5b506109cc60048036038101906109c791906136b4565b6119ed565b005b3480156109da57600080fd5b506109f560048036038101906109f09190613469565b611a0f565b604051610a029190613c43565b60405180910390f35b348015610a1757600080fd5b50610a326004803603810190610a2d919061343c565b611aa3565b005b348015610a4057600080fd5b50610a5b6004803603810190610a5691906136b4565b611b06565b005b348015610a6957600080fd5b50610a846004803603810190610a7f919061343c565b611b28565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af95750610af882611bac565b5b9050919050565b610b08611c8e565b80601160006101000a81548160ff02191690831515021790555050565b606060008054610b349061419e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b609061419e565b8015610bad5780601f10610b8257610100808354040283529160200191610bad565b820191906000526020600020905b815481529060010190602001808311610b9057829003601f168201915b5050505050905090565b6000610bc282611d0c565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60128054610c0a9061419e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c369061419e565b8015610c835780601f10610c5857610100808354040283529160200191610c83565b820191906000526020600020905b815481529060010190602001808311610c6657829003601f168201915b505050505081565b6000610c968261141f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfe90613e20565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d26611d57565b73ffffffffffffffffffffffffffffffffffffffff161480610d555750610d5481610d4f611d57565b611a0f565b5b610d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8b90613e40565b60405180910390fd5b610d9e8383611d5f565b505050565b600d5481565b6000600880549050905090565b60105481565b610dcd610dc7611d57565b82611e18565b610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0390613c80565b60405180910390fd5b610e17838383611ead565b505050565b600e5481565b6000610e2d83611534565b8210610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590613ca0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b610eef611c8e565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610f52611c8e565b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610f7890613ba5565b60006040518083038185875af1925050503d8060008114610fb5576040519150601f19603f3d011682016040523d82523d6000602084013e610fba565b606091505b5050905080610fc857600080fd5b50565b6000610fd5610da9565b9050601160009054906101000a900460ff1615610ff157600080fd5b60008211610ffe57600080fd5b60105482111561100d57600080fd5b600f54828261101c9190614004565b111561102757600080fd5b61102f611612565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461114d5760011515601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461114c5760011515601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146111305781600d5461111f919061405a565b34101561112b57600080fd5b61114b565b81600e5461113e919061405a565b34101561114a57600080fd5b5b5b5b6000600190505b8281116111835761117084828461116b9190614004565b6121a7565b808061117b90614201565b915050611154565b50505050565b6111a48383836040518060200160405280600081525061177e565b505050565b606060006111b683611534565b905060008167ffffffffffffffff8111156111d4576111d3614335565b5b6040519080825280602002602001820160405280156112025781602001602082028036833780820191505090505b50905060005b8281101561124c5761121a8582610e22565b82828151811061122d5761122c614306565b5b602002602001018181525050808061124490614201565b915050611208565b508092505050919050565b61125f611c8e565b80600d8190555050565b611271611c8e565b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006112d6610da9565b8210611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e90613e60565b60405180910390fd5b6008828154811061132b5761132a614306565b5b90600052602060002001549050919050565b601160019054906101000a900460ff1681565b611358611c8e565b60005b60028110156113e65760016014600084846064811061137d5761137c614306565b5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806113de90614201565b91505061135b565b5050565b6113f2611c8e565b80600b90805190602001906114089291906131be565b5050565b601160009054906101000a900460ff1681565b60008061142b836121c5565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561149d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149490613e00565b60405180910390fd5b80915050919050565b600b80546114b39061419e565b80601f01602080910402602001604051908101604052809291908181526020018280546114df9061419e565b801561152c5780601f106115015761010080835404028352916020019161152c565b820191906000526020600020905b81548152906001019060200180831161150f57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90613d80565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115f4611c8e565b6115fe6000612202565b565b611608611c8e565b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611644611c8e565b80600e8190555050565b60606001805461165d9061419e565b80601f01602080910402602001604051908101604052809291908181526020018280546116899061419e565b80156116d65780601f106116ab576101008083540402835291602001916116d6565b820191906000526020600020905b8154815290600101906020018083116116b957829003601f168201915b5050505050905090565b6116f26116eb611d57565b83836122c8565b5050565b6116fe611c8e565b6001601160016101000a81548160ff021916908315150217905550565b611723611c8e565b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61178f611789611d57565b83611e18565b6117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c590613c80565b60405180910390fd5b6117da84848484612435565b50505050565b600c80546117ed9061419e565b80601f01602080910402602001604051908101604052809291908181526020018280546118199061419e565b80156118665780601f1061183b57610100808354040283529160200191611866565b820191906000526020600020905b81548152906001019060200180831161184957829003601f168201915b505050505081565b606061187982612491565b6118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af90613de0565b60405180910390fd5b60001515601160019054906101000a900460ff161515141561196657601280546118e19061419e565b80601f016020809104026020016040519081016040528092919081815260200182805461190d9061419e565b801561195a5780601f1061192f5761010080835404028352916020019161195a565b820191906000526020600020905b81548152906001019060200180831161193d57829003601f168201915b505050505090506119c2565b60006119706124d2565b9050600081511161199057604051806020016040528060008152506119be565b8061199a84612564565b600c6040516020016119ae93929190613b74565b6040516020818303038152906040525b9150505b919050565b600f5481565b60136020528060005260406000206000915054906101000a900460ff1681565b6119f5611c8e565b80600c9080519060200190611a0b9291906131be565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611aab611c8e565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611b0e611c8e565b8060129080519060200190611b249291906131be565b5050565b611b30611c8e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9790613ce0565b60405180910390fd5b611ba981612202565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c7757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c875750611c868261263c565b5b9050919050565b611c96611d57565b73ffffffffffffffffffffffffffffffffffffffff16611cb4611612565b73ffffffffffffffffffffffffffffffffffffffff1614611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0190613dc0565b60405180910390fd5b565b611d1581612491565b611d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4b90613e00565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611dd28361141f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611e248361141f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e665750611e658185611a0f565b5b80611ea457508373ffffffffffffffffffffffffffffffffffffffff16611e8c84610bb7565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ecd8261141f565b73ffffffffffffffffffffffffffffffffffffffff1614611f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1a90613d00565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8a90613d40565b60405180910390fd5b611fa083838360016126a6565b8273ffffffffffffffffffffffffffffffffffffffff16611fc08261141f565b73ffffffffffffffffffffffffffffffffffffffff1614612016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200d90613d00565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121a28383836001612806565b505050565b6121c182826040518060200160405280600081525061280c565b5050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232e90613d60565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124289190613c43565b60405180910390a3505050565b612440848484611ead565b61244c84848484612867565b61248b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248290613cc0565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166124b3836121c5565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b80546124e19061419e565b80601f016020809104026020016040519081016040528092919081815260200182805461250d9061419e565b801561255a5780601f1061252f5761010080835404028352916020019161255a565b820191906000526020600020905b81548152906001019060200180831161253d57829003601f168201915b5050505050905090565b606060006001612573846129fe565b01905060008167ffffffffffffffff81111561259257612591614335565b5b6040519080825280601f01601f1916602001820160405280156125c45781602001600182028036833780820191505090505b509050600082602001820190505b600115612631578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161261b5761261a614279565b5b049450600085141561262c57612631565b6125d2565b819350505050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6126b284848484612b51565b60018111156126f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ed90613e80565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561273e5761273981612c77565b61277d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461277c5761277b8582612cc0565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156127c0576127bb81612e2d565b6127ff565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146127fe576127fd8482612efe565b5b5b5050505050565b50505050565b6128168383612f7d565b6128236000848484612867565b612862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285990613cc0565b60405180910390fd5b505050565b60006128888473ffffffffffffffffffffffffffffffffffffffff1661319b565b156129f1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128b1611d57565b8786866040518563ffffffff1660e01b81526004016128d39493929190613bd5565b602060405180830381600087803b1580156128ed57600080fd5b505af192505050801561291e57506040513d601f19601f8201168201806040525081019061291b9190613687565b60015b6129a1573d806000811461294e576040519150601f19603f3d011682016040523d82523d6000602084013e612953565b606091505b50600081511415612999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299090613cc0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129f6565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612a5c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612a5257612a51614279565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612a99576d04ee2d6d415b85acef81000000008381612a8f57612a8e614279565b5b0492506020810190505b662386f26fc100008310612ac857662386f26fc100008381612abe57612abd614279565b5b0492506010810190505b6305f5e1008310612af1576305f5e1008381612ae757612ae6614279565b5b0492506008810190505b6127108310612b16576127108381612b0c57612b0b614279565b5b0492506004810190505b60648310612b395760648381612b2f57612b2e614279565b5b0492506002810190505b600a8310612b48576001810190505b80915050919050565b6001811115612c7157600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612be55780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bdd91906140b4565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c705780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c689190614004565b925050819055505b5b50505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ccd84611534565b612cd791906140b4565b9050600060076000848152602001908152602001600020549050818114612dbc576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e4191906140b4565b9050600060096000848152602001908152602001600020549050600060088381548110612e7157612e70614306565b5b906000526020600020015490508060088381548110612e9357612e92614306565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612ee257612ee16142d7565b5b6001900381819060005260206000200160009055905550505050565b6000612f0983611534565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe490613da0565b60405180910390fd5b612ff681612491565b15613036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302d90613d20565b60405180910390fd5b6130446000838360016126a6565b61304d81612491565b1561308d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308490613d20565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613197600083836001612806565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546131ca9061419e565b90600052602060002090601f0160209004810192826131ec5760008555613233565b82601f1061320557805160ff1916838001178555613233565b82800160010185558215613233579182015b82811115613232578251825591602001919060010190613217565b5b5090506132409190613244565b5090565b5b8082111561325d576000816000905550600101613245565b5090565b600061327461326f84613ee0565b613ebb565b9050808285602086028201111561328e5761328d614369565b5b60005b858110156132be57816132a4888261334c565b845260208401935060208301925050600181019050613291565b5050509392505050565b60006132db6132d684613f06565b613ebb565b9050828152602081018484840111156132f7576132f661436e565b5b61330284828561415c565b509392505050565b600061331d61331884613f37565b613ebb565b9050828152602081018484840111156133395761333861436e565b5b61334484828561415c565b509392505050565b60008135905061335b81614812565b92915050565b600082601f83011261337657613375614364565b5b6064613383848285613261565b91505092915050565b60008135905061339b81614829565b92915050565b6000813590506133b081614840565b92915050565b6000815190506133c581614840565b92915050565b600082601f8301126133e0576133df614364565b5b81356133f08482602086016132c8565b91505092915050565b600082601f83011261340e5761340d614364565b5b813561341e84826020860161330a565b91505092915050565b60008135905061343681614857565b92915050565b60006020828403121561345257613451614378565b5b60006134608482850161334c565b91505092915050565b600080604083850312156134805761347f614378565b5b600061348e8582860161334c565b925050602061349f8582860161334c565b9150509250929050565b6000806000606084860312156134c2576134c1614378565b5b60006134d08682870161334c565b93505060206134e18682870161334c565b92505060406134f286828701613427565b9150509250925092565b6000806000806080858703121561351657613515614378565b5b60006135248782880161334c565b94505060206135358782880161334c565b935050604061354687828801613427565b925050606085013567ffffffffffffffff81111561356757613566614373565b5b613573878288016133cb565b91505092959194509250565b6000806040838503121561359657613595614378565b5b60006135a48582860161334c565b92505060206135b58582860161338c565b9150509250929050565b600080604083850312156135d6576135d5614378565b5b60006135e48582860161334c565b92505060206135f585828601613427565b9150509250929050565b6000610c80828403121561361657613615614378565b5b600061362484828501613361565b91505092915050565b60006020828403121561364357613642614378565b5b60006136518482850161338c565b91505092915050565b6000602082840312156136705761366f614378565b5b600061367e848285016133a1565b91505092915050565b60006020828403121561369d5761369c614378565b5b60006136ab848285016133b6565b91505092915050565b6000602082840312156136ca576136c9614378565b5b600082013567ffffffffffffffff8111156136e8576136e7614373565b5b6136f4848285016133f9565b91505092915050565b60006020828403121561371357613712614378565b5b600061372184828501613427565b91505092915050565b60006137368383613b56565b60208301905092915050565b61374b816140e8565b82525050565b600061375c82613f8d565b6137668185613fbb565b935061377183613f68565b8060005b838110156137a2578151613789888261372a565b975061379483613fae565b925050600181019050613775565b5085935050505092915050565b6137b8816140fa565b82525050565b60006137c982613f98565b6137d38185613fcc565b93506137e381856020860161416b565b6137ec8161437d565b840191505092915050565b600061380282613fa3565b61380c8185613fe8565b935061381c81856020860161416b565b6138258161437d565b840191505092915050565b600061383b82613fa3565b6138458185613ff9565b935061385581856020860161416b565b80840191505092915050565b6000815461386e8161419e565b6138788186613ff9565b9450600182166000811461389357600181146138a4576138d7565b60ff198316865281860193506138d7565b6138ad85613f78565b60005b838110156138cf578154818901526001820191506020810190506138b0565b838801955050505b50505092915050565b60006138ed602d83613fe8565b91506138f88261438e565b604082019050919050565b6000613910602b83613fe8565b915061391b826143dd565b604082019050919050565b6000613933603283613fe8565b915061393e8261442c565b604082019050919050565b6000613956602683613fe8565b91506139618261447b565b604082019050919050565b6000613979602583613fe8565b9150613984826144ca565b604082019050919050565b600061399c601c83613fe8565b91506139a782614519565b602082019050919050565b60006139bf602483613fe8565b91506139ca82614542565b604082019050919050565b60006139e2601983613fe8565b91506139ed82614591565b602082019050919050565b6000613a05602983613fe8565b9150613a10826145ba565b604082019050919050565b6000613a28602083613fe8565b9150613a3382614609565b602082019050919050565b6000613a4b602083613fe8565b9150613a5682614632565b602082019050919050565b6000613a6e602f83613fe8565b9150613a798261465b565b604082019050919050565b6000613a91601883613fe8565b9150613a9c826146aa565b602082019050919050565b6000613ab4602183613fe8565b9150613abf826146d3565b604082019050919050565b6000613ad7600083613fdd565b9150613ae282614722565b600082019050919050565b6000613afa603d83613fe8565b9150613b0582614725565b604082019050919050565b6000613b1d602c83613fe8565b9150613b2882614774565b604082019050919050565b6000613b40603583613fe8565b9150613b4b826147c3565b604082019050919050565b613b5f81614152565b82525050565b613b6e81614152565b82525050565b6000613b808286613830565b9150613b8c8285613830565b9150613b988284613861565b9150819050949350505050565b6000613bb082613aca565b9150819050919050565b6000602082019050613bcf6000830184613742565b92915050565b6000608082019050613bea6000830187613742565b613bf76020830186613742565b613c046040830185613b65565b8181036060830152613c1681846137be565b905095945050505050565b60006020820190508181036000830152613c3b8184613751565b905092915050565b6000602082019050613c5860008301846137af565b92915050565b60006020820190508181036000830152613c7881846137f7565b905092915050565b60006020820190508181036000830152613c99816138e0565b9050919050565b60006020820190508181036000830152613cb981613903565b9050919050565b60006020820190508181036000830152613cd981613926565b9050919050565b60006020820190508181036000830152613cf981613949565b9050919050565b60006020820190508181036000830152613d198161396c565b9050919050565b60006020820190508181036000830152613d398161398f565b9050919050565b60006020820190508181036000830152613d59816139b2565b9050919050565b60006020820190508181036000830152613d79816139d5565b9050919050565b60006020820190508181036000830152613d99816139f8565b9050919050565b60006020820190508181036000830152613db981613a1b565b9050919050565b60006020820190508181036000830152613dd981613a3e565b9050919050565b60006020820190508181036000830152613df981613a61565b9050919050565b60006020820190508181036000830152613e1981613a84565b9050919050565b60006020820190508181036000830152613e3981613aa7565b9050919050565b60006020820190508181036000830152613e5981613aed565b9050919050565b60006020820190508181036000830152613e7981613b10565b9050919050565b60006020820190508181036000830152613e9981613b33565b9050919050565b6000602082019050613eb56000830184613b65565b92915050565b6000613ec5613ed6565b9050613ed182826141d0565b919050565b6000604051905090565b600067ffffffffffffffff821115613efb57613efa614335565b5b602082029050919050565b600067ffffffffffffffff821115613f2157613f20614335565b5b613f2a8261437d565b9050602081019050919050565b600067ffffffffffffffff821115613f5257613f51614335565b5b613f5b8261437d565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061400f82614152565b915061401a83614152565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561404f5761404e61424a565b5b828201905092915050565b600061406582614152565b915061407083614152565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140a9576140a861424a565b5b828202905092915050565b60006140bf82614152565b91506140ca83614152565b9250828210156140dd576140dc61424a565b5b828203905092915050565b60006140f382614132565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561418957808201518184015260208101905061416e565b83811115614198576000848401525b50505050565b600060028204905060018216806141b657607f821691505b602082108114156141ca576141c96142a8565b5b50919050565b6141d98261437d565b810181811067ffffffffffffffff821117156141f8576141f7614335565b5b80604052505050565b600061420c82614152565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561423f5761423e61424a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b61481b816140e8565b811461482657600080fd5b50565b614832816140fa565b811461483d57600080fd5b50565b61484981614106565b811461485457600080fd5b50565b61486081614152565b811461486b57600080fd5b5056fea2646970667358221220acc1bd581c5d7d7f92900433a7ad5d5f62a219721de08a5aa0d07fc39b0c212764736f6c63430008070033516d5346516a367642357351624d7632527347335946454e7a387441384a6b467a414c56476e6869364a4778624e697066733a2f2f516d5878713848376e5747774132396952434c6746453338446755455450376862796739446e4c7a416b345858382f