60806040525f60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731e0049783f008a0085193e00003d00cd54003c71600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600b60146101000a81548160ff02191690831515021790555061018f600d5f6101000a81548161ffff021916908361ffff1602179055505f600e5534801561011f575f80fd5b5060405180602001604052805f81525061013e8161037960201b60201c565b5061015b61015061038c60201b60201c565b61039360201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff16600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036101f05733600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6040518060400160405280600a81526020017f424f58466f7274756e6500000000000000000000000000000000000000000000815250600490816102349190610a9b565b506040518060400160405280600281526020017f4252000000000000000000000000000000000000000000000000000000000000815250600590816102799190610a9b565b506040518060600160405280602b815260200161516f602b9139600690816102a19190610a9b565b50600160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610319336007601e60405180602001604052805f81525061045660201b60201c565b5f5b606481101561037357610366600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600160405180602001604052805f81525061045660201b60201c565b808060010191505061031b565b506110be565b80600290816103889190610a9b565b5050565b5f33905090565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036104c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bb90610bea565b60405180910390fd5b5f6104d361038c60201b60201c565b9050610505815f876104ea886105ff60201b60201c565b6104f9886105ff60201b60201c565b8761067760201b60201c565b825f808681526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461055f9190610c35565b925050819055508473ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516105dc929190610c77565b60405180910390a46105f8815f8787878761067f60201b60201c565b5050505050565b60605f600167ffffffffffffffff81111561061d5761061c61086b565b5b60405190808252806020026020018201604052801561064b5781602001602082028036833780820191505090505b50905082815f8151811061066257610661610c9e565b5b60200260200101818152505080915050919050565b505050505050565b6106a48473ffffffffffffffffffffffffffffffffffffffff1661085b60201b60201c565b15610853578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016106ea959493929190610d7a565b6020604051808303815f875af192505050801561072557506040513d601f19601f820116820180604052508101906107229190610e34565b60015b6107ca57610731610e6b565b806308c379a00361078d5750610745610ebb565b80610750575061078f565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107849190610f82565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c190611012565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610851576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610848906110a0565b60405180910390fd5b505b505050505050565b5f919050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806108dc57607f821691505b6020821081036108ef576108ee610898565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026109517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610916565b61095b8683610916565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61099f61099a61099584610973565b61097c565b610973565b9050919050565b5f819050919050565b6109b883610985565b6109cc6109c4826109a6565b848454610922565b825550505050565b5f90565b6109e06109d4565b6109eb8184846109af565b505050565b5b81811015610a0e57610a035f826109d8565b6001810190506109f1565b5050565b601f821115610a5357610a24816108f5565b610a2d84610907565b81016020851015610a3c578190505b610a50610a4885610907565b8301826109f0565b50505b505050565b5f82821c905092915050565b5f610a735f1984600802610a58565b1980831691505092915050565b5f610a8b8383610a64565b9150826002028217905092915050565b610aa482610861565b67ffffffffffffffff811115610abd57610abc61086b565b5b610ac782546108c5565b610ad2828285610a12565b5f60209050601f831160018114610b03575f8415610af1578287015190505b610afb8582610a80565b865550610b62565b601f198416610b11866108f5565b5f5b82811015610b3857848901518255600182019150602085019450602081019050610b13565b86831015610b555784890151610b51601f891682610a64565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f455243313135353a206d696e7420746f20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f610bd4602183610b6a565b9150610bdf82610b7a565b604082019050919050565b5f6020820190508181035f830152610c0181610bc8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610c3f82610973565b9150610c4a83610973565b9250828201905080821115610c6257610c61610c08565b5b92915050565b610c7181610973565b82525050565b5f604082019050610c8a5f830185610c68565b610c976020830184610c68565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610cf482610ccb565b9050919050565b610d0481610cea565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610d4c82610d0a565b610d568185610d14565b9350610d66818560208601610d24565b610d6f81610d32565b840191505092915050565b5f60a082019050610d8d5f830188610cfb565b610d9a6020830187610cfb565b610da76040830186610c68565b610db46060830185610c68565b8181036080830152610dc68184610d42565b90509695505050505050565b5f604051905090565b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610e1381610ddf565b8114610e1d575f80fd5b50565b5f81519050610e2e81610e0a565b92915050565b5f60208284031215610e4957610e48610ddb565b5b5f610e5684828501610e20565b91505092915050565b5f8160e01c9050919050565b5f60033d1115610e875760045f803e610e845f51610e5f565b90505b90565b610e9382610d32565b810181811067ffffffffffffffff82111715610eb257610eb161086b565b5b80604052505050565b5f60443d10610f4757610ecc610dd2565b60043d036004823e80513d602482011167ffffffffffffffff82111715610ef4575050610f47565b808201805167ffffffffffffffff811115610f125750505050610f47565b80602083010160043d038501811115610f2f575050505050610f47565b610f3e82602001850186610e8a565b82955050505050505b90565b5f610f5482610861565b610f5e8185610b6a565b9350610f6e818560208601610d24565b610f7781610d32565b840191505092915050565b5f6020820190508181035f830152610f9a8184610f4a565b905092915050565b7f455243313135353a207472616e7366657220746f206e6f6e20455243313135355f8201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b5f610ffc603483610b6a565b915061100782610fa2565b604082019050919050565b5f6020820190508181035f83015261102981610ff0565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a656374655f8201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b5f61108a602883610b6a565b915061109582611030565b604082019050919050565b5f6020820190508181035f8301526110b78161107e565b9050919050565b6140a4806110cb5f395ff3fe608060405234801561000f575f80fd5b506004361061018b575f3560e01c8063715018a6116100dc578063b5f6aeea11610095578063dd4e22231161006f578063dd4e222314610457578063e985e9c514610473578063f242432a146104a3578063f2fde38b146104bf5761018b565b8063b5f6aeea146103ff578063b63810251461041d578063cdec95231461043b5761018b565b8063715018a614610351578063862440e21461035b5780638c831b70146103775780638da5cb5b146103a757806395d89b41146103c5578063a22cb465146103e35761018b565b80630e89341c116101495780634e1273f4116101235780634e1273f4146102cb57806350d87740146102fb5780635c66045e146103175780636c0360eb146103335761018b565b80630e89341c14610263578063156e29f6146102935780632eb2c2d6146102af5761018b565b8062fdd58e1461018f57806301ffc9a7146101bf578063030a5236146101ef57806306a628d41461020b57806306fdde03146102295780630d3c69b414610247575b5f80fd5b6101a960048036038101906101a491906127b9565b6104db565b6040516101b69190612806565b60405180910390f35b6101d960048036038101906101d49190612874565b61059e565b6040516101e691906128b9565b60405180910390f35b61020960048036038101906102049190612933565b61067f565b005b610213610763565b604051610220919061299a565b60405180910390f35b610231610776565b60405161023e9190612a23565b60405180910390f35b610261600480360381019061025c9190612a43565b610802565b005b61027d60048036038101906102789190612a43565b6108bd565b60405161028a9190612a23565b60405180910390f35b6102ad60048036038101906102a89190612a6e565b61094f565b005b6102c960048036038101906102c49190612ca6565b6109ea565b005b6102e560048036038101906102e09190612e31565b610a8b565b6040516102f29190612f5e565b60405180910390f35b61031560048036038101906103109190612f7e565b610b9c565b005b610331600480360381019061032c9190612fd3565b610c70565b005b61033b610d55565b6040516103489190612a23565b60405180910390f35b610359610de1565b005b6103756004803603810190610370919061309c565b610e68565b005b610391600480360381019061038c9190612f7e565b610f30565b60405161039e91906128b9565b60405180910390f35b6103af610f82565b6040516103bc9190613105565b60405180910390f35b6103cd610faa565b6040516103da9190612a23565b60405180910390f35b6103fd60048036038101906103f89190613148565b611036565b005b610407611116565b6040516104149190612806565b60405180910390f35b61042561111c565b6040516104329190612806565b60405180910390f35b61045560048036038101906104509190612f7e565b611128565b005b610471600480360381019061046c9190612933565b6111fb565b005b61048d60048036038101906104889190613186565b6113b1565b60405161049a91906128b9565b60405180910390f35b6104bd60048036038101906104b891906131c4565b61143f565b005b6104d960048036038101906104d49190612f7e565b611572565b005b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361054a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610541906132c7565b60405180910390fd5b5f808381526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f7fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061066857507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610678575061067782611668565b5b9050919050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061070657506106d7610f82565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073c9061332f565b60405180910390fd5b8181600c9190610756929190612659565b5061075f6116d1565b5050565b600d5f9054906101000a900461ffff1681565b600480546107839061337a565b80601f01602080910402602001604051908101604052809291908181526020018280546107af9061337a565b80156107fa5780601f106107d1576101008083540402835291602001916107fa565b820191905f5260205f20905b8154815290600101906020018083116107dd57829003601f168201915b505050505081565b61080a6116da565b73ffffffffffffffffffffffffffffffffffffffff16610828610f82565b73ffffffffffffffffffffffffffffffffffffffff161461087e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610875906133f4565b60405180910390fd5b5f600190505b8181116108b9576108a63382600160405180602001604052805f8152506116e1565b80806108b19061343f565b915050610884565b5050565b6060600680546108cc9061337a565b80601f01602080910402602001604051908101604052809291908181526020018280546108f89061337a565b80156109435780601f1061091a57610100808354040283529160200191610943565b820191905f5260205f20905b81548152906001019060200180831161092657829003601f168201915b50505050509050919050565b6109576116da565b73ffffffffffffffffffffffffffffffffffffffff16610975610f82565b73ffffffffffffffffffffffffffffffffffffffff16146109cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c2906133f4565b60405180910390fd5b6109e583838360405180602001604052805f8152506116e1565b505050565b6109f26116da565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a385750610a3785610a326116da565b6113b1565b5b610a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6e906134f6565b60405180910390fd5b610a84858585858561186c565b5050505050565b60608151835114610ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac890613584565b60405180910390fd5b5f835167ffffffffffffffff811115610aed57610aec612abe565b5b604051908082528060200260200182016040528015610b1b5781602001602082028036833780820191505090505b5090505f5b8451811015610b9157610b67858281518110610b3f57610b3e6135a2565b5b6020026020010151858381518110610b5a57610b596135a2565b5b60200260200101516104db565b828281518110610b7a57610b796135a2565b5b602002602001018181525050806001019050610b20565b508091505092915050565b610ba46116da565b73ffffffffffffffffffffffffffffffffffffffff16610bc2610f82565b73ffffffffffffffffffffffffffffffffffffffff1614610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f906133f4565b60405180910390fd5b600160095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680610cf75750610cc8610f82565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d9061332f565b60405180910390fd5b80600d5f6101000a81548161ffff021916908361ffff16021790555050565b60068054610d629061337a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8e9061337a565b8015610dd95780601f10610db057610100808354040283529160200191610dd9565b820191905f5260205f20905b815481529060010190602001808311610dbc57829003601f168201915b505050505081565b610de96116da565b73ffffffffffffffffffffffffffffffffffffffff16610e07610f82565b73ffffffffffffffffffffffffffffffffffffffff1614610e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e54906133f4565b60405180910390fd5b610e665f611b66565b565b610e706116da565b73ffffffffffffffffffffffffffffffffffffffff16610e8e610f82565b73ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb906133f4565b60405180910390fd5b8060069081610ef3919061376c565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610f249190612a23565b60405180910390a25050565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610fb79061337a565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe39061337a565b801561102e5780601f106110055761010080835404028352916020019161102e565b820191905f5260205f20905b81548152906001019060200180831161101157829003601f168201915b505050505081565b61103e610f82565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156110c0575060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790613885565b60405180910390fd5b61111261110b6116da565b8383611c29565b5050565b600e5481565b5f600c80549050905090565b6111306116da565b73ffffffffffffffffffffffffffffffffffffffff1661114e610f82565b73ffffffffffffffffffffffffffffffffffffffff16146111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119b906133f4565b60405180910390fd5b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806112825750611253610f82565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b89061332f565b60405180910390fd5b5f8282905011611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd906138ed565b60405180910390fd5b5f8282905090505f5b818110156113ab57600c84848381811061132c5761132b6135a2565b5b90506020020160208101906113419190612f7e565b908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808060010191505061130f565b50505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b600b60149054906101000a900460ff1661145c5761145b611d90565b5b611464610f82565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156114e6575060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561151e57505f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561155e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155590613885565b60405180910390fd5b61156b8585858585611dfa565b5050505050565b61157a6116da565b73ffffffffffffffffffffffffffffffffffffffff16611598610f82565b73ffffffffffffffffffffffffffffffffffffffff16146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e5906133f4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361165c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116539061397b565b60405180910390fd5b61166581611b66565b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f600e81905550565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361174f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174690613a09565b60405180910390fd5b5f6117586116da565b9050611778815f8761176988611e0e565b61177288611e0e565b87611e86565b825f808681526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546117d29190613a27565b925050819055508473ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161184f929190613a5a565b60405180910390a4611865815f87878787611e8e565b5050505050565b81518351146118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a790613af1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361191e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191590613b7f565b60405180910390fd5b5f6119276116da565b9050611937818787878787611e86565b5f5b8451811015611ad1575f858281518110611956576119556135a2565b5b602002602001015190505f858381518110611974576119736135a2565b5b602002602001015190505f805f8481526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0790613c0d565b60405180910390fd5b8181035f808581526020019081526020015f205f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808581526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611abc9190613a27565b92505081905550505050806001019050611939565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611b48929190613c2b565b60405180910390a4611b5e818787878787612064565b505050505050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8e90613cd0565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d8391906128b9565b60405180910390a3505050565b6001600b60146101000a81548160ff0219169083151502179055505f5b600d5f9054906101000a900461ffff1661ffff16811015611ddd57611dd061223a565b8080600101915050611dad565b505f600b60146101000a81548160ff021916908315150217905550565b611e078585858585612345565b5050505050565b60605f600167ffffffffffffffff811115611e2c57611e2b612abe565b5b604051908082528060200260200182016040528015611e5a5781602001602082028036833780820191505090505b50905082815f81518110611e7157611e706135a2565b5b60200260200101818152505080915050919050565b505050505050565b611ead8473ffffffffffffffffffffffffffffffffffffffff16612573565b1561205c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611ef3959493929190613d40565b6020604051808303815f875af1925050508015611f2e57506040513d601f19601f82011682018060405250810190611f2b9190613dac565b60015b611fd357611f3a613de3565b806308c379a003611f965750611f4e613e02565b80611f595750611f98565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8d9190612a23565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fca90613f01565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461205a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205190613f8f565b60405180910390fd5b505b505050505050565b6120838473ffffffffffffffffffffffffffffffffffffffff16612573565b15612232578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016120c9959493929190613fad565b6020604051808303815f875af192505050801561210457506040513d601f19601f820116820180604052508101906121019190613dac565b60015b6121a957612110613de3565b806308c379a00361216c5750612124613e02565b8061212f575061216e565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121639190612a23565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a090613f01565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222790613f8f565b60405180910390fd5b505b505050505050565b600e54600c805490501115612343575f600c600e5f81548092919061225e9061343f565b9190505581548110612273576122726135a2565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061230260085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600760016040518060400160405280600281526020017f307800000000000000000000000000000000000000000000000000000000000081525061143f565b6123416040518060400160405280600e81526020017f5472616e7366657220746f20257300000000000000000000000000000000000081525082612579565b505b565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036123b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123aa90613b7f565b60405180910390fd5b5f6123bc6116da565b90506123dc8187876123cd88611e0e565b6123d688611e0e565b87611e86565b5f805f8681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508381035f808781526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550835f808781526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546124d79190613a27565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612554929190613a5a565b60405180910390a461256a828888888888611e8e565b50505050505050565b5f919050565b612611828260405160240161258f929190614013565b6040516020818303038152906040527f319af333000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612615565b5050565b61262c8161262461262f61264e565b63ffffffff16565b50565b5f6a636f6e736f6c652e6c6f6790505f80835160208501845afa505050565b6126f6819050919050565b828054828255905f5260205f209081019282156126e5579160200282015b828111156126e457823573ffffffffffffffffffffffffffffffffffffffff16825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612677565b5b5090506126f29190612700565b5090565b6126fe614041565b565b5b80821115612717575f815f905550600101612701565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6127558261272c565b9050919050565b6127658161274b565b811461276f575f80fd5b50565b5f813590506127808161275c565b92915050565b5f819050919050565b61279881612786565b81146127a2575f80fd5b50565b5f813590506127b38161278f565b92915050565b5f80604083850312156127cf576127ce612724565b5b5f6127dc85828601612772565b92505060206127ed858286016127a5565b9150509250929050565b61280081612786565b82525050565b5f6020820190506128195f8301846127f7565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6128538161281f565b811461285d575f80fd5b50565b5f8135905061286e8161284a565b92915050565b5f6020828403121561288957612888612724565b5b5f61289684828501612860565b91505092915050565b5f8115159050919050565b6128b38161289f565b82525050565b5f6020820190506128cc5f8301846128aa565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126128f3576128f26128d2565b5b8235905067ffffffffffffffff8111156129105761290f6128d6565b5b60208301915083602082028301111561292c5761292b6128da565b5b9250929050565b5f806020838503121561294957612948612724565b5b5f83013567ffffffffffffffff81111561296657612965612728565b5b612972858286016128de565b92509250509250929050565b5f61ffff82169050919050565b6129948161297e565b82525050565b5f6020820190506129ad5f83018461298b565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6129f5826129b3565b6129ff81856129bd565b9350612a0f8185602086016129cd565b612a18816129db565b840191505092915050565b5f6020820190508181035f830152612a3b81846129eb565b905092915050565b5f60208284031215612a5857612a57612724565b5b5f612a65848285016127a5565b91505092915050565b5f805f60608486031215612a8557612a84612724565b5b5f612a9286828701612772565b9350506020612aa3868287016127a5565b9250506040612ab4868287016127a5565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612af4826129db565b810181811067ffffffffffffffff82111715612b1357612b12612abe565b5b80604052505050565b5f612b2561271b565b9050612b318282612aeb565b919050565b5f67ffffffffffffffff821115612b5057612b4f612abe565b5b602082029050602081019050919050565b5f612b73612b6e84612b36565b612b1c565b90508083825260208201905060208402830185811115612b9657612b956128da565b5b835b81811015612bbf5780612bab88826127a5565b845260208401935050602081019050612b98565b5050509392505050565b5f82601f830112612bdd57612bdc6128d2565b5b8135612bed848260208601612b61565b91505092915050565b5f80fd5b5f67ffffffffffffffff821115612c1457612c13612abe565b5b612c1d826129db565b9050602081019050919050565b828183375f83830152505050565b5f612c4a612c4584612bfa565b612b1c565b905082815260208101848484011115612c6657612c65612bf6565b5b612c71848285612c2a565b509392505050565b5f82601f830112612c8d57612c8c6128d2565b5b8135612c9d848260208601612c38565b91505092915050565b5f805f805f60a08688031215612cbf57612cbe612724565b5b5f612ccc88828901612772565b9550506020612cdd88828901612772565b945050604086013567ffffffffffffffff811115612cfe57612cfd612728565b5b612d0a88828901612bc9565b935050606086013567ffffffffffffffff811115612d2b57612d2a612728565b5b612d3788828901612bc9565b925050608086013567ffffffffffffffff811115612d5857612d57612728565b5b612d6488828901612c79565b9150509295509295909350565b5f67ffffffffffffffff821115612d8b57612d8a612abe565b5b602082029050602081019050919050565b5f612dae612da984612d71565b612b1c565b90508083825260208201905060208402830185811115612dd157612dd06128da565b5b835b81811015612dfa5780612de68882612772565b845260208401935050602081019050612dd3565b5050509392505050565b5f82601f830112612e1857612e176128d2565b5b8135612e28848260208601612d9c565b91505092915050565b5f8060408385031215612e4757612e46612724565b5b5f83013567ffffffffffffffff811115612e6457612e63612728565b5b612e7085828601612e04565b925050602083013567ffffffffffffffff811115612e9157612e90612728565b5b612e9d85828601612bc9565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612ed981612786565b82525050565b5f612eea8383612ed0565b60208301905092915050565b5f602082019050919050565b5f612f0c82612ea7565b612f168185612eb1565b9350612f2183612ec1565b805f5b83811015612f51578151612f388882612edf565b9750612f4383612ef6565b925050600181019050612f24565b5085935050505092915050565b5f6020820190508181035f830152612f768184612f02565b905092915050565b5f60208284031215612f9357612f92612724565b5b5f612fa084828501612772565b91505092915050565b612fb28161297e565b8114612fbc575f80fd5b50565b5f81359050612fcd81612fa9565b92915050565b5f60208284031215612fe857612fe7612724565b5b5f612ff584828501612fbf565b91505092915050565b5f67ffffffffffffffff82111561301857613017612abe565b5b613021826129db565b9050602081019050919050565b5f61304061303b84612ffe565b612b1c565b90508281526020810184848401111561305c5761305b612bf6565b5b613067848285612c2a565b509392505050565b5f82601f830112613083576130826128d2565b5b813561309384826020860161302e565b91505092915050565b5f80604083850312156130b2576130b1612724565b5b5f6130bf858286016127a5565b925050602083013567ffffffffffffffff8111156130e0576130df612728565b5b6130ec8582860161306f565b9150509250929050565b6130ff8161274b565b82525050565b5f6020820190506131185f8301846130f6565b92915050565b6131278161289f565b8114613131575f80fd5b50565b5f813590506131428161311e565b92915050565b5f806040838503121561315e5761315d612724565b5b5f61316b85828601612772565b925050602061317c85828601613134565b9150509250929050565b5f806040838503121561319c5761319b612724565b5b5f6131a985828601612772565b92505060206131ba85828601612772565b9150509250929050565b5f805f805f60a086880312156131dd576131dc612724565b5b5f6131ea88828901612772565b95505060206131fb88828901612772565b945050604061320c888289016127a5565b935050606061321d888289016127a5565b925050608086013567ffffffffffffffff81111561323e5761323d612728565b5b61324a88828901612c79565b9150509295509295909350565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a5f8201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b5f6132b1602b836129bd565b91506132bc82613257565b604082019050919050565b5f6020820190508181035f8301526132de816132a5565b9050919050565b7f4e6f742061207465616d206d656d6265720000000000000000000000000000005f82015250565b5f6133196011836129bd565b9150613324826132e5565b602082019050919050565b5f6020820190508181035f8301526133468161330d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061339157607f821691505b6020821081036133a4576133a361334d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6133de6020836129bd565b91506133e9826133aa565b602082019050919050565b5f6020820190508181035f83015261340b816133d2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61344982612786565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361347b5761347a613412565b5b600182019050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f74205f8201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b5f6134e06032836129bd565b91506134eb82613486565b604082019050919050565b5f6020820190508181035f83015261350d816134d4565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e6774685f8201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b5f61356e6029836129bd565b915061357982613514565b604082019050919050565b5f6020820190508181035f83015261359b81613562565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261362b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826135f0565b61363586836135f0565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61367061366b61366684612786565b61364d565b612786565b9050919050565b5f819050919050565b61368983613656565b61369d61369582613677565b8484546135fc565b825550505050565b5f90565b6136b16136a5565b6136bc818484613680565b505050565b5b818110156136df576136d45f826136a9565b6001810190506136c2565b5050565b601f821115613724576136f5816135cf565b6136fe846135e1565b8101602085101561370d578190505b613721613719856135e1565b8301826136c1565b50505b505050565b5f82821c905092915050565b5f6137445f1984600802613729565b1980831691505092915050565b5f61375c8383613735565b9150826002028217905092915050565b613775826129b3565b67ffffffffffffffff81111561378e5761378d612abe565b5b613798825461337a565b6137a38282856136e3565b5f60209050601f8311600181146137d4575f84156137c2578287015190505b6137cc8582613751565b865550613833565b601f1984166137e2866135cf565b5f5b82811015613809578489015182556001820191506020850194506020810190506137e4565b868310156138265784890151613822601f891682613735565b8355505b6001600288020188555050505b505050505050565b7f596f752068617665206e6f742061637469766174656420796f7572204e4654005f82015250565b5f61386f601f836129bd565b915061387a8261383b565b602082019050919050565b5f6020820190508181035f83015261389c81613863565b9050919050565b7f456d707479207061636b000000000000000000000000000000000000000000005f82015250565b5f6138d7600a836129bd565b91506138e2826138a3565b602082019050919050565b5f6020820190508181035f830152613904816138cb565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6139656026836129bd565b91506139708261390b565b604082019050919050565b5f6020820190508181035f83015261399281613959565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f6139f36021836129bd565b91506139fe82613999565b604082019050919050565b5f6020820190508181035f830152613a20816139e7565b9050919050565b5f613a3182612786565b9150613a3c83612786565b9250828201905080821115613a5457613a53613412565b5b92915050565b5f604082019050613a6d5f8301856127f7565b613a7a60208301846127f7565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e677468205f8201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b5f613adb6028836129bd565b9150613ae682613a81565b604082019050919050565b5f6020820190508181035f830152613b0881613acf565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613b696025836129bd565b9150613b7482613b0f565b604082019050919050565b5f6020820190508181035f830152613b9681613b5d565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f5f8201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b5f613bf7602a836129bd565b9150613c0282613b9d565b604082019050919050565b5f6020820190508181035f830152613c2481613beb565b9050919050565b5f6040820190508181035f830152613c438185612f02565b90508181036020830152613c578184612f02565b90509392505050565b7f455243313135353a2073657474696e6720617070726f76616c207374617475735f8201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b5f613cba6029836129bd565b9150613cc582613c60565b604082019050919050565b5f6020820190508181035f830152613ce781613cae565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f613d1282613cee565b613d1c8185613cf8565b9350613d2c8185602086016129cd565b613d35816129db565b840191505092915050565b5f60a082019050613d535f8301886130f6565b613d6060208301876130f6565b613d6d60408301866127f7565b613d7a60608301856127f7565b8181036080830152613d8c8184613d08565b90509695505050505050565b5f81519050613da68161284a565b92915050565b5f60208284031215613dc157613dc0612724565b5b5f613dce84828501613d98565b91505092915050565b5f8160e01c9050919050565b5f60033d1115613dff5760045f803e613dfc5f51613dd7565b90505b90565b5f60443d10613e8e57613e1361271b565b60043d036004823e80513d602482011167ffffffffffffffff82111715613e3b575050613e8e565b808201805167ffffffffffffffff811115613e595750505050613e8e565b80602083010160043d038501811115613e76575050505050613e8e565b613e8582602001850186612aeb565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e20455243313135355f8201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b5f613eeb6034836129bd565b9150613ef682613e91565b604082019050919050565b5f6020820190508181035f830152613f1881613edf565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a656374655f8201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b5f613f796028836129bd565b9150613f8482613f1f565b604082019050919050565b5f6020820190508181035f830152613fa681613f6d565b9050919050565b5f60a082019050613fc05f8301886130f6565b613fcd60208301876130f6565b8181036040830152613fdf8186612f02565b90508181036060830152613ff38185612f02565b905081810360808301526140078184613d08565b90509695505050505050565b5f6040820190508181035f83015261402b81856129eb565b905061403a60208301846130f6565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffdfea264697066735822122031db8a463c5fa4597682d1cd8f197edcc0d517abb39dd0459ebd6d3d864ef5d064736f6c634300081a003368747470733a2f2f7365727665722d6d657461646174612e78797a2f6d6574612f666f74756e2e6a736f6e