[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "contract IERC20", "name": "_token", "type": "address" }, { "internalType": "contract IChainlinkOracle", "name": "_chainlinkOracle", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "targetLeverage", "type": "uint256" } ], "internalType": "struct GMXPerpetualDEXLongVault.VaultConfig", "name": "_vaultConfig", "type": "tuple" }, { "internalType": "uint256", "name": "_maxCapacity", "type": "uint256" }, { "internalType": "uint256", "name": "_mgmtFeePerSecond", "type": "uint256" }, { "internalType": "uint256", "name": "_perfFee", "type": "uint256" }, { "internalType": "address", "name": "_treasury", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "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": false, "internalType": "address", "name": "vault", "type": "address" } ], "name": "Compound", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "address", "name": "asset", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assetAmt", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "sharesAmt", "type": "uint256" } ], "name": "Deposit", "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": false, "internalType": "uint256", "name": "svTokenValueBefore", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "svTokenValueAfter", "type": "uint256" } ], "name": "Rebalance", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "_keeper", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "_status", "type": "bool" } ], "name": "UpdateKeeper", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "contract IGMXPerpetualDEXLongManager", "name": "_manager", "type": "address" } ], "name": "UpdateManager", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_maxCapacity", "type": "uint256" } ], "name": "UpdateMaxCapacity", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_mgmtFeePerSecond", "type": "uint256" } ], "name": "UpdateMgmtFeePerSecond", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_perfFee", "type": "uint256" } ], "name": "UpdatePerfFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "contract IGMXPerpetualDEXLongReader", "name": "_reader", "type": "address" } ], "name": "UpdateReader", "type": "event" }, { "anonymous": false, "inputs": [ { "components": [ { "internalType": "uint256", "name": "targetLeverage", "type": "uint256" } ], "indexed": false, "internalType": "struct GMXPerpetualDEXLongVault.VaultConfig", "name": "_vaultConfig", "type": "tuple" } ], "name": "UpdateVaultConfig", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "address", "name": "asset", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assetAmt", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "sharesAmt", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "DUST_AMOUNT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SAFE_MULTIPLIER", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": [], "name": "chainlinkOracle", "outputs": [ { "internalType": "contract IChainlinkOracle", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_rewardTrackers", "type": "address[]" } ], "name": "compound", "outputs": [], "stateMutability": "nonpayable", "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": "uint256", "name": "_amt", "type": "uint256" }, { "internalType": "uint256", "name": "_minSharesAmt", "type": "uint256" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "emergencyShutDown", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shareAmt", "type": "uint256" } ], "name": "emergencyWithdraw", "outputs": [], "stateMutability": "nonpayable", "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": "", "type": "address" } ], "name": "keepers", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastFeeCollected", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "manager", "outputs": [ { "internalType": "contract IGMXPerpetualDEXLongManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxCapacity", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mgmtFeePerSecond", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingMgmtFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "perfFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "reader", "outputs": [ { "internalType": "contract IGMXPerpetualDEXLongReader", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "enum ManagerAction", "name": "_action", "type": "uint8" }, { "internalType": "uint256", "name": "_lpAmt", "type": "uint256" }, { "internalType": "uint256", "name": "_borrowTokenAmt", "type": "uint256" }, { "internalType": "uint256", "name": "_repayTokenAmt", "type": "uint256" } ], "name": "rebalance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "svTokenValue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "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": "treasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_keeper", "type": "address" }, { "internalType": "bool", "name": "_approval", "type": "bool" } ], "name": "updateKeeper", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IGMXPerpetualDEXLongManager", "name": "_manager", "type": "address" } ], "name": "updateManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_maxCapacity", "type": "uint256" } ], "name": "updateMaxCapacity", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_mgmtFeePerSecond", "type": "uint256" } ], "name": "updateMgmtFeePerSecond", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_perfFee", "type": "uint256" } ], "name": "updatePerfFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IGMXPerpetualDEXLongReader", "name": "_reader", "type": "address" } ], "name": "updateReader", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_treasury", "type": "address" } ], "name": "updateTreasury", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "targetLeverage", "type": "uint256" } ], "internalType": "struct GMXPerpetualDEXLongVault.VaultConfig", "name": "_vaultConfig", "type": "tuple" }, { "internalType": "enum ManagerAction", "name": "_action", "type": "uint8" }, { "internalType": "uint256", "name": "_lpAmt", "type": "uint256" }, { "internalType": "uint256", "name": "_borrowTokenAmt", "type": "uint256" }, { "internalType": "uint256", "name": "_repayTokenAmt", "type": "uint256" } ], "name": "updateVaultConfig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_value", "type": "uint256" }, { "internalType": "uint256", "name": "_currentEquity", "type": "uint256" } ], "name": "valueToShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "vaultConfig", "outputs": [ { "internalType": "uint256", "name": "targetLeverage", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shareAmt", "type": "uint256" }, { "internalType": "uint256", "name": "_minWithdrawAmt", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60c06040523480156200001157600080fd5b5060405162005bf638038062005bf683398181016040528101906200003791906200063d565b888881600390816200004a91906200099b565b5080600490816200005c91906200099b565b5050506200007f620000736200026a60201b60201c565b6200027260201b60201c565b60016006819055506000600760006101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff160362000114576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010b9062000ae3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160362000186576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200017d9062000ae3565b60405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508573ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508460096000820151816000015590505083600e8190555082600a8190555081600b8190555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600d8190555050505050505050505062000b05565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003a18262000356565b810181811067ffffffffffffffff82111715620003c357620003c262000367565b5b80604052505050565b6000620003d862000338565b9050620003e6828262000396565b919050565b600067ffffffffffffffff82111562000409576200040862000367565b5b620004148262000356565b9050602081019050919050565b60005b838110156200044157808201518184015260208101905062000424565b60008484015250505050565b6000620004646200045e84620003eb565b620003cc565b90508281526020810184848401111562000483576200048262000351565b5b6200049084828562000421565b509392505050565b600082601f830112620004b057620004af6200034c565b5b8151620004c28482602086016200044d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004f882620004cb565b9050919050565b60006200050c82620004eb565b9050919050565b6200051e81620004ff565b81146200052a57600080fd5b50565b6000815190506200053e8162000513565b92915050565b60006200055182620004eb565b9050919050565b620005638162000544565b81146200056f57600080fd5b50565b600081519050620005838162000558565b92915050565b600080fd5b6000819050919050565b620005a3816200058e565b8114620005af57600080fd5b50565b600081519050620005c38162000598565b92915050565b600060208284031215620005e257620005e162000589565b5b620005ee6020620003cc565b905060006200060084828501620005b2565b60008301525092915050565b6200061781620004eb565b81146200062357600080fd5b50565b60008151905062000637816200060c565b92915050565b60008060008060008060008060006101208a8c03121562000663576200066262000342565b5b60008a015167ffffffffffffffff81111562000684576200068362000347565b5b620006928c828d0162000498565b99505060208a015167ffffffffffffffff811115620006b657620006b562000347565b5b620006c48c828d0162000498565b9850506040620006d78c828d016200052d565b9750506060620006ea8c828d0162000572565b9650506080620006fd8c828d01620005c9565b95505060a0620007108c828d01620005b2565b94505060c0620007238c828d01620005b2565b93505060e0620007368c828d01620005b2565b9250506101006200074a8c828d0162000626565b9150509295985092959850929598565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007ad57607f821691505b602082108103620007c357620007c262000765565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200082d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007ee565b620008398683620007ee565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200087c6200087662000870846200058e565b62000851565b6200058e565b9050919050565b6000819050919050565b62000898836200085b565b620008b0620008a78262000883565b848454620007fb565b825550505050565b600090565b620008c7620008b8565b620008d48184846200088d565b505050565b5b81811015620008fc57620008f0600082620008bd565b600181019050620008da565b5050565b601f8211156200094b576200091581620007c9565b6200092084620007de565b8101602085101562000930578190505b620009486200093f85620007de565b830182620008d9565b50505b505050565b600082821c905092915050565b6000620009706000198460080262000950565b1980831691505092915050565b60006200098b83836200095d565b9150826002028217905092915050565b620009a6826200075a565b67ffffffffffffffff811115620009c257620009c162000367565b5b620009ce825462000794565b620009db82828562000900565b600060209050601f83116001811462000a135760008415620009fe578287015190505b62000a0a85826200097d565b86555062000a7a565b601f19841662000a2386620007c9565b60005b8281101562000a4d5784890151825560018201915060208501945060208101905062000a26565b8683101562000a6d578489015162000a69601f8916826200095d565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b600062000acb600f8362000a82565b915062000ad88262000a93565b602082019050919050565b6000602082019050818103600083015262000afe8162000abc565b9050919050565b60805160a05161508c62000b6a60003960008181610f3a0152818161101c0152818161107b0152818161127c015281816113300152818161138f01528181611cac01528181611d3901528181611e270152612b6201526000611d80015261508c6000f3fe608060405234801561001057600080fd5b506004361061027f5760003560e01c80635ff0d2691161015c578063a457c2d7116100ce578063dc7e0ce811610087578063dc7e0ce814610766578063dd62ed3e14610784578063e2bbb158146107b4578063ef06e72c146107d0578063f2fde38b146107ee578063fc0c546a1461080a5761027f565b8063a457c2d714610694578063a9059cbb146106c4578063b945060c146106f4578063c0ecd6b614610710578063d30578771461072c578063d4fc42c6146107485761027f565b80637cc34bb4116101205780637cc34bb4146105e25780637f51bb1f1461060057806388e5735e1461061c5780638da5cb5b1461063a57806395d89b411461065857806397f641ab146106765761027f565b80635ff0d2691461055057806361d027b31461056c57806370a082311461058a578063715018a6146105ba578063750290da146105c45761027f565b806339509351116101f55780635312ea8e116101b95780635312ea8e14610490578063561a5d07146104ac57806358aba00f146104c857806359b6a0c9146104e45780635c975abb146105025780635f704f1e146105205761027f565b806339509351146103d85780633bbd64bc14610408578063441a3e7014610438578063481c6a75146104545780634e6aafd3146104725761027f565b80631a95530a116102475780631a95530a1461031857806322b2ba731461033457806323b872dd146103525780632e61b47414610382578063313ce5671461039e578063378eb167146103bc5761027f565b806306fdde0314610284578063095ea7b3146102a257806315c381fb146102d25780631681cfe6146102f057806318160ddd146102fa575b600080fd5b61028c610828565b6040516102999190613524565b60405180910390f35b6102bc60048036038101906102b791906135ee565b6108ba565b6040516102c99190613649565b60405180910390f35b6102da6108dd565b6040516102e79190613673565b60405180910390f35b6102f86109cc565b005b610302610ba1565b60405161030f9190613673565b60405180910390f35b610332600480360381019061032d919061368e565b610bab565b005b61033c610bf4565b6040516103499190613673565b60405180910390f35b61036c600480360381019061036791906136bb565b610bfa565b6040516103799190613649565b60405180910390f35b61039c6004803603810190610397919061374c565b610c29565b005b6103a6610d1b565b6040516103b39190613795565b60405180910390f35b6103d660048036038101906103d191906138f8565b610d24565b005b6103f260048036038101906103ed91906135ee565b610deb565b6040516103ff9190613649565b60405180910390f35b610422600480360381019061041d9190613941565b610e22565b60405161042f9190613649565b60405180910390f35b610452600480360381019061044d919061396e565b610e42565b005b61045c6110c0565b6040516104699190613a0d565b60405180910390f35b61047a6110e6565b6040516104879190613673565b60405180910390f35b6104aa60048036038101906104a5919061368e565b611132565b005b6104c660048036038101906104c1919061368e565b6113d4565b005b6104e260048036038101906104dd9190613a66565b61141d565b005b6104ec61150f565b6040516104f99190613673565b60405180910390f35b61050a611515565b6040516105179190613649565b60405180910390f35b61053a6004803603810190610535919061396e565b61152c565b6040516105479190613673565b60405180910390f35b61056a60048036038101906105659190613af9565b61157d565b005b6105746115df565b6040516105819190613b83565b60405180910390f35b6105a4600480360381019061059f9190613941565b611605565b6040516105b19190613673565b60405180910390f35b6105c261164d565b005b6105cc611661565b6040516105d99190613673565b60405180910390f35b6105ea611667565b6040516105f79190613673565b60405180910390f35b61061a60048036038101906106159190613941565b611673565b005b61062461172e565b6040516106319190613673565b60405180910390f35b610642611734565b60405161064f9190613b83565b60405180910390f35b61066061175e565b60405161066d9190613524565b60405180910390f35b61067e6117f0565b60405161068b9190613673565b60405180910390f35b6106ae60048036038101906106a991906135ee565b6117fc565b6040516106bb9190613649565b60405180910390f35b6106de60048036038101906106d991906135ee565b611873565b6040516106eb9190613649565b60405180910390f35b61070e6004803603810190610709919061368e565b611896565b005b61072a60048036038101906107259190613b9e565b6118df565b005b61074660048036038101906107419190613c31565b611a61565b005b610750611b6c565b60405161075d9190613c92565b60405180910390f35b61076e611b92565b60405161077b9190613673565b60405180910390f35b61079e60048036038101906107999190613cad565b611b9e565b6040516107ab9190613673565b60405180910390f35b6107ce60048036038101906107c9919061396e565b611c25565b005b6107d8611d7e565b6040516107e59190613d0e565b60405180910390f35b61080860048036038101906108039190613941565b611da2565b005b610812611e25565b60405161081f9190613d4a565b60405180910390f35b60606003805461083790613d94565b80601f016020809104026020016040519081016040528092919081815260200182805461086390613d94565b80156108b05780601f10610885576101008083540402835291602001916108b0565b820191906000526020600020905b81548152906001019060200180831161089357829003601f168201915b5050505050905090565b6000806108c5611e49565b90506108d2818585611e51565b600191505092915050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166335978f2f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109719190613dda565b9050600081148061098957506000610987610ba1565b145b1561099f57670de0b6b3a76400009150506109c9565b6109a7610ba1565b670de0b6b3a7640000826109bb9190613e36565b6109c59190613ea7565b9150505b90565b6109d461201a565b6109dc612098565b6109e46120e2565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634d9661986040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a779190613dda565b9050600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2a1afba6001600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637d7279816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4a9190613dda565b6000856040518563ffffffff1660e01b8152600401610b6c9493929190613f8a565b600060405180830381600087803b158015610b8657600080fd5b505af1158015610b9a573d6000803e3d6000fd5b5050505050565b6000600254905090565b610bb361201a565b80600a819055507fb8e0e6f62c80b5f5df033c1531325e98d6b2caa8f5627a5148b43c06301ef78281604051610be99190613673565b60405180910390a150565b600b5481565b600080610c05611e49565b9050610c12858285612145565b610c1d8585856121d1565b60019150509392505050565b610c3161201a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c979061401b565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd6ca2e5fb27614772dab85e4f9e854d2169326764f26695f98960171270f419281604051610d109190613c92565b60405180910390a150565b60006012905090565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663378eb167826040518263ffffffff1660e01b8152600401610d7f91906140f9565b600060405180830381600087803b158015610d9957600080fd5b505af1158015610dad573d6000803e3d6000fd5b505050507fda323bd96658b18a6ce813e824305dc61760462bad6aaf52c65aebb8c8c9faa130604051610de09190613b83565b60405180910390a150565b600080610df6611e49565b9050610e17818585610e088589611b9e565b610e12919061411b565b611e51565b600191505092915050565b600f6020528060005260406000206000915054906101000a900460ff1681565b600260065403610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e9061419b565b60405180910390fd5b6002600681905550610e97612098565b60008211610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed190614207565b60405180910390fd5b610ee333611605565b821115610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c90614273565b60405180910390fd5b610f2d612450565b610f368261248c565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f919190613b83565b602060405180830381865afa158015610fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd29190613dda565b905081811015611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e90614305565b60405180910390fd5b6110417f0000000000000000000000000000000000000000000000000000000000000000826126ed565b3373ffffffffffffffffffffffffffffffffffffffff167ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5677f000000000000000000000000000000000000000000000000000000000000000083866040516110ab93929190614325565b60405180910390a25060016006819055505050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600d54426110f7919061435c565b9050670de0b6b3a764000081600a5461110e610ba1565b6111189190613e36565b6111229190613e36565b61112c9190613ea7565b91505090565b600260065403611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e9061419b565b60405180910390fd5b600260068190555061118761271c565b600081116111ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c190614207565b60405180910390fd5b6111d333611605565b811115611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c90614273565b60405180910390fd5b67016345785d8a00008161122833611605565b03101561123b5761123833611605565b90505b6000611245610ba1565b670de0b6b3a7640000836112599190613e36565b6112639190613ea7565b905061126f3383612765565b6000670de0b6b3a76400007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112d39190613b83565b602060405180830381865afa1580156112f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113149190613dda565b8361131f9190613e36565b6113299190613ea7565b90506113557f0000000000000000000000000000000000000000000000000000000000000000826126ed565b3373ffffffffffffffffffffffffffffffffffffffff167ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5677f000000000000000000000000000000000000000000000000000000000000000083866040516113bf93929190614325565b60405180910390a25050600160068190555050565b6113dc61201a565b80600b819055507fb9f9203609320838ba83347a8b1360456000508e033528b2812c4721cbb9e7c3816040516114129190613673565b60405180910390a150565b61142561201a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148b9061401b565b60405180910390fd5b80600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5c18ab5c697b63d102fc7e14c77bfaef0f1013206eca139920fd389277814e09816040516115049190613a0d565b60405180910390a150565b600e5481565b6000600760009054906101000a900460ff16905090565b6000806115376110e6565b61153f610ba1565b611549919061411b565b90506000810361155c5783915050611577565b8281856115699190613e36565b6115739190613ea7565b9150505b92915050565b61158561201a565b846009600082015181600001559050506115a1848484846118df565b7f6bfdeaa2a08b64830f8656f30ec086b3fbe471c1dd99640eac7861b9f688431a856040516115d091906143bb565b60405180910390a15050505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61165561201a565b61165f600061293b565b565b600d5481565b60098060000154905081565b61167b61201a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e19061401b565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461176d90613d94565b80601f016020809104026020016040519081016040528092919081815260200182805461179990613d94565b80156117e65780601f106117bb576101008083540402835291602001916117e6565b820191906000526020600020905b8154815290600101906020018083116117c957829003601f168201915b5050505050905090565b67016345785d8a000081565b600080611807611e49565b905060006118158286611b9e565b90508381101561185a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185190614448565b60405180910390fd5b6118678286868403611e51565b60019250505092915050565b60008061187e611e49565b905061188b8185856121d1565b600191505092915050565b61189e61201a565b80600e819055507fa0df4c00ea29c9d5f7afacc3d4bf43ebe9781d8c6663ef04605cdd9e910c382b816040516118d49190613673565b60405180910390a150565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661196b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611962906144b4565b60405180910390fd5b611973612098565b61197b612450565b60006119856108dd565b9050600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2a1afba868686866040518563ffffffff1660e01b81526004016119e894939291906144d4565b600060405180830381600087803b158015611a0257600080fd5b505af1158015611a16573d6000803e3d6000fd5b505050507f0b33d39bbef101ecc4f5ef04e6d3a125c9fb745a418dac380e2a9460f8200dc881611a446108dd565b604051611a52929190614519565b60405180910390a15050505050565b611a6961201a565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acf9061401b565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f465c356447ab4144076254f033e216e3ba04a16610457682ed579a7fdaebd7768282604051611b60929190614542565b60405180910390a15050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b670de0b6b3a764000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600260065403611c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c619061419b565b60405180910390fd5b6002600681905550611c7a612098565b611c82612450565b611cf133600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612a01909392919063ffffffff16565b6000611cfd8383612a8a565b90503373ffffffffffffffffffffffffffffffffffffffff167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d77f00000000000000000000000000000000000000000000000000000000000000008584604051611d6993929190614325565b60405180910390a25060016006819055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611daa61201a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e10906145dd565b60405180910390fd5b611e228161293b565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb79061466f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690614701565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161200d9190613673565b60405180910390a3505050565b612022611e49565b73ffffffffffffffffffffffffffffffffffffffff16612040611734565b73ffffffffffffffffffffffffffffffffffffffff1614612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d9061476d565b60405180910390fd5b565b6120a0611515565b156120e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d7906147d9565b60405180910390fd5b565b6120ea612098565b6001600760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861212e611e49565b60405161213b9190613b83565b60405180910390a1565b60006121518484611b9e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121cb57818110156121bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b490614845565b60405180910390fd5b6121ca8484848403611e51565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612237906148d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a690614969565b60405180910390fd5b6122ba838383613028565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612340576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612337906149fb565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123d3919061411b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124379190613673565b60405180910390a361244a84848461302d565b50505050565b612483600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661247e6110e6565b613032565b42600d81905550565b67016345785d8a00008161249f33611605565b0310156124b2576124af33611605565b90505b60006124bc610ba1565b670de0b6b3a7640000836124d09190613e36565b6124da9190613ea7565b90506124e63383612765565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634d9661986040518163ffffffff1660e01b8152600401602060405180830381865afa158015612555573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125799190613dda565b90506000670de0b6b3a7640000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637d7279816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126179190613dda565b846126229190613e36565b61262c9190613ea7565b90506000670de0b6b3a764000083856126459190613e36565b61264f9190613ea7565b9050600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2a1afba6001846000856040518563ffffffff1660e01b81526004016126b49493929190613f8a565b600060405180830381600087803b1580156126ce57600080fd5b505af11580156126e2573d6000803e3d6000fd5b505050505050505050565b61271833828473ffffffffffffffffffffffffffffffffffffffff166131919092919063ffffffff16565b5050565b612724611515565b612763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275a90614a67565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cb90614af9565b60405180910390fd5b6127e082600083613028565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285d90614b8b565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546128bd919061435c565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129229190613673565b60405180910390a36129368360008461302d565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a84846323b872dd60e01b858585604051602401612a2293929190614bab565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613217565b50505050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f22c136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612afa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1e9190613dda565b90506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f18217837f0000000000000000000000000000000000000000000000000000000000000000876040518363ffffffff1660e01b8152600401612b9f929190614be2565b602060405180830381865afa158015612bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be09190613dda565b90506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638065263d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c759190613dda565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166317bf5aae856040518263ffffffff1660e01b8152600401612cd09190613673565b602060405180830381865afa158015612ced573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d119190613dda565b612d1b919061435c565b905060008611612d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5790614c57565b60405180910390fd5b600e548282612d6f919061411b565b1115612db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da790614cc3565b60405180910390fd5b6000670de0b6b3a764000080600960000154612dcc919061435c565b88612dd79190613e36565b612de19190613ea7565b9050600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2a1afba6000808460006040518563ffffffff1660e01b8152600401612e469493929190614ce3565b600060405180830381600087803b158015612e6057600080fd5b505af1158015612e74573d6000803e3d6000fd5b50505050600082600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638065263d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ee8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0c9190613dda565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166317bf5aae886040518263ffffffff1660e01b8152600401612f679190613673565b602060405180830381865afa158015612f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa89190613dda565b612fb2919061435c565b612fbc919061435c565b90506000612fca828561152c565b90508781101561300f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300690614d9a565b60405180910390fd5b6130193382613032565b80965050505050505092915050565b505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309890614e06565b60405180910390fd5b6130ad60008383613028565b80600260008282546130bf919061411b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613114919061411b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131799190613673565b60405180910390a361318d6000838361302d565b5050565b6132128363a9059cbb60e01b84846040516024016131b0929190614be2565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613217565b505050565b6000613279826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166132de9092919063ffffffff16565b90506000815111156132d957808060200190518101906132999190614e3b565b6132d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132cf90614eda565b60405180910390fd5b5b505050565b60606132ed84846000856132f6565b90509392505050565b60608247101561333b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333290614f6c565b60405180910390fd5b6133448561340a565b613383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337a90614fd8565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516133ac919061503f565b60006040518083038185875af1925050503d80600081146133e9576040519150601f19603f3d011682016040523d82523d6000602084013e6133ee565b606091505b50915091506133fe82828661342d565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060831561343d5782905061348d565b6000835111156134505782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134849190613524565b60405180910390fd5b9392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134ce5780820151818401526020810190506134b3565b60008484015250505050565b6000601f19601f8301169050919050565b60006134f682613494565b613500818561349f565b93506135108185602086016134b0565b613519816134da565b840191505092915050565b6000602082019050818103600083015261353e81846134eb565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135858261355a565b9050919050565b6135958161357a565b81146135a057600080fd5b50565b6000813590506135b28161358c565b92915050565b6000819050919050565b6135cb816135b8565b81146135d657600080fd5b50565b6000813590506135e8816135c2565b92915050565b6000806040838503121561360557613604613550565b5b6000613613858286016135a3565b9250506020613624858286016135d9565b9150509250929050565b60008115159050919050565b6136438161362e565b82525050565b600060208201905061365e600083018461363a565b92915050565b61366d816135b8565b82525050565b60006020820190506136886000830184613664565b92915050565b6000602082840312156136a4576136a3613550565b5b60006136b2848285016135d9565b91505092915050565b6000806000606084860312156136d4576136d3613550565b5b60006136e2868287016135a3565b93505060206136f3868287016135a3565b9250506040613704868287016135d9565b9150509250925092565b60006137198261357a565b9050919050565b6137298161370e565b811461373457600080fd5b50565b60008135905061374681613720565b92915050565b60006020828403121561376257613761613550565b5b600061377084828501613737565b91505092915050565b600060ff82169050919050565b61378f81613779565b82525050565b60006020820190506137aa6000830184613786565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137ed826134da565b810181811067ffffffffffffffff8211171561380c5761380b6137b5565b5b80604052505050565b600061381f613546565b905061382b82826137e4565b919050565b600067ffffffffffffffff82111561384b5761384a6137b5565b5b602082029050602081019050919050565b600080fd5b600061387461386f84613830565b613815565b905080838252602082019050602084028301858111156138975761389661385c565b5b835b818110156138c057806138ac88826135a3565b845260208401935050602081019050613899565b5050509392505050565b600082601f8301126138df576138de6137b0565b5b81356138ef848260208601613861565b91505092915050565b60006020828403121561390e5761390d613550565b5b600082013567ffffffffffffffff81111561392c5761392b613555565b5b613938848285016138ca565b91505092915050565b60006020828403121561395757613956613550565b5b6000613965848285016135a3565b91505092915050565b6000806040838503121561398557613984613550565b5b6000613993858286016135d9565b92505060206139a4858286016135d9565b9150509250929050565b6000819050919050565b60006139d36139ce6139c98461355a565b6139ae565b61355a565b9050919050565b60006139e5826139b8565b9050919050565b60006139f7826139da565b9050919050565b613a07816139ec565b82525050565b6000602082019050613a2260008301846139fe565b92915050565b6000613a338261357a565b9050919050565b613a4381613a28565b8114613a4e57600080fd5b50565b600081359050613a6081613a3a565b92915050565b600060208284031215613a7c57613a7b613550565b5b6000613a8a84828501613a51565b91505092915050565b600080fd5b600060208284031215613aae57613aad613a93565b5b613ab86020613815565b90506000613ac8848285016135d9565b60008301525092915050565b60048110613ae157600080fd5b50565b600081359050613af381613ad4565b92915050565b600080600080600060a08688031215613b1557613b14613550565b5b6000613b2388828901613a98565b9550506020613b3488828901613ae4565b9450506040613b45888289016135d9565b9350506060613b56888289016135d9565b9250506080613b67888289016135d9565b9150509295509295909350565b613b7d8161357a565b82525050565b6000602082019050613b986000830184613b74565b92915050565b60008060008060808587031215613bb857613bb7613550565b5b6000613bc687828801613ae4565b9450506020613bd7878288016135d9565b9350506040613be8878288016135d9565b9250506060613bf9878288016135d9565b91505092959194509250565b613c0e8161362e565b8114613c1957600080fd5b50565b600081359050613c2b81613c05565b92915050565b60008060408385031215613c4857613c47613550565b5b6000613c56858286016135a3565b9250506020613c6785828601613c1c565b9150509250929050565b6000613c7c826139da565b9050919050565b613c8c81613c71565b82525050565b6000602082019050613ca76000830184613c83565b92915050565b60008060408385031215613cc457613cc3613550565b5b6000613cd2858286016135a3565b9250506020613ce3858286016135a3565b9150509250929050565b6000613cf8826139da565b9050919050565b613d0881613ced565b82525050565b6000602082019050613d236000830184613cff565b92915050565b6000613d34826139da565b9050919050565b613d4481613d29565b82525050565b6000602082019050613d5f6000830184613d3b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613dac57607f821691505b602082108103613dbf57613dbe613d65565b5b50919050565b600081519050613dd4816135c2565b92915050565b600060208284031215613df057613def613550565b5b6000613dfe84828501613dc5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e41826135b8565b9150613e4c836135b8565b9250828202613e5a816135b8565b91508282048414831517613e7157613e70613e07565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613eb2826135b8565b9150613ebd836135b8565b925082613ecd57613ecc613e78565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110613f1857613f17613ed8565b5b50565b6000819050613f2982613f07565b919050565b6000613f3982613f1b565b9050919050565b613f4981613f2e565b82525050565b6000819050919050565b6000613f74613f6f613f6a84613f4f565b6139ae565b6135b8565b9050919050565b613f8481613f59565b82525050565b6000608082019050613f9f6000830187613f40565b613fac6020830186613664565b613fb96040830185613f7b565b613fc66060830184613664565b95945050505050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b6000614005600f8361349f565b915061401082613fcf565b602082019050919050565b6000602082019050818103600083015261403481613ff8565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6140708161357a565b82525050565b60006140828383614067565b60208301905092915050565b6000602082019050919050565b60006140a68261403b565b6140b08185614046565b93506140bb83614057565b8060005b838110156140ec5781516140d38882614076565b97506140de8361408e565b9250506001810190506140bf565b5085935050505092915050565b60006020820190508181036000830152614113818461409b565b905092915050565b6000614126826135b8565b9150614131836135b8565b925082820190508082111561414957614148613e07565b5b92915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614185601f8361349f565b91506141908261414f565b602082019050919050565b600060208201905081810360008301526141b481614178565b9050919050565b7f5175616e74697479206d757374206265203e2030000000000000000000000000600082015250565b60006141f160148361349f565b91506141fc826141bb565b602082019050919050565b60006020820190508181036000830152614220816141e4565b9050919050565b7f576974686472617720616d7420657863656564732062616c616e636500000000600082015250565b600061425d601c8361349f565b915061426882614227565b602082019050919050565b6000602082019050818103600083015261428c81614250565b9050919050565b7f417373657473207265636569766564206c657373207468616e206d696e696d7560008201527f6d00000000000000000000000000000000000000000000000000000000000000602082015250565b60006142ef60218361349f565b91506142fa82614293565b604082019050919050565b6000602082019050818103600083015261431e816142e2565b9050919050565b600060608201905061433a6000830186613b74565b6143476020830185613664565b6143546040830184613664565b949350505050565b6000614367826135b8565b9150614372836135b8565b925082820390508181111561438a57614389613e07565b5b92915050565b614399816135b8565b82525050565b6020820160008201516143b56000850182614390565b50505050565b60006020820190506143d0600083018461439f565b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061443260258361349f565b915061443d826143d6565b604082019050919050565b6000602082019050818103600083015261446181614425565b9050919050565b7f4b6565706572206e6f7420617070726f76656400000000000000000000000000600082015250565b600061449e60138361349f565b91506144a982614468565b602082019050919050565b600060208201905081810360008301526144cd81614491565b9050919050565b60006080820190506144e96000830187613f40565b6144f66020830186613664565b6145036040830185613664565b6145106060830184613664565b95945050505050565b600060408201905061452e6000830185613664565b61453b6020830184613664565b9392505050565b60006040820190506145576000830185613b74565b614564602083018461363a565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145c760268361349f565b91506145d28261456b565b604082019050919050565b600060208201905081810360008301526145f6816145ba565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061465960248361349f565b9150614664826145fd565b604082019050919050565b600060208201905081810360008301526146888161464c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146eb60228361349f565b91506146f68261468f565b604082019050919050565b6000602082019050818103600083015261471a816146de565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061475760208361349f565b915061476282614721565b602082019050919050565b600060208201905081810360008301526147868161474a565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006147c360108361349f565b91506147ce8261478d565b602082019050919050565b600060208201905081810360008301526147f2816147b6565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061482f601d8361349f565b915061483a826147f9565b602082019050919050565b6000602082019050818103600083015261485e81614822565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006148c160258361349f565b91506148cc82614865565b604082019050919050565b600060208201905081810360008301526148f0816148b4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061495360238361349f565b915061495e826148f7565b604082019050919050565b6000602082019050818103600083015261498281614946565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006149e560268361349f565b91506149f082614989565b604082019050919050565b60006020820190508181036000830152614a14816149d8565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614a5160148361349f565b9150614a5c82614a1b565b602082019050919050565b60006020820190508181036000830152614a8081614a44565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ae360218361349f565b9150614aee82614a87565b604082019050919050565b60006020820190508181036000830152614b1281614ad6565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b7560228361349f565b9150614b8082614b19565b604082019050919050565b60006020820190508181036000830152614ba481614b68565b9050919050565b6000606082019050614bc06000830186613b74565b614bcd6020830185613b74565b614bda6040830184613664565b949350505050565b6000604082019050614bf76000830185613b74565b614c046020830184613664565b9392505050565b7f416d74206d757374206265203e20300000000000000000000000000000000000600082015250565b6000614c41600f8361349f565b9150614c4c82614c0b565b602082019050919050565b60006020820190508181036000830152614c7081614c34565b9050919050565b7f4578636565646564206361706163697479000000000000000000000000000000600082015250565b6000614cad60118361349f565b9150614cb882614c77565b602082019050919050565b60006020820190508181036000830152614cdc81614ca0565b9050919050565b6000608082019050614cf86000830187613f40565b614d056020830186613f7b565b614d126040830185613664565b614d1f6060830184613f7b565b95945050505050565b7f536861726573207265636569766564206c657373207468616e206d696e696d7560008201527f6d00000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d8460218361349f565b9150614d8f82614d28565b604082019050919050565b60006020820190508181036000830152614db381614d77565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000614df0601f8361349f565b9150614dfb82614dba565b602082019050919050565b60006020820190508181036000830152614e1f81614de3565b9050919050565b600081519050614e3581613c05565b92915050565b600060208284031215614e5157614e50613550565b5b6000614e5f84828501614e26565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614ec4602a8361349f565b9150614ecf82614e68565b604082019050919050565b60006020820190508181036000830152614ef381614eb7565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614f5660268361349f565b9150614f6182614efa565b604082019050919050565b60006020820190508181036000830152614f8581614f49565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614fc2601d8361349f565b9150614fcd82614f8c565b602082019050919050565b60006020820190508181036000830152614ff181614fb5565b9050919050565b600081519050919050565b600081905092915050565b600061501982614ff8565b6150238185615003565b93506150338185602086016134b0565b80840191505092915050565b600061504b828461500e565b91508190509291505056fea2646970667358221220bb9cca23e4eaba07a7b637da897d42a2bebfe796bb99426c0ebc3482000e280464736f6c6343000811003300000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e000000000000000000000000d8d520903df0cafee9b989922173d636290572c200000000000000000000000000000000000000000000000029a2241af62c000000000000000000000000000000000000000000000000152d02c7e14af68000000000000000000000000000000000000000000000000000000000000025cd0f8000000000000000000000000000000000000000000000000002c68af0bb1400000000000000000000000000007e7584f60561c39e4530c92cf75f484ada493520000000000000000000000000000000000000000000000000000000000000001e5374656164656669203378204c6f6e6720474c5020474d58205661756c740000000000000000000000000000000000000000000000000000000000000000000a334c2d474c502d474d5800000000000000000000000000000000000000000000