60806040526000600a556000600b5560405162002b7238038062002b72833981810160405281019062000033919062000675565b62000053620000476200040360201b60201c565b6200040b60201b60201c565b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200009f57600080fd5b505afa158015620000b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000da919062000643565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200013d57600080fd5b505afa15801562000152573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000178919062000643565b6040518363ffffffff1660e01b8152600401620001979291906200075d565b602060405180830381600087803b158015620001b257600080fd5b505af1158015620001c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ed919062000643565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550856004908051906020019062000245929190620004e7565b5084600590805190602001906200025e929190620004e7565b506012600660006101000a81548160ff021916908360ff160217905550670de0b6b3a76400008462000291919062000863565b6007819055506001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200034a600754600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620004cf60201b62000d471790919060201c565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600754604051620003ef91906200078a565b60405180910390a350505050505062000a8a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183620004df919062000806565b905092915050565b828054620004f59062000938565b90600052602060002090601f01602090048101928262000519576000855562000565565b82601f106200053457805160ff191683800117855562000565565b8280016001018555821562000565579182015b828111156200056457825182559160200191906001019062000547565b5b50905062000574919062000578565b5090565b5b808211156200059357600081600090555060010162000579565b5090565b6000620005ae620005a884620007d0565b620007a7565b905082815260208101848484011115620005cd57620005cc62000a36565b5b620005da84828562000902565b509392505050565b600081519050620005f38162000a56565b92915050565b600082601f83011262000611576200061062000a31565b5b81516200062384826020860162000597565b91505092915050565b6000815190506200063d8162000a70565b92915050565b6000602082840312156200065c576200065b62000a40565b5b60006200066c84828501620005e2565b91505092915050565b600080600080600060a0868803121562000694576200069362000a40565b5b600086015167ffffffffffffffff811115620006b557620006b462000a3b565b5b620006c388828901620005f9565b955050602086015167ffffffffffffffff811115620006e757620006e662000a3b565b5b620006f588828901620005f9565b945050604062000708888289016200062c565b93505060606200071b88828901620005e2565b92505060806200072e88828901620005e2565b9150509295509295909350565b6200074681620008c4565b82525050565b6200075781620008f8565b82525050565b60006040820190506200077460008301856200073b565b6200078360208301846200073b565b9392505050565b6000602082019050620007a160008301846200074c565b92915050565b6000620007b3620007c6565b9050620007c182826200096e565b919050565b6000604051905090565b600067ffffffffffffffff821115620007ee57620007ed62000a02565b5b620007f98262000a45565b9050602081019050919050565b60006200081382620008f8565b91506200082083620008f8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620008585762000857620009a4565b5b828201905092915050565b60006200087082620008f8565b91506200087d83620008f8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620008b957620008b8620009a4565b5b828202905092915050565b6000620008d182620008d8565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200092257808201518184015260208101905062000905565b8381111562000932576000848401525b50505050565b600060028204905060018216806200095157607f821691505b60208210811415620009685762000967620009d3565b5b50919050565b620009798262000a45565b810181811067ffffffffffffffff821117156200099b576200099a62000a02565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b62000a6181620008c4565b811462000a6d57600080fd5b50565b62000a7b81620008f8565b811462000a8757600080fd5b50565b6120d88062000a9a6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063865541e7116100b8578063c492f0461161007c578063c492f0461461038f578063c816841b146103ab578063dd62ed3e146103c9578063f0cd1dac146103f9578063f2fde38b14610417578063f744bf221461043357610142565b8063865541e7146102d75780638da5cb5b146102f357806395d89b4114610311578063a457c2d71461032f578063a9059cbb1461035f57610142565b8063313ce5671161010a578063313ce56714610201578063395093511461021f5780635342acb41461024f57806370a082311461027f578063715018a6146102af57806382eefb43146102b957610142565b806306fdde0314610147578063095ea7b3146101655780631694505e1461019557806318160ddd146101b357806323b872dd146101d1575b600080fd5b61014f61044f565b60405161015c91906119ce565b60405180910390f35b61017f600480360381019061017a919061175a565b6104e1565b60405161018c9190611998565b60405180910390f35b61019d6104ff565b6040516101aa91906119b3565b60405180910390f35b6101bb610525565b6040516101c89190611ab0565b60405180910390f35b6101eb60048036038101906101e69190611707565b61052f565b6040516101f89190611998565b60405180910390f35b610209610608565b6040516102169190611acb565b60405180910390f35b6102396004803603810190610234919061175a565b61061f565b6040516102469190611998565b60405180910390f35b6102696004803603810190610264919061169a565b6106d2565b6040516102769190611998565b60405180910390f35b6102996004803603810190610294919061169a565b6106f2565b6040516102a69190611ab0565b60405180910390f35b6102b761073b565b005b6102c16107c3565b6040516102ce9190611ab0565b60405180910390f35b6102f160048036038101906102ec91906117fa565b6107c9565b005b6102fb61084f565b604051610308919061197d565b60405180910390f35b610319610878565b60405161032691906119ce565b60405180910390f35b6103496004803603810190610344919061175a565b61090a565b6040516103569190611998565b60405180910390f35b6103796004803603810190610374919061175a565b6109d7565b6040516103869190611998565b60405180910390f35b6103a960048036038101906103a4919061179a565b6109f5565b005b6103b3610b16565b6040516103c0919061197d565b60405180910390f35b6103e360048036038101906103de91906116c7565b610b3c565b6040516103f09190611ab0565b60405180910390f35b610401610bc3565b60405161040e9190611ab0565b60405180910390f35b610431600480360381019061042c919061169a565b610bc9565b005b61044d600480360381019061044891906117fa565b610cc1565b005b60606004805461045e90611cd5565b80601f016020809104026020016040519081016040528092919081815260200182805461048a90611cd5565b80156104d75780601f106104ac576101008083540402835291602001916104d7565b820191906000526020600020905b8154815290600101906020018083116104ba57829003601f168201915b5050505050905090565b60006104f56104ee610d5d565b8484610d65565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b600061053c848484610f30565b6105fd84610548610d5d565b6105f88560405180606001604052806028815260200161205660289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105ae610d5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461127a9092919063ffffffff16565b610d65565b600190509392505050565b6000600660009054906101000a900460ff16905090565b60006106c861062c610d5d565b846106c3856002600061063d610d5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d4790919063ffffffff16565b610d65565b6001905092915050565b60036020528060005260406000206000915054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610743610d5d565b73ffffffffffffffffffffffffffffffffffffffff1661076161084f565b73ffffffffffffffffffffffffffffffffffffffff16146107b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ae90611a50565b60405180910390fd5b6107c160006112cf565b565b600b5481565b6107d1610d5d565b73ffffffffffffffffffffffffffffffffffffffff166107ef61084f565b73ffffffffffffffffffffffffffffffffffffffff1614610845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c90611a50565b60405180910390fd5b80600a8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461088790611cd5565b80601f01602080910402602001604051908101604052809291908181526020018280546108b390611cd5565b80156109005780601f106108d557610100808354040283529160200191610900565b820191906000526020600020905b8154815290600101906020018083116108e357829003601f168201915b5050505050905090565b60006109cd610917610d5d565b846109c88560405180606001604052806025815260200161207e6025913960026000610941610d5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461127a9092919063ffffffff16565b610d65565b6001905092915050565b60006109eb6109e4610d5d565b8484610f30565b6001905092915050565b6109fd610d5d565b73ffffffffffffffffffffffffffffffffffffffff16610a1b61084f565b73ffffffffffffffffffffffffffffffffffffffff1614610a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6890611a50565b60405180910390fd5b60005b83839050811015610b10578160036000868685818110610a9757610a96611ddd565b5b9050602002016020810190610aac919061169a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610b0890611d07565b915050610a74565b50505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b610bd1610d5d565b73ffffffffffffffffffffffffffffffffffffffff16610bef61084f565b73ffffffffffffffffffffffffffffffffffffffff1614610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c90611a50565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cac90611a10565b60405180910390fd5b610cbe816112cf565b50565b610cc9610d5d565b73ffffffffffffffffffffffffffffffffffffffff16610ce761084f565b73ffffffffffffffffffffffffffffffffffffffff1614610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3490611a50565b60405180910390fd5b80600b8190555050565b60008183610d559190611b02565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc90611a90565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c90611a30565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f239190611ab0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9790611a70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611010576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611007906119f0565b60405180910390fd5b61107c8160405180606001604052806026815260200161203060269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461127a9092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806111625750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61117657611171848484611393565b611178565b815b90506111cc81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d4790919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161126c9190611ab0565b60405180910390a350505050565b60008383111582906112c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b991906119ce565b60405180910390fd5b5082840390509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600090508473ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561141f57611418606461140a600a54866115c390919063ffffffff16565b6115d990919063ffffffff16565b90506114a1565b8373ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156114a05761149d606461148f600b54866115c390919063ffffffff16565b6115d990919063ffffffff16565b90505b5b60008111156115a6576114fc81600160008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d4790919063ffffffff16565b600160008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161159d9190611ab0565b60405180910390a35b6115b981846115ef90919063ffffffff16565b9150509392505050565b600081836115d19190611b89565b905092915050565b600081836115e79190611b58565b905092915050565b600081836115fd9190611be3565b905092915050565b60008135905061161481611fea565b92915050565b60008083601f8401126116305761162f611e11565b5b8235905067ffffffffffffffff81111561164d5761164c611e0c565b5b60208301915083602082028301111561166957611668611e16565b5b9250929050565b60008135905061167f81612001565b92915050565b60008135905061169481612018565b92915050565b6000602082840312156116b0576116af611e20565b5b60006116be84828501611605565b91505092915050565b600080604083850312156116de576116dd611e20565b5b60006116ec85828601611605565b92505060206116fd85828601611605565b9150509250929050565b6000806000606084860312156117205761171f611e20565b5b600061172e86828701611605565b935050602061173f86828701611605565b925050604061175086828701611685565b9150509250925092565b6000806040838503121561177157611770611e20565b5b600061177f85828601611605565b925050602061179085828601611685565b9150509250929050565b6000806000604084860312156117b3576117b2611e20565b5b600084013567ffffffffffffffff8111156117d1576117d0611e1b565b5b6117dd8682870161161a565b935093505060206117f086828701611670565b9150509250925092565b6000602082840312156118105761180f611e20565b5b600061181e84828501611685565b91505092915050565b61183081611c17565b82525050565b61183f81611c29565b82525050565b61184e81611c6c565b82525050565b600061185f82611ae6565b6118698185611af1565b9350611879818560208601611ca2565b61188281611e25565b840191505092915050565b600061189a602383611af1565b91506118a582611e36565b604082019050919050565b60006118bd602683611af1565b91506118c882611e85565b604082019050919050565b60006118e0602283611af1565b91506118eb82611ed4565b604082019050919050565b6000611903602083611af1565b915061190e82611f23565b602082019050919050565b6000611926602583611af1565b915061193182611f4c565b604082019050919050565b6000611949602483611af1565b915061195482611f9b565b604082019050919050565b61196881611c55565b82525050565b61197781611c5f565b82525050565b60006020820190506119926000830184611827565b92915050565b60006020820190506119ad6000830184611836565b92915050565b60006020820190506119c86000830184611845565b92915050565b600060208201905081810360008301526119e88184611854565b905092915050565b60006020820190508181036000830152611a098161188d565b9050919050565b60006020820190508181036000830152611a29816118b0565b9050919050565b60006020820190508181036000830152611a49816118d3565b9050919050565b60006020820190508181036000830152611a69816118f6565b9050919050565b60006020820190508181036000830152611a8981611919565b9050919050565b60006020820190508181036000830152611aa98161193c565b9050919050565b6000602082019050611ac5600083018461195f565b92915050565b6000602082019050611ae0600083018461196e565b92915050565b600081519050919050565b600082825260208201905092915050565b6000611b0d82611c55565b9150611b1883611c55565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611b4d57611b4c611d50565b5b828201905092915050565b6000611b6382611c55565b9150611b6e83611c55565b925082611b7e57611b7d611d7f565b5b828204905092915050565b6000611b9482611c55565b9150611b9f83611c55565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611bd857611bd7611d50565b5b828202905092915050565b6000611bee82611c55565b9150611bf983611c55565b925082821015611c0c57611c0b611d50565b5b828203905092915050565b6000611c2282611c35565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611c7782611c7e565b9050919050565b6000611c8982611c90565b9050919050565b6000611c9b82611c35565b9050919050565b60005b83811015611cc0578082015181840152602081019050611ca5565b83811115611ccf576000848401525b50505050565b60006002820490506001821680611ced57607f821691505b60208210811415611d0157611d00611dae565b5b50919050565b6000611d1282611c55565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611d4557611d44611d50565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b611ff381611c17565b8114611ffe57600080fd5b50565b61200a81611c29565b811461201557600080fd5b50565b61202181611c55565b811461202c57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a6ed8a723bb442e08a4cef25541f753b46a8fc7aa8d6efd39ab654a1601ce96d64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000001908b1000000000000000000000000001cf8d485cac51593f1529db0dd9b26eddf2d3e6d0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000000000000000000000000000005504550455800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055045504558000000000000000000000000000000000000000000000000000000