6080604052670de0b6b3a7640000600c5534801561001b575f80fd5b506040516155c93803806155c9833981810160405281019061003d919061020b565b6040518060400160405280601981526020017f4c616e5374656c6c61722050726f706572747920546f6b656e000000000000008152506040518060400160405280600481526020017f4c53505400000000000000000000000000000000000000000000000000000000815250815f90816100b79190610483565b5080600190816100c79190610483565b5050506001600781905550733ec8593f930ea45ea58c968260e6e9ff53fc934f600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050610552565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101da826101b1565b9050919050565b6101ea816101d0565b81146101f4575f80fd5b50565b5f81519050610205816101e1565b92915050565b5f8060408385031215610221576102206101ad565b5b5f61022e858286016101f7565b925050602061023f858286016101f7565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806102c457607f821691505b6020821081036102d7576102d6610280565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103397fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826102fe565b61034386836102fe565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61038761038261037d8461035b565b610364565b61035b565b9050919050565b5f819050919050565b6103a08361036d565b6103b46103ac8261038e565b84845461030a565b825550505050565b5f90565b6103c86103bc565b6103d3818484610397565b505050565b5b818110156103f6576103eb5f826103c0565b6001810190506103d9565b5050565b601f82111561043b5761040c816102dd565b610415846102ef565b81016020851015610424578190505b610438610430856102ef565b8301826103d8565b50505b505050565b5f82821c905092915050565b5f61045b5f1984600802610440565b1980831691505092915050565b5f610473838361044c565b9150826002028217905092915050565b61048c82610249565b67ffffffffffffffff8111156104a5576104a4610253565b5b6104af82546102ad565b6104ba8282856103fa565b5f60209050601f8311600181146104eb575f84156104d9578287015190505b6104e38582610468565b86555061054a565b601f1984166104f9866102dd565b5f5b82811015610520578489015182556001820191506020850194506020810190506104fb565b8683101561053d5784890151610539601f89168261044c565b8355505b6001600288020188555050505b505050505050565b61506a8061055f5f395ff3fe60806040526004361061028a575f3560e01c80636e02007d11610159578063b88d4fde116100c0578063d95bab4d11610079578063d95bab4d14610ab1578063e2ae93fb14610ad9578063e985e9c514610b15578063f37678ae14610b51578063f79d91ae14610b79578063f7b1080814610ba1576102ca565b8063b88d4fde14610997578063b8fe6abe146109bf578063bb1cbf0f146109e9578063bb2b067f14610a25578063c6c9b5b114610a4d578063c87b56dd14610a75576102ca565b806392daac301161011257806392daac301461089f57806395082d25146108c957806395d89b41146108f357806398bdf6f51461091d578063a22cb46514610947578063a772c9271461096f576102ca565b80636e02007d1461075b57806370a0823114610785578063744c2169146107c157806380920718146107fd5780638dec2493146108275780638e383c6b14610863576102ca565b806332665ffb116101fd57806346229798116101b6578063462297981461062d5780634ac80d9714610655578063509bd4ca1461067d5780636352211e146106b957806367973097146106f55780636a1b7ecc14610731576102ca565b806332665ffb1461051557806334bc153f1461055157806338d160111461057957806339ad783b146105a15780633bb3a24d146105c957806342842e0e14610605576102ca565b80630fb6d6d11161024f5780630fb6d6d11461040b57806319bfbaf9146104355780631c9d64371461047157806323b872dd146104ad57806324600fc3146104d55780632b7ac3f3146104eb576102ca565b80620c8df01461030557806301ffc9a71461034157806306fdde031461037d578063081812fc146103a7578063095ea7b3146103e3576102ca565b366102ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c1906139b1565b60405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102fc906139b1565b60405180910390fd5b348015610310575f80fd5b5061032b60048036038101906103269190613a3a565b610be2565b6040516103389190613a7f565b60405180910390f35b34801561034c575f80fd5b5061036760048036038101906103629190613aed565b610c34565b6040516103749190613a7f565b60405180910390f35b348015610388575f80fd5b50610391610c94565b60405161039e9190613b78565b60405180910390f35b3480156103b2575f80fd5b506103cd60048036038101906103c89190613bcb565b610d23565b6040516103da9190613c05565b60405180910390f35b3480156103ee575f80fd5b5061040960048036038101906104049190613c1e565b610d3e565b005b348015610416575f80fd5b5061041f610d54565b60405161042c9190613e12565b60405180910390f35b348015610440575f80fd5b5061045b60048036038101906104569190613bcb565b61100f565b6040516104689190613a7f565b60405180910390f35b34801561047c575f80fd5b5061049760048036038101906104929190613a3a565b61102c565b6040516104a49190613b78565b60405180910390f35b3480156104b8575f80fd5b506104d360048036038101906104ce9190613e32565b6110f9565b005b3480156104e0575f80fd5b506104e96111f8565b005b3480156104f6575f80fd5b506104ff6113fb565b60405161050c9190613edd565b60405180910390f35b348015610520575f80fd5b5061053b60048036038101906105369190613bcb565b611420565b6040516105489190613f7c565b60405180910390f35b34801561055c575f80fd5b50610577600480360381019061057291906140c8565b6115b3565b005b348015610584575f80fd5b5061059f600480360381019061059a9190613a3a565b6116f1565b005b3480156105ac575f80fd5b506105c760048036038101906105c29190614134565b611759565b005b3480156105d4575f80fd5b506105ef60048036038101906105ea9190613bcb565b6117f4565b6040516105fc9190613b78565b60405180910390f35b348015610610575f80fd5b5061062b60048036038101906106269190613e32565b611806565b005b348015610638575f80fd5b50610653600480360381019061064e91906141b8565b611825565b005b348015610660575f80fd5b5061067b60048036038101906106769190613bcb565b61187c565b005b348015610688575f80fd5b506106a3600480360381019061069e9190613a3a565b6118e5565b6040516106b091906141f2565b60405180910390f35b3480156106c4575f80fd5b506106df60048036038101906106da9190613bcb565b61192b565b6040516106ec9190613c05565b60405180910390f35b348015610700575f80fd5b5061071b60048036038101906107169190613a3a565b61193c565b6040516107289190613a7f565b60405180910390f35b34801561073c575f80fd5b50610745611959565b60405161075291906141f2565b60405180910390f35b348015610766575f80fd5b5061076f61195f565b60405161077c91906141f2565b60405180910390f35b348015610790575f80fd5b506107ab60048036038101906107a69190613a3a565b611968565b6040516107b891906141f2565b60405180910390f35b3480156107cc575f80fd5b506107e760048036038101906107e29190613a3a565b611a1e565b6040516107f49190613b78565b60405180910390f35b348015610808575f80fd5b50610811611ab9565b60405161081e919061422b565b60405180910390f35b348015610832575f80fd5b5061084d60048036038101906108489190613a3a565b611ade565b60405161085a9190613a7f565b60405180910390f35b34801561086e575f80fd5b5061088960048036038101906108849190613bcb565b611b30565b604051610896919061425c565b60405180910390f35b3480156108aa575f80fd5b506108b3611b45565b6040516108c091906141f2565b60405180910390f35b3480156108d4575f80fd5b506108dd611b4d565b6040516108ea91906141f2565b60405180910390f35b3480156108fe575f80fd5b50610907611b5a565b6040516109149190613b78565b60405180910390f35b348015610928575f80fd5b50610931611bea565b60405161093e91906141f2565b60405180910390f35b348015610952575f80fd5b5061096d60048036038101906109689190614275565b611bf0565b005b34801561097a575f80fd5b50610995600480360381019061099091906142b3565b611c06565b005b3480156109a2575f80fd5b506109bd60048036038101906109b8919061438f565b6121c6565b005b3480156109ca575f80fd5b506109d36121e3565b6040516109e091906141f2565b60405180910390f35b3480156109f4575f80fd5b50610a0f6004803603810190610a0a9190613bcb565b6121ec565b604051610a1c9190613b78565b60405180910390f35b348015610a30575f80fd5b50610a4b6004803603810190610a46919061440f565b612287565b005b348015610a58575f80fd5b50610a736004803603810190610a6e9190614456565b6122d5565b005b348015610a80575f80fd5b50610a9b6004803603810190610a969190613bcb565b6123f5565b604051610aa89190613b78565b60405180910390f35b348015610abc575f80fd5b50610ad76004803603810190610ad29190614134565b612500565b005b348015610ae4575f80fd5b50610aff6004803603810190610afa9190613a3a565b6125d3565b604051610b0c91906141f2565b60405180910390f35b348015610b20575f80fd5b50610b3b6004803603810190610b3691906144de565b6125e8565b604051610b489190613a7f565b60405180910390f35b348015610b5c575f80fd5b50610b776004803603810190610b7291906140c8565b612676565b005b348015610b84575f80fd5b50610b9f6004803603810190610b9a9190613bcb565b612801565b005b348015610bac575f80fd5b50610bc76004803603810190610bc29190613bcb565b612842565b604051610bd99695949392919061451c565b60405180910390f35b5f600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c8d5750610c8c8261294b565b5b9050919050565b60605f8054610ca2906145af565b80601f0160208091040260200160405190810160405280929190818152602001828054610cce906145af565b8015610d195780601f10610cf057610100808354040283529160200191610d19565b820191905f5260205f20905b815481529060010190602001808311610cfc57829003601f168201915b5050505050905090565b5f610d2d82612a2c565b50610d3782612ab2565b9050919050565b610d508282610d4b612aeb565b612af2565b5050565b60605f600b5490505f80600190505b828111610db357600f5f8281526020019081526020015f2060030160149054906101000a900460ff1615610da0578180610d9c9061460c565b9250505b8080610dab9061460c565b915050610d63565b505f8167ffffffffffffffff811115610dcf57610dce613fa4565b5b604051908082528060200260200182016040528015610e0857816020015b610df56138d2565b815260200190600190039081610ded5790505b5090505f80600190505b84811161100457600f5f8281526020019081526020015f2060030160149054906101000a900460ff1615610ff157600f5f8281526020019081526020015f206040518060c00160405290815f8201548152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201548152602001600382015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820160149054906101000a900460ff16151515158152602001600482018054610f44906145af565b80601f0160208091040260200160405190810160405280929190818152602001828054610f70906145af565b8015610fbb5780601f10610f9257610100808354040283529160200191610fbb565b820191905f5260205f20905b815481529060010190602001808311610f9e57829003601f168201915b505050505081525050838381518110610fd757610fd6614653565b5b60200260200101819052508180610fed9061460c565b9250505b8080610ffc9061460c565b915050610e12565b508194505050505090565b6013602052805f5260405f205f915054906101000a900460ff1681565b606060115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054611076906145af565b80601f01602080910402602001604051908101604052809291908181526020018280546110a2906145af565b80156110ed5780601f106110c4576101008083540402835291602001916110ed565b820191905f5260205f20905b8154815290600101906020018083116110d057829003601f168201915b50505050509050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611169575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016111609190613c05565b60405180910390fd5b5f61117c8383611177612aeb565b612b04565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111f2578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016111e993929190614680565b60405180910390fd5b50505050565b611200612d0f565b5f60105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f8111611283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127a906146ff565b60405180910390fd5b5f60105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b81526004016113239392919061471d565b6020604051808303815f875af115801561133f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113639190614766565b6113a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611399906147db565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040516113e891906141f2565b60405180910390a2506113f9612d55565b565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114286138d2565b600f5f8381526020019081526020015f206040518060c00160405290815f8201548152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201548152602001600382015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820160149054906101000a900460ff1615151515815260200160048201805461152c906145af565b80601f0160208091040260200160405190810160405280929190818152602001828054611558906145af565b80156115a35780601f1061157a576101008083540402835291602001916115a3565b820191905f5260205f20905b81548152906001019060200180831161158657829003601f168201915b5050505050815250509050919050565b823373ffffffffffffffffffffffffffffffffffffffff166115d48261192b565b73ffffffffffffffffffffffffffffffffffffffff161461162a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162190614843565b60405180910390fd5b5f831161166c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611663906148ab565b60405180910390fd5b82600f5f8681526020019081526020015f2060020181905550833373ffffffffffffffffffffffffffffffffffffffff167f169aa9660a76389280a98c8fc5b188ebd06db0f223883cf708b13704942f3a318560018660155f8b81526020019081526020015f206040516116e3949392919061495c565b60405180910390a350505050565b6116f9612d0f565b6001600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611756612d55565b50565b813373ffffffffffffffffffffffffffffffffffffffff1661177a8261192b565b73ffffffffffffffffffffffffffffffffffffffff16146117d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c790614843565b60405180910390fd5b8160155f8581526020019081526020015f2090816117ee9190614b2f565b50505050565b60606117ff826123f5565b9050919050565b61182083838360405180602001604052805f8152506121c6565b505050565b8060165f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60135f8281526020019081526020015f205f9054906101000a900460ff166118d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d090614c48565b60405180910390fd5b6118e281612d5f565b50565b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f61193582612a2c565b9050919050565b6016602052805f5260405f205f915054906101000a900460ff1681565b600c5481565b5f600b54905090565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119d9575f6040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016119d09190613c05565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6011602052805f5260405f205f915090508054611a3a906145af565b80601f0160208091040260200160405190810160405280929190818152602001828054611a66906145af565b8015611ab15780601f10611a8857610100808354040283529160200191611ab1565b820191905f5260205f20905b815481529060010190602001808311611a9457829003601f168201915b505050505081565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6014602052805f5260405f205f915090505481565b6301e1338081565b68056bc75e2d6310000081565b606060018054611b69906145af565b80601f0160208091040260200160405190810160405280929190818152602001828054611b95906145af565b8015611be05780601f10611bb757610100808354040283529160200191611be0565b820191905f5260205f20905b815481529060010190602001808311611bc357829003601f168201915b5050505050905090565b600b5481565b611c02611bfb612aeb565b8383612de1565b5050565b81600f5f8281526020019081526020015f2060030160149054906101000a900460ff16611c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5f90614cb0565b60405180910390fd5b611c70612d0f565b5f600f5f8581526020019081526020015f206040518060c00160405290815f8201548152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201548152602001600382015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820160149054906101000a900460ff16151515158152602001600482018054611d75906145af565b80601f0160208091040260200160405190810160405280929190818152602001828054611da1906145af565b8015611dec5780601f10611dc357610100808354040283529160200191611dec565b820191905f5260205f20905b815481529060010190602001808311611dcf57829003601f168201915b50505050508152505090505f60648260400151611e099190614cfb565b9050808260400151611e1b9190614d2b565b841015611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5490614da8565b60405180910390fd5b808260400151611e6d9190614d2b565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611ec79190613c05565b602060405180830381865afa158015611ee2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f069190614dda565b1015611f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3e90614e4f565b60405180910390fd5b5f84905060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611fa99392919061471d565b6020604051808303815f875af1158015611fc5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fe99190614766565b612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201f906147db565b60405180910390fd5b826040015160105f856020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461207c9190614d2b565b925050819055508160105f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546120cf9190614d2b565b925050819055505f600f5f8881526020019081526020015f2060030160146101000a81548160ff02191690831515021790555061211183602001513388611806565b33600f5f8881526020019081526020015f206001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550853373ffffffffffffffffffffffffffffffffffffffff167f17b4722101958f228ab97d24ff9624947f4ad9586617e0a8d5450f8248e8f57f85604001516040516121ae91906141f2565b60405180910390a35050506121c1612d55565b505050565b6121d18484846110f9565b6121dd84848484612f4a565b50505050565b5f600c54905090565b6015602052805f5260405f205f915090508054612208906145af565b80601f0160208091040260200160405190810160405280929190818152602001828054612234906145af565b801561227f5780601f106122565761010080835404028352916020019161227f565b820191905f5260205f20905b81548152906001019060200180831161226257829003601f168201915b505050505081565b8060115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090816122d19190614b2f565b5050565b600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661235e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235590614eb7565b60405180910390fd5b600b5f8154809291906123709061460c565b91905055505f600b54905061238533826130fc565b61238f81856131ef565b61239a818484612676565b600160125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050505050565b606061240082612a2c565b505f60065f8481526020019081526020015f20805461241e906145af565b80601f016020809104026020016040519081016040528092919081815260200182805461244a906145af565b80156124955780601f1061246c57610100808354040283529160200191612495565b820191905f5260205f20905b81548152906001019060200180831161247857829003601f168201915b505050505090505f6124a56131fd565b90505f8151036124b95781925050506124fb565b5f825111156124ed5780826040516020016124d5929190614f0f565b604051602081830303815290604052925050506124fb565b6124f684613213565b925050505b919050565b813373ffffffffffffffffffffffffffffffffffffffff166125218261192b565b73ffffffffffffffffffffffffffffffffffffffff1614612577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256e90614843565b60405180910390fd5b600160135f8581526020019081526020015f205f6101000a81548160ff0219169083151502179055505f600b5f8154809291906125b39061460c565b9190505590506125c333826130fc565b6125cd81846131ef565b50505050565b6010602052805f5260405f205f915090505481565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166126ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f690614eb7565b60405180910390fd5b5f600f5f8581526020019081526020015f20905083815f018190555033816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082816002018190555060018160030160146101000a81548160ff021916908315150217905550818160040190816127949190614b2f565b50833373ffffffffffffffffffffffffffffffffffffffff167f169aa9660a76389280a98c8fc5b188ebd06db0f223883cf708b13704942f3a318560018660155f8b81526020019081526020015f206040516127f3949392919061495c565b60405180910390a350505050565b80600c819055507f5fb4654f1efe30c6141eaa6855ffcb27e0b361d899b05e21b1a4d0b3e71e14db8160405161283791906141f2565b60405180910390a150565b600f602052805f5260405f205f91509050805f015490806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015490806003015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030160149054906101000a900460ff16908060040180546128ca906145af565b80601f01602080910402602001604051908101604052809291908181526020018280546128f6906145af565b80156129415780601f1061291857610100808354040283529160200191612941565b820191905f5260205f20905b81548152906001019060200180831161292457829003601f168201915b5050505050905086565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612a1557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612a255750612a2482613279565b5b9050919050565b5f80612a37836132e2565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612aa957826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401612aa091906141f2565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b612aff838383600161331b565b505050565b5f80612b0f846132e2565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b5057612b4f8184866134da565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612bdb57612b8f5f855f8061331b565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614612c5a57600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b600260075403612d4b576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600781905550565b6001600781905550565b5f612d6b5f835f612b04565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612ddd57816040517f7e273289000000000000000000000000000000000000000000000000000000008152600401612dd491906141f2565b60405180910390fd5b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e5157816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401612e489190613c05565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f3d9190613a7f565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b11156130f6578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f8d612aeb565b8685856040518563ffffffff1660e01b8152600401612faf9493929190614f84565b6020604051808303815f875af1925050508015612fea57506040513d601f19601f82011682018060405250810190612fe79190614fe2565b60015b61306b573d805f8114613018576040519150601f19603f3d011682016040523d82523d5f602084013e61301d565b606091505b505f81510361306357836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161305a9190613c05565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146130f457836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016130eb9190613c05565b60405180910390fd5b505b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361316c575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016131639190613c05565b60405180910390fd5b5f61317883835f612b04565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146131ea575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016131e19190613c05565b60405180910390fd5b505050565b6131f9828261359d565b5050565b606060405180602001604052805f815250905090565b606061321e82612a2c565b505f6132286131fd565b90505f8151116132465760405180602001604052805f815250613271565b80613250846135f7565b604051602001613261929190614f0f565b6040516020818303038152906040525b915050919050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061335357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613485575f61336284612a2c565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156133cc57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156133df57506133dd81846125e8565b155b1561342157826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016134189190613c05565b60405180910390fd5b811561348357838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6134e58383836136c1565b613598575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361355957806040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161355091906141f2565b60405180910390fd5b81816040517f177e802f00000000000000000000000000000000000000000000000000000000815260040161358f92919061500d565b60405180910390fd5b505050565b8060065f8481526020019081526020015f2090816135bb9190614b2f565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7826040516135eb91906141f2565b60405180910390a15050565b60605f600161360584613781565b0190505f8167ffffffffffffffff81111561362357613622613fa4565b5b6040519080825280601f01601f1916602001820160405280156136555781602001600182028036833780820191505090505b5090505f82602001820190505b6001156136b6578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816136ab576136aa614cce565b5b0494505f8503613662575b819350505050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561377857508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613739575061373884846125e8565b5b8061377757508273ffffffffffffffffffffffffffffffffffffffff1661375f83612ab2565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106137dd577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816137d3576137d2614cce565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061381a576d04ee2d6d415b85acef810000000083816138105761380f614cce565b5b0492506020810190505b662386f26fc10000831061384957662386f26fc10000838161383f5761383e614cce565b5b0492506010810190505b6305f5e1008310613872576305f5e100838161386857613867614cce565b5b0492506008810190505b612710831061389757612710838161388d5761388c614cce565b5b0492506004810190505b606483106138ba57606483816138b0576138af614cce565b5b0492506002810190505b600a83106138c9576001810190505b80915050919050565b6040518060c001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f15158152602001606081525090565b5f82825260208201905092915050565b7f5468697320636f6e747261637420646f6573206e6f74206163636570742045745f8201527f6865720000000000000000000000000000000000000000000000000000000000602082015250565b5f61399b602383613931565b91506139a682613941565b604082019050919050565b5f6020820190508181035f8301526139c88161398f565b9050919050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613a09826139e0565b9050919050565b613a19816139ff565b8114613a23575f80fd5b50565b5f81359050613a3481613a10565b92915050565b5f60208284031215613a4f57613a4e6139d8565b5b5f613a5c84828501613a26565b91505092915050565b5f8115159050919050565b613a7981613a65565b82525050565b5f602082019050613a925f830184613a70565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613acc81613a98565b8114613ad6575f80fd5b50565b5f81359050613ae781613ac3565b92915050565b5f60208284031215613b0257613b016139d8565b5b5f613b0f84828501613ad9565b91505092915050565b5f81519050919050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613b4a82613b18565b613b548185613931565b9350613b64818560208601613b22565b613b6d81613b30565b840191505092915050565b5f6020820190508181035f830152613b908184613b40565b905092915050565b5f819050919050565b613baa81613b98565b8114613bb4575f80fd5b50565b5f81359050613bc581613ba1565b92915050565b5f60208284031215613be057613bdf6139d8565b5b5f613bed84828501613bb7565b91505092915050565b613bff816139ff565b82525050565b5f602082019050613c185f830184613bf6565b92915050565b5f8060408385031215613c3457613c336139d8565b5b5f613c4185828601613a26565b9250506020613c5285828601613bb7565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613c8e81613b98565b82525050565b613c9d816139ff565b82525050565b613cac81613a65565b82525050565b5f82825260208201905092915050565b5f613ccc82613b18565b613cd68185613cb2565b9350613ce6818560208601613b22565b613cef81613b30565b840191505092915050565b5f60c083015f830151613d0f5f860182613c85565b506020830151613d226020860182613c94565b506040830151613d356040860182613c85565b506060830151613d486060860182613c94565b506080830151613d5b6080860182613ca3565b5060a083015184820360a0860152613d738282613cc2565b9150508091505092915050565b5f613d8b8383613cfa565b905092915050565b5f602082019050919050565b5f613da982613c5c565b613db38185613c66565b935083602082028501613dc585613c76565b805f5b85811015613e005784840389528151613de18582613d80565b9450613dec83613d93565b925060208a01995050600181019050613dc8565b50829750879550505050505092915050565b5f6020820190508181035f830152613e2a8184613d9f565b905092915050565b5f805f60608486031215613e4957613e486139d8565b5b5f613e5686828701613a26565b9350506020613e6786828701613a26565b9250506040613e7886828701613bb7565b9150509250925092565b5f819050919050565b5f613ea5613ea0613e9b846139e0565b613e82565b6139e0565b9050919050565b5f613eb682613e8b565b9050919050565b5f613ec782613eac565b9050919050565b613ed781613ebd565b82525050565b5f602082019050613ef05f830184613ece565b92915050565b5f60c083015f830151613f0b5f860182613c85565b506020830151613f1e6020860182613c94565b506040830151613f316040860182613c85565b506060830151613f446060860182613c94565b506080830151613f576080860182613ca3565b5060a083015184820360a0860152613f6f8282613cc2565b9150508091505092915050565b5f6020820190508181035f830152613f948184613ef6565b905092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613fda82613b30565b810181811067ffffffffffffffff82111715613ff957613ff8613fa4565b5b80604052505050565b5f61400b6139cf565b90506140178282613fd1565b919050565b5f67ffffffffffffffff82111561403657614035613fa4565b5b61403f82613b30565b9050602081019050919050565b828183375f83830152505050565b5f61406c6140678461401c565b614002565b90508281526020810184848401111561408857614087613fa0565b5b61409384828561404c565b509392505050565b5f82601f8301126140af576140ae613f9c565b5b81356140bf84826020860161405a565b91505092915050565b5f805f606084860312156140df576140de6139d8565b5b5f6140ec86828701613bb7565b93505060206140fd86828701613bb7565b925050604084013567ffffffffffffffff81111561411e5761411d6139dc565b5b61412a8682870161409b565b9150509250925092565b5f806040838503121561414a576141496139d8565b5b5f61415785828601613bb7565b925050602083013567ffffffffffffffff811115614178576141776139dc565b5b6141848582860161409b565b9150509250929050565b61419781613a65565b81146141a1575f80fd5b50565b5f813590506141b28161418e565b92915050565b5f602082840312156141cd576141cc6139d8565b5b5f6141da848285016141a4565b91505092915050565b6141ec81613b98565b82525050565b5f6020820190506142055f8301846141e3565b92915050565b5f61421582613eac565b9050919050565b6142258161420b565b82525050565b5f60208201905061423e5f83018461421c565b92915050565b5f819050919050565b61425681614244565b82525050565b5f60208201905061426f5f83018461424d565b92915050565b5f806040838503121561428b5761428a6139d8565b5b5f61429885828601613a26565b92505060206142a9858286016141a4565b9150509250929050565b5f80604083850312156142c9576142c86139d8565b5b5f6142d685828601613bb7565b92505060206142e785828601613bb7565b9150509250929050565b5f67ffffffffffffffff82111561430b5761430a613fa4565b5b61431482613b30565b9050602081019050919050565b5f61433361432e846142f1565b614002565b90508281526020810184848401111561434f5761434e613fa0565b5b61435a84828561404c565b509392505050565b5f82601f83011261437657614375613f9c565b5b8135614386848260208601614321565b91505092915050565b5f805f80608085870312156143a7576143a66139d8565b5b5f6143b487828801613a26565b94505060206143c587828801613a26565b93505060406143d687828801613bb7565b925050606085013567ffffffffffffffff8111156143f7576143f66139dc565b5b61440387828801614362565b91505092959194509250565b5f60208284031215614424576144236139d8565b5b5f82013567ffffffffffffffff811115614441576144406139dc565b5b61444d8482850161409b565b91505092915050565b5f805f6060848603121561446d5761446c6139d8565b5b5f84013567ffffffffffffffff81111561448a576144896139dc565b5b6144968682870161409b565b93505060206144a786828701613bb7565b925050604084013567ffffffffffffffff8111156144c8576144c76139dc565b5b6144d48682870161409b565b9150509250925092565b5f80604083850312156144f4576144f36139d8565b5b5f61450185828601613a26565b925050602061451285828601613a26565b9150509250929050565b5f60c08201905061452f5f8301896141e3565b61453c6020830188613bf6565b61454960408301876141e3565b6145566060830186613bf6565b6145636080830185613a70565b81810360a08301526145758184613b40565b9050979650505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806145c657607f821691505b6020821081036145d9576145d8614582565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61461682613b98565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614648576146476145df565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6060820190506146935f830186613bf6565b6146a060208301856141e3565b6146ad6040830184613bf6565b949350505050565b7f4e6f2070726f636565647320746f2077697468647261770000000000000000005f82015250565b5f6146e9601783613931565b91506146f4826146b5565b602082019050919050565b5f6020820190508181035f830152614716816146dd565b9050919050565b5f6060820190506147305f830186613bf6565b61473d6020830185613bf6565b61474a60408301846141e3565b949350505050565b5f815190506147608161418e565b92915050565b5f6020828403121561477b5761477a6139d8565b5b5f61478884828501614752565b91505092915050565b7f546f6b656e207472616e73666572206661696c656400000000000000000000005f82015250565b5f6147c5601583613931565b91506147d082614791565b602082019050919050565b5f6020820190508181035f8301526147f2816147b9565b9050919050565b7f43616c6c6572206973206e6f7420746865206f776e65720000000000000000005f82015250565b5f61482d601783613931565b9150614838826147f9565b602082019050919050565b5f6020820190508181035f83015261485a81614821565b9050919050565b7f5072696365206d7573742062652061626f7665207a65726f00000000000000005f82015250565b5f614895601883613931565b91506148a082614861565b602082019050919050565b5f6020820190508181035f8301526148c281614889565b9050919050565b5f819050815f5260205f209050919050565b5f81546148e7816145af565b6148f18186613931565b9450600182165f811461490b576001811461492157614953565b60ff198316865281151560200286019350614953565b61492a856148c9565b5f5b8381101561494b5781548189015260018201915060208101905061492c565b808801955050505b50505092915050565b5f60808201905061496f5f8301876141e3565b61497c6020830186613a70565b818103604083015261498e8185613b40565b905081810360608301526149a281846148db565b905095945050505050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026149f77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826149bc565b614a0186836149bc565b95508019841693508086168417925050509392505050565b5f614a33614a2e614a2984613b98565b613e82565b613b98565b9050919050565b5f819050919050565b614a4c83614a19565b614a60614a5882614a3a565b8484546149c8565b825550505050565b5f90565b614a74614a68565b614a7f818484614a43565b505050565b5b81811015614aa257614a975f82614a6c565b600181019050614a85565b5050565b601f821115614ae757614ab8816148c9565b614ac1846149ad565b81016020851015614ad0578190505b614ae4614adc856149ad565b830182614a84565b50505b505050565b5f82821c905092915050565b5f614b075f1984600802614aec565b1980831691505092915050565b5f614b1f8383614af8565b9150826002028217905092915050565b614b3882613b18565b67ffffffffffffffff811115614b5157614b50613fa4565b5b614b5b82546145af565b614b66828285614aa6565b5f60209050601f831160018114614b97575f8415614b85578287015190505b614b8f8582614b14565b865550614bf6565b601f198416614ba5866148c9565b5f5b82811015614bcc57848901518255600182019150602085019450602081019050614ba7565b86831015614be95784890151614be5601f891682614af8565b8355505b6001600288020188555050505b505050505050565b7f4e4654206973206e6f7420636f6d70726f6d69736564000000000000000000005f82015250565b5f614c32601683613931565b9150614c3d82614bfe565b602082019050919050565b5f6020820190508181035f830152614c5f81614c26565b9050919050565b7f4974656d206e6f74206c697374656420666f722073616c6500000000000000005f82015250565b5f614c9a601883613931565b9150614ca582614c66565b602082019050919050565b5f6020820190508181035f830152614cc781614c8e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614d0582613b98565b9150614d1083613b98565b925082614d2057614d1f614cce565b5b828204905092915050565b5f614d3582613b98565b9150614d4083613b98565b9250828201905080821115614d5857614d576145df565b5b92915050565b7f507269636520706c757320666565206e6f74206d6574000000000000000000005f82015250565b5f614d92601683613931565b9150614d9d82614d5e565b602082019050919050565b5f6020820190508181035f830152614dbf81614d86565b9050919050565b5f81519050614dd481613ba1565b92915050565b5f60208284031215614def57614dee6139d8565b5b5f614dfc84828501614dc6565b91505092915050565b7f696e73756666696369656e742066756e640000000000000000000000000000005f82015250565b5f614e39601183613931565b9150614e4482614e05565b602082019050919050565b5f6020820190508181035f830152614e6681614e2d565b9050919050565b7f4b5943206e6f74207665726966696564000000000000000000000000000000005f82015250565b5f614ea1601083613931565b9150614eac82614e6d565b602082019050919050565b5f6020820190508181035f830152614ece81614e95565b9050919050565b5f81905092915050565b5f614ee982613b18565b614ef38185614ed5565b9350614f03818560208601613b22565b80840191505092915050565b5f614f1a8285614edf565b9150614f268284614edf565b91508190509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f614f5682614f32565b614f608185614f3c565b9350614f70818560208601613b22565b614f7981613b30565b840191505092915050565b5f608082019050614f975f830187613bf6565b614fa46020830186613bf6565b614fb160408301856141e3565b8181036060830152614fc38184614f4c565b905095945050505050565b5f81519050614fdc81613ac3565b92915050565b5f60208284031215614ff757614ff66139d8565b5b5f61500484828501614fce565b91505092915050565b5f6040820190506150205f830185613bf6565b61502d60208301846141e3565b939250505056fea2646970667358221220b08db54b3eef0543ad860e4302d07de9ed6072a38776fcf62737aec91e04465064736f6c634300081a00330000000000000000000000003560e343fb8ceb3fb92af4ade76d7d7074daa038000000000000000000000000eb89cf52dd1672e1cbddf56150cf059dca2e68ba