60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90816200004a919062000746565b506032600d5561025d600e5567016345785d8a0000600f556000601360006101000a81548160ff0219169083151502179055503480156200008a57600080fd5b50604051620051e8380380620051e88339818101604052810190620000b09190620008e0565b6040518060400160405280600f81526020017f436f6c6c656374696f6e204e616d6500000000000000000000000000000000008152506040518060400160405280600f81526020017f436f6c6c656374696f6e204e616d65000000000000000000000000000000000081525081600290816200012d919062000746565b5080600390816200013f919062000746565b5062000150620001bd60201b60201c565b6000819055505050620001786200016c620001c660201b60201c565b620001ce60201b60201c565b620001886200029460201b60201c565b6001601160006101000a81548160ff021916908315150217905550620001b58282620002bd60201b60201c565b505062000a42565b60006001905090565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002bb733cc6cdda760b79bafa08df41ecfa224f810dceb660016200046060201b60201c565b565b620002cd620004c260201b60201c565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156200032e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200032590620009ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620003a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003979062000a20565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600860008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b637d3e3dbe8260601b60601c9250816200048f57826200048757634420e48690506200048f565b63a0af290390505b8060e01b600052306004528260245260008060446000806daaeb6d7670e522a718067333cd4e5af1506000602452505050565b6000612710905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200054e57607f821691505b60208210810362000564576200056362000506565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005ce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200058f565b620005da86836200058f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000627620006216200061b84620005f2565b620005fc565b620005f2565b9050919050565b6000819050919050565b620006438362000606565b6200065b62000652826200062e565b8484546200059c565b825550505050565b600090565b6200067262000663565b6200067f81848462000638565b505050565b5b81811015620006a7576200069b60008262000668565b60018101905062000685565b5050565b601f821115620006f657620006c0816200056a565b620006cb846200057f565b81016020851015620006db578190505b620006f3620006ea856200057f565b83018262000684565b50505b505050565b600082821c905092915050565b60006200071b60001984600802620006fb565b1980831691505092915050565b600062000736838362000708565b9150826002028217905092915050565b6200075182620004cc565b67ffffffffffffffff8111156200076d576200076c620004d7565b5b62000779825462000535565b62000786828285620006ab565b600060209050601f831160018114620007be5760008415620007a9578287015190505b620007b5858262000728565b86555062000825565b601f198416620007ce866200056a565b60005b82811015620007f857848901518255600182019150602085019450602081019050620007d1565b8683101562000818578489015162000814601f89168262000708565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200085f8262000832565b9050919050565b620008718162000852565b81146200087d57600080fd5b50565b600081519050620008918162000866565b92915050565b60006bffffffffffffffffffffffff82169050919050565b620008ba8162000897565b8114620008c657600080fd5b50565b600081519050620008da81620008af565b92915050565b60008060408385031215620008fa57620008f96200082d565b5b60006200090a8582860162000880565b92505060206200091d85828601620008c9565b9150509250929050565b600082825260208201905092915050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b600062000996602a8362000927565b9150620009a38262000938565b604082019050919050565b60006020820190508181036000830152620009c98162000987565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b600062000a0860198362000927565b915062000a1582620009d0565b602082019050919050565b6000602082019050818103600083015262000a3b81620009f9565b9050919050565b6147968062000a526000396000f3fe6080604052600436106102885760003560e01c806374d0101d1161015a578063c1e1ce29116100c1578063dc33e6811161007a578063dc33e68114610986578063e75179a4146109c3578063e985e9c5146109ec578063f2fde38b14610a29578063f4a0a52814610a52578063fb796e6c14610a7b57610288565b8063c1e1ce2914610876578063c21b471b146108a1578063c6682862146108ca578063c6ab67a3146108f5578063c87b56dd14610920578063da3ef23f1461095d57610288565b8063aa592f2511610113578063aa592f2514610763578063b366d6131461078e578063b629f192146107b7578063b7c0b8e8146107f4578063b88d4fde1461081d578063bbadfe761461083957610288565b806374d0101d1461066757806378acea1e146106905780638342083a146106b95780638da5cb5b146106e457806395d89b411461070f578063a22cb4651461073a57610288565b80633ccfd60b116101fe578063601e5e77116101b7578063601e5e77146105575780636352211e146105825780636817c76c146105bf57806369e2f0fb146105ea57806370a0823114610613578063715018a61461065057610288565b80633ccfd60b146104795780633dd08c3814610490578063402c3856146104cd57806342842e0e146104e9578063559c55b91461050557806355f804b31461052e57610288565b806318160ddd1161025057806318160ddd1461037757806323b872dd146103a257806326aa420a146103be5780632a55205a146103e757806332cb6b0c14610425578063345318281461045057610288565b806301ffc9a71461028d57806306fdde03146102ca578063081812fc146102f5578063095ea7b314610332578063109695231461034e575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613359565b610aa6565b6040516102c191906133a1565b60405180910390f35b3480156102d657600080fd5b506102df610ac8565b6040516102ec919061344c565b60405180910390f35b34801561030157600080fd5b5061031c600480360381019061031791906134a4565b610b5a565b6040516103299190613512565b60405180910390f35b61034c60048036038101906103479190613559565b610bd9565b005b34801561035a57600080fd5b50610375600480360381019061037091906135fe565b610c48565b005b34801561038357600080fd5b5061038c610d67565b604051610399919061365a565b60405180910390f35b6103bc60048036038101906103b79190613675565b610d7e565b005b3480156103ca57600080fd5b506103e560048036038101906103e091906134a4565b610df7565b005b3480156103f357600080fd5b5061040e600480360381019061040991906136c8565b610e09565b60405161041c929190613708565b60405180910390f35b34801561043157600080fd5b5061043a610ff3565b604051610447919061365a565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190613359565b610ff9565b005b34801561048557600080fd5b5061048e61106e565b005b34801561049c57600080fd5b506104b760048036038101906104b29190613731565b61111c565b6040516104c491906133a1565b60405180910390f35b6104e760048036038101906104e2919061378a565b61113c565b005b61050360048036038101906104fe9190613675565b6113f1565b005b34801561051157600080fd5b5061052c600480360381019061052791906134a4565b61146a565b005b34801561053a57600080fd5b50610555600480360381019061055091906135fe565b61147c565b005b34801561056357600080fd5b5061056c611553565b604051610579919061365a565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a491906134a4565b611559565b6040516105b69190613512565b60405180910390f35b3480156105cb57600080fd5b506105d461156b565b6040516105e1919061365a565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c9190613731565b611571565b005b34801561061f57600080fd5b5061063a60048036038101906106359190613731565b611631565b604051610647919061365a565b60405180910390f35b34801561065c57600080fd5b506106656116e9565b005b34801561067357600080fd5b5061068e60048036038101906106899190613559565b6116fd565b005b34801561069c57600080fd5b506106b760048036038101906106b291906137dd565b611825565b005b3480156106c557600080fd5b506106ce61184a565b6040516106db919061365a565b60405180910390f35b3480156106f057600080fd5b506106f9611850565b6040516107069190613512565b60405180910390f35b34801561071b57600080fd5b5061072461187a565b604051610731919061344c565b60405180910390f35b34801561074657600080fd5b50610761600480360381019061075c919061380a565b61190c565b005b34801561076f57600080fd5b5061077861197b565b604051610785919061365a565b60405180910390f35b34801561079a57600080fd5b506107b560048036038101906107b09190613731565b611980565b005b3480156107c357600080fd5b506107de60048036038101906107d99190613731565b611a40565b6040516107eb91906133a1565b60405180910390f35b34801561080057600080fd5b5061081b600480360381019061081691906137dd565b611a60565b005b6108376004803603810190610832919061397a565b611b3e565b005b34801561084557600080fd5b50610860600480360381019061085b9190613359565b611bb9565b60405161086d91906133a1565b60405180910390f35b34801561088257600080fd5b5061088b611bd9565b60405161089891906133a1565b60405180910390f35b3480156108ad57600080fd5b506108c860048036038101906108c39190613a41565b611bec565b005b3480156108d657600080fd5b506108df611c02565b6040516108ec919061344c565b60405180910390f35b34801561090157600080fd5b5061090a611c90565b604051610917919061344c565b60405180910390f35b34801561092c57600080fd5b50610947600480360381019061094291906134a4565b611d1e565b604051610954919061344c565b60405180910390f35b34801561096957600080fd5b50610984600480360381019061097f9190613b22565b611dc8565b005b34801561099257600080fd5b506109ad60048036038101906109a89190613731565b611de3565b6040516109ba919061365a565b60405180910390f35b3480156109cf57600080fd5b506109ea60048036038101906109e59190613731565b611df5565b005b3480156109f857600080fd5b50610a136004803603810190610a0e9190613b6b565b611f05565b604051610a2091906133a1565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b9190613731565b611f99565b005b348015610a5e57600080fd5b50610a796004803603810190610a7491906134a4565b61201c565b005b348015610a8757600080fd5b50610a9061202e565b604051610a9d91906133a1565b60405180910390f35b6000610ab182612041565b80610ac15750610ac0826120d3565b5b9050919050565b606060028054610ad790613bda565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0390613bda565b8015610b505780601f10610b2557610100808354040283529160200191610b50565b820191906000526020600020905b815481529060010190602001808311610b3357829003601f168201915b5050505050905090565b6000610b658261214d565b610b9b576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81601160009054906101000a900460ff168015610c385769c617113400112233445560005230601a528160601b60601c603a52600080604460166daaeb6d7670e522a718067333cd4e5afa610c32573d6000803e3d6000fd5b6000603a525b610c4284846121ac565b50505050565b6012600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615610d01576040517f8bf9b99f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d096122f0565b600060108054610d1890613bda565b905014610d51576040517f19e24c1100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818160109182610d62929190613dc2565b505050565b6000610d7161236e565b6001546000540303905090565b82601160009054906101000a900460ff168015610de557338260601b60601c14610de45769c617113400112233445560005230601a5233603a52600080604460166daaeb6d7670e522a718067333cd4e5afa610dde573d6000803e3d6000fd5b6000603a525b5b610df0858585612377565b5050505050565b610dff6122f0565b80600e8190555050565b6000806000600960008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610f9e5760086040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610fa8612699565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610fd49190613ec1565b610fde9190613f32565b90508160000151819350935050509250929050565b61029481565b6110016122f0565b600160126000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6110766122f0565b60003373ffffffffffffffffffffffffffffffffffffffff164760405161109c90613f94565b60006040518083038185875af1925050503d80600081146110d9576040519150601f19603f3d011682016040523d82523d6000602084013e6110de565b606091505b5050905080611119576040517f750b219c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b60156020528060005260406000206000915054906101000a900460ff1681565b60011515601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c690613ff5565b60405180910390fd5b600e54821115611214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120b90614061565b60405180910390fd5b60011515601360009054906101000a900460ff1615151461126a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611261906140cd565b60405180910390fd5b610294826112766126a3565b61128091906140ed565b11156112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b89061416d565b60405180910390fd5b6000600f54836112d19190613ec1565b905080341015611316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130d906141d9565b60405180910390fd5b61132084846126b6565b82600e600082825461133291906141f9565b9250508190555081601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550803411156113eb573373ffffffffffffffffffffffffffffffffffffffff166108fc82346113be91906141f9565b9081150290604051600060405180830381858888f193505050501580156113e9573d6000803e3d6000fd5b505b50505050565b82601160009054906101000a900460ff16801561145857338260601b60601c146114575769c617113400112233445560005230601a5233603a52600080604460166daaeb6d7670e522a718067333cd4e5afa611451573d6000803e3d6000fd5b6000603a525b5b611463858585612871565b5050505050565b6114726122f0565b80600d8190555050565b6012600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615611535576040517f8bf9b99f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61153d6122f0565b8181600b918261154e929190613dc2565b505050565b600d5481565b600061156482612891565b9050919050565b600f5481565b6115796122f0565b60011515601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146115d657600080fd5b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611698576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6116f16122f0565b6116fb600061295d565b565b6012600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff16156117b6576040517f8bf9b99f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117be6122f0565b610294600d546117cc6126a3565b6117d691906140ed565b1115611817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180e9061416d565b60405180910390fd5b61182182826126b6565b5050565b61182d6122f0565b80601360006101000a81548160ff02191690831515021790555050565b600e5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461188990613bda565b80601f01602080910402602001604051908101604052809291908181526020018280546118b590613bda565b80156119025780601f106118d757610100808354040283529160200191611902565b820191906000526020600020905b8154815290600101906020018083116118e557829003601f168201915b5050505050905090565b81601160009054906101000a900460ff16801561196b5769c617113400112233445560005230601a528160601b60601c603a52600080604460166daaeb6d7670e522a718067333cd4e5afa611965573d6000803e3d6000fd5b6000603a525b6119758484612a23565b50505050565b600581565b6119886122f0565b60001515601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146119e557600080fd5b6001601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60146020528060005260406000206000915054906101000a900460ff1681565b6012600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615611b19576040517f8bf9b99f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b216122f0565b80601160006101000a81548160ff02191690831515021790555050565b83601160009054906101000a900460ff168015611ba557338260601b60601c14611ba45769c617113400112233445560005230601a5233603a52600080604460166daaeb6d7670e522a718067333cd4e5afa611b9e573d6000803e3d6000fd5b6000603a525b5b611bb186868686612b2e565b505050505050565b60126020528060005260406000206000915054906101000a900460ff1681565b601360009054906101000a900460ff1681565b611bf46122f0565b611bfe8282612ba1565b5050565b600c8054611c0f90613bda565b80601f0160208091040260200160405190810160405280929190818152602001828054611c3b90613bda565b8015611c885780601f10611c5d57610100808354040283529160200191611c88565b820191906000526020600020905b815481529060010190602001808311611c6b57829003601f168201915b505050505081565b60108054611c9d90613bda565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc990613bda565b8015611d165780601f10611ceb57610100808354040283529160200191611d16565b820191906000526020600020905b815481529060010190602001808311611cf957829003601f168201915b505050505081565b6060611d298261214d565b611d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5f9061429f565b60405180910390fd5b6000611d72612d36565b90506000815111611d925760405180602001604052806000815250611dc0565b80611d9c84612dc8565b600c604051602001611db09392919061437e565b6040516020818303038152906040525b915050919050565b611dd06122f0565b80600c9081611ddf91906143af565b5050565b6000611dee82612e96565b9050919050565b6012600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff1615611eae576040517f8bf9b99f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611eb66122f0565b6005611ec06126a3565b10611ef7576040517f1f0f14ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f028160056126b6565b50565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fa16122f0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612010576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612007906144f3565b60405180910390fd5b6120198161295d565b50565b6120246122f0565b80600f8190555050565b601160009054906101000a900460ff1681565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061209c57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806120cc5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612146575061214582612eed565b5b9050919050565b60008161215861236e565b11158015612167575060005482105b80156121a5575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b60006121b782611559565b90508073ffffffffffffffffffffffffffffffffffffffff166121d8612f57565b73ffffffffffffffffffffffffffffffffffffffff161461223b57612204816121ff612f57565b611f05565b61223a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6122f8612f5f565b73ffffffffffffffffffffffffffffffffffffffff16612316611850565b73ffffffffffffffffffffffffffffffffffffffff161461236c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123639061455f565b60405180910390fd5b565b60006001905090565b600061238282612891565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146123e9576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806123f584612f67565b9150915061240b8187612406612f57565b612f8e565b612457576124208661241b612f57565b611f05565b612456576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036124bd576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124ca8686866001612fd2565b80156124d557600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506125a38561257f888887612fd8565b7c020000000000000000000000000000000000000000000000000000000017613000565b600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036126295760006001850190506000600460008381526020019081526020016000205403612627576000548114612626578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612691868686600161302b565b505050505050565b6000612710905090565b60006126ad61236e565b60005403905090565b600080549050600082036126f6576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127036000848385612fd2565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061277a8361276b6000866000612fd8565b61277485613031565b17613000565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461281b57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a46001810190506127e0565b5060008203612856576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600081905550505061286c600084838561302b565b505050565b61288c83838360405180602001604052806000815250611b3e565b505050565b600080829050806128a061236e565b11612926576000548110156129255760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603612923575b600081036129195760046000836001900393508381526020019081526020016000205490506128ef565b8092505050612958565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060076000612a30612f57565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612add612f57565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b2291906133a1565b60405180910390a35050565b612b39848484610d7e565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612b9b57612b6484848484613041565b612b9a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b612ba9612699565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115612c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfe906145f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6d9061465d565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600860008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6060600b8054612d4590613bda565b80601f0160208091040260200160405190810160405280929190818152602001828054612d7190613bda565b8015612dbe5780601f10612d9357610100808354040283529160200191612dbe565b820191906000526020600020905b815481529060010190602001808311612da157829003601f168201915b5050505050905090565b606060006001612dd784613191565b01905060008167ffffffffffffffff811115612df657612df561384f565b5b6040519080825280601f01601f191660200182016040528015612e285781602001600182028036833780820191505090505b509050600082602001820190505b600115612e8b578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612e7f57612e7e613f03565b5b04945060008503612e36575b819350505050919050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600033905090565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8612fef8686846132e4565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b60006001821460e11b9050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613067612f57565b8786866040518563ffffffff1660e01b815260040161308994939291906146d2565b6020604051808303816000875af19250505080156130c557506040513d601f19601f820116820180604052508101906130c29190614733565b60015b61313e573d80600081146130f5576040519150601f19603f3d011682016040523d82523d6000602084013e6130fa565b606091505b506000815103613136576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106131ef577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816131e5576131e4613f03565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061322c576d04ee2d6d415b85acef8100000000838161322257613221613f03565b5b0492506020810190505b662386f26fc10000831061325b57662386f26fc10000838161325157613250613f03565b5b0492506010810190505b6305f5e1008310613284576305f5e100838161327a57613279613f03565b5b0492506008810190505b61271083106132a957612710838161329f5761329e613f03565b5b0492506004810190505b606483106132cc57606483816132c2576132c1613f03565b5b0492506002810190505b600a83106132db576001810190505b80915050919050565b60009392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61333681613301565b811461334157600080fd5b50565b6000813590506133538161332d565b92915050565b60006020828403121561336f5761336e6132f7565b5b600061337d84828501613344565b91505092915050565b60008115159050919050565b61339b81613386565b82525050565b60006020820190506133b66000830184613392565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133f65780820151818401526020810190506133db565b60008484015250505050565b6000601f19601f8301169050919050565b600061341e826133bc565b61342881856133c7565b93506134388185602086016133d8565b61344181613402565b840191505092915050565b600060208201905081810360008301526134668184613413565b905092915050565b6000819050919050565b6134818161346e565b811461348c57600080fd5b50565b60008135905061349e81613478565b92915050565b6000602082840312156134ba576134b96132f7565b5b60006134c88482850161348f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134fc826134d1565b9050919050565b61350c816134f1565b82525050565b60006020820190506135276000830184613503565b92915050565b613536816134f1565b811461354157600080fd5b50565b6000813590506135538161352d565b92915050565b600080604083850312156135705761356f6132f7565b5b600061357e85828601613544565b925050602061358f8582860161348f565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126135be576135bd613599565b5b8235905067ffffffffffffffff8111156135db576135da61359e565b5b6020830191508360018202830111156135f7576135f66135a3565b5b9250929050565b60008060208385031215613615576136146132f7565b5b600083013567ffffffffffffffff811115613633576136326132fc565b5b61363f858286016135a8565b92509250509250929050565b6136548161346e565b82525050565b600060208201905061366f600083018461364b565b92915050565b60008060006060848603121561368e5761368d6132f7565b5b600061369c86828701613544565b93505060206136ad86828701613544565b92505060406136be8682870161348f565b9150509250925092565b600080604083850312156136df576136de6132f7565b5b60006136ed8582860161348f565b92505060206136fe8582860161348f565b9150509250929050565b600060408201905061371d6000830185613503565b61372a602083018461364b565b9392505050565b600060208284031215613747576137466132f7565b5b600061375584828501613544565b91505092915050565b61376781613386565b811461377257600080fd5b50565b6000813590506137848161375e565b92915050565b6000806000606084860312156137a3576137a26132f7565b5b60006137b186828701613544565b93505060206137c28682870161348f565b92505060406137d386828701613775565b9150509250925092565b6000602082840312156137f3576137f26132f7565b5b600061380184828501613775565b91505092915050565b60008060408385031215613821576138206132f7565b5b600061382f85828601613544565b925050602061384085828601613775565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61388782613402565b810181811067ffffffffffffffff821117156138a6576138a561384f565b5b80604052505050565b60006138b96132ed565b90506138c5828261387e565b919050565b600067ffffffffffffffff8211156138e5576138e461384f565b5b6138ee82613402565b9050602081019050919050565b82818337600083830152505050565b600061391d613918846138ca565b6138af565b9050828152602081018484840111156139395761393861384a565b5b6139448482856138fb565b509392505050565b600082601f83011261396157613960613599565b5b813561397184826020860161390a565b91505092915050565b60008060008060808587031215613994576139936132f7565b5b60006139a287828801613544565b94505060206139b387828801613544565b93505060406139c48782880161348f565b925050606085013567ffffffffffffffff8111156139e5576139e46132fc565b5b6139f18782880161394c565b91505092959194509250565b60006bffffffffffffffffffffffff82169050919050565b613a1e816139fd565b8114613a2957600080fd5b50565b600081359050613a3b81613a15565b92915050565b60008060408385031215613a5857613a576132f7565b5b6000613a6685828601613544565b9250506020613a7785828601613a2c565b9150509250929050565b600067ffffffffffffffff821115613a9c57613a9b61384f565b5b613aa582613402565b9050602081019050919050565b6000613ac5613ac084613a81565b6138af565b905082815260208101848484011115613ae157613ae061384a565b5b613aec8482856138fb565b509392505050565b600082601f830112613b0957613b08613599565b5b8135613b19848260208601613ab2565b91505092915050565b600060208284031215613b3857613b376132f7565b5b600082013567ffffffffffffffff811115613b5657613b556132fc565b5b613b6284828501613af4565b91505092915050565b60008060408385031215613b8257613b816132f7565b5b6000613b9085828601613544565b9250506020613ba185828601613544565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bf257607f821691505b602082108103613c0557613c04613bab565b5b50919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613c787fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613c3b565b613c828683613c3b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613cbf613cba613cb58461346e565b613c9a565b61346e565b9050919050565b6000819050919050565b613cd983613ca4565b613ced613ce582613cc6565b848454613c48565b825550505050565b600090565b613d02613cf5565b613d0d818484613cd0565b505050565b5b81811015613d3157613d26600082613cfa565b600181019050613d13565b5050565b601f821115613d7657613d4781613c16565b613d5084613c2b565b81016020851015613d5f578190505b613d73613d6b85613c2b565b830182613d12565b50505b505050565b600082821c905092915050565b6000613d9960001984600802613d7b565b1980831691505092915050565b6000613db28383613d88565b9150826002028217905092915050565b613dcc8383613c0b565b67ffffffffffffffff811115613de557613de461384f565b5b613def8254613bda565b613dfa828285613d35565b6000601f831160018114613e295760008415613e17578287013590505b613e218582613da6565b865550613e89565b601f198416613e3786613c16565b60005b82811015613e5f57848901358255600182019150602085019450602081019050613e3a565b86831015613e7c5784890135613e78601f891682613d88565b8355505b6001600288020188555050505b50505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ecc8261346e565b9150613ed78361346e565b9250828202613ee58161346e565b91508282048414831517613efc57613efb613e92565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f3d8261346e565b9150613f488361346e565b925082613f5857613f57613f03565b5b828204905092915050565b600081905092915050565b50565b6000613f7e600083613f63565b9150613f8982613f6e565b600082019050919050565b6000613f9f82613f71565b9150819050919050565b7f596f75277265206e6f742061206d696e74657200000000000000000000000000600082015250565b6000613fdf6013836133c7565b9150613fea82613fa9565b602082019050919050565b6000602082019050818103600083015261400e81613fd2565b9050919050565b7f4e465420616d6f756e7420657863656564730000000000000000000000000000600082015250565b600061404b6012836133c7565b915061405682614015565b602082019050919050565b6000602082019050818103600083015261407a8161403e565b9050919050565b7f4d696e74696e67206973206e6f7420796574206f70656e2e0000000000000000600082015250565b60006140b76018836133c7565b91506140c282614081565b602082019050919050565b600060208201905081810360008301526140e6816140aa565b9050919050565b60006140f88261346e565b91506141038361346e565b925082820190508082111561411b5761411a613e92565b5b92915050565b7f45786365656473204d6178696d756d20537570706c7900000000000000000000600082015250565b60006141576016836133c7565b915061416282614121565b602082019050919050565b600060208201905081810360008301526141868161414a565b9050919050565b7f45746865722073656e74206973206e6f7420636f72726563742e000000000000600082015250565b60006141c3601a836133c7565b91506141ce8261418d565b602082019050919050565b600060208201905081810360008301526141f2816141b6565b9050919050565b60006142048261346e565b915061420f8361346e565b925082820390508181111561422757614226613e92565b5b92915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614289602f836133c7565b91506142948261422d565b604082019050919050565b600060208201905081810360008301526142b88161427c565b9050919050565b600081905092915050565b60006142d5826133bc565b6142df81856142bf565b93506142ef8185602086016133d8565b80840191505092915050565b6000815461430881613bda565b61431281866142bf565b9450600182166000811461432d576001811461434257614375565b60ff1983168652811515820286019350614375565b61434b85613c16565b60005b8381101561436d5781548189015260018201915060208101905061434e565b838801955050505b50505092915050565b600061438a82866142ca565b915061439682856142ca565b91506143a282846142fb565b9150819050949350505050565b6143b8826133bc565b67ffffffffffffffff8111156143d1576143d061384f565b5b6143db8254613bda565b6143e6828285613d35565b600060209050601f8311600181146144195760008415614407578287015190505b6144118582613da6565b865550614479565b601f19841661442786613c16565b60005b8281101561444f5784890151825560018201915060208501945060208101905061442a565b8683101561446c5784890151614468601f891682613d88565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144dd6026836133c7565b91506144e882614481565b604082019050919050565b6000602082019050818103600083015261450c816144d0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145496020836133c7565b915061455482614513565b602082019050919050565b600060208201905081810360008301526145788161453c565b9050919050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b60006145db602a836133c7565b91506145e68261457f565b604082019050919050565b6000602082019050818103600083015261460a816145ce565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b60006146476019836133c7565b915061465282614611565b602082019050919050565b600060208201905081810360008301526146768161463a565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006146a48261467d565b6146ae8185614688565b93506146be8185602086016133d8565b6146c781613402565b840191505092915050565b60006080820190506146e76000830187613503565b6146f46020830186613503565b614701604083018561364b565b81810360608301526147138184614699565b905095945050505050565b60008151905061472d8161332d565b92915050565b600060208284031215614749576147486132f7565b5b60006147578482850161471e565b9150509291505056fea26469706673582212200bad4d4266d2c5bdd62f92ea3614b1507a72353eb1717c33f3d3527403cc5d7764736f6c634300081200330000000000000000000000008eeb5a3ec6de7bdcad2d72c9d0aed302011d2e7d00000000000000000000000000000000000000000000000000000000000003e8