[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC2612InvalidSigner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
610160604052348015610010575f80fd5b50336040518060400160405280600f81526020017f54686520536d696c657920436f696e0000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600f81526020017f54686520536d696c657920436f696e00000000000000000000000000000000008152506040518060400160405280600681526020017f534d494c4559000000000000000000000000000000000000000000000000000081525081600390816100fa919061092d565b50806004908161010a919061092d565b50505061012160058361027560201b90919060201c565b610120818152505061013d60068261027560201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a0818152505061017a6102c260201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610228575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021f9190610a3b565b60405180910390fd5b6102378161031c60201b60201c565b506102703361024a6103df60201b60201c565b600a6102569190610bbc565b63750100c06102659190610c06565b6103e760201b60201c565b610e59565b5f6020835110156102965761028f8361046c60201b60201c565b90506102bc565b826102a6836104d160201b60201c565b5f0190816102b4919061092d565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e051610100514630604051602001610301959493929190610c6e565b60405160208183030381529060405280519060200120905090565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610457575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161044e9190610a3b565b60405180910390fd5b6104685f83836104da60201b60201c565b5050565b5f80829050601f815111156104b857826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016104af9190610d25565b60405180910390fd5b8051816104c490610d72565b5f1c175f1b915050919050565b5f819050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361052a578060025f82825461051e9190610dd8565b925050819055506105f8565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156105b3578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016105aa93929190610e0b565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361063f578060025f8282540392505081905550610689565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106e69190610e40565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061076e57607f821691505b6020821081036107815761078061072a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026107e37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826107a8565b6107ed86836107a8565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61083161082c61082784610805565b61080e565b610805565b9050919050565b5f819050919050565b61084a83610817565b61085e61085682610838565b8484546107b4565b825550505050565b5f90565b610872610866565b61087d818484610841565b505050565b5b818110156108a0576108955f8261086a565b600181019050610883565b5050565b601f8211156108e5576108b681610787565b6108bf84610799565b810160208510156108ce578190505b6108e26108da85610799565b830182610882565b50505b505050565b5f82821c905092915050565b5f6109055f19846008026108ea565b1980831691505092915050565b5f61091d83836108f6565b9150826002028217905092915050565b610936826106f3565b67ffffffffffffffff81111561094f5761094e6106fd565b5b6109598254610757565b6109648282856108a4565b5f60209050601f831160018114610995575f8415610983578287015190505b61098d8582610912565b8655506109f4565b601f1984166109a386610787565b5f5b828110156109ca578489015182556001820191506020850194506020810190506109a5565b868310156109e757848901516109e3601f8916826108f6565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610a25826109fc565b9050919050565b610a3581610a1b565b82525050565b5f602082019050610a4e5f830184610a2c565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115610ad657808604811115610ab257610ab1610a54565b5b6001851615610ac15780820291505b8081029050610acf85610a81565b9450610a96565b94509492505050565b5f82610aee5760019050610ba9565b81610afb575f9050610ba9565b8160018114610b115760028114610b1b57610b4a565b6001915050610ba9565b60ff841115610b2d57610b2c610a54565b5b8360020a915084821115610b4457610b43610a54565b5b50610ba9565b5060208310610133831016604e8410600b8410161715610b7f5782820a905083811115610b7a57610b79610a54565b5b610ba9565b610b8c8484846001610a8d565b92509050818404811115610ba357610ba2610a54565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610bc682610805565b9150610bd183610bb0565b9250610bfe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610adf565b905092915050565b5f610c1082610805565b9150610c1b83610805565b9250828202610c2981610805565b91508282048414831517610c4057610c3f610a54565b5b5092915050565b5f819050919050565b610c5981610c47565b82525050565b610c6881610805565b82525050565b5f60a082019050610c815f830188610c50565b610c8e6020830187610c50565b610c9b6040830186610c50565b610ca86060830185610c5f565b610cb56080830184610a2c565b9695505050505050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610cf7826106f3565b610d018185610cbf565b9350610d11818560208601610ccf565b610d1a81610cdd565b840191505092915050565b5f6020820190508181035f830152610d3d8184610ced565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f610d698251610c47565b80915050919050565b5f610d7c82610d45565b82610d8684610d4f565b9050610d9181610d5e565b92506020821015610dd157610dcc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026107a8565b831692505b5050919050565b5f610de282610805565b9150610ded83610805565b9250828201905080821115610e0557610e04610a54565b5b92915050565b5f606082019050610e1e5f830186610a2c565b610e2b6020830185610c5f565b610e386040830184610c5f565b949350505050565b5f602082019050610e535f830184610c5f565b92915050565b60805160a05160c05160e051610100516101205161014051611de4610eaa5f395f610be201525f610ba701525f61119e01525f61117d01525f610a0b01525f610a6101525f610a8a0152611de45ff3fe608060405234801561000f575f80fd5b50600436106100fe575f3560e01c80637ecebe0011610095578063a9059cbb11610064578063a9059cbb146102a4578063d505accf146102d4578063dd62ed3e146102f0578063f2fde38b14610320576100fe565b80637ecebe001461021457806384b0196e146102445780638da5cb5b1461026857806395d89b4114610286576100fe565b8063313ce567116100d1578063313ce5671461019e5780633644e515146101bc57806370a08231146101da578063715018a61461020a576100fe565b806306fdde0314610102578063095ea7b31461012057806318160ddd1461015057806323b872dd1461016e575b5f80fd5b61010a61033c565b6040516101179190611654565b60405180910390f35b61013a60048036038101906101359190611705565b6103cc565b604051610147919061175d565b60405180910390f35b6101586103ee565b6040516101659190611785565b60405180910390f35b6101886004803603810190610183919061179e565b6103f7565b604051610195919061175d565b60405180910390f35b6101a6610425565b6040516101b39190611809565b60405180910390f35b6101c461042d565b6040516101d1919061183a565b60405180910390f35b6101f460048036038101906101ef9190611853565b61043b565b6040516102019190611785565b60405180910390f35b610212610480565b005b61022e60048036038101906102299190611853565b610492565b60405161023b9190611785565b60405180910390f35b61024c6104a3565b60405161025f979695949392919061197e565b60405180910390f35b610270610548565b60405161027d9190611a00565b60405180910390f35b61028e610570565b60405161029b9190611654565b60405180910390f35b6102be60048036038101906102b99190611705565b610600565b6040516102cb919061175d565b60405180910390f35b6102ee60048036038101906102e99190611a6d565b610622565b005b61030a60048036038101906103059190611b0a565b610767565b6040516103179190611785565b60405180910390f35b61033a60048036038101906103359190611853565b6107e9565b005b60606003805461034b90611b75565b80601f016020809104026020016040519081016040528092919081815260200182805461037790611b75565b80156103c25780601f10610399576101008083540402835291602001916103c2565b820191905f5260205f20905b8154815290600101906020018083116103a557829003601f168201915b5050505050905090565b5f806103d661086d565b90506103e3818585610874565b600191505092915050565b5f600254905090565b5f8061040161086d565b905061040e858285610886565b610419858585610918565b60019150509392505050565b5f6012905090565b5f610436610a08565b905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610488610abe565b610490610b45565b565b5f61049c82610b58565b9050919050565b5f6060805f805f60606104b4610b9e565b6104bc610bd9565b46305f801b5f67ffffffffffffffff8111156104db576104da611ba5565b5b6040519080825280602002602001820160405280156105095781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461057f90611b75565b80601f01602080910402602001604051908101604052809291908181526020018280546105ab90611b75565b80156105f65780601f106105cd576101008083540402835291602001916105f6565b820191905f5260205f20905b8154815290600101906020018083116105d957829003601f168201915b5050505050905090565b5f8061060a61086d565b9050610617818585610918565b600191505092915050565b8342111561066757836040517f6279130200000000000000000000000000000000000000000000000000000000815260040161065e9190611785565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886106958c610c14565b896040516020016106ab96959493929190611bd2565b6040516020818303038152906040528051906020012090505f6106cd82610c67565b90505f6106dc82878787610c80565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461075057808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610747929190611c31565b60405180910390fd5b61075b8a8a8a610874565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6107f1610abe565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610861575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016108589190611a00565b60405180910390fd5b61086a81610cae565b50565b5f33905090565b6108818383836001610d71565b505050565b5f6108918484610767565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109125781811015610903578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016108fa93929190611c58565b60405180910390fd5b61091184848484035f610d71565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610988575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161097f9190611a00565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109f8575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016109ef9190611a00565b60405180910390fd5b610a03838383610f40565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610a8357507f000000000000000000000000000000000000000000000000000000000000000046145b15610ab0577f00000000000000000000000000000000000000000000000000000000000000009050610abb565b610ab8611159565b90505b90565b610ac661086d565b73ffffffffffffffffffffffffffffffffffffffff16610ae4610548565b73ffffffffffffffffffffffffffffffffffffffff1614610b4357610b0761086d565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b3a9190611a00565b60405180910390fd5b565b610b4d610abe565b610b565f610cae565b565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6060610bd460057f00000000000000000000000000000000000000000000000000000000000000006111ee90919063ffffffff16565b905090565b6060610c0f60067f00000000000000000000000000000000000000000000000000000000000000006111ee90919063ffffffff16565b905090565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f610c79610c73610a08565b8361129b565b9050919050565b5f805f80610c90888888886112db565b925092509250610ca082826113c2565b829350505050949350505050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610de1575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610dd89190611a00565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e51575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610e489190611a00565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610f3a578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f319190611785565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f90578060025f828254610f849190611cba565b9250508190555061105e565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611019578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161101093929190611c58565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110a5578060025f82825403925050819055506110ef565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161114c9190611785565b60405180910390a3505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000046306040516020016111d3959493929190611ced565b60405160208183030381529060405280519060200120905090565b606060ff5f1b831461120a5761120383611524565b9050611295565b81805461121690611b75565b80601f016020809104026020016040519081016040528092919081815260200182805461124290611b75565b801561128d5780601f106112645761010080835404028352916020019161128d565b820191905f5260205f20905b81548152906001019060200180831161127057829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115611317575f6003859250925092506113b8565b5f6001888888886040515f815260200160405260405161133a9493929190611d3e565b6020604051602081039080840390855afa15801561135a573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113ab575f60015f801b935093509350506113b8565b805f805f1b935093509350505b9450945094915050565b5f60038111156113d5576113d4611d81565b5b8260038111156113e8576113e7611d81565b5b0315611520576001600381111561140257611401611d81565b5b82600381111561141557611414611d81565b5b0361144c576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260038111156114605761145f611d81565b5b82600381111561147357611472611d81565b5b036114b757805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016114ae9190611785565b60405180910390fd5b6003808111156114ca576114c9611d81565b5b8260038111156114dd576114dc611d81565b5b0361151f57806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401611516919061183a565b60405180910390fd5b5b5050565b60605f61153083611596565b90505f602067ffffffffffffffff81111561154e5761154d611ba5565b5b6040519080825280601f01601f1916602001820160405280156115805781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f8060ff835f1c169050601f8111156115db576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611626826115e4565b61163081856115ee565b93506116408185602086016115fe565b6116498161160c565b840191505092915050565b5f6020820190508181035f83015261166c818461161c565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6116a182611678565b9050919050565b6116b181611697565b81146116bb575f80fd5b50565b5f813590506116cc816116a8565b92915050565b5f819050919050565b6116e4816116d2565b81146116ee575f80fd5b50565b5f813590506116ff816116db565b92915050565b5f806040838503121561171b5761171a611674565b5b5f611728858286016116be565b9250506020611739858286016116f1565b9150509250929050565b5f8115159050919050565b61175781611743565b82525050565b5f6020820190506117705f83018461174e565b92915050565b61177f816116d2565b82525050565b5f6020820190506117985f830184611776565b92915050565b5f805f606084860312156117b5576117b4611674565b5b5f6117c2868287016116be565b93505060206117d3868287016116be565b92505060406117e4868287016116f1565b9150509250925092565b5f60ff82169050919050565b611803816117ee565b82525050565b5f60208201905061181c5f8301846117fa565b92915050565b5f819050919050565b61183481611822565b82525050565b5f60208201905061184d5f83018461182b565b92915050565b5f6020828403121561186857611867611674565b5b5f611875848285016116be565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6118b28161187e565b82525050565b6118c181611697565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6118f9816116d2565b82525050565b5f61190a83836118f0565b60208301905092915050565b5f602082019050919050565b5f61192c826118c7565b61193681856118d1565b9350611941836118e1565b805f5b8381101561197157815161195888826118ff565b975061196383611916565b925050600181019050611944565b5085935050505092915050565b5f60e0820190506119915f83018a6118a9565b81810360208301526119a3818961161c565b905081810360408301526119b7818861161c565b90506119c66060830187611776565b6119d360808301866118b8565b6119e060a083018561182b565b81810360c08301526119f28184611922565b905098975050505050505050565b5f602082019050611a135f8301846118b8565b92915050565b611a22816117ee565b8114611a2c575f80fd5b50565b5f81359050611a3d81611a19565b92915050565b611a4c81611822565b8114611a56575f80fd5b50565b5f81359050611a6781611a43565b92915050565b5f805f805f805f60e0888a031215611a8857611a87611674565b5b5f611a958a828b016116be565b9750506020611aa68a828b016116be565b9650506040611ab78a828b016116f1565b9550506060611ac88a828b016116f1565b9450506080611ad98a828b01611a2f565b93505060a0611aea8a828b01611a59565b92505060c0611afb8a828b01611a59565b91505092959891949750929550565b5f8060408385031215611b2057611b1f611674565b5b5f611b2d858286016116be565b9250506020611b3e858286016116be565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611b8c57607f821691505b602082108103611b9f57611b9e611b48565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60c082019050611be55f83018961182b565b611bf260208301886118b8565b611bff60408301876118b8565b611c0c6060830186611776565b611c196080830185611776565b611c2660a0830184611776565b979650505050505050565b5f604082019050611c445f8301856118b8565b611c5160208301846118b8565b9392505050565b5f606082019050611c6b5f8301866118b8565b611c786020830185611776565b611c856040830184611776565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611cc4826116d2565b9150611ccf836116d2565b9250828201905080821115611ce757611ce6611c8d565b5b92915050565b5f60a082019050611d005f83018861182b565b611d0d602083018761182b565b611d1a604083018661182b565b611d276060830185611776565b611d3460808301846118b8565b9695505050505050565b5f608082019050611d515f83018761182b565b611d5e60208301866117fa565b611d6b604083018561182b565b611d78606083018461182b565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea2646970667358221220c6895f9e037d0e7860234941ea9600511e01a58b41ec13b5ce111058f5733ce164736f6c63430008190033