baluni-contracts
Version:
Smart Contracts for Baluni
1,293 lines • 169 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "BaluniV1Pool",
"sourceName": "contracts/pools/BaluniV1Pool.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "target",
"type": "address"
}
],
"name": "AddressEmptyCode",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "ERC1967InvalidImplementation",
"type": "error"
},
{
"inputs": [],
"name": "ERC1967NonPayable",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "allowance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "ERC20InsufficientAllowance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "ERC20InsufficientBalance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "approver",
"type": "address"
}
],
"name": "ERC20InvalidApprover",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "ERC20InvalidReceiver",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ERC20InvalidSender",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "ERC20InvalidSpender",
"type": "error"
},
{
"inputs": [],
"name": "EnforcedPause",
"type": "error"
},
{
"inputs": [],
"name": "ExpectedPause",
"type": "error"
},
{
"inputs": [],
"name": "FailedInnerCall",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "OwnableInvalidOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "OwnableUnauthorizedAccount",
"type": "error"
},
{
"inputs": [],
"name": "ReentrancyGuardReentrantCall",
"type": "error"
},
{
"inputs": [],
"name": "UUPSUnauthorizedCallContext",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "slot",
"type": "bytes32"
}
],
"name": "UUPSUnsupportedProxiableUUID",
"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": "user",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Deposit",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"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": "user",
"type": "address"
},
{
"indexed": false,
"internalType": "address[]",
"name": "assets",
"type": "address[]"
}
],
"name": "RebalancePerformed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "user",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "fromToken",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "toToken",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amountIn",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
}
],
"name": "Swap",
"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": true,
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "Upgraded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "user",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "amountsToAdd",
"type": "uint256[]"
}
],
"name": "WeightsRebalanced",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "user",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Withdraw",
"type": "event"
},
{
"inputs": [],
"name": "ONE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "UPGRADE_INTERFACE_VERSION",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "assetInfos",
"outputs": [
{
"internalType": "address",
"name": "asset",
"type": "address"
},
{
"internalType": "uint256",
"name": "weight",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "slippage",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "reserve",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "assetIndex",
"type": "uint256"
}
],
"name": "assetLiquidity",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "baseAsset",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "share",
"type": "uint256"
}
],
"name": "calculateAssetShare",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "deposit",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "fromToken",
"type": "address"
},
{
"internalType": "address",
"name": "toToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "getAmountOut",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "asset",
"type": "address"
}
],
"name": "getAssetReserve",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getAssets",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "getDeviationForToken",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getDeviations",
"outputs": [
{
"internalType": "bool[]",
"name": "directions",
"type": "bool[]"
},
{
"internalType": "uint256[]",
"name": "deviations",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getReserves",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "getSlippage",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getSlippageParams",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "getTokenWeight",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getWeights",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_name",
"type": "string"
},
{
"internalType": "string",
"name": "_symbol",
"type": "string"
},
{
"internalType": "address[]",
"name": "_assets",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "_weights",
"type": "uint256[]"
},
{
"internalType": "address",
"name": "_registry",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "isRebalanceNeeded",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "liquidity",
"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": "pause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "proxiableUUID",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "fromToken",
"type": "address"
},
{
"internalType": "address",
"name": "toToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "quotePotentialSwap",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "rebalance",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "rebalanceAndDeposit",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "registry",
"outputs": [
{
"internalType": "contract IBaluniV1Registry",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_name",
"type": "string"
},
{
"internalType": "string",
"name": "_symbol",
"type": "string"
},
{
"internalType": "address[]",
"name": "_assets",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "_weights",
"type": "uint256[]"
},
{
"internalType": "address",
"name": "_registry",
"type": "address"
},
{
"internalType": "uint64",
"name": "_version",
"type": "uint64"
}
],
"name": "reinitialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "reserves",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "fromToken",
"type": "address"
},
{
"internalType": "address",
"name": "toToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "minAmount",
"type": "uint256"
},
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "swap",
"outputs": [
{
"internalType": "uint256",
"name": "amountOut",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "fee",
"type": "uint256"
}
],
"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": [],
"name": "totalValuation",
"outputs": [
{
"internalType": "uint256",
"name": "totalVal",
"type": "uint256"
},
{
"internalType": "uint256[]",
"name": "valuations",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "unitPrice",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "unpause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newImplementation",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "upgradeToAndCall",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "share",
"type": "uint256"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "withdraw",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x60a06040523461003e5761001161004d565b610019610043565b618aef6101028239608051818181616d1401528181616d990152616f940152618aef90f35b610049565b60405190565b5f80fd5b610055610057565b565b61005f610061565b565b61006961006b565b565b610073610075565b565b61007d61007f565b565b610087610089565b565b610091610093565b565b61009b61009d565b565b6100a56100a7565b565b6100af6100f3565b565b60018060a01b031690565b90565b6100d36100ce6100d8926100b1565b6100bc565b6100b1565b90565b6100e4906100bf565b90565b6100f0906100db565b90565b6100fc306100e7565b60805256fe60806040526004361015610013575b611a3e565b61001d5f3561030c565b806306fdde03146103075780630902f1ac14610302578063095ea7b3146102fd57806312899068146102f857806318160ddd146102f35780631a686502146102ee57806322acb867146102e957806323b872dd146102e4578063250aa683146102df578063295b9300146102da578063313ce567146102d557806334de9b8d146102d05780633f4ba83a146102cb57806343c2e2f5146102c65780634aa06652146102c15780634f1ef286146102bc57806352d1902d146102b75780635c975abb146102b257806367e4ac2c146102ad57806370a08231146102a8578063715018a6146102a35780637b1039991461029e5780637d7c2a1c146102995780637ff1c179146102945780638456cb591461028f57806389b3179b1461028a5780638a77c8dc146102855780638da5cb5b146102805780638de30f301461027b57806395d89b41146102765780639908fc8b14610271578063a9059cbb1461026c578063ad3cb1cc14610267578063b2b55d7014610262578063b3bf9d321461025d578063b7110e1314610258578063c2ee3a0814610253578063cdf456e11461024e578063cf8fa76414610249578063d14ef46d14610244578063d66bd5241461023f578063dd62ed3e1461023a578063e63697c814610235578063e64ebdd214610230578063e73faa2d1461022b578063f2fde38b146102265763fb33a6c00361000e57611a04565b6118dd565b6118a8565b611873565b61183d565b6117cd565b61176b565b6116f7565b611586565b611533565b6114b0565b611442565b61135a565b6112d2565b61129d565b6111ef565b6111b2565b6110f6565b6110c1565b61108c565b611035565b611000565b610fcd565b610f98565b610f65565b610f30565b610e52565b610e1d565b610de8565b610d14565b610cdf565b610c90565b610b99565b610b63565b610b30565b610af9565b6107dc565b61077e565b610723565b6106ed565b61067e565b610649565b610614565b6105df565b610569565b610471565b61039a565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f91031261032a57565b61031c565b5190565b60209181520190565b90825f9392825e0152565b601f801991011690565b61037061037960209361037e936103678161032f565b93848093610333565b9586910161033c565b610347565b0190565b6103979160208201915f818403910152610351565b90565b346103ca576103aa366004610320565b6103c66103b5611b77565b6103bd610312565b91829182610382565b0390f35b610318565b5190565b60209181520190565b60200190565b90565b6103ee906103e2565b9052565b906103ff816020936103e5565b0190565b60200190565b90610426610420610419846103cf565b80936103d3565b926103dc565b905f5b8181106104365750505090565b90919261044f61044960019286516103f2565b94610403565b9101919091610429565b61046e9160208201915f818403910152610409565b90565b346104a157610481366004610320565b61049d61048c611cb1565b610494610312565b91829182610459565b0390f35b610318565b5f80fd5b73ffffffffffffffffffffffffffffffffffffffff1690565b6104cc906104aa565b90565b6104d8816104c3565b036104df57565b5f80fd5b905035906104f0826104cf565b565b6104fb816103e2565b0361050257565b5f80fd5b90503590610513826104f2565b565b919060408382031261053d578061053161053a925f86016104e3565b93602001610506565b90565b61031c565b151590565b61055090610542565b9052565b9190610567905f60208501940190610547565b565b3461059a5761059661058561057f366004610515565b90611dc6565b61058d610312565b91829182610554565b0390f35b610318565b906020828203126105b8576105b5915f016104e3565b90565b61031c565b6105c6906103e2565b9052565b91906105dd905f602085019401906105bd565b565b3461060f5761060b6105fa6105f536600461059f565b611dec565b610602610312565b918291826105ca565b0390f35b610318565b3461064457610624366004610320565b61064061062f611e84565b610637610312565b918291826105ca565b0390f35b610318565b3461067957610659366004610320565b610675610664611ea3565b61066c610312565b918291826105ca565b0390f35b610318565b346106ae5761068e366004610320565b6106aa610699611eb8565b6106a1610312565b91829182610459565b0390f35b610318565b90916060828403126106e8576106e56106ce845f85016104e3565b936106dc81602086016104e3565b93604001610506565b90565b61031c565b3461071e5761071a6107096107033660046106b3565b91611f3b565b610711610312565b91829182610554565b0390f35b610318565b346107535761074f61073e61073936600461059f565b611f6a565b610746610312565b918291826105ca565b0390f35b610318565b9161077b9261076e60408201935f8301906105bd565b6020818403910152610409565b90565b346107af5761078e366004610320565b610796612002565b906107ab6107a2610312565b92839283610758565b0390f35b610318565b60ff1690565b6107c3906107b4565b9052565b91906107da905f602085019401906107ba565b565b3461080c576107ec366004610320565b6108086107f7612045565b6107ff610312565b918291826107c7565b0390f35b610318565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b9061085090610347565b810190811067ffffffffffffffff82111761086a57604052565b610819565b9061088261087b610312565b9283610846565b565b67ffffffffffffffff81116108a25761089e602091610347565b0190565b610819565b90825f939282370152565b909291926108c76108c282610884565b61086f565b938185526020850190828401116108e3576108e1926108a7565b565b610815565b9080601f8301121561090657816020610903933591016108b2565b90565b610811565b67ffffffffffffffff81116109235760208091020190565b610819565b5f80fd5b9092919261094161093c8261090b565b61086f565b938185526020808601920283019281841161097e57915b8383106109655750505050565b6020809161097384866104e3565b815201920191610958565b610928565b9080601f830112156109a15781602061099e9335910161092c565b90565b610811565b67ffffffffffffffff81116109be5760208091020190565b610819565b909291926109d86109d3826109a6565b61086f565b9381855260208086019202830192818411610a1557915b8383106109fc5750505050565b60208091610a0a8486610506565b8152019201916109ef565b610928565b9080601f83011215610a3857816020610a35933591016109c3565b90565b610811565b919060a083820312610aef575f83013567ffffffffffffffff8111610aea5781610a689185016108e8565b92602081013567ffffffffffffffff8111610ae55782610a899183016108e8565b92604082013567ffffffffffffffff8111610ae05783610aaa918401610983565b9260608301359067ffffffffffffffff8211610adb57610acf81610ad8938601610a1a565b936080016104e3565b90565b6104a6565b6104a6565b6104a6565b6104a6565b61031c565b5f0190565b34610b2b57610b15610b0c366004610a3d565b93929092612928565b610b1d610312565b80610b2781610af4565b0390f35b610318565b34610b5e57610b40366004610320565b610b48612953565b610b50610312565b80610b5a81610af4565b0390f35b610318565b34610b9457610b90610b7f610b793660046106b3565b91612a06565b610b87610312565b918291826105ca565b0390f35b610318565b34610bca57610bc6610bb5610baf3660046106b3565b91612beb565b610bbd610312565b918291826105ca565b0390f35b610318565b67ffffffffffffffff8111610bed57610be9602091610347565b0190565b610819565b90929192610c07610c0282610bcf565b61086f565b93818552602085019082840111610c2357610c21926108a7565b565b610815565b9080601f83011215610c4657816020610c4393359101610bf2565b90565b610811565b919091604081840312610c8b57610c64835f83016104e3565b92602082013567ffffffffffffffff8111610c8657610c839201610c28565b90565b6104a6565b61031c565b610ca4610c9e366004610c4b565b90612dd3565b610cac610312565b80610cb681610af4565b0390f35b90565b610cc690610cba565b9052565b9190610cdd905f60208501940190610cbd565b565b34610d0f57610cef366004610320565b610d0b610cfa612e4e565b610d02610312565b91829182610cca565b0390f35b610318565b34610d4457610d24366004610320565b610d40610d2f612e82565b610d37610312565b91829182610554565b0390f35b610318565b5190565b60209181520190565b60200190565b610d65906104c3565b9052565b90610d7681602093610d5c565b0190565b60200190565b90610d9d610d97610d9084610d49565b8093610d4d565b92610d56565b905f5b818110610dad5750505090565b909192610dc6610dc06001928651610d69565b94610d7a565b9101919091610da0565b610de59160208201915f818403910152610d80565b90565b34610e1857610df8366004610320565b610e14610e03612f16565b610e0b610312565b91829182610dd0565b0390f35b610318565b34610e4d57610e49610e38610e3336600461059f565b612f98565b610e40610312565b918291826105ca565b0390f35b610318565b34610e8057610e62366004610320565b610e6a612fe4565b610e72610312565b80610e7c81610af4565b0390f35b610318565b1c90565b73ffffffffffffffffffffffffffffffffffffffff1690565b610eb2906008610eb79302610e85565b610e89565b90565b90610ec59154610ea2565b90565b610ed460045f90610eba565b90565b90565b610eee610ee9610ef3926104aa565b610ed7565b6104aa565b90565b610eff90610eda565b90565b610f0b90610ef6565b90565b610f1790610f02565b9052565b9190610f2e905f60208501940190610f0e565b565b34610f6057610f40366004610320565b610f5c610f4b610ec8565b610f53610312565b91829182610f1b565b0390f35b610318565b34610f9357610f75366004610320565b610f7d61308a565b610f85610312565b80610f8f81610af4565b0390f35b610318565b34610fc857610fa8366004610320565b610fc4610fb36130a4565b610fbb610312565b91829182610459565b0390f35b610318565b34610ffb57610fdd366004610320565b610fe5613143565b610fed610312565b80610ff781610af4565b0390f35b610318565b346110305761102c61101b61101636600461059f565b61314d565b611023610312565b918291826105ca565b0390f35b610318565b3461106557611045366004610320565b611061611050613218565b611058610312565b91829182610554565b0390f35b610318565b611073906104c3565b9052565b919061108a905f6020850194019061106a565b565b346110bc5761109c366004610320565b6110b86110a7613347565b6110af610312565b91829182611077565b0390f35b610318565b346110f1576110ed6110dc6110d736600461059f565b6133a6565b6110e4610312565b91829182610459565b0390f35b610318565b3461112657611106366004610320565b6111226111116135bb565b611119610312565b91829182610382565b0390f35b610318565b909160c08284031261118a57611143835f84016104e3565b9261115181602085016104e3565b9261115f8260408301610506565b926111876111708460608501610506565b9361117e81608086016104e3565b9360a001610506565b90565b61031c565b9160206111b09294936111a960408201965f8301906105bd565b01906105bd565b565b346111ea576111d16111c536600461112b565b94939093929192613f1a565b906111e66111dd610312565b9283928361118f565b0390f35b610318565b346112205761121c61120b611205366004610515565b90613f3d565b611213610312565b91829182610554565b0390f35b610318565b9061123761123283610884565b61086f565b918252565b5f7f352e302e30000000000000000000000000000000000000000000000000000000910152565b61126d6005611225565b9061127a6020830161123c565b565b611284611263565b90565b61128f61127c565b90565b61129a611287565b90565b346112cd576112ad366004610320565b6112c96112b8611292565b6112c0610312565b91829182610382565b0390f35b610318565b34611302576112fe6112ed6112e836600461059f565b613f5f565b6112f5610312565b918291826105ca565b0390f35b610318565b90916060828403126113555761131f835f84016104e3565b9260208301359067ffffffffffffffff8211611350576113448161134d938601610a1a565b93604001610506565b90565b6104a6565b61031c565b3461138b57611387611376611370366004611307565b91614807565b61137e610312565b918291826105ca565b0390f35b610318565b5190565b60209181520190565b60200190565b6113ac90610542565b9052565b906113bd816020936113a3565b0190565b60200190565b906113e46113de6113d784611390565b8093611394565b9261139d565b905f5b8181106113f45750505090565b90919261140d61140760019286516113b0565b946113c1565b91019190916113e7565b909161143161143f9360408401908482035f8601526113c7565b916020818403910152610409565b90565b3461147357611452366004610320565b61145a614890565b9061146f611466610312565b92839283611417565b0390f35b610318565b90565b61148b9060086114909302610e85565b611478565b90565b9061149e915461147b565b90565b6114ad60015f90611493565b90565b346114e0576114c0366004610320565b6114dc6114cb6114a1565b6114d3610312565b918291826105ca565b0390f35b610318565b73ffffffffffffffffffffffffffffffffffffffff1690565b61150e9060086115139302610e85565b6114e5565b90565b9061152191546114fe565b90565b61153060025f90611516565b90565b3461156357611543366004610320565b61155f61154e611524565b611556610312565b91829182611077565b0390f35b610318565b906020828203126115815761157e915f01610506565b90565b61031c565b346115b6576115b26115a161159c366004611568565b614a72565b6115a9610312565b918291826105ca565b0390f35b610318565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5490565b5f5260205f2090565b6115fe816115e8565b821015611618576116106004916115ec565b910201905f90565b6115bb565b5f1c90565b61162e6116339161161d565b6114e5565b90565b6116409054611622565b90565b61164f6116549161161d565b611478565b90565b6116619054611643565b90565b5f9061166f826115e8565b8110156116b55761167f916115f5565b509061168c5f8301611636565b9161169960018201611657565b916116b260036116ab60028501611657565b9301611657565b90565b5f80fd5b6116ee6116f5946116e46060949897956116da608086019a5f87019061106a565b60208501906105bd565b60408301906105bd565b01906105bd565b565b3461172b5761172761171261170d366004611568565b611664565b9061171e949294610312565b948594856116b9565b0390f35b610318565b61173990610ef6565b90565b9061174690611730565b5f5260205260405f2090565b611768906117636005915f9261173c565b611493565b90565b3461179b5761179761178661178136600461059f565b611752565b61178e610312565b918291826105ca565b0390f35b610318565b91906040838203126117c857806117bc6117c5925f86016104e3565b936020016104e3565b90565b61031c565b346117fe576117fa6117e96117e33660046117a0565b90614ad3565b6117f1610312565b918291826105ca565b0390f35b610318565b90916060828403126118385761183561181e845f8501610506565b9361182c81602086016104e3565b93604001610506565b90565b61031c565b3461186e5761186a611859611853366004611803565b9161578e565b611861610312565b918291826105ca565b0390f35b610318565b346118a35761189f61188e611889366004611568565b6157a4565b611896610312565b91829182610459565b0390f35b610318565b346118d8576118b8366004610320565b6118d46118c36159bf565b6118cb610312565b918291826105ca565b0390f35b610318565b3461190b576118f56118f036600461059f565b615b82565b6118fd610312565b8061190781610af4565b0390f35b610318565b67ffffffffffffffff1690565b61192681611910565b0361192d57565b5f80fd5b9050359061193e8261191d565b565b909160c0828403126119ff575f82013567ffffffffffffffff81116119fa578361196b9184016108e8565b92602083013567ffffffffffffffff81116119f5578161198c9185016108e8565b92604081013567ffffffffffffffff81116119f057826119ad918301610983565b92606082013567ffffffffffffffff81116119eb576119d1846119e8928501610a1a565b936119df81608086016104e3565b9360a001611931565b90565b6104a6565b6104a6565b6104a6565b6104a6565b61031c565b34611a3957611a23611a17366004611940565b94939093929192615e6a565b611a2b610312565b80611a3581610af4565b0390f35b610318565b5f80fd5b606090565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b9060016002830492168015611a94575b6020831014611a8f57565b611a47565b91607f1691611a84565b60209181520190565b5f5260205f2090565b905f9291805490611aca611ac383611a74565b8094611a9e565b916001811690815f14611b215750600114611ae5575b505050565b611af29192939450611aa7565b915f925b818410611b0957505001905f8080611ae0565b60018160209295939554848601520191019290611af6565b92949550505060ff19168252151560200201905f8080611ae0565b90611b4691611ab0565b90565b90611b69611b6292611b59610312565b93848092611b3c565b0383610846565b565b611b7490611b49565b90565b611b7f611a42565b50611b936003611b8d615e7a565b01611b6b565b90565b606090565b90611bad611ba8836109a6565b61086f565b918252565b369037565b90611bdc611bc483611b9b565b92602080611bd286936109a6565b9201910390611bb2565b565b90565b611bf5611bf0611bfa92611bde565b610ed7565b6103e2565b90565b6001611c0991016103e2565b90565b611c1590610eda565b90565b611c2190611c0c565b90565b611c2d90610ef6565b90565b611c3990610ef6565b90565b5f80fd5b60e01b90565b90505190611c53826104f2565b565b90602082820312611c6e57611c6b915f01611c46565b90565b61031c565b611c7b610312565b3d5f823e3d90fd5b90611c8d826103cf565b811015611c9e576020809102010190565b6115bb565b90611cad906103e2565b9052565b611cb9611b96565b50611ccb611cc65f6115e8565b611bb7565b90611cd55f611be1565b5b80611cf1611ceb611ce65f6115e8565b6103e2565b916103e2565b1015611dbf57611d55906020611d23611d1e611d195f611d128187906115f5565b5001611636565b611c18565b611c24565b6370a0823190611d4a611d3530611c30565b92611d3e610312565b96879485938493611c40565b835260048301611077565b03915afa918215611dba57611d8792611d82915f91611d8c575b50611d7d8691849092611c83565b611ca3565b611bfd565b611cd6565b611dad915060203d8111611db3575b611da58183610846565b810190611c55565b5f611d6f565b503d611d9b565b611c73565b50565b5f90565b611de391611dd2611dc2565b50611ddb615e9e565b919091615eab565b600190565b5f90565b611df4611de8565b50611dfe5f611be1565b5b80611e1a611e14611e0f5f6115e8565b6103e2565b916103e2565b1015611e7657611e365f611e2f8184906115f5565b5001611636565b611e48611e42846104c3565b916104c3565b14611e5b57611e5690611bfd565b611dff565b611e739150611e6c6002915f6115f5565b5001611657565b90565b5050611e815f611be1565b90565b611e8c611de8565b50611ea06002611e9a615e7a565b01611657565b90565b611eab611de8565b50611eb4615ebb565b5090565b611ec0611b96565b50611ed2611ecd5f6115e8565b611bb7565b611edb5f611be1565b5b80611ef7611ef1611eec5f6115e8565b6103e2565b916103e2565b1015611f3757611f3290611f2d611f1b6001611f145f85906115f5565b5001611657565b611f288591849092611c83565b611ca3565b611bfd565b611edc565b5090565b91611f6592611f48611dc2565b50611f5d611f54615e9e565b8290849161601e565b9190916160e9565b600190565b611f72611de8565b50611f7c5f611be1565b5b80611f98611f92611f8d5f6115e8565b6103e2565b916103e2565b1015611ff457611fb45f611fad8184906115f5565b5001611636565b611fc6611fc0846104c3565b916104c3565b14611fd957611fd490611bfd565b611f7d565b611ff19150611fea6001915f6115f5565b5001611657565b90565b5050611fff5f611be1565b90565b61200a611de8565b50612013611b96565b5061201c615ebb565b91909190565b5f90565b90565b61203d61203861204292612026565b610ed7565b6107b4565b90565b61204d612022565b506120586012612029565b90565b60401c90565b60ff1690565b6120736120789161205b565b612061565b90565b6120859054612067565b90565b67ffffffffffffffff1690565b6120a16120a69161161d565b612088565b90565b6120b39054612095565b90565b6120ca6120c56120cf92611bde565b610ed7565b611910565b90565b90565b6120e96120e46120ee926120d2565b610ed7565b611910565b90565b6120fa90610ef6565b90565b5f1b90565b9061211567ffffffffffffffff916120fd565b9181191691161790565b61213361212e61213892611910565b610ed7565b611910565b90565b90565b9061215361214e61215a9261211f565b61213b565b8254612102565b9055565b60401b90565b9061217868ff00000000000000009161215e565b9181191691161790565b61218b90610542565b90565b90565b906121a66121a16121ad92612182565b61218e565b8254612164565b9055565b6121ba906120d5565b9052565b91906121d1905f602085019401906121b1565b565b919390926121df6161c6565b946121f46121ee5f880161207b565b15610542565b946122005f88016120a9565b8061221361220d5f6120b6565b91611910565b148061234d575b9061222e61222860016120d5565b91611910565b1480612325575b612240909115610542565b9081612314575b506122d8576122709461226561225d60016120d5565b5f8a0161213e565b866122c6575b612761565b612278575b50565b612285905f809101612191565b60016122bd7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916122b4610312565b918291826121be565b0390a15f612275565b6122d360015f8a01612191565b61226b565b6122e0610312565b7ff92ee8a90000000000000000000000000000000000000000000000000000000081528061231060048201610af4565b0390fd5b61231f915015610542565b5f612247565b50612240612332306120f1565b3b61234561233f5f611be1565b916103e2565b149050612235565b508661221a565b61235d90610eda565b90565b61236990612354565b90565b9061238b73ffffffffffffffffffffffffffffffffffffffff916120fd565b9181191691161790565b61239e90612354565b90565b90565b906123b96123b46123c092612395565b6123a1565b825461236c565b9055565b90565b6123db6123d66123e0926123c4565b610ed7565b6103e2565b90565b9061240e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff916120fd565b9181191691161790565b61242c612427612431926103e2565b610ed7565b6103e2565b90565b90565b9061244c61244761245392612418565b612434565b82546123e3565b9055565b6124636124689161161d565b610e89565b90565b6124759054612457565b90565b90505190612485826104cf565b565b906020828203126124a05761249d915f01612478565b90565b61031c565b90565b906124bd6124b86124c492611730565b6124a5565b825461236c565b9055565b90565b6124df6124da6124e4926124c8565b610ed7565b6103e2565b90565b6124fb6124f661250092611bde565b610ed7565b6104aa565b90565b61250c906124e7565b90565b5f7f496e76616c696420626173652061737365742061646472657373000000000000910152565b612543601a602092610333565b61254c8161250f565b0190565b6125659060208101905f818303910152612536565b90565b1561256f57565b612577610312565b7f08c379a0000000000000000000000000000000000000000000000000000000008152806125a760048201612550565b0390fd5b5f7f496e697469616c697a6174696f6e206661696c65640000000000000000000000910152565b6125df6015602092610333565b6125e8816125ab565b0190565b6126019060208101905f8183039101526125d2565b90565b1561260b57565b612613610312565b7f08c379a000000000000000000000000000000000000000000000000000000000815280612643600482016125ec565b0390fd5b61265190516103e2565b90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b612690612696919392936103e2565b926103e2565b82018092116126a157565b612654565b90565b6126bd6126b86126c2926126a6565b610ed7565b6103e2565b90565b5f7f496e76616c696420776569676874730000000000000000000000000000000000910152565b6126f9600f602092610333565b612702816126c5565b0190565b61271b9060208101905f8183039101526126ec565b90565b1561272557565b61272d610312565b7f08c379a00000000000000000000000000000000000000000000000000000000081528061275d60048201612706565b0390fd5b6127e99395946127806127a49361279d9361277b33616208565b616233565b612788616249565b61279061626f565b612798616295565b612360565b60046123a4565b6127bf6127b8670de0b6b3a76400006123c7565b6001612437565b60206127d36127ce600461246b565b610f02565b631bf01e9b906127e1610312565b948592611c40565b825281806127f960048201610af4565b03915afa9081156129235761281e61286b92612870945f916128f5575b5060026124a8565b61283661282f64e8d4a510006124cb565b6003612437565b6128646128436002611636565b61285d6128576128525f612503565b6104c3565b916104c3565b1415612568565b84906167e4565b612604565b6128795f611be1565b6128825f611be1565b905b8161289f612899612894876103cf565b6103e2565b916103e2565b10156128d1576128c56128cb916128bf6128ba878690611c83565b612647565b90612681565b91611bfd565b90612884565b90506128f39192506128ed6128e76127106126a9565b916103e2565b1461271e565b565b612916915060203d811161291c575b61290e8183610846565b810190612487565b5f612816565b503d612904565b611c73565b90612935949392916121d3565b565b61293f616be0565b612947612949565b565b612951616ced565b565b61295b612937565b565b61296c612972919392936103e2565b926103e2565b9161297e8382026103e2565b92818404149015171561298d57565b612654565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b6129cb6129d1916103e2565b916103e2565b9081156129dc570490565b612992565b6129f06129f6919392936103e2565b926103e2565b8203918211612a0157565b612654565b91612ac8612ac2612abd612a288594612a1d611de8565b508790869091612beb565b612a3187611dec565b96612a3b86611dec565b90612aa5612a9f612a9a612a93612a82612a7b612a6a612a63612a5d89611f6a565b9f611f6a565b9f8a61295d565b612a756127106126a9565b906129bf565b968861295d565b612a8d6127106126a9565b906129bf565b9a9361314d565b6103e2565b916103e2565b115f14612aea57612ab5916129e1565b955b9361314d565b6103e2565b916103e2565b105f14612adc57612ad891612681565b5b90565b612ae5916129e1565b612ad9565b612af391612681565b95612ab7565b612b0290610eda565b90565b612b0e90612af9565b90565b5f7f496e76616c6964206f7261636c65206164647265737300000000000000000000910152565b612b456016602092610333565b612b4e81612b11565b0190565b612b679060208101905f818303910152612b38565b90565b15612b7157565b612b79610312565b7f08c379a000000000000000000000000000000000000000000000000000000000815280612ba960048201612b52565b0390fd5b612bb690610ef6565b90565b604090612be2612be99496959396612bd860608401985f85019061106a565b602083019061106a565b01906105bd565b565b90612bf4611de8565b50612c226020612c0c612c07600461246b565b610f02565b63bb3ba04c90612c1a610312565b938492611c40565b82528180612c3260048201610af4565b03915afa8015612da557612c4d915f91612d77575b50612b05565b91612c7b6020612c65612c60600461246b565b610f02565b63bb3ba04c90612c73610312565b938492611c40565b82528180612c8b60048201610af4565b03915afa8015612d7257602094612ccc612cd192612cf1945f91612d45575b50612cc5612cbf612cba5f612503565b6104c3565b916104c3565b1415612b6a565b