60806040526000600660146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405162004e8e38038062004e8e8339818101604052810190620000529190620004f9565b828281600090805190602001906200006c92919062000233565b5080600190805190602001906200008592919062000233565b505050620000a86200009c6200016560201b60201c565b6200016d60201b60201c565b60405180606001604052806036815260200162004e586036913960079080519060200190620000d992919062000233565b5080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555030600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050620005f8565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200024190620005c2565b90600052602060002090601f016020900481019282620002655760008555620002b1565b82601f106200028057805160ff1916838001178555620002b1565b82800160010185558215620002b1579182015b82811115620002b057825182559160200191906001019062000293565b5b509050620002c09190620002c4565b5090565b5b80821115620002df576000816000905550600101620002c5565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200034c8262000301565b810181811067ffffffffffffffff821117156200036e576200036d62000312565b5b80604052505050565b600062000383620002e3565b905062000391828262000341565b919050565b600067ffffffffffffffff821115620003b457620003b362000312565b5b620003bf8262000301565b9050602081019050919050565b60005b83811015620003ec578082015181840152602081019050620003cf565b83811115620003fc576000848401525b50505050565b600062000419620004138462000396565b62000377565b905082815260208101848484011115620004385762000437620002fc565b5b62000445848285620003cc565b509392505050565b600082601f830112620004655762000464620002f7565b5b81516200047784826020860162000402565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004ad8262000480565b9050919050565b6000620004c182620004a0565b9050919050565b620004d381620004b4565b8114620004df57600080fd5b50565b600081519050620004f381620004c8565b92915050565b600080600060608486031215620005155762000514620002ed565b5b600084015167ffffffffffffffff811115620005365762000535620002f2565b5b62000544868287016200044d565b935050602084015167ffffffffffffffff811115620005685762000567620002f2565b5b62000576868287016200044d565b92505060406200058986828701620004e2565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005db57607f821691505b60208210811415620005f257620005f162000593565b5b50919050565b61485080620006086000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80637a44d57c1161011a578063b9d99d29116100ad578063cb443cb51161007c578063cb443cb5146105c0578063d89135cd146105de578063e985e9c5146105fc578063f2fde38b1461062c578063f859b4f814610648576101fb565b8063b9d99d2914610528578063bc0853df14610544578063c1d0679914610560578063c87b56dd14610590576101fb565b806395d89b41116100e957806395d89b41146104b657806398f073d0146104d4578063a22cb465146104f0578063b88d4fde1461050c576101fb565b80637a44d57c1461042e578063844e0acd1461044a5780638462151c146104685780638da5cb5b14610498576101fb565b806342842e0e116101925780636352211e116101615780636352211e146103a65780636c0360eb146103d657806370a08231146103f4578063715018a614610424576101fb565b806342842e0e1461032257806342966c681461033e5780634f6ccce71461035a57806355f804b31461038a576101fb565b806318160ddd116101ce57806318160ddd1461029a57806323b872dd146102b85780632f745c59146102d457806341218b8014610304576101fb565b806301ffc9a71461020057806306fdde0314610230578063081812fc1461024e578063095ea7b31461027e575b600080fd5b61021a6004803603810190610215919061302b565b610666565b6040516102279190613073565b60405180910390f35b6102386107b0565b6040516102459190613127565b60405180910390f35b6102686004803603810190610263919061317f565b610842565b60405161027591906131ed565b60405180910390f35b61029860048036038101906102939190613234565b6108c7565b005b6102a26109df565b6040516102af9190613283565b60405180910390f35b6102d260048036038101906102cd919061329e565b6109f9565b005b6102ee60048036038101906102e99190613234565b610a59565b6040516102fb9190613283565b60405180910390f35b61030c610ba2565b60405161031991906131ed565b60405180910390f35b61033c6004803603810190610337919061329e565b610bc8565b005b6103586004803603810190610353919061317f565b610be8565b005b610374600480360381019061036f919061317f565b610c0e565b6040516103819190613283565b60405180910390f35b6103a4600480360381019061039f9190613426565b610c61565b005b6103c060048036038101906103bb919061317f565b610cf7565b6040516103cd91906131ed565b60405180910390f35b6103de610db4565b6040516103eb9190613127565b60405180910390f35b61040e6004803603810190610409919061346f565b610e42565b60405161041b9190613283565b60405180910390f35b61042c610f6c565b005b610448600480360381019061044391906134da565b610ff4565b005b6104526110b4565b60405161045f9190613283565b60405180910390f35b610482600480360381019061047d919061346f565b6110c1565b60405161048f91906135c5565b60405180910390f35b6104a06111ba565b6040516104ad91906131ed565b60405180910390f35b6104be6111e4565b6040516104cb9190613127565b60405180910390f35b6104ee60048036038101906104e991906135e7565b611276565b005b61050a60048036038101906105059190613653565b61175f565b005b61052660048036038101906105219190613734565b6118e0565b005b610542600480360381019061053d91906137b7565b611942565b005b61055e600480360381019061055991906138ac565b6119db565b005b61057a6004803603810190610575919061346f565b611f97565b6040516105879190613073565b60405180910390f35b6105aa60048036038101906105a5919061317f565b612060565b6040516105b79190613127565b60405180910390f35b6105c8612107565b6040516105d59190613073565b60405180910390f35b6105e661211e565b6040516105f39190613283565b60405180910390f35b610616600480360381019061061191906138f5565b612128565b6040516106239190613073565b60405180910390f35b6106466004803603810190610641919061346f565b61218e565b005b610650612286565b60405161065d9190613994565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061073157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061079957507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107a957506107a8826122ac565b5b9050919050565b6060600080546107bf906139de565b80601f01602080910402602001604051908101604052809291908181526020018280546107eb906139de565b80156108385780601f1061080d57610100808354040283529160200191610838565b820191906000526020600020905b81548152906001019060200180831161081b57829003601f168201915b5050505050905090565b600061084d82612316565b61088c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088390613a82565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108d282610cf7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093a90613b14565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661096261239e565b73ffffffffffffffffffffffffffffffffffffffff16148061099157506109908161098b61239e565b612128565b5b6109d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c790613ba6565b60405180910390fd5b6109da83836123a6565b505050565b60006002546003805490506109f49190613bf5565b905090565b610a0a610a0461239e565b8261245f565b610a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4090613c9b565b60405180910390fd5b610a5483838361253d565b505050565b6000610a6483610e42565b8210610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c90613d07565b60405180910390fd5b6000805b600380549050811015610b585760038181548110610aca57610ac9613d27565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610b475783821415610b3a578092505050610b9c565b81610b4490613d56565b91505b80610b5190613d56565b9050610aa9565b506000610b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9190613d07565b60405180910390fd5b505b92915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610be3838383604051806020016040528060008152506118e0565b505050565b610bf9610bf361239e565b8261245f565b610c0257600080fd5b610c0b816126f6565b50565b6000610c186110b4565b8210610c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5090613d07565b60405180910390fd5b819050919050565b610c6961239e565b73ffffffffffffffffffffffffffffffffffffffff16610c876111ba565b73ffffffffffffffffffffffffffffffffffffffff1614610cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd490613deb565b60405180910390fd5b8060079080519060200190610cf3929190612f1c565b5050565b60008060038381548110610d0e57610d0d613d27565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da290613a82565b60405180910390fd5b80915050919050565b60078054610dc1906139de565b80601f0160208091040260200160405190810160405280929190818152602001828054610ded906139de565b8015610e3a5780601f10610e0f57610100808354040283529160200191610e3a565b820191906000526020600020905b815481529060010190602001808311610e1d57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa90613e7d565b60405180910390fd5b600080600380549050905060005b81811015610f5d5760038181548110610edd57610edc613d27565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610f4a578280610f4690613d56565b9350505b8080610f5590613d56565b915050610ec1565b50600090508192505050919050565b610f7461239e565b73ffffffffffffffffffffffffffffffffffffffff16610f926111ba565b73ffffffffffffffffffffffffffffffffffffffff1614610fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdf90613deb565b60405180910390fd5b610ff260006127f0565b565b610ffc61239e565b73ffffffffffffffffffffffffffffffffffffffff1661101a6111ba565b73ffffffffffffffffffffffffffffffffffffffff1614611070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106790613deb565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600380549050905090565b60606110cc82610e42565b60001061110e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110590613ee9565b60405180910390fd5b600061111983610e42565b905060008167ffffffffffffffff811115611137576111366132fb565b5b6040519080825280602002602001820160405280156111655781602001602082028036833780820191505090505b50905060005b828110156111af5761117d8582610a59565b8282815181106111905761118f613d27565b5b60200260200101818152505080806111a790613d56565b91505061116b565b508092505050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546111f3906139de565b80601f016020809104026020016040519081016040528092919081815260200182805461121f906139de565b801561126c5780601f106112415761010080835404028352916020019161126c565b820191906000526020600020905b81548152906001019060200180831161124f57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90613f55565b60405180910390fd5b600660149054906101000a900460ff16611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a90613fe7565b60405180910390fd5b600061133d61239e565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c582600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016113be929190614007565b602060405180830381865afa1580156113db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ff9190614045565b61143e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611435906140e4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b81526004016114b09190613283565b602060405180830381865afa1580156114cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f19190614119565b73ffffffffffffffffffffffffffffffffffffffff161480156115da57508073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016115819190613283565b602060405180830381865afa15801561159e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c29190614119565b73ffffffffffffffffffffffffffffffffffffffff16145b611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090614192565b60405180910390fd5b60006116236110b4565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68856040518263ffffffff1660e01b81526004016116809190613283565b600060405180830381600087803b15801561169a57600080fd5b505af11580156116ae573d6000803e3d6000fd5b50505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68846040518263ffffffff1660e01b815260040161170d9190613283565b600060405180830381600087803b15801561172757600080fd5b505af115801561173b573d6000803e3d6000fd5b505050506117598282604051806020016040528060008152506128b6565b50505050565b61176761239e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90613b14565b60405180910390fd5b80600560006117e261239e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661188f61239e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118d49190613073565b60405180910390a35050565b6118f16118eb61239e565b8361245f565b611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192790614224565b60405180910390fd5b61193c84848484612911565b50505050565b61194a61239e565b73ffffffffffffffffffffffffffffffffffffffff166119686111ba565b73ffffffffffffffffffffffffffffffffffffffff16146119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b590613deb565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4090613f55565b60405180910390fd5b600660149054906101000a900460ff16611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90613fe7565b60405180910390fd5b600060028251611aa89190614273565b14611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf906142f0565b60405180910390fd5b6000611af261239e565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c582600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611b73929190614007565b602060405180830381865afa158015611b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb49190614045565b611bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bea906140e4565b60405180910390fd5b6000611bfd6110b4565b905060005b8351811015611f91576000848281518110611c2057611c1f613d27565b5b60200260200101519050600085600184611c3a9190614310565b81518110611c4b57611c4a613d27565b5b602002602001015190508473ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401611cc79190613283565b602060405180830381865afa158015611ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d089190614119565b73ffffffffffffffffffffffffffffffffffffffff16148015611df157508473ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611d989190613283565b602060405180830381865afa158015611db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd99190614119565b73ffffffffffffffffffffffffffffffffffffffff16145b611e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2790614192565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68836040518263ffffffff1660e01b8152600401611e8b9190613283565b600060405180830381600087803b158015611ea557600080fd5b505af1158015611eb9573d6000803e3d6000fd5b50505050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68826040518263ffffffff1660e01b8152600401611f189190613283565b600060405180830381600087803b158015611f3257600080fd5b505af1158015611f46573d6000803e3d6000fd5b50505050611f7b85600285611f5b9190614366565b86611f669190614310565b604051806020016040528060008152506128b6565b5050600281611f8a9190614310565b9050611c02565b50505050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c583600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401612018929190614007565b602060405180830381865afa158015612035573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120599190614045565b9050919050565b606061206b82612316565b6120aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a190613d07565b60405180910390fd5b60006120b461296d565b905060008151116120d457604051806020016040528060008152506120ff565b806120de846129ff565b6040516020016120ef9291906143d3565b6040516020818303038152906040525b915050919050565b6000600660149054906101000a900460ff16905090565b6000600254905090565b600073a5409ec958c83c3f309868babaca7c86dcb077c173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561217b5760019050612188565b6121858383612b60565b90505b92915050565b61219661239e565b73ffffffffffffffffffffffffffffffffffffffff166121b46111ba565b73ffffffffffffffffffffffffffffffffffffffff161461220a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220190613deb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561227a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227190614469565b60405180910390fd5b612283816127f0565b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000600380549050821080156123975750600073ffffffffffffffffffffffffffffffffffffffff166003838154811061235357612352613d27565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661241983610cf7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061246a82612316565b6124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a090613a82565b60405180910390fd5b60006124b483610cf7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061252357508373ffffffffffffffffffffffffffffffffffffffff1661250b84610842565b73ffffffffffffffffffffffffffffffffffffffff16145b8061253457506125338185612128565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661255d82610cf7565b73ffffffffffffffffffffffffffffffffffffffff16146125b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125aa906144d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614541565b60405180910390fd5b61262e838383612bf4565b6126396000826123a6565b816003828154811061264e5761264d613d27565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061270182610cf7565b905061270f81600084612bf4565b61271a6000836123a6565b6000600383815481106127305761272f613d27565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506002600081548092919061278b90613d56565b919050555081600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128c08383612bf9565b6128cd6000848484612d81565b61290c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612903906145ad565b60405180910390fd5b505050565b61291c84848461253d565b61292884848484612d81565b612967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295e906145ad565b60405180910390fd5b50505050565b60606007805461297c906139de565b80601f01602080910402602001604051908101604052809291908181526020018280546129a8906139de565b80156129f55780601f106129ca576101008083540402835291602001916129f5565b820191906000526020600020905b8154815290600101906020018083116129d857829003601f168201915b5050505050905090565b60606000821415612a47576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b5b565b600082905060005b60008214612a79578080612a6290613d56565b915050600a82612a729190614366565b9150612a4f565b60008167ffffffffffffffff811115612a9557612a946132fb565b5b6040519080825280601f01601f191660200182016040528015612ac75781602001600182028036833780820191505090505b5090505b60008514612b5457600182612ae09190613bf5565b9150600a85612aef9190614273565b6030612afb9190614310565b60f81b818381518110612b1157612b10613d27565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b4d9190614366565b9450612acb565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b505050565b612c0281612316565b15612c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3990614619565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca990614685565b60405180910390fd5b612cbe60008383612bf4565b6003829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612da28473ffffffffffffffffffffffffffffffffffffffff16612f09565b15612efc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612dcb61239e565b8786866040518563ffffffff1660e01b8152600401612ded94939291906146fa565b6020604051808303816000875af1925050508015612e2957506040513d601f19601f82011682018060405250810190612e26919061475b565b60015b612eac573d8060008114612e59576040519150601f19603f3d011682016040523d82523d6000602084013e612e5e565b606091505b50600081511415612ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9b906147fa565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f01565b600190505b949350505050565b600080823b905060008111915050919050565b828054612f28906139de565b90600052602060002090601f016020900481019282612f4a5760008555612f91565b82601f10612f6357805160ff1916838001178555612f91565b82800160010185558215612f91579182015b82811115612f90578251825591602001919060010190612f75565b5b509050612f9e9190612fa2565b5090565b5b80821115612fbb576000816000905550600101612fa3565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61300881612fd3565b811461301357600080fd5b50565b60008135905061302581612fff565b92915050565b60006020828403121561304157613040612fc9565b5b600061304f84828501613016565b91505092915050565b60008115159050919050565b61306d81613058565b82525050565b60006020820190506130886000830184613064565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156130c85780820151818401526020810190506130ad565b838111156130d7576000848401525b50505050565b6000601f19601f8301169050919050565b60006130f98261308e565b6131038185613099565b93506131138185602086016130aa565b61311c816130dd565b840191505092915050565b6000602082019050818103600083015261314181846130ee565b905092915050565b6000819050919050565b61315c81613149565b811461316757600080fd5b50565b60008135905061317981613153565b92915050565b60006020828403121561319557613194612fc9565b5b60006131a38482850161316a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006131d7826131ac565b9050919050565b6131e7816131cc565b82525050565b600060208201905061320260008301846131de565b92915050565b613211816131cc565b811461321c57600080fd5b50565b60008135905061322e81613208565b92915050565b6000806040838503121561324b5761324a612fc9565b5b60006132598582860161321f565b925050602061326a8582860161316a565b9150509250929050565b61327d81613149565b82525050565b60006020820190506132986000830184613274565b92915050565b6000806000606084860312156132b7576132b6612fc9565b5b60006132c58682870161321f565b93505060206132d68682870161321f565b92505060406132e78682870161316a565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613333826130dd565b810181811067ffffffffffffffff82111715613352576133516132fb565b5b80604052505050565b6000613365612fbf565b9050613371828261332a565b919050565b600067ffffffffffffffff821115613391576133906132fb565b5b61339a826130dd565b9050602081019050919050565b82818337600083830152505050565b60006133c96133c484613376565b61335b565b9050828152602081018484840111156133e5576133e46132f6565b5b6133f08482856133a7565b509392505050565b600082601f83011261340d5761340c6132f1565b5b813561341d8482602086016133b6565b91505092915050565b60006020828403121561343c5761343b612fc9565b5b600082013567ffffffffffffffff81111561345a57613459612fce565b5b613466848285016133f8565b91505092915050565b60006020828403121561348557613484612fc9565b5b60006134938482850161321f565b91505092915050565b60006134a7826131cc565b9050919050565b6134b78161349c565b81146134c257600080fd5b50565b6000813590506134d4816134ae565b92915050565b6000602082840312156134f0576134ef612fc9565b5b60006134fe848285016134c5565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61353c81613149565b82525050565b600061354e8383613533565b60208301905092915050565b6000602082019050919050565b600061357282613507565b61357c8185613512565b935061358783613523565b8060005b838110156135b857815161359f8882613542565b97506135aa8361355a565b92505060018101905061358b565b5085935050505092915050565b600060208201905081810360008301526135df8184613567565b905092915050565b600080604083850312156135fe576135fd612fc9565b5b600061360c8582860161316a565b925050602061361d8582860161316a565b9150509250929050565b61363081613058565b811461363b57600080fd5b50565b60008135905061364d81613627565b92915050565b6000806040838503121561366a57613669612fc9565b5b60006136788582860161321f565b92505060206136898582860161363e565b9150509250929050565b600067ffffffffffffffff8211156136ae576136ad6132fb565b5b6136b7826130dd565b9050602081019050919050565b60006136d76136d284613693565b61335b565b9050828152602081018484840111156136f3576136f26132f6565b5b6136fe8482856133a7565b509392505050565b600082601f83011261371b5761371a6132f1565b5b813561372b8482602086016136c4565b91505092915050565b6000806000806080858703121561374e5761374d612fc9565b5b600061375c8782880161321f565b945050602061376d8782880161321f565b935050604061377e8782880161316a565b925050606085013567ffffffffffffffff81111561379f5761379e612fce565b5b6137ab87828801613706565b91505092959194509250565b6000602082840312156137cd576137cc612fc9565b5b60006137db8482850161363e565b91505092915050565b600067ffffffffffffffff8211156137ff576137fe6132fb565b5b602082029050602081019050919050565b600080fd5b6000613828613823846137e4565b61335b565b9050808382526020820190506020840283018581111561384b5761384a613810565b5b835b818110156138745780613860888261316a565b84526020840193505060208101905061384d565b5050509392505050565b600082601f830112613893576138926132f1565b5b81356138a3848260208601613815565b91505092915050565b6000602082840312156138c2576138c1612fc9565b5b600082013567ffffffffffffffff8111156138e0576138df612fce565b5b6138ec8482850161387e565b91505092915050565b6000806040838503121561390c5761390b612fc9565b5b600061391a8582860161321f565b925050602061392b8582860161321f565b9150509250929050565b6000819050919050565b600061395a613955613950846131ac565b613935565b6131ac565b9050919050565b600061396c8261393f565b9050919050565b600061397e82613961565b9050919050565b61398e81613973565b82525050565b60006020820190506139a96000830184613985565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806139f657607f821691505b60208210811415613a0a57613a096139af565b5b50919050565b7f436865636b696e6720666f72204f776e6572206f66206e6f6e6578697374656e60008201527f7420746f6b656e69640000000000000000000000000000000000000000000000602082015250565b6000613a6c602983613099565b9150613a7782613a10565b604082019050919050565b60006020820190508181036000830152613a9b81613a5f565b9050919050565b7f417070726f76616c20666f72204f776e6572206973206e6f74206e656365737360008201527f6172790000000000000000000000000000000000000000000000000000000000602082015250565b6000613afe602383613099565b9150613b0982613aa2565b604082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b7f417070726f76652066756e6374696f6e2063616c6c206279206e6f6e2d61707060008201527f726f7665642063616c6c65720000000000000000000000000000000000000000602082015250565b6000613b90602c83613099565b9150613b9b82613b34565b604082019050919050565b60006020820190508181036000830152613bbf81613b83565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c0082613149565b9150613c0b83613149565b925082821015613c1e57613c1d613bc6565b5b828203905092915050565b7f5472616e736665722066756e6374696f6e2063616c6c206279206e6f6e2d617060008201527f70726f7665642063616c6c657200000000000000000000000000000000000000602082015250565b6000613c85602d83613099565b9150613c9082613c29565b604082019050919050565b60006020820190508181036000830152613cb481613c78565b9050919050565b7f546f6b656e20646f6573206e6f74206578697374000000000000000000000000600082015250565b6000613cf1601483613099565b9150613cfc82613cbb565b602082019050919050565b60006020820190508181036000830152613d2081613ce4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613d6182613149565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d9457613d93613bc6565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dd5602083613099565b9150613de082613d9f565b602082019050919050565b60006020820190508181036000830152613e0481613dc8565b9050919050565b7f43616e6e6f74206d6561737572652062616c616e6365206f66204e756c6c204160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e67602683613099565b9150613e7282613e0b565b604082019050919050565b60006020820190508181036000830152613e9681613e5a565b9050919050565b7f41646472657373206f776e73206e6f20746f6b656e7300000000000000000000600082015250565b6000613ed3601683613099565b9150613ede82613e9d565b602082019050919050565b60006020820190508181036000830152613f0281613ec6565b9050919050565b7f4e6f20536d61727420436f6e74726163747320616c6c6f776564000000000000600082015250565b6000613f3f601a83613099565b9150613f4a82613f09565b602082019050919050565b60006020820190508181036000830152613f6e81613f32565b9050919050565b7f5468652053796e74686573697a6572206973206e6f742061637469766520637560008201527f7272656e746c792e000000000000000000000000000000000000000000000000602082015250565b6000613fd1602883613099565b9150613fdc82613f75565b604082019050919050565b6000602082019050818103600083015261400081613fc4565b9050919050565b600060408201905061401c60008301856131de565b61402960208301846131de565b9392505050565b60008151905061403f81613627565b92915050565b60006020828403121561405b5761405a612fc9565b5b600061406984828501614030565b91505092915050565b7f53796e74686573697a6572206973206e6f7420617070726f76656420746f206260008201527f75726e20796f7572204e4654732e000000000000000000000000000000000000602082015250565b60006140ce602e83613099565b91506140d982614072565b604082019050919050565b600060208201905081810360008301526140fd816140c1565b9050919050565b60008151905061411381613208565b92915050565b60006020828403121561412f5761412e612fc9565b5b600061413d84828501614104565b91505092915050565b7f53796e74686573697a65722043616c6c6572206973206e6f74204f776e65722e600082015250565b600061417c602083613099565b915061418782614146565b602082019050919050565b600060208201905081810360008301526141ab8161416f565b9050919050565b7f736166655472616e736665722066756e6374696f6e2063616c6c206279206e6f60008201527f6e2d617070726f7665642063616c6c6572000000000000000000000000000000602082015250565b600061420e603183613099565b9150614219826141b2565b604082019050919050565b6000602082019050818103600083015261423d81614201565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061427e82613149565b915061428983613149565b92508261429957614298614244565b5b828206905092915050565b7f556e6576656e206e756d626572206f6620424d437320696e7075747465642e00600082015250565b60006142da601f83613099565b91506142e5826142a4565b602082019050919050565b60006020820190508181036000830152614309816142cd565b9050919050565b600061431b82613149565b915061432683613149565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561435b5761435a613bc6565b5b828201905092915050565b600061437182613149565b915061437c83613149565b92508261438c5761438b614244565b5b828204905092915050565b600081905092915050565b60006143ad8261308e565b6143b78185614397565b93506143c78185602086016130aa565b80840191505092915050565b60006143df82856143a2565b91506143eb82846143a2565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614453602683613099565b915061445e826143f7565b604082019050919050565b6000602082019050818103600083015261448281614446565b9050919050565b7f43616c6c657220646f6573206e6f74206f776e20746f6b656e00000000000000600082015250565b60006144bf601983613099565b91506144ca82614489565b602082019050919050565b600060208201905081810360008301526144ee816144b2565b9050919050565b7f43616e6e6f74207472616e7366657220746f204e756c6c204164647265737300600082015250565b600061452b601f83613099565b9150614536826144f5565b602082019050919050565b6000602082019050818103600083015261455a8161451e565b9050919050565b7f4572726f722066726f6d20455243373231526563656976657220636865636b00600082015250565b6000614597601f83613099565b91506145a282614561565b602082019050919050565b600060208201905081810360008301526145c68161458a565b9050919050565b7f546f6b656e20616c726561647920657869737473000000000000000000000000600082015250565b6000614603601483613099565b915061460e826145cd565b602082019050919050565b60006020820190508181036000830152614632816145f6565b9050919050565b7f43616e6e6f74206d696e7420746f204e756c6c20416464726573730000000000600082015250565b600061466f601b83613099565b915061467a82614639565b602082019050919050565b6000602082019050818103600083015261469e81614662565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006146cc826146a5565b6146d681856146b0565b93506146e68185602086016130aa565b6146ef816130dd565b840191505092915050565b600060808201905061470f60008301876131de565b61471c60208301866131de565b6147296040830185613274565b818103606083015261473b81846146c1565b905095945050505050565b60008151905061475581612fff565b92915050565b60006020828403121561477157614770612fc9565b5b600061477f84828501614746565b91505092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006147e4603283613099565b91506147ef82614788565b604082019050919050565b60006020820190508181036000830152614813816147d7565b905091905056fea2646970667358221220837f2b7bca8e71d2e4956bf990576d0fe70b3552ed52089c4a064547234647f964736f6c634300080b0033697066733a2f2f516d5647526d343376535852797a52524d3343386a3372764c446162757853336e5436563566744d6a5850704c332f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000047bd71b482b27ebdb57af6e372cab46c7280bf440000000000000000000000000000000000000000000000000000000000000010424d4320556c747261204d696e657273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005554c545241000000000000000000000000000000000000000000000000000000