[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "InvalidShortString", "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": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "fromDelegate", "type": "address" }, { "indexed": true, "internalType": "address", "name": "toDelegate", "type": "address" } ], "name": "DelegateChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "previousBalance", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newBalance", "type": "uint256" } ], "name": "DelegateVotesChanged", "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": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [], "name": "CLOCK_MODE", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "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": "amount", "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": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burnFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint32", "name": "pos", "type": "uint32" } ], "name": "checkpoints", "outputs": [ { "components": [ { "internalType": "uint32", "name": "fromBlock", "type": "uint32" }, { "internalType": "uint224", "name": "votes", "type": "uint224" } ], "internalType": "struct ERC20Votes.Checkpoint", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "clock", "outputs": [ { "internalType": "uint48", "name": "", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" } ], "name": "delegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "delegateBySig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "delegates", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": [ { "internalType": "uint256", "name": "timepoint", "type": "uint256" } ], "name": "getPastTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "timepoint", "type": "uint256" } ], "name": "getPastVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "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": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "numCheckpoints", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "amount", "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": "amount", "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" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6101606040523480156200001257600080fd5b506040518060400160405280600481526020017f726f6e7a00000000000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f726f6e7a000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f726e7a000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200010492919062000f1f565b5080600490805190602001906200011d92919062000f1f565b5050506000600560006101000a81548160ff0219169083151502179055506200015b6200014f6200025c60201b60201c565b6200026460201b60201c565b620001766006836200032a60201b620013651790919060201c565b6101208181525050620001996007826200032a60201b620013651790919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a08181525050620001d86200038e60201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505050505062000256336200022b620003eb60201b60201c565b600a62000239919062001169565b6305f5e1006200024a9190620011ba565b620003f460201b60201c565b620018eb565b600033905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000602083511015620003505762000348836200040f60201b60201c565b905062000388565b8262000367836200047c60201b620013b01760201c565b60000190805190602001906200037f92919062000f1f565b5060ff60001b90505b92915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e051610100514630604051602001620003d09594939291906200128c565b60405160208183030381529060405280519060200120905090565b60006012905090565b6200040b82826200048660201b620013ba1760201c565b5050565b600080829050601f815111156200045f57826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016200045691906200138d565b60405180910390fd5b8051816200046d90620013f0565b60001c1760001b915050919050565b6000819050919050565b6200049d82826200054460201b620014471760201c565b620004ad620006b260201b60201c565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16620004db620006d660201b60201c565b11156200051f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200051690620014d6565b60405180910390fd5b6200053e600c620006e060201b6200159e1783620006f860201b60201c565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620005b7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005ae9062001548565b60405180910390fd5b620005cb6000838362000a1d60201b60201c565b8060026000828254620005df91906200156a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620006929190620015c7565b60405180910390a3620006ae6000838362000a4a60201b60201c565b5050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b6000600254905090565b60008183620006f091906200156a565b905092915050565b6000806000858054905090506000808214620007c85762000723876001840362000a6760201b60201c565b6040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152505062000804565b6040518060400160405280600063ffffffff16815260200160007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152505b905080602001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1693506200083784868860201c565b92506000821180156200086a57506200085562000a7c60201b60201c565b65ffffffffffff16816000015163ffffffff16145b15620008f257620008868362000a9960201b620015b41760201c565b6200089b886001850362000a6760201b60201c565b60000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555062000a13565b8660405180604001604052806200092b6200091262000a7c60201b60201c565b65ffffffffffff1662000b0760201b6200161f1760201c565b63ffffffff1681526020016200094c8662000a9960201b620015b41760201c565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b5050935093915050565b62000a2d62000b5d60201b60201c565b62000a4583838362000bb260201b620016721760201c565b505050565b62000a6283838362000bb760201b620016771760201c565b505050565b60008260005281602060002001905092915050565b600062000a944362000c0760201b620016a21760201c565b905090565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff801682111562000aff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000af6906200165a565b60405180910390fd5b819050919050565b600063ffffffff801682111562000b55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b4c90620016f2565b60405180910390fd5b819050919050565b62000b6d62000c5f60201b60201c565b1562000bb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ba79062001764565b60405180910390fd5b565b505050565b62000bcf83838362000c7660201b620016f71760201c565b62000c0262000be48462000c7b60201b60201c565b62000bf58462000c7b60201b60201c565b8362000ce460201b60201c565b505050565b600065ffffffffffff801682111562000c57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c4e90620017fc565b60405180910390fd5b819050919050565b6000600560009054906101000a900460ff16905090565b505050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801562000d215750600081115b1562000f0257600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000e145760008062000dbb600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002062000f0760201b620016fc1785620006f860201b60201c565b915091508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405162000e099291906200181e565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000f015760008062000ea8600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020620006e060201b6200159e1785620006f860201b60201c565b915091508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405162000ef69291906200181e565b60405180910390a250505b5b505050565b6000818362000f1791906200184b565b905092915050565b82805462000f2d90620018b5565b90600052602060002090601f01602090048101928262000f51576000855562000f9d565b82601f1062000f6c57805160ff191683800117855562000f9d565b8280016001018555821562000f9d579182015b8281111562000f9c57825182559160200191906001019062000f7f565b5b50905062000fac919062000fb0565b5090565b5b8082111562000fcb57600081600090555060010162000fb1565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200105d5780860481111562001035576200103462000fcf565b5b6001851615620010455780820291505b8081029050620010558562000ffe565b945062001015565b94509492505050565b6000826200107857600190506200114b565b816200108857600090506200114b565b8160018114620010a15760028114620010ac57620010e2565b60019150506200114b565b60ff841115620010c157620010c062000fcf565b5b8360020a915084821115620010db57620010da62000fcf565b5b506200114b565b5060208310610133831016604e8410600b84101617156200111c5782820a90508381111562001116576200111562000fcf565b5b6200114b565b6200112b84848460016200100b565b9250905081840481111562001145576200114462000fcf565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620011768262001152565b915062001183836200115c565b9250620011b27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001066565b905092915050565b6000620011c78262001152565b9150620011d48362001152565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001210576200120f62000fcf565b5b828202905092915050565b6000819050919050565b62001230816200121b565b82525050565b620012418162001152565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620012748262001247565b9050919050565b620012868162001267565b82525050565b600060a082019050620012a3600083018862001225565b620012b2602083018762001225565b620012c1604083018662001225565b620012d0606083018562001236565b620012df60808301846200127b565b9695505050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156200132557808201518184015260208101905062001308565b8381111562001335576000848401525b50505050565b6000601f19601f8301169050919050565b60006200135982620012e9565b620013658185620012f4565b93506200137781856020860162001305565b62001382816200133b565b840191505092915050565b60006020820190508181036000830152620013a981846200134c565b905092915050565b600081519050919050565b6000819050602082019050919050565b6000620013da82516200121b565b80915050919050565b600082821b905092915050565b6000620013fd82620013b1565b826200140984620013bc565b90506200141681620013cc565b925060208210156200145957620014547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802620013e3565b831692505b5050919050565b7f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60008201527f766572666c6f77696e6720766f74657300000000000000000000000000000000602082015250565b6000620014be603083620012f4565b9150620014cb8262001460565b604082019050919050565b60006020820190508181036000830152620014f181620014af565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001530601f83620012f4565b91506200153d82620014f8565b602082019050919050565b60006020820190508181036000830152620015638162001521565b9050919050565b6000620015778262001152565b9150620015848362001152565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620015bc57620015bb62000fcf565b5b828201905092915050565b6000602082019050620015de600083018462001236565b92915050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203260008201527f3234206269747300000000000000000000000000000000000000000000000000602082015250565b600062001642602783620012f4565b91506200164f82620015e4565b604082019050919050565b60006020820190508181036000830152620016758162001633565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203360008201527f3220626974730000000000000000000000000000000000000000000000000000602082015250565b6000620016da602683620012f4565b9150620016e7826200167c565b604082019050919050565b600060208201905081810360008301526200170d81620016cb565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006200174c601083620012f4565b9150620017598262001714565b602082019050919050565b600060208201905081810360008301526200177f816200173d565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203460008201527f3820626974730000000000000000000000000000000000000000000000000000602082015250565b6000620017e4602683620012f4565b9150620017f18262001786565b604082019050919050565b600060208201905081810360008301526200181781620017d5565b9050919050565b600060408201905062001835600083018562001236565b62001844602083018462001236565b9392505050565b6000620018588262001152565b9150620018658362001152565b9250828210156200187b576200187a62000fcf565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620018ce57607f821691505b60208210811415620018e557620018e462001886565b5b50919050565b60805160a05160c05160e051610100516101205161014051614b4e620019466000396000610b7601526000610b42015260006128570152600061283601526000611bed01526000611c4301526000611c6c0152614b4e6000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c8063715018a61161011a57806395d89b41116100ad578063c3cda5201161007c578063c3cda5201461060b578063d505accf14610627578063dd62ed3e14610643578063f1127ed814610673578063f2fde38b146106a357610206565b806395d89b411461055d5780639ab24eb01461057b578063a457c2d7146105ab578063a9059cbb146105db57610206565b806384b0196e116100e957806384b0196e146104cd5780638da5cb5b146104f15780638e539e8c1461050f57806391ddadf41461053f57610206565b8063715018a61461046d57806379cc6790146104775780637ecebe00146104935780638456cb59146104c357610206565b80633f4ba83a1161019d578063587cde1e1161016c578063587cde1e146103a35780635c19a95c146103d35780635c975abb146103ef5780636fcfff451461040d57806370a082311461043d57610206565b80633f4ba83a1461034357806340c10f191461034d57806342966c68146103695780634bf5d7e91461038557610206565b8063313ce567116101d9578063313ce567146102a75780633644e515146102c557806339509351146102e35780633a46b1a81461031357610206565b806306fdde031461020b578063095ea7b31461022957806318160ddd1461025957806323b872dd14610277575b600080fd5b6102136106bf565b604051610220919061323b565b60405180910390f35b610243600480360381019061023e91906132f6565b610751565b6040516102509190613351565b60405180910390f35b610261610774565b60405161026e919061337b565b60405180910390f35b610291600480360381019061028c9190613396565b61077e565b60405161029e9190613351565b60405180910390f35b6102af6107ad565b6040516102bc9190613405565b60405180910390f35b6102cd6107b6565b6040516102da9190613439565b60405180910390f35b6102fd60048036038101906102f891906132f6565b6107c5565b60405161030a9190613351565b60405180910390f35b61032d600480360381019061032891906132f6565b6107fc565b60405161033a919061337b565b60405180910390f35b61034b61089f565b005b610367600480360381019061036291906132f6565b6108b1565b005b610383600480360381019061037e9190613454565b6108c7565b005b61038d6108db565b60405161039a919061323b565b60405180910390f35b6103bd60048036038101906103b89190613481565b610969565b6040516103ca91906134bd565b60405180910390f35b6103ed60048036038101906103e89190613481565b6109d2565b005b6103f76109e6565b6040516104049190613351565b60405180910390f35b61042760048036038101906104229190613481565b6109fd565b60405161043491906134f7565b60405180910390f35b61045760048036038101906104529190613481565b610a51565b604051610464919061337b565b60405180910390f35b610475610a99565b005b610491600480360381019061048c91906132f6565b610aad565b005b6104ad60048036038101906104a89190613481565b610acd565b6040516104ba919061337b565b60405180910390f35b6104cb610b1d565b005b6104d5610b2f565b6040516104e8979695949392919061360b565b60405180910390f35b6104f9610c31565b60405161050691906134bd565b60405180910390f35b61052960048036038101906105249190613454565b610c5b565b604051610536919061337b565b60405180910390f35b610547610cc0565b60405161055491906136b0565b60405180910390f35b610565610cd0565b604051610572919061323b565b60405180910390f35b61059560048036038101906105909190613481565b610d62565b6040516105a2919061337b565b60405180910390f35b6105c560048036038101906105c091906132f6565b610e6a565b6040516105d29190613351565b60405180910390f35b6105f560048036038101906105f091906132f6565b610ee1565b6040516106029190613351565b60405180910390f35b61062560048036038101906106209190613723565b610f04565b005b610641600480360381019061063c91906137b0565b611008565b005b61065d60048036038101906106589190613852565b61114a565b60405161066a919061337b565b60405180910390f35b61068d600480360381019061068891906138be565b6111d1565b60405161069a9190613973565b60405180910390f35b6106bd60048036038101906106b89190613481565b6112e1565b005b6060600380546106ce906139bd565b80601f01602080910402602001604051908101604052809291908181526020018280546106fa906139bd565b80156107475780601f1061071c57610100808354040283529160200191610747565b820191906000526020600020905b81548152906001019060200180831161072a57829003601f168201915b5050505050905090565b60008061075c611712565b905061076981858561171a565b600191505092915050565b6000600254905090565b600080610789611712565b90506107968582856118e5565b6107a1858585611971565b60019150509392505050565b60006012905090565b60006107c0611be9565b905090565b6000806107d0611712565b90506107f18185856107e2858961114a565b6107ec9190613a1e565b61171a565b600191505092915050565b6000610806610cc0565b65ffffffffffff16821061084f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084690613ac0565b60405180910390fd5b610897600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083611ca0565b905092915050565b6108a7611de8565b6108af611e66565b565b6108b9611de8565b6108c38282611ec9565b5050565b6108d86108d2611712565b82611ed7565b50565b6060436108e6610cc0565b65ffffffffffff161461092e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092590613b2c565b60405180910390fd5b6040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905090565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6109e36109dd611712565b82611ee5565b50565b6000600560009054906101000a900460ff16905090565b6000610a4a600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061161f565b9050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610aa1611de8565b610aab6000611fff565b565b610abf82610ab9611712565b836118e5565b610ac98282611ed7565b5050565b6000610b16600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206120c5565b9050919050565b610b25611de8565b610b2d6120d3565b565b600060608060008060006060610b6f60067f000000000000000000000000000000000000000000000000000000000000000061213690919063ffffffff16565b610ba360077f000000000000000000000000000000000000000000000000000000000000000061213690919063ffffffff16565b46306000801b600067ffffffffffffffff811115610bc457610bc3613b4c565b5b604051908082528060200260200182016040528015610bf25781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610c65610cc0565b65ffffffffffff168210610cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca590613ac0565b60405180910390fd5b610cb9600c83611ca0565b9050919050565b6000610ccb436116a2565b905090565b606060048054610cdf906139bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0b906139bd565b8015610d585780601f10610d2d57610100808354040283529160200191610d58565b820191906000526020600020905b815481529060010190602001808311610d3b57829003601f168201915b5050505050905090565b600080600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905060008114610e4157600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001820381548110610e0657610e05613b7b565b5b9060005260206000200160000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610e44565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b600080610e75611712565b90506000610e83828661114a565b905083811015610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90613c1c565b60405180910390fd5b610ed5828686840361171a565b60019250505092915050565b600080610eec611712565b9050610ef9818585611971565b600191505092915050565b83421115610f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3e90613c88565b60405180910390fd5b6000610fa9610fa17fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf898989604051602001610f869493929190613ca8565b604051602081830303815290604052805190602001206121e6565b858585612200565b9050610fb48161222b565b8614610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90613d39565b60405180910390fd5b610fff8188611ee5565b50505050505050565b8342111561104b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104290613da5565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861107a8c61222b565b8960405160200161109096959493929190613dc5565b60405160208183030381529060405280519060200120905060006110b3826121e6565b905060006110c382878787612200565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90613e72565b60405180910390fd5b61113e8a8a8a61171a565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6111d96130c1565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208263ffffffff16815481106112305761122f613b7b565b5b906000526020600020016040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b6112e9611de8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090613f04565b60405180910390fd5b61136281611fff565b50565b60006020835110156113815761137a83612289565b90506113aa565b8261138b836113b0565b60000190805190602001906113a19291906130ff565b5060ff60001b90505b92915050565b6000819050919050565b6113c48282611447565b6113cc6122f1565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166113f2610774565b1115611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a90613f96565b60405180910390fd5b611441600c61159e83612315565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae90614002565b60405180910390fd5b6114c3600083836125f0565b80600260008282546114d59190613a1e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611586919061337b565b60405180910390a361159a60008383612608565b5050565b600081836115ac9190613a1e565b905092915050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8016821115611617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160e90614094565b60405180910390fd5b819050919050565b600063ffffffff801682111561166a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166190614126565b60405180910390fd5b819050919050565b505050565b6116828383836116f7565b61169d61168e84610969565b61169784610969565b83612618565b505050565b600065ffffffffffff80168211156116ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e6906141b8565b60405180910390fd5b819050919050565b505050565b6000818361170a91906141d8565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561178a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117819061427e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f190614310565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118d8919061337b565b60405180910390a3505050565b60006118f1848461114a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461196b578181101561195d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119549061437c565b60405180910390fd5b61196a848484840361171a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d89061440e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a48906144a0565b60405180910390fd5b611a5c8383836125f0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad990614532565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bd0919061337b565b60405180910390a3611be3848484612608565b50505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015611c6557507f000000000000000000000000000000000000000000000000000000000000000046145b15611c92577f00000000000000000000000000000000000000000000000000000000000000009050611c9d565b611c9a612811565b90505b90565b600080838054905090506000808290506005831115611d16576000611cc4846128a7565b84611ccf91906141d8565b905085611cdc88836129a1565b60000160009054906101000a900463ffffffff1663ffffffff161115611d0457809150611d14565b600181611d119190613a1e565b92505b505b5b80821015611d76576000611d2b83836129b6565b905085611d3888836129a1565b60000160009054906101000a900463ffffffff1663ffffffff161115611d6057809150611d70565b600181611d6d9190613a1e565b92505b50611d17565b60008114611dbc57611d8b86600183036129a1565b60000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611dbf565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16935050505092915050565b611df0611712565b73ffffffffffffffffffffffffffffffffffffffff16611e0e610c31565b73ffffffffffffffffffffffffffffffffffffffff1614611e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5b9061459e565b60405180910390fd5b565b611e6e6129dc565b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611eb2611712565b604051611ebf91906134bd565b60405180910390a1565b611ed382826113ba565b5050565b611ee18282612a25565b5050565b6000611ef083610969565b90506000611efd84610a51565b905082600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611ff9828483612618565b50505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600001549050919050565b6120db612a43565b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861211f611712565b60405161212c91906134bd565b60405180910390a1565b606060ff60001b83146121535761214c83612a8d565b90506121e0565b81805461215f906139bd565b80601f016020809104026020016040519081016040528092919081815260200182805461218b906139bd565b80156121d85780601f106121ad576101008083540402835291602001916121d8565b820191906000526020600020905b8154815290600101906020018083116121bb57829003601f168201915b505050505090505b92915050565b60006121f96121f3611be9565b83612b01565b9050919050565b600080600061221187878787612b42565b9150915061221e81612c25565b8192505050949350505050565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612278816120c5565b915061228381612d93565b50919050565b600080829050601f815111156122d657826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016122cd919061323b565b60405180910390fd5b8051816122e2906145fb565b60001c1760001b915050919050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b60008060008580549050905060008082146123db5761233787600184036129a1565b6040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050612417565b6040518060400160405280600063ffffffff16815260200160007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152505b905080602001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16935061244c84868863ffffffff16565b92506000821180156124765750612461610cc0565b65ffffffffffff16816000015163ffffffff16145b156124e757612484836115b4565b61249188600185036129a1565b60000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1602179055506125e6565b86604051806040016040528061250b6124fe610cc0565b65ffffffffffff1661161f565b63ffffffff16815260200161251f866115b4565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b5050935093915050565b6125f8612a43565b612603838383611672565b505050565b612613838383611677565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126545750600081115b1561280c57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612732576000806126db600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206116fc85612315565b915091508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612727929190614662565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461280b576000806127b4600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061159e85612315565b915091508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612800929190614662565b60405180910390a250505b5b505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000463060405160200161288c95949392919061468b565b60405160208183030381529060405280519060200120905090565b6000808214156128ba576000905061299c565b600060016128c784612da9565b901c6001901b905060018184816128e1576128e06146de565b5b048201901c905060018184816128fa576128f96146de565b5b048201901c90506001818481612913576129126146de565b5b048201901c9050600181848161292c5761292b6146de565b5b048201901c90506001818481612945576129446146de565b5b048201901c9050600181848161295e5761295d6146de565b5b048201901c90506001818481612977576129766146de565b5b048201901c905061299881828581612992576129916146de565b5b04612e8a565b9150505b919050565b60008260005281602060002001905092915050565b600060028284186129c7919061470d565b8284166129d49190613a1e565b905092915050565b6129e46109e6565b612a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1a9061478a565b60405180910390fd5b565b612a2f8282612ea3565b612a3d600c6116fc83612315565b50505050565b612a4b6109e6565b15612a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a82906147f6565b60405180910390fd5b565b60606000612a9a83613071565b90506000602067ffffffffffffffff811115612ab957612ab8613b4c565b5b6040519080825280601f01601f191660200182016040528015612aeb5781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b60006040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612b7d576000600391509150612c1c565b600060018787878760405160008152602001604052604051612ba29493929190614816565b6020604051602081039080840390855afa158015612bc4573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c1357600060019250925050612c1c565b80600092509250505b94509492505050565b60006004811115612c3957612c3861485b565b5b816004811115612c4c57612c4b61485b565b5b1415612c5757612d90565b60016004811115612c6b57612c6a61485b565b5b816004811115612c7e57612c7d61485b565b5b1415612cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb6906148d6565b60405180910390fd5b60026004811115612cd357612cd261485b565b5b816004811115612ce657612ce561485b565b5b1415612d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1e90614942565b60405180910390fd5b60036004811115612d3b57612d3a61485b565b5b816004811115612d4e57612d4d61485b565b5b1415612d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d86906149d4565b60405180910390fd5b5b50565b6001816000016000828254019250508190555050565b600080600090506000608084901c1115612dcb57608083901c92506080810190505b6000604084901c1115612de657604083901c92506040810190505b6000602084901c1115612e0157602083901c92506020810190505b6000601084901c1115612e1c57601083901c92506010810190505b6000600884901c1115612e3757600883901c92506008810190505b6000600484901c1115612e5257600483901c92506004810190505b6000600284901c1115612e6d57600283901c92506002810190505b6000600184901c1115612e81576001810190505b80915050919050565b6000818310612e995781612e9b565b825b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0a90614a66565b60405180910390fd5b612f1f826000836125f0565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9c90614af8565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613058919061337b565b60405180910390a361306c83600084612608565b505050565b60008060ff8360001c169050601f8111156130b8576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b6040518060400160405280600063ffffffff16815260200160007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b82805461310b906139bd565b90600052602060002090601f01602090048101928261312d5760008555613174565b82601f1061314657805160ff1916838001178555613174565b82800160010185558215613174579182015b82811115613173578251825591602001919060010190613158565b5b5090506131819190613185565b5090565b5b8082111561319e576000816000905550600101613186565b5090565b600081519050919050565b600082825260208201905092915050565b60005b838110156131dc5780820151818401526020810190506131c1565b838111156131eb576000848401525b50505050565b6000601f19601f8301169050919050565b600061320d826131a2565b61321781856131ad565b93506132278185602086016131be565b613230816131f1565b840191505092915050565b600060208201905081810360008301526132558184613202565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061328d82613262565b9050919050565b61329d81613282565b81146132a857600080fd5b50565b6000813590506132ba81613294565b92915050565b6000819050919050565b6132d3816132c0565b81146132de57600080fd5b50565b6000813590506132f0816132ca565b92915050565b6000806040838503121561330d5761330c61325d565b5b600061331b858286016132ab565b925050602061332c858286016132e1565b9150509250929050565b60008115159050919050565b61334b81613336565b82525050565b60006020820190506133666000830184613342565b92915050565b613375816132c0565b82525050565b6000602082019050613390600083018461336c565b92915050565b6000806000606084860312156133af576133ae61325d565b5b60006133bd868287016132ab565b93505060206133ce868287016132ab565b92505060406133df868287016132e1565b9150509250925092565b600060ff82169050919050565b6133ff816133e9565b82525050565b600060208201905061341a60008301846133f6565b92915050565b6000819050919050565b61343381613420565b82525050565b600060208201905061344e600083018461342a565b92915050565b60006020828403121561346a5761346961325d565b5b6000613478848285016132e1565b91505092915050565b6000602082840312156134975761349661325d565b5b60006134a5848285016132ab565b91505092915050565b6134b781613282565b82525050565b60006020820190506134d260008301846134ae565b92915050565b600063ffffffff82169050919050565b6134f1816134d8565b82525050565b600060208201905061350c60008301846134e8565b92915050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b61354781613512565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613582816132c0565b82525050565b60006135948383613579565b60208301905092915050565b6000602082019050919050565b60006135b88261354d565b6135c28185613558565b93506135cd83613569565b8060005b838110156135fe5781516135e58882613588565b97506135f0836135a0565b9250506001810190506135d1565b5085935050505092915050565b600060e082019050613620600083018a61353e565b81810360208301526136328189613202565b905081810360408301526136468188613202565b9050613655606083018761336c565b61366260808301866134ae565b61366f60a083018561342a565b81810360c083015261368181846135ad565b905098975050505050505050565b600065ffffffffffff82169050919050565b6136aa8161368f565b82525050565b60006020820190506136c560008301846136a1565b92915050565b6136d4816133e9565b81146136df57600080fd5b50565b6000813590506136f1816136cb565b92915050565b61370081613420565b811461370b57600080fd5b50565b60008135905061371d816136f7565b92915050565b60008060008060008060c087890312156137405761373f61325d565b5b600061374e89828a016132ab565b965050602061375f89828a016132e1565b955050604061377089828a016132e1565b945050606061378189828a016136e2565b935050608061379289828a0161370e565b92505060a06137a389828a0161370e565b9150509295509295509295565b600080600080600080600060e0888a0312156137cf576137ce61325d565b5b60006137dd8a828b016132ab565b97505060206137ee8a828b016132ab565b96505060406137ff8a828b016132e1565b95505060606138108a828b016132e1565b94505060806138218a828b016136e2565b93505060a06138328a828b0161370e565b92505060c06138438a828b0161370e565b91505092959891949750929550565b600080604083850312156138695761386861325d565b5b6000613877858286016132ab565b9250506020613888858286016132ab565b9150509250929050565b61389b816134d8565b81146138a657600080fd5b50565b6000813590506138b881613892565b92915050565b600080604083850312156138d5576138d461325d565b5b60006138e3858286016132ab565b92505060206138f4858286016138a9565b9150509250929050565b613907816134d8565b82525050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b61393e8161390d565b82525050565b60408201600082015161395a60008501826138fe565b50602082015161396d6020850182613935565b50505050565b60006040820190506139886000830184613944565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806139d557607f821691505b602082108114156139e9576139e861398e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a29826132c0565b9150613a34836132c0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a6957613a686139ef565b5b828201905092915050565b7f4552433230566f7465733a20667574757265206c6f6f6b757000000000000000600082015250565b6000613aaa6019836131ad565b9150613ab582613a74565b602082019050919050565b60006020820190508181036000830152613ad981613a9d565b9050919050565b7f4552433230566f7465733a2062726f6b656e20636c6f636b206d6f6465000000600082015250565b6000613b16601d836131ad565b9150613b2182613ae0565b602082019050919050565b60006020820190508181036000830152613b4581613b09565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613c066025836131ad565b9150613c1182613baa565b604082019050919050565b60006020820190508181036000830152613c3581613bf9565b9050919050565b7f4552433230566f7465733a207369676e61747572652065787069726564000000600082015250565b6000613c72601d836131ad565b9150613c7d82613c3c565b602082019050919050565b60006020820190508181036000830152613ca181613c65565b9050919050565b6000608082019050613cbd600083018761342a565b613cca60208301866134ae565b613cd7604083018561336c565b613ce4606083018461336c565b95945050505050565b7f4552433230566f7465733a20696e76616c6964206e6f6e636500000000000000600082015250565b6000613d236019836131ad565b9150613d2e82613ced565b602082019050919050565b60006020820190508181036000830152613d5281613d16565b9050919050565b7f45524332305065726d69743a206578706972656420646561646c696e65000000600082015250565b6000613d8f601d836131ad565b9150613d9a82613d59565b602082019050919050565b60006020820190508181036000830152613dbe81613d82565b9050919050565b600060c082019050613dda600083018961342a565b613de760208301886134ae565b613df460408301876134ae565b613e01606083018661336c565b613e0e608083018561336c565b613e1b60a083018461336c565b979650505050505050565b7f45524332305065726d69743a20696e76616c6964207369676e61747572650000600082015250565b6000613e5c601e836131ad565b9150613e6782613e26565b602082019050919050565b60006020820190508181036000830152613e8b81613e4f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613eee6026836131ad565b9150613ef982613e92565b604082019050919050565b60006020820190508181036000830152613f1d81613ee1565b9050919050565b7f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60008201527f766572666c6f77696e6720766f74657300000000000000000000000000000000602082015250565b6000613f806030836131ad565b9150613f8b82613f24565b604082019050919050565b60006020820190508181036000830152613faf81613f73565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613fec601f836131ad565b9150613ff782613fb6565b602082019050919050565b6000602082019050818103600083015261401b81613fdf565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203260008201527f3234206269747300000000000000000000000000000000000000000000000000602082015250565b600061407e6027836131ad565b915061408982614022565b604082019050919050565b600060208201905081810360008301526140ad81614071565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203360008201527f3220626974730000000000000000000000000000000000000000000000000000602082015250565b60006141106026836131ad565b915061411b826140b4565b604082019050919050565b6000602082019050818103600083015261413f81614103565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203460008201527f3820626974730000000000000000000000000000000000000000000000000000602082015250565b60006141a26026836131ad565b91506141ad82614146565b604082019050919050565b600060208201905081810360008301526141d181614195565b9050919050565b60006141e3826132c0565b91506141ee836132c0565b925082821015614201576142006139ef565b5b828203905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142686024836131ad565b91506142738261420c565b604082019050919050565b600060208201905081810360008301526142978161425b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006142fa6022836131ad565b91506143058261429e565b604082019050919050565b60006020820190508181036000830152614329816142ed565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614366601d836131ad565b915061437182614330565b602082019050919050565b6000602082019050818103600083015261439581614359565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006143f86025836131ad565b91506144038261439c565b604082019050919050565b60006020820190508181036000830152614427816143eb565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061448a6023836131ad565b91506144958261442e565b604082019050919050565b600060208201905081810360008301526144b98161447d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061451c6026836131ad565b9150614527826144c0565b604082019050919050565b6000602082019050818103600083015261454b8161450f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145886020836131ad565b915061459382614552565b602082019050919050565b600060208201905081810360008301526145b78161457b565b9050919050565b600081519050919050565b6000819050602082019050919050565b60006145e58251613420565b80915050919050565b600082821b905092915050565b6000614606826145be565b82614610846145c9565b905061461b816145d9565b9250602082101561465b576146567fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026145ee565b831692505b5050919050565b6000604082019050614677600083018561336c565b614684602083018461336c565b9392505050565b600060a0820190506146a0600083018861342a565b6146ad602083018761342a565b6146ba604083018661342a565b6146c7606083018561336c565b6146d460808301846134ae565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614718826132c0565b9150614723836132c0565b925082614733576147326146de565b5b828204905092915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006147746014836131ad565b915061477f8261473e565b602082019050919050565b600060208201905081810360008301526147a381614767565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006147e06010836131ad565b91506147eb826147aa565b602082019050919050565b6000602082019050818103600083015261480f816147d3565b9050919050565b600060808201905061482b600083018761342a565b61483860208301866133f6565b614845604083018561342a565b614852606083018461342a565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006148c06018836131ad565b91506148cb8261488a565b602082019050919050565b600060208201905081810360008301526148ef816148b3565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b600061492c601f836131ad565b9150614937826148f6565b602082019050919050565b6000602082019050818103600083015261495b8161491f565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006149be6022836131ad565b91506149c982614962565b604082019050919050565b600060208201905081810360008301526149ed816149b1565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a506021836131ad565b9150614a5b826149f4565b604082019050919050565b60006020820190508181036000830152614a7f81614a43565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ae26022836131ad565b9150614aed82614a86565b604082019050919050565b60006020820190508181036000830152614b1181614ad5565b905091905056fea2646970667358221220d2e8827d6af10086ab535730682009e47d91c74a846ac72318e13b1c20ee1c9564736f6c634300080a0033