0x6080604052612775600c556010600a6200001a9190620004a4565b6003620000289190620005e1565b600d5573316b0ebc14717ef4edb15fb244b1879949c4363d600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200008d57600080fd5b50604051620050b4380380620050b48339818101604052810190620000b391906200035a565b82828160009080519060200190620000cd92919062000221565b508060019080519060200190620000e692919062000221565b50505062000109620000fd6200015360201b60201c565b6200015b60201b60201c565b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050620007a0565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022f90620006b6565b90600052602060002090601f0160209004810192826200025357600085556200029f565b82601f106200026e57805160ff19168380011785556200029f565b828001600101855582156200029f579182015b828111156200029e57825182559160200191906001019062000281565b5b509050620002ae9190620002b2565b5090565b5b80821115620002cd576000816000905550600101620002b3565b5090565b6000620002e8620002e28462000416565b620003e2565b9050828152602081018484840111156200030157600080fd5b6200030e84828562000680565b509392505050565b600081519050620003278162000786565b92915050565b600082601f8301126200033f57600080fd5b815162000351848260208601620002d1565b91505092915050565b6000806000606084860312156200037057600080fd5b600084015167ffffffffffffffff8111156200038b57600080fd5b62000399868287016200032d565b935050602084015167ffffffffffffffff811115620003b757600080fd5b620003c5868287016200032d565b9250506040620003d88682870162000316565b9150509250925092565b6000604051905081810181811067ffffffffffffffff821117156200040c576200040b6200074a565b5b8060405250919050565b600067ffffffffffffffff8211156200043457620004336200074a565b5b601f19601f8301169050602081019050919050565b6000808291508390505b60018511156200049b57808604811115620004735762000472620006ec565b5b6001851615620004835780820291505b8081029050620004938562000779565b945062000453565b94509492505050565b6000620004b18262000676565b9150620004be8362000676565b9250620004ed7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620004f5565b905092915050565b600082620005075760019050620005da565b81620005175760009050620005da565b81600181146200053057600281146200053b5762000571565b6001915050620005da565b60ff84111562000550576200054f620006ec565b5b8360020a9150848211156200056a5762000569620006ec565b5b50620005da565b5060208310610133831016604e8410600b8410161715620005ab5782820a905083811115620005a557620005a4620006ec565b5b620005da565b620005ba848484600162000449565b92509050818404811115620005d457620005d3620006ec565b5b81810290505b9392505050565b6000620005ee8262000676565b9150620005fb8362000676565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620006375762000636620006ec565b5b828202905092915050565b60006200064f8262000656565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620006a057808201518184015260208101905062000683565b83811115620006b0576000848401525b50505050565b60006002820490506001821680620006cf57607f821691505b60208210811415620006e657620006e56200071b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008160011c9050919050565b620007918162000642565b81146200079d57600080fd5b50565b61490480620007b06000396000f3fe60806040526004361061019c5760003560e01c806366d003ac116100ec578063a4dbeb641161008a578063d5abeb0111610064578063d5abeb01146105be578063e0a33b36146105e9578063e985e9c514610612578063f2fde38b1461064f5761019c565b8063a4dbeb641461053c578063b88d4fde14610558578063c87b56dd146105815761019c565b80638da5cb5b116100c65780638da5cb5b1461049257806395d89b41146104bd578063a035b1fe146104e8578063a22cb465146105135761019c565b806366d003ac1461041357806370a082311461043e578063715018a61461047b5761019c565b8063278f5901116101595780633707cfc1116101335780633707cfc11461034757806342842e0e146103705780634f6ccce7146103995780636352211e146103d65761019c565b8063278f5901146102c35780632f745c59146102df5780633013ce291461031c5761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b31461024657806318160ddd1461026f57806323b872dd1461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c3919061356a565b610678565b6040516101d591906140ca565b60405180910390f35b3480156101ea57600080fd5b506101f361068a565b60405161020091906140e5565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b91906135bc565b61071c565b60405161023d9190614003565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190613486565b6107a1565b005b34801561027b57600080fd5b506102846108b9565b60405161029191906143e7565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190613380565b6108c6565b005b6102dd60048036038101906102d89190613639565b610926565b005b3480156102eb57600080fd5b5061030660048036038101906103019190613486565b610c1b565b60405161031391906143e7565b60405180910390f35b34801561032857600080fd5b50610331610cc0565b60405161033e9190614003565b60405180910390f35b34801561035357600080fd5b5061036e600480360381019061036991906136a0565b610ce6565b005b34801561037c57600080fd5b5061039760048036038101906103929190613380565b610dfd565b005b3480156103a557600080fd5b506103c060048036038101906103bb91906135bc565b610e1d565b6040516103cd91906143e7565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f891906135bc565b610eb4565b60405161040a9190614003565b60405180910390f35b34801561041f57600080fd5b50610428610f66565b6040516104359190614003565b60405180910390f35b34801561044a57600080fd5b506104656004803603810190610460919061331b565b610f8c565b60405161047291906143e7565b60405180910390f35b34801561048757600080fd5b50610490611044565b005b34801561049e57600080fd5b506104a76110ca565b6040516104b49190614003565b60405180910390f35b3480156104c957600080fd5b506104d26110d9565b6040516104df91906140e5565b60405180910390f35b3480156104f457600080fd5b506104fd61116b565b60405161050a91906143e7565b60405180910390f35b34801561051f57600080fd5b5061053a6004803603810190610535919061344a565b611171565b005b610556600480360381019061055191906134c2565b6112f2565b005b34801561056457600080fd5b5061057f600480360381019061057a91906133cf565b611713565b005b34801561058d57600080fd5b506105a860048036038101906105a391906135bc565b611775565b6040516105b591906140e5565b60405180910390f35b3480156105ca57600080fd5b506105d3611787565b6040516105e091906143e7565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b91906135e5565b61178d565b005b34801561061e57600080fd5b5061063960048036038101906106349190613344565b611821565b60405161064691906140ca565b60405180910390f35b34801561065b57600080fd5b506106766004803603810190610671919061331b565b6118b5565b005b60006106838261193d565b9050919050565b606060008054610699906146f9565b80601f01602080910402602001604051908101604052809291908181526020018280546106c5906146f9565b80156107125780601f106106e757610100808354040283529160200191610712565b820191906000526020600020905b8154815290600101906020018083116106f557829003601f168201915b5050505050905090565b6000610727826119b7565b610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075d906142c7565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107ac82610eb4565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561081d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081490614367565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661083c611a23565b73ffffffffffffffffffffffffffffffffffffffff16148061086b575061086a81610865611a23565b611821565b5b6108aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a190614207565b60405180910390fd5b6108b48383611a2b565b505050565b6000600980549050905090565b6108d76108d1611a23565b82611ae4565b610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d906143a7565b60405180910390fd5b610921838383611bc2565b505050565b600c546109316108b9565b10610971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096890614387565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610a1157600d543414610a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0390614307565b60405180910390fd5b610ac6565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330600d546040518463ffffffff1660e01b8152600401610a729392919061401e565b602060405180830381600087803b158015610a8c57600080fd5b505af1158015610aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac49190613541565b505b610ad03384611e1e565b610ada8383611e3c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b6557610b60600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d54600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611eb0565b610c16565b610bce600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a6009600d54610b9c91906145b5565b610ba69190614584565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611eb0565b610c1581600a6001600d54610be391906145b5565b610bed9190614584565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611eb0565b5b505050565b6000610c2683610f8c565b8210610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e90614107565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610cee611a23565b73ffffffffffffffffffffffffffffffffffffffff16610d0c6110ca565b73ffffffffffffffffffffffffffffffffffffffff1614610d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d59906142e7565b60405180910390fd5b60008214610d725781600c819055505b60008314610d825782600d819055505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610df85780600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505050565b610e1883838360405180602001604052806000815250611713565b505050565b6000610e276108b9565b8210610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f906143c7565b60405180910390fd5b60098281548110610ea2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5490614247565b60405180910390fd5b80915050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490614227565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61104c611a23565b73ffffffffffffffffffffffffffffffffffffffff1661106a6110ca565b73ffffffffffffffffffffffffffffffffffffffff16146110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b7906142e7565b60405180910390fd5b6110c8611fc4565b565b60006110d461204c565b905090565b6060600180546110e8906146f9565b80601f0160208091040260200160405190810160405280929190818152602001828054611114906146f9565b80156111615780601f1061113657610100808354040283529160200191611161565b820191906000526020600020905b81548152906001019060200180831161114457829003601f168201915b5050505050905090565b600d5481565b611179611a23565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de906141a7565b60405180910390fd5b80600560006111f4611a23565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166112a1611a23565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112e691906140ca565b60405180910390a35050565b8151835114611336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d906141c7565b60405180910390fd5b600c546113416108b9565b10611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137890614387565b60405180910390fd5b60008351600d5461139291906145b5565b9050600073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156114325780341461142d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142490614307565b60405180910390fd5b6114e5565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016114919392919061401e565b602060405180830381600087803b1580156114ab57600080fd5b505af11580156114bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e39190613541565b505b60005b84518110156115d65761153b3386838151811061152e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611e1e565b6115c5858281518110611577577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518583815181106115b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611e3c565b806115cf9061472b565b90506114e8565b50600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116605761165b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611eb0565b61170d565b6116c7600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60098461169591906145b5565b61169f9190614584565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611eb0565b61170c82600a6001846116da91906145b5565b6116e49190614584565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611eb0565b5b50505050565b61172461171e611a23565b83611ae4565b611763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175a906143a7565b60405180910390fd5b61176f84848484612076565b50505050565b6060611780826120d2565b9050919050565b600c5481565b611795611a23565b73ffffffffffffffffffffffffffffffffffffffff166117b36110ca565b73ffffffffffffffffffffffffffffffffffffffff1614611809576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611800906142e7565b60405180910390fd5b6118133383611e1e565b61181d8282611e3c565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118bd611a23565b73ffffffffffffffffffffffffffffffffffffffff166118db6110ca565b73ffffffffffffffffffffffffffffffffffffffff1614611931576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611928906142e7565b60405180910390fd5b61193a81612224565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806119b057506119af8261231c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a9e83610eb4565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611aef826119b7565b611b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b25906141e7565b60405180910390fd5b6000611b3983610eb4565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611ba857508373ffffffffffffffffffffffffffffffffffffffff16611b908461071c565b73ffffffffffffffffffffffffffffffffffffffff16145b80611bb95750611bb88185611821565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611be282610eb4565b73ffffffffffffffffffffffffffffffffffffffff1614611c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2f90614327565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f90614187565b60405180910390fd5b611cb38383836123fe565b611cbe600082611a2b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d0e919061460f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d65919061452e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611e3882826040518060200160405280600081525061240e565b5050565b611e45826119b7565b611e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7b90614267565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190611eab92919061300d565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611f77578073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401611f1f9291906140a1565b602060405180830381600087803b158015611f3957600080fd5b505af1158015611f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f719190613541565b50611fbf565b8273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611fbd573d6000803e3d6000fd5b505b505050565b611fcc611a23565b73ffffffffffffffffffffffffffffffffffffffff16611fea6110ca565b73ffffffffffffffffffffffffffffffffffffffff1614612040576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612037906142e7565b60405180910390fd5b61204a6000612469565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612081848484611bc2565b61208d8484848461252f565b6120cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c390614127565b60405180910390fd5b50505050565b60606120dd826119b7565b61211c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612113906142a7565b60405180910390fd5b600060066000848152602001908152602001600020805461213c906146f9565b80601f0160208091040260200160405190810160405280929190818152602001828054612168906146f9565b80156121b55780601f1061218a576101008083540402835291602001916121b5565b820191906000526020600020905b81548152906001019060200180831161219857829003601f168201915b5050505050905060006121c66126c6565b90506000815114156121dc57819250505061221f565b6000825111156122115780826040516020016121f9929190613fdf565b6040516020818303038152906040529250505061221f565b61221a846126dd565b925050505b919050565b61222c611a23565b73ffffffffffffffffffffffffffffffffffffffff1661224a6110ca565b73ffffffffffffffffffffffffffffffffffffffff16146122a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612297906142e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230790614147565b60405180910390fd5b61231981612469565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806123e757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806123f757506123f682612784565b5b9050919050565b6124098383836127ee565b505050565b6124188383612902565b612425600084848461252f565b612464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245b90614127565b60405180910390fd5b505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006125508473ffffffffffffffffffffffffffffffffffffffff16612ad0565b156126b9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612579611a23565b8786866040518563ffffffff1660e01b815260040161259b9493929190614055565b602060405180830381600087803b1580156125b557600080fd5b505af19250505080156125e657506040513d601f19601f820116820180604052508101906125e39190613593565b60015b612669573d8060008114612616576040519150601f19603f3d011682016040523d82523d6000602084013e61261b565b606091505b50600081511415612661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265890614127565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506126be565b600190505b949350505050565b606060405180602001604052806000815250905090565b60606126e8826119b7565b612727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271e90614347565b60405180910390fd5b60006127316126c6565b90506000815111612751576040518060200160405280600081525061277c565b8061275b84612ae3565b60405160200161276c929190613fdf565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6127f9838383612c90565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561283c5761283781612c95565b61287b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461287a576128798382612cde565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128be576128b981612e4b565b6128fd565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146128fc576128fb8282612f8e565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296990614287565b60405180910390fd5b61297b816119b7565b156129bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b290614167565b60405180910390fd5b6129c7600083836123fe565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a17919061452e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60606000821415612b2b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c8b565b600082905060005b60008214612b5d578080612b469061472b565b915050600a82612b569190614584565b9150612b33565b60008167ffffffffffffffff811115612b9f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612bd15781602001600182028036833780820191505090505b5090505b60008514612c8457600182612bea919061460f565b9150600a85612bf99190614774565b6030612c05919061452e565b60f81b818381518110612c41577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c7d9190614584565b9450612bd5565b8093505050505b919050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ceb84610f8c565b612cf5919061460f565b9050600060086000848152602001908152602001600020549050818114612dda576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612e5f919061460f565b90506000600a6000848152602001908152602001600020549050600060098381548110612eb5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060098381548110612efd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612f72577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612f9983610f8c565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b828054613019906146f9565b90600052602060002090601f01602090048101928261303b5760008555613082565b82601f1061305457805160ff1916838001178555613082565b82800160010185558215613082579182015b82811115613081578251825591602001919060010190613066565b5b50905061308f9190613093565b5090565b5b808211156130ac576000816000905550600101613094565b5090565b60006130c36130be84614433565b614402565b9050808382526020820190508260005b8581101561310357813585016130e988826132dc565b8452602084019350602083019250506001810190506130d3565b5050509392505050565b600061312061311b8461445f565b614402565b9050808382526020820190508285602086028201111561313f57600080fd5b60005b8581101561316f57816131558882613306565b845260208401935060208301925050600181019050613142565b5050509392505050565b600061318c6131878461448b565b614402565b9050828152602081018484840111156131a457600080fd5b6131af8482856146b7565b509392505050565b60006131ca6131c5846144bb565b614402565b9050828152602081018484840111156131e257600080fd5b6131ed8482856146b7565b509392505050565b60008135905061320481614872565b92915050565b600082601f83011261321b57600080fd5b813561322b8482602086016130b0565b91505092915050565b600082601f83011261324557600080fd5b813561325584826020860161310d565b91505092915050565b60008135905061326d81614889565b92915050565b60008151905061328281614889565b92915050565b600081359050613297816148a0565b92915050565b6000815190506132ac816148a0565b92915050565b600082601f8301126132c357600080fd5b81356132d3848260208601613179565b91505092915050565b600082601f8301126132ed57600080fd5b81356132fd8482602086016131b7565b91505092915050565b600081359050613315816148b7565b92915050565b60006020828403121561332d57600080fd5b600061333b848285016131f5565b91505092915050565b6000806040838503121561335757600080fd5b6000613365858286016131f5565b9250506020613376858286016131f5565b9150509250929050565b60008060006060848603121561339557600080fd5b60006133a3868287016131f5565b93505060206133b4868287016131f5565b92505060406133c586828701613306565b9150509250925092565b600080600080608085870312156133e557600080fd5b60006133f3878288016131f5565b9450506020613404878288016131f5565b935050604061341587828801613306565b925050606085013567ffffffffffffffff81111561343257600080fd5b61343e878288016132b2565b91505092959194509250565b6000806040838503121561345d57600080fd5b600061346b858286016131f5565b925050602061347c8582860161325e565b9150509250929050565b6000806040838503121561349957600080fd5b60006134a7858286016131f5565b92505060206134b885828601613306565b9150509250929050565b6000806000606084860312156134d757600080fd5b600084013567ffffffffffffffff8111156134f157600080fd5b6134fd86828701613234565b935050602084013567ffffffffffffffff81111561351a57600080fd5b6135268682870161320a565b9250506040613537868287016131f5565b9150509250925092565b60006020828403121561355357600080fd5b600061356184828501613273565b91505092915050565b60006020828403121561357c57600080fd5b600061358a84828501613288565b91505092915050565b6000602082840312156135a557600080fd5b60006135b38482850161329d565b91505092915050565b6000602082840312156135ce57600080fd5b60006135dc84828501613306565b91505092915050565b600080604083850312156135f857600080fd5b600061360685828601613306565b925050602083013567ffffffffffffffff81111561362357600080fd5b61362f858286016132dc565b9150509250929050565b60008060006060848603121561364e57600080fd5b600061365c86828701613306565b935050602084013567ffffffffffffffff81111561367957600080fd5b613685868287016132dc565b9250506040613696868287016131f5565b9150509250925092565b6000806000606084860312156136b557600080fd5b60006136c386828701613306565b93505060206136d486828701613306565b92505060406136e5868287016131f5565b9150509250925092565b6136f881614643565b82525050565b61370781614655565b82525050565b6000613718826144eb565b6137228185614501565b93506137328185602086016146c6565b61373b81614861565b840191505092915050565b6000613751826144f6565b61375b8185614512565b935061376b8185602086016146c6565b61377481614861565b840191505092915050565b600061378a826144f6565b6137948185614523565b93506137a48185602086016146c6565b80840191505092915050565b60006137bd602b83614512565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613823603283614512565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613889602683614512565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138ef601c83614512565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061392f602483614512565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613995601983614512565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006139d5601483614512565b91507f77726f6e6720636f756e74206f6620746f6b656e0000000000000000000000006000830152602082019050919050565b6000613a15602c83614512565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613a7b603883614512565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613ae1602a83614512565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b47602983614512565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bad602e83614512565b91507f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008301527f6578697374656e7420746f6b656e0000000000000000000000000000000000006020830152604082019050919050565b6000613c13602083614512565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613c53603183614512565b91507f45524337323155524953746f726167653a2055524920717565727920666f722060008301527f6e6f6e6578697374656e7420746f6b656e0000000000000000000000000000006020830152604082019050919050565b6000613cb9602c83614512565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613d1f602083614512565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613d5f601083614512565b91507f7072696365206d757374206d61746368000000000000000000000000000000006000830152602082019050919050565b6000613d9f602983614512565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e05602f83614512565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613e6b602183614512565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ed1601083614512565b91507f4265796f6e64206d6178537570706c79000000000000000000000000000000006000830152602082019050919050565b6000613f11603183614512565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613f77602c83614512565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b613fd9816146ad565b82525050565b6000613feb828561377f565b9150613ff7828461377f565b91508190509392505050565b600060208201905061401860008301846136ef565b92915050565b600060608201905061403360008301866136ef565b61404060208301856136ef565b61404d6040830184613fd0565b949350505050565b600060808201905061406a60008301876136ef565b61407760208301866136ef565b6140846040830185613fd0565b8181036060830152614096818461370d565b905095945050505050565b60006040820190506140b660008301856136ef565b6140c36020830184613fd0565b9392505050565b60006020820190506140df60008301846136fe565b92915050565b600060208201905081810360008301526140ff8184613746565b905092915050565b60006020820190508181036000830152614120816137b0565b9050919050565b6000602082019050818103600083015261414081613816565b9050919050565b600060208201905081810360008301526141608161387c565b9050919050565b60006020820190508181036000830152614180816138e2565b9050919050565b600060208201905081810360008301526141a081613922565b9050919050565b600060208201905081810360008301526141c081613988565b9050919050565b600060208201905081810360008301526141e0816139c8565b9050919050565b6000602082019050818103600083015261420081613a08565b9050919050565b6000602082019050818103600083015261422081613a6e565b9050919050565b6000602082019050818103600083015261424081613ad4565b9050919050565b6000602082019050818103600083015261426081613b3a565b9050919050565b6000602082019050818103600083015261428081613ba0565b9050919050565b600060208201905081810360008301526142a081613c06565b9050919050565b600060208201905081810360008301526142c081613c46565b9050919050565b600060208201905081810360008301526142e081613cac565b9050919050565b6000602082019050818103600083015261430081613d12565b9050919050565b6000602082019050818103600083015261432081613d52565b9050919050565b6000602082019050818103600083015261434081613d92565b9050919050565b6000602082019050818103600083015261436081613df8565b9050919050565b6000602082019050818103600083015261438081613e5e565b9050919050565b600060208201905081810360008301526143a081613ec4565b9050919050565b600060208201905081810360008301526143c081613f04565b9050919050565b600060208201905081810360008301526143e081613f6a565b9050919050565b60006020820190506143fc6000830184613fd0565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561442957614428614832565b5b8060405250919050565b600067ffffffffffffffff82111561444e5761444d614832565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561447a57614479614832565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156144a6576144a5614832565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156144d6576144d5614832565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614539826146ad565b9150614544836146ad565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614579576145786147a5565b5b828201905092915050565b600061458f826146ad565b915061459a836146ad565b9250826145aa576145a96147d4565b5b828204905092915050565b60006145c0826146ad565b91506145cb836146ad565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614604576146036147a5565b5b828202905092915050565b600061461a826146ad565b9150614625836146ad565b925082821015614638576146376147a5565b5b828203905092915050565b600061464e8261468d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156146e45780820151818401526020810190506146c9565b838111156146f3576000848401525b50505050565b6000600282049050600182168061471157607f821691505b6020821081141561472557614724614803565b5b50919050565b6000614736826146ad565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614769576147686147a5565b5b600182019050919050565b600061477f826146ad565b915061478a836146ad565b92508261479a576147996147d4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61487b81614643565b811461488657600080fd5b50565b61489281614655565b811461489d57600080fd5b50565b6148a981614661565b81146148b457600080fd5b50565b6148c0816146ad565b81146148cb57600080fd5b5056fea264697066735822122040ea991b67a62c360a93fa834555cf9d95ed06c80d950fa697d523dd3a47839f64736f6c63430008000033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007595946616e63790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025959000000000000000000000000000000000000000000000000000000000000