60806040525f60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731e0049783f008a0085193e00003d00cd54003c71600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600b60146101000a81548160ff02191690831515021790555061012c600d5f6101000a81548161ffff021916908361ffff1602179055505f600e5534801561011f575f80fd5b5060405180602001604052805f81525061013e8161037960201b60201c565b5061015b61015061038c60201b60201c565b61039360201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036101f05733600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6040518060400160405280600781526020017f466f7274756e6500000000000000000000000000000000000000000000000000815250600490816102349190610a9b565b506040518060400160405280600381526020017f544b4e0000000000000000000000000000000000000000000000000000000000815250600590816102799190610a9b565b506040518060600160405280602b8152602001614feb602b9139600690816102a19190610a9b565b50600160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610319336007600e60405180602001604052805f81525061045660201b60201c565b5f5b606481101561037357610366600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600160405180602001604052805f81525061045660201b60201c565b808060010191505061031b565b506110be565b80600290816103889190610a9b565b5050565b5f33905090565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036104c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bb90610bea565b60405180910390fd5b5f6104d361038c60201b60201c565b9050610505815f876104ea886105ff60201b60201c565b6104f9886105ff60201b60201c565b8761067760201b60201c565b825f808681526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461055f9190610c35565b925050819055508473ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516105dc929190610c77565b60405180910390a46105f8815f8787878761067f60201b60201c565b5050505050565b60605f600167ffffffffffffffff81111561061d5761061c61086b565b5b60405190808252806020026020018201604052801561064b5781602001602082028036833780820191505090505b50905082815f8151811061066257610661610c9e565b5b60200260200101818152505080915050919050565b505050505050565b6106a48473ffffffffffffffffffffffffffffffffffffffff1661085b60201b60201c565b15610853578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016106ea959493929190610d7a565b6020604051808303815f875af192505050801561072557506040513d601f19601f820116820180604052508101906107229190610e34565b60015b6107ca57610731610e6b565b806308c379a00361078d5750610745610ebb565b80610750575061078f565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107849190610f82565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c190611012565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610851576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610848906110a0565b60405180910390fd5b505b505050505050565b5f919050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806108dc57607f821691505b6020821081036108ef576108ee610898565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026109517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610916565b61095b8683610916565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61099f61099a61099584610973565b61097c565b610973565b9050919050565b5f819050919050565b6109b883610985565b6109cc6109c4826109a6565b848454610922565b825550505050565b5f90565b6109e06109d4565b6109eb8184846109af565b505050565b5b81811015610a0e57610a035f826109d8565b6001810190506109f1565b5050565b601f821115610a5357610a24816108f5565b610a2d84610907565b81016020851015610a3c578190505b610a50610a4885610907565b8301826109f0565b50505b505050565b5f82821c905092915050565b5f610a735f1984600802610a58565b1980831691505092915050565b5f610a8b8383610a64565b9150826002028217905092915050565b610aa482610861565b67ffffffffffffffff811115610abd57610abc61086b565b5b610ac782546108c5565b610ad2828285610a12565b5f60209050601f831160018114610b03575f8415610af1578287015190505b610afb8582610a80565b865550610b62565b601f198416610b11866108f5565b5f5b82811015610b3857848901518255600182019150602085019450602081019050610b13565b86831015610b555784890151610b51601f891682610a64565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f455243313135353a206d696e7420746f20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f610bd4602183610b6a565b9150610bdf82610b7a565b604082019050919050565b5f6020820190508181035f830152610c0181610bc8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610c3f82610973565b9150610c4a83610973565b9250828201905080821115610c6257610c61610c08565b5b92915050565b610c7181610973565b82525050565b5f604082019050610c8a5f830185610c68565b610c976020830184610c68565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610cf482610ccb565b9050919050565b610d0481610cea565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610d4c82610d0a565b610d568185610d14565b9350610d66818560208601610d24565b610d6f81610d32565b840191505092915050565b5f60a082019050610d8d5f830188610cfb565b610d9a6020830187610cfb565b610da76040830186610c68565b610db46060830185610c68565b8181036080830152610dc68184610d42565b90509695505050505050565b5f604051905090565b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610e1381610ddf565b8114610e1d575f80fd5b50565b5f81519050610e2e81610e0a565b92915050565b5f60208284031215610e4957610e48610ddb565b5b5f610e5684828501610e20565b91505092915050565b5f8160e01c9050919050565b5f60033d1115610e875760045f803e610e845f51610e5f565b90505b90565b610e9382610d32565b810181811067ffffffffffffffff82111715610eb257610eb161086b565b5b80604052505050565b5f60443d10610f4757610ecc610dd2565b60043d036004823e80513d602482011167ffffffffffffffff82111715610ef4575050610f47565b808201805167ffffffffffffffff811115610f125750505050610f47565b80602083010160043d038501811115610f2f575050505050610f47565b610f3e82602001850186610e8a565b82955050505050505b90565b5f610f5482610861565b610f5e8185610b6a565b9350610f6e818560208601610d24565b610f7781610d32565b840191505092915050565b5f6020820190508181035f830152610f9a8184610f4a565b905092915050565b7f455243313135353a207472616e7366657220746f206e6f6e20455243313135355f8201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b5f610ffc603483610b6a565b915061100782610fa2565b604082019050919050565b5f6020820190508181035f83015261102981610ff0565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a656374655f8201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b5f61108a602883610b6a565b915061109582611030565b604082019050919050565b5f6020820190508181035f8301526110b78161107e565b9050919050565b613f20806110cb5f395ff3fe608060405234801561000f575f80fd5b506004361061018b575f3560e01c8063715018a6116100dc578063b5f6aeea11610095578063dd4e22231161006f578063dd4e222314610457578063e985e9c514610473578063f242432a146104a3578063f2fde38b146104bf5761018b565b8063b5f6aeea146103ff578063b63810251461041d578063cdec95231461043b5761018b565b8063715018a614610351578063862440e21461035b5780638c831b70146103775780638da5cb5b146103a757806395d89b41146103c5578063a22cb465146103e35761018b565b80630e89341c116101495780634e1273f4116101235780634e1273f4146102cb57806350d87740146102fb5780635c66045e146103175780636c0360eb146103335761018b565b80630e89341c14610263578063156e29f6146102935780632eb2c2d6146102af5761018b565b8062fdd58e1461018f57806301ffc9a7146101bf578063030a5236146101ef57806306a628d41461020b57806306fdde03146102295780630d3c69b414610247575b5f80fd5b6101a960048036038101906101a49190612690565b6104db565b6040516101b691906126dd565b60405180910390f35b6101d960048036038101906101d4919061274b565b61059e565b6040516101e69190612790565b60405180910390f35b6102096004803603810190610204919061280a565b61067f565b005b610213610763565b6040516102209190612871565b60405180910390f35b610231610776565b60405161023e91906128fa565b60405180910390f35b610261600480360381019061025c919061291a565b610802565b005b61027d6004803603810190610278919061291a565b6108bd565b60405161028a91906128fa565b60405180910390f35b6102ad60048036038101906102a89190612945565b61094f565b005b6102c960048036038101906102c49190612b7d565b6109ea565b005b6102e560048036038101906102e09190612d08565b610a8b565b6040516102f29190612e35565b60405180910390f35b61031560048036038101906103109190612e55565b610b9c565b005b610331600480360381019061032c9190612eaa565b610c70565b005b61033b610d55565b60405161034891906128fa565b60405180910390f35b610359610de1565b005b61037560048036038101906103709190612f73565b610e68565b005b610391600480360381019061038c9190612e55565b610f30565b60405161039e9190612790565b60405180910390f35b6103af610f82565b6040516103bc9190612fdc565b60405180910390f35b6103cd610faa565b6040516103da91906128fa565b60405180910390f35b6103fd60048036038101906103f8919061301f565b611036565b005b610407611116565b60405161041491906126dd565b60405180910390f35b61042561111c565b60405161043291906126dd565b60405180910390f35b61045560048036038101906104509190612e55565b611128565b005b610471600480360381019061046c919061280a565b6111fb565b005b61048d6004803603810190610488919061305d565b6113b1565b60405161049a9190612790565b60405180910390f35b6104bd60048036038101906104b8919061309b565b61143f565b005b6104d960048036038101906104d49190612e55565b611572565b005b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361054a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105419061319e565b60405180910390fd5b5f808381526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f7fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061066857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610678575061067782611668565b5b9050919050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061070657506106d7610f82565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073c90613206565b60405180910390fd5b8181600c919061075692919061253a565b5061075f6116d1565b5050565b600d5f9054906101000a900461ffff1681565b6004805461078390613251565b80601f01602080910402602001604051908101604052809291908181526020018280546107af90613251565b80156107fa5780601f106107d1576101008083540402835291602001916107fa565b820191905f5260205f20905b8154815290600101906020018083116107dd57829003601f168201915b505050505081565b61080a6116da565b73ffffffffffffffffffffffffffffffffffffffff16610828610f82565b73ffffffffffffffffffffffffffffffffffffffff161461087e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610875906132cb565b60405180910390fd5b5f600190505b8181116108b9576108a63382600160405180602001604052805f8152506116e1565b80806108b190613316565b915050610884565b5050565b6060600680546108cc90613251565b80601f01602080910402602001604051908101604052809291908181526020018280546108f890613251565b80156109435780601f1061091a57610100808354040283529160200191610943565b820191905f5260205f20905b81548152906001019060200180831161092657829003601f168201915b50505050509050919050565b6109576116da565b73ffffffffffffffffffffffffffffffffffffffff16610975610f82565b73ffffffffffffffffffffffffffffffffffffffff16146109cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c2906132cb565b60405180910390fd5b6109e583838360405180602001604052805f8152506116e1565b505050565b6109f26116da565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a385750610a3785610a326116da565b6113b1565b5b610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e906133cd565b60405180910390fd5b610a84858585858561186c565b5050505050565b60608151835114610ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac89061345b565b60405180910390fd5b5f835167ffffffffffffffff811115610aed57610aec612995565b5b604051908082528060200260200182016040528015610b1b5781602001602082028036833780820191505090505b5090505f5b8451811015610b9157610b67858281518110610b3f57610b3e613479565b5b6020026020010151858381518110610b5a57610b59613479565b5b60200260200101516104db565b828281518110610b7a57610b79613479565b5b602002602001018181525050806001019050610b20565b508091505092915050565b610ba46116da565b73ffffffffffffffffffffffffffffffffffffffff16610bc2610f82565b73ffffffffffffffffffffffffffffffffffffffff1614610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f906132cb565b60405180910390fd5b600160095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680610cf75750610cc8610f82565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90613206565b60405180910390fd5b80600d5f6101000a81548161ffff021916908361ffff16021790555050565b60068054610d6290613251565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8e90613251565b8015610dd95780601f10610db057610100808354040283529160200191610dd9565b820191905f5260205f20905b815481529060010190602001808311610dbc57829003601f168201915b505050505081565b610de96116da565b73ffffffffffffffffffffffffffffffffffffffff16610e07610f82565b73ffffffffffffffffffffffffffffffffffffffff1614610e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e54906132cb565b60405180910390fd5b610e665f611b66565b565b610e706116da565b73ffffffffffffffffffffffffffffffffffffffff16610e8e610f82565b73ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb906132cb565b60405180910390fd5b8060069081610ef39190613643565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610f2491906128fa565b60405180910390a25050565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610fb790613251565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe390613251565b801561102e5780601f106110055761010080835404028352916020019161102e565b820191905f5260205f20905b81548152906001019060200180831161101157829003601f168201915b505050505081565b61103e610f82565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156110c0575060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f79061375c565b60405180910390fd5b61111261110b6116da565b8383611c29565b5050565b600e5481565b5f600c80549050905090565b6111306116da565b73ffffffffffffffffffffffffffffffffffffffff1661114e610f82565b73ffffffffffffffffffffffffffffffffffffffff16146111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119b906132cb565b60405180910390fd5b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806112825750611253610f82565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b890613206565b60405180910390fd5b5f8282905011611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd906137c4565b60405180910390fd5b5f8282905090505f5b818110156113ab57600c84848381811061132c5761132b613479565b5b90506020020160208101906113419190612e55565b908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808060010191505061130f565b50505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b600b60149054906101000a900460ff1661145c5761145b611d90565b5b611464610f82565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156114e6575060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561151e57505f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561155e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115559061375c565b60405180910390fd5b61156b8585858585611dfa565b5050505050565b61157a6116da565b73ffffffffffffffffffffffffffffffffffffffff16611598610f82565b73ffffffffffffffffffffffffffffffffffffffff16146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e5906132cb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361165c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165390613852565b60405180910390fd5b61166581611b66565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f600e81905550565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361174f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611746906138e0565b60405180910390fd5b5f6117586116da565b9050611778815f8761176988611e0e565b61177288611e0e565b87611e86565b825f808681526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546117d291906138fe565b925050819055508473ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161184f929190613931565b60405180910390a4611865815f87878787611e8e565b5050505050565b81518351146118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a7906139c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361191e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191590613a56565b60405180910390fd5b5f6119276116da565b9050611937818787878787611e86565b5f5b8451811015611ad1575f85828151811061195657611955613479565b5b602002602001015190505f85838151811061197457611973613479565b5b602002602001015190505f805f8481526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0790613ae4565b60405180910390fd5b8181035f808581526020019081526020015f205f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808581526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611abc91906138fe565b92505081905550505050806001019050611939565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611b48929190613b02565b60405180910390a4611b5e818787878787612064565b505050505050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8e90613ba7565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d839190612790565b60405180910390a3505050565b6001600b60146101000a81548160ff0219169083151502179055505f5b600d5f9054906101000a900461ffff1661ffff16811015611ddd57611dd061223a565b8080600101915050611dad565b505f600b60146101000a81548160ff021916908315150217905550565b611e078585858585612306565b5050505050565b60605f600167ffffffffffffffff811115611e2c57611e2b612995565b5b604051908082528060200260200182016040528015611e5a5781602001602082028036833780820191505090505b50905082815f81518110611e7157611e70613479565b5b60200260200101818152505080915050919050565b505050505050565b611ead8473ffffffffffffffffffffffffffffffffffffffff16612534565b1561205c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611ef3959493929190613c17565b6020604051808303815f875af1925050508015611f2e57506040513d601f19601f82011682018060405250810190611f2b9190613c83565b60015b611fd357611f3a613cba565b806308c379a003611f965750611f4e613cd9565b80611f595750611f98565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8d91906128fa565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fca90613dd8565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461205a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205190613e66565b60405180910390fd5b505b505050505050565b6120838473ffffffffffffffffffffffffffffffffffffffff16612534565b15612232578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016120c9959493929190613e84565b6020604051808303815f875af192505050801561210457506040513d601f19601f820116820180604052508101906121019190613c83565b60015b6121a957612110613cba565b806308c379a00361216c5750612124613cd9565b8061212f575061216e565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216391906128fa565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a090613dd8565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222790613e66565b60405180910390fd5b505b505050505050565b600e54600c805490501115612304575f600c600e5f81548092919061225e90613316565b919050558154811061227357612272613479565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061230260085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600760016040518060400160405280600281526020017f307800000000000000000000000000000000000000000000000000000000000081525061143f565b505b565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b90613a56565b60405180910390fd5b5f61237d6116da565b905061239d81878761238e88611e0e565b61239788611e0e565b87611e86565b5f805f8681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508381035f808781526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550835f808781526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461249891906138fe565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612515929190613931565b60405180910390a461252b828888888888611e8e565b50505050505050565b5f919050565b828054828255905f5260205f209081019282156125c6579160200282015b828111156125c557823573ffffffffffffffffffffffffffffffffffffffff16825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612558565b5b5090506125d391906125d7565b5090565b5b808211156125ee575f815f9055506001016125d8565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61262c82612603565b9050919050565b61263c81612622565b8114612646575f80fd5b50565b5f8135905061265781612633565b92915050565b5f819050919050565b61266f8161265d565b8114612679575f80fd5b50565b5f8135905061268a81612666565b92915050565b5f80604083850312156126a6576126a56125fb565b5b5f6126b385828601612649565b92505060206126c48582860161267c565b9150509250929050565b6126d78161265d565b82525050565b5f6020820190506126f05f8301846126ce565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61272a816126f6565b8114612734575f80fd5b50565b5f8135905061274581612721565b92915050565b5f602082840312156127605761275f6125fb565b5b5f61276d84828501612737565b91505092915050565b5f8115159050919050565b61278a81612776565b82525050565b5f6020820190506127a35f830184612781565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126127ca576127c96127a9565b5b8235905067ffffffffffffffff8111156127e7576127e66127ad565b5b602083019150836020820283011115612803576128026127b1565b5b9250929050565b5f80602083850312156128205761281f6125fb565b5b5f83013567ffffffffffffffff81111561283d5761283c6125ff565b5b612849858286016127b5565b92509250509250929050565b5f61ffff82169050919050565b61286b81612855565b82525050565b5f6020820190506128845f830184612862565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6128cc8261288a565b6128d68185612894565b93506128e68185602086016128a4565b6128ef816128b2565b840191505092915050565b5f6020820190508181035f83015261291281846128c2565b905092915050565b5f6020828403121561292f5761292e6125fb565b5b5f61293c8482850161267c565b91505092915050565b5f805f6060848603121561295c5761295b6125fb565b5b5f61296986828701612649565b935050602061297a8682870161267c565b925050604061298b8682870161267c565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6129cb826128b2565b810181811067ffffffffffffffff821117156129ea576129e9612995565b5b80604052505050565b5f6129fc6125f2565b9050612a0882826129c2565b919050565b5f67ffffffffffffffff821115612a2757612a26612995565b5b602082029050602081019050919050565b5f612a4a612a4584612a0d565b6129f3565b90508083825260208201905060208402830185811115612a6d57612a6c6127b1565b5b835b81811015612a965780612a82888261267c565b845260208401935050602081019050612a6f565b5050509392505050565b5f82601f830112612ab457612ab36127a9565b5b8135612ac4848260208601612a38565b91505092915050565b5f80fd5b5f67ffffffffffffffff821115612aeb57612aea612995565b5b612af4826128b2565b9050602081019050919050565b828183375f83830152505050565b5f612b21612b1c84612ad1565b6129f3565b905082815260208101848484011115612b3d57612b3c612acd565b5b612b48848285612b01565b509392505050565b5f82601f830112612b6457612b636127a9565b5b8135612b74848260208601612b0f565b91505092915050565b5f805f805f60a08688031215612b9657612b956125fb565b5b5f612ba388828901612649565b9550506020612bb488828901612649565b945050604086013567ffffffffffffffff811115612bd557612bd46125ff565b5b612be188828901612aa0565b935050606086013567ffffffffffffffff811115612c0257612c016125ff565b5b612c0e88828901612aa0565b925050608086013567ffffffffffffffff811115612c2f57612c2e6125ff565b5b612c3b88828901612b50565b9150509295509295909350565b5f67ffffffffffffffff821115612c6257612c61612995565b5b602082029050602081019050919050565b5f612c85612c8084612c48565b6129f3565b90508083825260208201905060208402830185811115612ca857612ca76127b1565b5b835b81811015612cd15780612cbd8882612649565b845260208401935050602081019050612caa565b5050509392505050565b5f82601f830112612cef57612cee6127a9565b5b8135612cff848260208601612c73565b91505092915050565b5f8060408385031215612d1e57612d1d6125fb565b5b5f83013567ffffffffffffffff811115612d3b57612d3a6125ff565b5b612d4785828601612cdb565b925050602083013567ffffffffffffffff811115612d6857612d676125ff565b5b612d7485828601612aa0565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612db08161265d565b82525050565b5f612dc18383612da7565b60208301905092915050565b5f602082019050919050565b5f612de382612d7e565b612ded8185612d88565b9350612df883612d98565b805f5b83811015612e28578151612e0f8882612db6565b9750612e1a83612dcd565b925050600181019050612dfb565b5085935050505092915050565b5f6020820190508181035f830152612e4d8184612dd9565b905092915050565b5f60208284031215612e6a57612e696125fb565b5b5f612e7784828501612649565b91505092915050565b612e8981612855565b8114612e93575f80fd5b50565b5f81359050612ea481612e80565b92915050565b5f60208284031215612ebf57612ebe6125fb565b5b5f612ecc84828501612e96565b91505092915050565b5f67ffffffffffffffff821115612eef57612eee612995565b5b612ef8826128b2565b9050602081019050919050565b5f612f17612f1284612ed5565b6129f3565b905082815260208101848484011115612f3357612f32612acd565b5b612f3e848285612b01565b509392505050565b5f82601f830112612f5a57612f596127a9565b5b8135612f6a848260208601612f05565b91505092915050565b5f8060408385031215612f8957612f886125fb565b5b5f612f968582860161267c565b925050602083013567ffffffffffffffff811115612fb757612fb66125ff565b5b612fc385828601612f46565b9150509250929050565b612fd681612622565b82525050565b5f602082019050612fef5f830184612fcd565b92915050565b612ffe81612776565b8114613008575f80fd5b50565b5f8135905061301981612ff5565b92915050565b5f8060408385031215613035576130346125fb565b5b5f61304285828601612649565b92505060206130538582860161300b565b9150509250929050565b5f8060408385031215613073576130726125fb565b5b5f61308085828601612649565b925050602061309185828601612649565b9150509250929050565b5f805f805f60a086880312156130b4576130b36125fb565b5b5f6130c188828901612649565b95505060206130d288828901612649565b94505060406130e38882890161267c565b93505060606130f48882890161267c565b925050608086013567ffffffffffffffff811115613115576131146125ff565b5b61312188828901612b50565b9150509295509295909350565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a5f8201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b5f613188602b83612894565b91506131938261312e565b604082019050919050565b5f6020820190508181035f8301526131b58161317c565b9050919050565b7f4e6f742061207465616d206d656d6265720000000000000000000000000000005f82015250565b5f6131f0601183612894565b91506131fb826131bc565b602082019050919050565b5f6020820190508181035f83015261321d816131e4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061326857607f821691505b60208210810361327b5761327a613224565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6132b5602083612894565b91506132c082613281565b602082019050919050565b5f6020820190508181035f8301526132e2816132a9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6133208261265d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613352576133516132e9565b5b600182019050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f74205f8201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b5f6133b7603283612894565b91506133c28261335d565b604082019050919050565b5f6020820190508181035f8301526133e4816133ab565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e6774685f8201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b5f613445602983612894565b9150613450826133eb565b604082019050919050565b5f6020820190508181035f83015261347281613439565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026135027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826134c7565b61350c86836134c7565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61354761354261353d8461265d565b613524565b61265d565b9050919050565b5f819050919050565b6135608361352d565b61357461356c8261354e565b8484546134d3565b825550505050565b5f90565b61358861357c565b613593818484613557565b505050565b5b818110156135b6576135ab5f82613580565b600181019050613599565b5050565b601f8211156135fb576135cc816134a6565b6135d5846134b8565b810160208510156135e4578190505b6135f86135f0856134b8565b830182613598565b50505b505050565b5f82821c905092915050565b5f61361b5f1984600802613600565b1980831691505092915050565b5f613633838361360c565b9150826002028217905092915050565b61364c8261288a565b67ffffffffffffffff81111561366557613664612995565b5b61366f8254613251565b61367a8282856135ba565b5f60209050601f8311600181146136ab575f8415613699578287015190505b6136a38582613628565b86555061370a565b601f1984166136b9866134a6565b5f5b828110156136e0578489015182556001820191506020850194506020810190506136bb565b868310156136fd57848901516136f9601f89168261360c565b8355505b6001600288020188555050505b505050505050565b7f596f752068617665206e6f742061637469766174656420796f7572204e4654005f82015250565b5f613746601f83612894565b915061375182613712565b602082019050919050565b5f6020820190508181035f8301526137738161373a565b9050919050565b7f456d707479207061636b000000000000000000000000000000000000000000005f82015250565b5f6137ae600a83612894565b91506137b98261377a565b602082019050919050565b5f6020820190508181035f8301526137db816137a2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61383c602683612894565b9150613847826137e2565b604082019050919050565b5f6020820190508181035f83015261386981613830565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f6138ca602183612894565b91506138d582613870565b604082019050919050565b5f6020820190508181035f8301526138f7816138be565b9050919050565b5f6139088261265d565b91506139138361265d565b925082820190508082111561392b5761392a6132e9565b5b92915050565b5f6040820190506139445f8301856126ce565b61395160208301846126ce565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e677468205f8201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b5f6139b2602883612894565b91506139bd82613958565b604082019050919050565b5f6020820190508181035f8301526139df816139a6565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613a40602583612894565b9150613a4b826139e6565b604082019050919050565b5f6020820190508181035f830152613a6d81613a34565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f5f8201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b5f613ace602a83612894565b9150613ad982613a74565b604082019050919050565b5f6020820190508181035f830152613afb81613ac2565b9050919050565b5f6040820190508181035f830152613b1a8185612dd9565b90508181036020830152613b2e8184612dd9565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c207374617475735f8201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b5f613b91602983612894565b9150613b9c82613b37565b604082019050919050565b5f6020820190508181035f830152613bbe81613b85565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f613be982613bc5565b613bf38185613bcf565b9350613c038185602086016128a4565b613c0c816128b2565b840191505092915050565b5f60a082019050613c2a5f830188612fcd565b613c376020830187612fcd565b613c4460408301866126ce565b613c5160608301856126ce565b8181036080830152613c638184613bdf565b90509695505050505050565b5f81519050613c7d81612721565b92915050565b5f60208284031215613c9857613c976125fb565b5b5f613ca584828501613c6f565b91505092915050565b5f8160e01c9050919050565b5f60033d1115613cd65760045f803e613cd35f51613cae565b90505b90565b5f60443d10613d6557613cea6125f2565b60043d036004823e80513d602482011167ffffffffffffffff82111715613d12575050613d65565b808201805167ffffffffffffffff811115613d305750505050613d65565b80602083010160043d038501811115613d4d575050505050613d65565b613d5c826020018501866129c2565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e20455243313135355f8201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b5f613dc2603483612894565b9150613dcd82613d68565b604082019050919050565b5f6020820190508181035f830152613def81613db6565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a656374655f8201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b5f613e50602883612894565b9150613e5b82613df6565b604082019050919050565b5f6020820190508181035f830152613e7d81613e44565b9050919050565b5f60a082019050613e975f830188612fcd565b613ea46020830187612fcd565b8181036040830152613eb68186612dd9565b90508181036060830152613eca8185612dd9565b90508181036080830152613ede8184613bdf565b9050969550505050505056fea2646970667358221220dfe62eef43949f797c462d92f3d5624b9483db1f34ba08a9c903053688ff897464736f6c634300081a003368747470733a2f2f7365727665722d6d657461646174612e78797a2f6d6574612f666f74756e2e6a736f6e