{
  "_format": "hh-sol-artifact-1",
  "contractName": "CompoundLeverageModule",
  "sourceName": "contracts/protocol/modules/v1/CompoundLeverageModule.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IController",
          "name": "_controller",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_compToken",
          "type": "address"
        },
        {
          "internalType": "contract IComptroller",
          "name": "_comptroller",
          "type": "address"
        },
        {
          "internalType": "contract ICErc20",
          "name": "_cEther",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_weth",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bool",
          "name": "_anySetAllowed",
          "type": "bool"
        }
      ],
      "name": "AnySetAllowedUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bool",
          "name": "_added",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "contract IERC20[]",
          "name": "_assets",
          "type": "address[]"
        }
      ],
      "name": "BorrowAssetsUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bool",
          "name": "_added",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "contract IERC20[]",
          "name": "_assets",
          "type": "address[]"
        }
      ],
      "name": "CollateralAssetsUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "_collateralAsset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "_repayAsset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract IExchangeAdapter",
          "name": "_exchangeAdapter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_totalRedeemAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_totalRepayAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_protocolFee",
          "type": "uint256"
        }
      ],
      "name": "LeverageDecreased",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "_borrowAsset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "_collateralAsset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract IExchangeAdapter",
          "name": "_exchangeAdapter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_totalBorrowAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_totalReceiveAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_protocolFee",
          "type": "uint256"
        }
      ],
      "name": "LeverageIncreased",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bool",
          "name": "_added",
          "type": "bool"
        }
      ],
      "name": "SetTokenStatusUpdated",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20[]",
          "name": "_newBorrowAssets",
          "type": "address[]"
        }
      ],
      "name": "addBorrowAssets",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20[]",
          "name": "_newCollateralAssets",
          "type": "address[]"
        }
      ],
      "name": "addCollateralAssets",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ICErc20",
          "name": "_cToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_underlying",
          "type": "address"
        }
      ],
      "name": "addCompoundMarket",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "",
          "type": "address"
        }
      ],
      "name": "allowedSetTokens",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "anySetAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "contract ICErc20",
          "name": "",
          "type": "address"
        }
      ],
      "name": "borrowCTokenEnabled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "contract ICErc20",
          "name": "",
          "type": "address"
        }
      ],
      "name": "collateralCTokenEnabled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_setTokenQuantity",
          "type": "uint256"
        },
        {
          "internalType": "contract IERC20",
          "name": "_component",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "name": "componentIssueHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_setTokenQuantity",
          "type": "uint256"
        },
        {
          "internalType": "contract IERC20",
          "name": "_component",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "name": "componentRedeemHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "controller",
      "outputs": [
        {
          "internalType": "contract IController",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_collateralAsset",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_repayAsset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_redeemQuantity",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_minRepayQuantity",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "_tradeAdapterName",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "_tradeData",
          "type": "bytes"
        }
      ],
      "name": "delever",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_collateralAsset",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_repayAsset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_redeemQuantity",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "_tradeAdapterName",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "_tradeData",
          "type": "bytes"
        }
      ],
      "name": "deleverToZeroBorrowBalance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        }
      ],
      "name": "getEnabledAssets",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20[]",
          "name": "_collateralAssets",
          "type": "address[]"
        },
        {
          "internalType": "contract IERC20[]",
          "name": "_borrowAssets",
          "type": "address[]"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_borrowAsset",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_collateralAsset",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_borrowQuantity",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_minReceiveQuantity",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "_tradeAdapterName",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "_tradeData",
          "type": "bytes"
        }
      ],
      "name": "lever",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "moduleIssueHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "moduleRedeemHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "contract IDebtIssuanceModule",
          "name": "_debtIssuanceModule",
          "type": "address"
        }
      ],
      "name": "registerToModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20[]",
          "name": "_borrowAssets",
          "type": "address[]"
        }
      ],
      "name": "removeBorrowAssets",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20[]",
          "name": "_collateralAssets",
          "type": "address[]"
        }
      ],
      "name": "removeCollateralAssets",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_underlying",
          "type": "address"
        }
      ],
      "name": "removeCompoundMarket",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "removeModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_shouldAccrueInterest",
          "type": "bool"
        }
      ],
      "name": "sync",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "name": "underlyingToCToken",
      "outputs": [
        {
          "internalType": "contract ICErc20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_status",
          "type": "bool"
        }
      ],
      "name": "updateAllowedSetToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "_anySetAllowed",
          "type": "bool"
        }
      ],
      "name": "updateAnySetAllowed",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162005cae38038062005cae833981016040819052620000349162000380565b600080546001600160a01b0319166001600160a01b038716178155600180556200005d6200028e565b600280546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600780546001600160a01b03199081166001600160a01b03878116919091179092556006805482168684161790819055600580548316868516179055600480549092168484161782556040805163b0772d0b60e01b81529051606094929092169263b0772d0b928282019260009290829003018186803b1580156200012f57600080fd5b505afa15801562000144573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200016e9190810190620002cb565b905060005b8151811015620002815760008282815181106200018c57fe5b602002602001015190508060036000876001600160a01b0316846001600160a01b0316146200024457858581518110620001c257fe5b60200260200101516001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156200020357600080fd5b505afa15801562000218573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023e9190620002a5565b62000246565b865b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790555060010162000173565b505050505050506200043f565b3390565b80516200029f8162000426565b92915050565b600060208284031215620002b7578081fd5b8151620002c48162000426565b9392505050565b60006020808385031215620002de578182fd5b82516001600160401b0380821115620002f5578384fd5b81850186601f82011262000307578485fd5b805192508183111562000318578485fd5b83830291506200032a848301620003ff565b8381528481019082860184840187018a101562000345578788fd5b8794505b8585101562000373576200035e8a8262000292565b83526001949094019391860191860162000349565b5098975050505050505050565b600080600080600060a0868803121562000398578081fd5b8551620003a58162000426565b6020870151909550620003b88162000426565b6040870151909450620003cb8162000426565b6060870151909350620003de8162000426565b6080870151909250620003f18162000426565b809150509295509295909350565b6040518181016001600160401b03811182821017156200041e57600080fd5b604052919050565b6001600160a01b03811681146200043c57600080fd5b50565b61585f806200044f6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638da5cb5b11610104578063cffe5e82116100a2578063f2fde38b11610071578063f2fde38b146103b6578063f452c760146103c9578063f77c4791146103dc578063ffbad25c146103e4576101cf565b8063cffe5e821461036a578063d473e09a1461037d578063d4fd27eb14610390578063ee78244f146103a3576101cf565b8063b1dd4d92116100de578063b1dd4d9214610329578063c137f4d714610331578063c153dd0714610344578063c690a74c14610357576101cf565b80638da5cb5b146102ca578063a6e937b1146102e8578063b1c0267814610308576101cf565b80635199e418116101715780635ce0cef61161014b5780635ce0cef614610294578063715018a6146102a7578063717ca2a5146102af578063847ef08d146102c2576101cf565b80635199e4181461025b5780635809ae271461026e5780635b13651214610281576101cf565b80633fe6106b116101ad5780633fe6106b1461020f5780634a200fa5146102225780634fdd283c14610235578063516595fc14610248576101cf565b8063013c03a1146101d45780630df96ef6146101e95780630fb96b21146101fc575b600080fd5b6101e76101e2366004614978565b6103f7565b005b6101e76101f7366004614b47565b610493565b6101e761020a366004614da3565b6106bd565b6101e761021d366004614d78565b6107c9565b6101e7610230366004614b95565b6107e3565b6101e7610243366004614ccc565b610a68565b6101e7610256366004614b47565b610b91565b6101e7610269366004614aa4565b610db2565b6101e761027c366004614b47565b610e24565b6101e761028f366004614b0f565b610ff1565b6101e76102a2366004614b0f565b6110ed565b6101e761118a565b6101e76102bd366004614b47565b611209565b6101e761140d565b6102d261182f565b6040516102df9190614e9b565b60405180910390f35b6102fb6102f6366004614b0f565b61183f565b6040516102df9190615019565b61031b610316366004614978565b61185f565b6040516102df929190614fa7565b6102fb61193d565b6101e761033f366004614da3565b611946565b6101e7610352366004614d78565b611a45565b6101e7610365366004614bfe565b611a5a565b6101e7610378366004614bfe565b611ae3565b6102d261038b366004614978565b611ec3565b6101e761039e366004614c2b565b611ede565b6102fb6103b1366004614978565b612175565b6101e76103c4366004614978565b61218a565b6102fb6103d7366004614b0f565b612241565b6102d2612261565b6101e76103f2366004614ccc565b612270565b6103ff61237f565b6002546001600160a01b039081169116146104355760405162461bcd60e51b815260040161042c90615449565b60405180910390fd5b6001600160a01b038181166000908152600360205260409020541661046c5760405162461bcd60e51b815260040161042c90615719565b6001600160a01b0316600090815260036020526040902080546001600160a01b0319169055565b8161049d81612383565b6104a8836001611ae3565b60005b8251811015610672576000600360008584815181106104c657fe5b6020908102919091018101516001600160a01b039081168352828201939093526040918201600090812054898516825260098352838220941680825293909152205490915060ff1661052a5760405162461bcd60e51b815260040161042c906152e9565b6001600160a01b0380861660009081526008602090815260408083209385168352929052205460ff166105d157600654604051629c09c960e41b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__916309c09c90916105a0916001600160a01b03808b169287929091169060040161504a565b60006040518083038186803b1580156105b857600080fd5b505af41580156105cc573d6000803e3d6000fd5b505050505b6001600160a01b0380861660008181526009602090815260408083209486168352938152838220805460ff19169055918152600a9091522061061c906001018263ffffffff6123d116565b61066984838151811061062b57fe5b6020026020010151600a6000886001600160a01b03166001600160a01b031681526020019081526020016000206002016123d190919063ffffffff16565b506001016104ab565b5060001515836001600160a01b03167f1c400b459725a0446742d6688375dffe941d5f9a65fe3900c93e07d9e772250b846040516106b09190614fcc565b60405180910390a3505050565b836106c7816124fe565b6040516308bafae960e21b81526000906001600160a01b038716906322ebeba4906106f89087903090600401614eaf565b60206040518083038186803b15801561071057600080fd5b505afa158015610724573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107489190614e14565b90506000811261076a5760405162461bcd60e51b815260040161042c906150af565b60006107968661078a6107858560001963ffffffff61264016565b6126b4565b9063ffffffff6126da16565b6001600160a01b038087166000908152600360205260409020549192506107c09189911683612704565b50505050505050565b816107d3816124fe565b6107de836001611ae3565b505050565b82336107ef82826127b0565b846107f9816127da565b600c5460ff1661083b576001600160a01b0386166000908152600b602052604090205460ff1661083b5760405162461bcd60e51b815260040161042c9061547e565b856001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561087657600080fd5b505af115801561088a573d6000803e3d6000fd5b50505050856001600160a01b031663d7f1b27c6108d36040518060400160405280601581526020017444656661756c7449737375616e63654d6f64756c6560581b81525061289b565b6040518263ffffffff1660e01b81526004016108ef9190614e9b565b60206040518083038186803b15801561090757600080fd5b505afa15801561091b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093f9190614ac0565b61095b5760405162461bcd60e51b815260040161042c90615381565b6060866001600160a01b031663b2494df36040518163ffffffff1660e01b815260040160006040518083038186803b15801561099657600080fd5b505afa1580156109aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109d29190810190614a08565b905060005b8151811015610a53578181815181106109ec57fe5b60200260200101516001600160a01b031663d9b1b6e0896040518263ffffffff1660e01b8152600401610a1f9190614e9b565b600060405180830381600087803b158015610a3957600080fd5b505af1925050508015610a4a575060015b506001016109d7565b50610a5e8787611209565b6107c08786610b91565b60026001541415610a8b5760405162461bcd60e51b815260040161042c906156e2565b600260015586610a9a81612383565b610aa26147ca565b610ab289898989898960006128b9565b9050610acb81600001518260a001518360600151612970565b6000610ad9828a8a876129b4565b90506000610ae88b8a84612c42565b90506000610afc838363ffffffff612c6516565b9050610b1284600001518560c001518c84612ca7565b610b1c848b612deb565b896001600160a01b03168b6001600160a01b03168d6001600160a01b03167f7cda30123ddfc96659344700585861a8670352b9cc86d1b1054d10083b1dcdd4876020015188606001518688604051610b779493929190615024565b60405180910390a450506001805550505050505050505050565b81610b9b81612383565b60005b8251811015610d74576000838281518110610bb557fe5b6020908102919091018101516001600160a01b03808216600090815260039093526040909220549092501680610bfd5760405162461bcd60e51b815260040161042c90615234565b6001600160a01b0380871660009081526009602090815260408083209385168352929052205460ff1615610c435760405162461bcd60e51b815260040161042c90615551565b6001600160a01b0380871660009081526008602090815260408083209385168352929052205460ff16610ceb57600654604051632c5febc760e21b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__9163b17faf1c91610cba916001600160a01b03808c169287929091169060040161504a565b60006040518083038186803b158015610cd257600080fd5b505af4158015610ce6573d6000803e3d6000fd5b505050505b6001600160a01b0386811660008181526009602090815260408083209585168084529582528083208054600160ff199091168117909155938352600a82528220808401805480860182559084528284200180546001600160a01b031990811690971790556002018054808501825590835291200180549093169390911692909217905501610b9e565b5060011515836001600160a01b03167f1c400b459725a0446742d6688375dffe941d5f9a65fe3900c93e07d9e772250b846040516106b09190614fcc565b610dba61237f565b6002546001600160a01b03908116911614610de75760405162461bcd60e51b815260040161042c90615449565b600c805460ff19168215159081179091556040517f563e1633136cdd43b8793897cb53ba2a9e31c18b3ae0b6827fbbb03b9902e6c690600090a250565b81610e2e81612383565b610e39836001611ae3565b60005b8251811015610fb357600060036000858481518110610e5757fe5b6020908102919091018101516001600160a01b039081168352828201939093526040918201600090812054898516825260088352838220941680825293909152205490915060ff16610ebb5760405162461bcd60e51b815260040161042c906152b9565b6001600160a01b0380861660009081526009602090815260408083209385168352929052205460ff16610f6257600654604051629c09c960e41b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__916309c09c9091610f31916001600160a01b03808b169287929091169060040161504a565b60006040518083038186803b158015610f4957600080fd5b505af4158015610f5d573d6000803e3d6000fd5b505050505b6001600160a01b0380861660008181526008602090815260408083209486168352938152838220805460ff19169055918152600a90915220610faa908263ffffffff6123d116565b50600101610e3c565b5060001515836001600160a01b03167fdd2a86f23a66f86496c82312e991b49f87ad96c4f25094a43c49f7aca0ea3542846040516106b09190614fcc565b81610ffb81612383565b6040516335fc6c9f60e21b81526001600160a01b0384169063d7f1b27c90611027908590600401614e9b565b60206040518083038186803b15801561103f57600080fd5b505afa158015611053573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110779190614ac0565b6110935760405162461bcd60e51b815260040161042c90615381565b6040516306cd8db760e51b81526001600160a01b0383169063d9b1b6e0906110bf908690600401614e9b565b600060405180830381600087803b1580156110d957600080fd5b505af11580156107c0573d6000803e3d6000fd5b6110f561237f565b6002546001600160a01b039081169116146111225760405162461bcd60e51b815260040161042c90615449565b6001600160a01b03818116600090815260036020526040902054161561115a5760405162461bcd60e51b815260040161042c9061552a565b6001600160a01b0390811660009081526003602052604090208054919092166001600160a01b0319909116179055565b61119261237f565b6002546001600160a01b039081169116146111bf5760405162461bcd60e51b815260040161042c90615449565b6002546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600280546001600160a01b0319169055565b8161121381612383565b60005b82518110156113cf5760006003600085848151811061123157fe5b6020908102919091018101516001600160a01b0390811683529082019290925260400160002054169050806112785760405162461bcd60e51b815260040161042c90615234565b6001600160a01b0380861660009081526008602090815260408083209385168352929052205460ff16156112be5760405162461bcd60e51b815260040161042c906156b6565b6001600160a01b0380861660009081526009602090815260408083209385168352929052205460ff1661136657600654604051632c5febc760e21b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__9163b17faf1c91611335916001600160a01b03808b169287929091169060040161504a565b60006040518083038186803b15801561134d57600080fd5b505af4158015611361573d6000803e3d6000fd5b505050505b6001600160a01b03808616600081815260086020908152604080832095909416808352948152838220805460ff19166001908117909155928252600a81529281208054808401825590825292902090910180546001600160a01b03191690921790915501611216565b5060011515836001600160a01b03167fdd2a86f23a66f86496c82312e991b49f87ad96c4f25094a43c49f7aca0ea3542846040516106b09190614fcc565b33611417816123a9565b33611423816001611ae3565b6001600160a01b0381166000908152600a602090815260409182902060010180548351818402810184019094528084526060939283018282801561149057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611472575b50939450600093505050505b81518110156115a15760008282815181106114b357fe5b6020908102919091018101516001600160a01b0380871660009081526008845260408082209284168252919093529091205490915060ff1661156957600654604051629c09c960e41b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__916309c09c9091611538916001600160a01b03808a169287929091169060040161504a565b60006040518083038186803b15801561155057600080fd5b505af4158015611564573d6000803e3d6000fd5b505050505b6001600160a01b038085166000908152600960209081526040808320949093168252929092529020805460ff1916905560010161149c565b506001600160a01b0382166000908152600a602090815260409182902080548351818402810184019094528084526060939283018282801561160c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116115ee575b50939450600093505050505b81518110156116ed57600082828151811061162f57fe5b6020908102919091010151600654604051629c09c960e41b815291925073__$059b1e3c35e6526bf44b3e0b6a2a76e329$__916309c09c9091611685916001600160a01b03808b1692879291169060040161504a565b60006040518083038186803b15801561169d57600080fd5b505af41580156116b1573d6000803e3d6000fd5b505050506001600160a01b038581166000908152600860209081526040808320949093168252929092529020805460ff19169055600101611618565b506001600160a01b0383166000908152600a60205260408120906117118282614833565b61171f600183016000614833565b61172d600283016000614833565b50506060836001600160a01b031663b2494df36040518163ffffffff1660e01b815260040160006040518083038186803b15801561176a57600080fd5b505afa15801561177e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117a69190810190614a08565b905060005b8151811015611827578181815181106117c057fe5b60200260200101516001600160a01b031663e0799620866040518263ffffffff1660e01b81526004016117f39190614e9b565b600060405180830381600087803b15801561180d57600080fd5b505af192505050801561181e575060015b506001016117ab565b505050505050565b6002546001600160a01b03165b90565b600860209081526000928352604080842090915290825290205460ff1681565b6001600160a01b0381166000908152600a602090815260409182902080548351818402810184019094528084526060938493600284019284918301828280156118d157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116118b3575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561192d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161190f575b5050505050905091509150915091565b600c5460ff1681565b83611950816124fe565b6040516308bafae960e21b81526000906001600160a01b038716906322ebeba4906119819087903090600401614eaf565b60206040518083038186803b15801561199957600080fd5b505afa1580156119ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d19190614e14565b9050600081126119f35760405162461bcd60e51b815260040161042c906150af565b6000611a1a86611a0e6107858560001963ffffffff61264016565b9063ffffffff612e3616565b6001600160a01b038087166000908152600360205260409020549192506107c0918991168784612ca7565b81611a4f816124fe565b6107de836000611ae3565b611a6261237f565b6002546001600160a01b03908116911614611a8f5760405162461bcd60e51b815260040161042c90615449565b6001600160a01b0382166000818152600b6020526040808220805460ff191685151590811790915590519092917f2035981b48691b10f6ac65174e570b4d0a8a889ae01bef3e5e7759ff9444f0c491a35050565b60026001541415611b065760405162461bcd60e51b815260040161042c906156e2565b600260015581611b15816123a9565b6000836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b5057600080fd5b505afa158015611b64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b889190614e14565b90508015611eb9576001600160a01b0384166000908152600a6020908152604091829020805483518184028101840190945280845260609392830182828015611bfa57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611bdc575b50939450600093505050505b8151811015611cd6576000828281518110611c1d57fe5b602002602001015190506000611ca8886001600160a01b03166366cb8d2f846040518263ffffffff1660e01b8152600401611c589190614e9b565b60206040518083038186803b158015611c7057600080fd5b505afa158015611c84573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107859190614e14565b90506000611cb7898488612e81565b9050808214611ccb57611ccb898483612f1b565b505050600101611c06565b506001600160a01b0385166000908152600a6020908152604091829020600101805483518184028101840190945280845260609392830182828015611d4457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d26575b5050506001600160a01b0389166000908152600a602090815260409182902060020180548351818402810184019094528084529596506060959294509250830182828015611dbb57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d9d575b50939450600093505050505b8251811015611eb4576000838281518110611dde57fe5b602002602001015190506000838381518110611df657fe5b6020026020010151905060008a6001600160a01b03166322ebeba483306040518363ffffffff1660e01b8152600401611e30929190614eaf565b60206040518083038186803b158015611e4857600080fd5b505afa158015611e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e809190614e14565b90506000611e908c858b8e612f35565b9050818114611ea457611ea48c8483613075565b505060019092019150611dc79050565b505050505b5050600180555050565b6003602052600090815260409020546001600160a01b031681565b60026001541415611f015760405162461bcd60e51b815260040161042c906156e2565b600260015585611f1081612383565b6000611f93886001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f4e57600080fd5b505afa158015611f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f869190614e14565b869063ffffffff6126da16565b6001600160a01b03808a1660009081526009602090815260408083208b8516845260038352818420549094168352929052205490915060ff16611fe85760405162461bcd60e51b815260040161042c906152e9565b6001600160a01b038087166000908152600360205260408082205490516305eff7ef60e21b8152919216906317bfdfbc90612027908c90600401614e9b565b602060405180830381600087803b15801561204157600080fd5b505af1158015612055573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120799190614e14565b90506120836147ca565b6120938a8a8a86868b60006130a4565b90506120ac81600001518260a001518360600151612970565b6120b8818a8a886129b4565b506120cd81600001518260c001518a85612ca7565b604081015160e08201516120f4916001600160a01b038d16918b919063ffffffff61329416565b5050506121018189612deb565b876001600160a01b0316896001600160a01b03168b6001600160a01b03167f7cda30123ddfc96659344700585861a8670352b9cc86d1b1054d10083b1dcdd48460200151856060015187600060405161215d9493929190615024565b60405180910390a45050600180555050505050505050565b600b6020526000908152604090205460ff1681565b61219261237f565b6002546001600160a01b039081169116146121bf5760405162461bcd60e51b815260040161042c90615449565b6001600160a01b0381166121e55760405162461bcd60e51b815260040161042c90615159565b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b600960209081526000928352604080842090915290825290205460ff1681565b6000546001600160a01b031681565b600260015414156122935760405162461bcd60e51b815260040161042c906156e2565b6002600155866122a281612383565b6122aa6147ca565b6122ba89898989898960016128b9565b90506122d381600001518260c001518360600151612704565b60006122e1828a8a876129b4565b905060006122f08b8a84612c42565b90506000612304838363ffffffff612c6516565b905061231a84600001518560a001518c84613385565b612324848c612deb565b896001600160a01b03168b6001600160a01b03168d6001600160a01b03167f359f8b62a966cfd521a3815681266407201b20a7c334925faa49e7d9d5dd57ab876020015188606001518688604051610b779493929190615024565b3390565b61238d813361345e565b6123a95760405162461bcd60e51b815260040161042c9061567f565b6123b2816134ec565b6123ce5760405162461bcd60e51b815260040161042c906150e6565b50565b6000806124378480548060200260200160405190810160405280929190818152602001828054801561242c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161240e575b5050505050846135f0565b91509150806124585760405162461bcd60e51b815260040161042c90615080565b8354600019018281146124ca5784818154811061247157fe5b9060005260206000200160009054906101000a90046001600160a01b031685848154811061249b57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b848054806124d457fe5b600082815260209020810160001990810180546001600160a01b0319169055019055505b50505050565b6002604051631ade272960e11b81526001600160a01b038316906335bc4e529061252c903390600401614e9b565b60206040518083038186803b15801561254457600080fd5b505afa158015612558573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257c9190614df5565b600281111561258757fe5b146125a45760405162461bcd60e51b815260040161042c9061534a565b6000546040516342f6e38960e01b81526001600160a01b03909116906342f6e389906125d4903390600401614e9b565b60206040518083038186803b1580156125ec57600080fd5b505afa158015612600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126249190614ac0565b6123ce5760405162461bcd60e51b815260040161042c906155f8565b60008261264f575060006126ae565b826000191480156126635750600160ff1b82145b156126805760405162461bcd60e51b815260040161042c906154ac565b8282028284828161268d57fe5b05146126ab5760405162461bcd60e51b815260040161042c906154ac565b90505b92915050565b6000808212156126d65760405162461bcd60e51b815260040161042c90615315565b5090565b60006126ab670de0b6b3a76400006126f8858563ffffffff61365616565b9063ffffffff61369016565b60405163beee4b4b60e01b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__9063beee4b4b90612748906001600160a01b0387169086908690600401614f43565b60006040518083038186803b15801561276057600080fd5b505af4158015612774573d6000803e3d6000fd5b50506005546001600160a01b038581169116141591506107de9050576004546107de906001600160a01b0385811691168363ffffffff6136d216565b6127ba828261345e565b6127d65760405162461bcd60e51b815260040161042c9061567f565b5050565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec9061280a908490600401614e9b565b60206040518083038186803b15801561282257600080fd5b505afa158015612836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285a9190614ac0565b6128765760405162461bcd60e51b815260040161042c9061563c565b61287f81613787565b6123ce5760405162461bcd60e51b815260040161042c906151d6565b6000806128a7836137b6565b90506128b2816137c1565b9392505050565b6128c16147ca565b6000886001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156128fc57600080fd5b505afa158015612910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129349190614e14565b905061296389898961294c8a8663ffffffff6126da16565b61295c8a8763ffffffff6126da16565b89896130a4565b9998505050505050505050565b60405163aed2dfc960e01b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__9063aed2dfc990612748906001600160a01b0387169086908690600401614f43565b60008085600001519050600086606001519050612a588688602001516001600160a01b031663334fc2896040518163ffffffff1660e01b815260040160206040518083038186803b158015612a0857600080fd5b505afa158015612a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a409190614994565b6001600160a01b03851691908463ffffffff61387e16565b600080606089602001516001600160a01b031663e171fcab8a8a88888f608001518d6040518763ffffffff1660e01b8152600401612a9b96959493929190614ec9565b60006040518083038186803b158015612ab357600080fd5b505afa158015612ac7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612aef91908101906149b0565b925092509250846001600160a01b0316638f6f03328484846040518463ffffffff1660e01b8152600401612b2593929190614f80565b600060405180830381600087803b158015612b3f57600080fd5b505af1158015612b53573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b7b9190810190614adc565b506000612c0e8b60e001518a6001600160a01b03166370a08231896040518263ffffffff1660e01b8152600401612bb29190614e9b565b60206040518083038186803b158015612bca57600080fd5b505afa158015612bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c029190614e14565b9063ffffffff612c6516565b90508a60800151811015612c345760405162461bcd60e51b815260040161042c9061528e565b9a9950505050505050505050565b600080612c50600084613945565b9050612c5d8585836139da565b949350505050565b60006126ab83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a81565b6005546001600160a01b0384811691161415612d5657600454612cdd906001600160a01b0386811691168363ffffffff613aad16565b604051635d20259160e01b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__90635d20259190612d21906001600160a01b0388169087908690600401614f43565b60006040518083038186803b158015612d3957600080fd5b505af4158015612d4d573d6000803e3d6000fd5b505050506124f8565b612d716001600160a01b03851683858463ffffffff61387e16565b604051637d43967d60e11b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__9063fa872cfa90612db5906001600160a01b0388169087908690600401614f43565b60006040518083038186803b158015612dcd57600080fd5b505af4158015612de1573d6000803e3d6000fd5b5050505050505050565b815160a08301516040840151612e0f929190612e0a9083908390612e81565b612f1b565b6127d6826000015182612e3185600001518660c0015187604001516000612f35565b613075565b6000821580612e43575081155b15612e50575060006126ae565b6126ab6001612e75670de0b6b3a76400006126f883612c02898963ffffffff61365616565b9063ffffffff613b1c16565b600080836001600160a01b03166370a08231866040518263ffffffff1660e01b8152600401612eb09190614e9b565b60206040518083038186803b158015612ec857600080fd5b505afa158015612edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f009190614e14565b9050612f12818463ffffffff613b4116565b95945050505050565b6107de6001600160a01b038416838363ffffffff613b5f16565b60008082612fbe576040516395dd919360e01b81526001600160a01b038616906395dd919390612f69908990600401614e9b565b60206040518083038186803b158015612f8157600080fd5b505afa158015612f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb99190614e14565b61303c565b6040516305eff7ef60e21b81526001600160a01b038616906317bfdfbc90612fea908990600401614e9b565b602060405180830381600087803b15801561300457600080fd5b505af1158015613018573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303c9190614e14565b9050600061306a60001961305e613059858963ffffffff613cd316565b613d26565b9063ffffffff61264016565b979650505050505050565b6040805160208101909152600081526107de906001600160a01b0385169084903090859063ffffffff613d4b16565b6130ac6147ca565b6000886001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156130e757600080fd5b505afa1580156130fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061311f9190614e14565b90506131296147ca565b6040518061010001604052808b6001600160a01b0316815260200161314d8761289b565b6001600160a01b0316815260200183815260200188815260200187815260200185613192576001600160a01b03808c16600090815260036020526040902054166131ae565b6001600160a01b03808b16600090815260036020526040902054165b6001600160a01b03168152602001856131e1576001600160a01b03808b16600090815260036020526040902054166131fd565b6001600160a01b03808c16600090815260036020526040902054165b6001600160a01b03168152602001896001600160a01b03166370a082318d6040518263ffffffff1660e01b81526004016132379190614e9b565b60206040518083038186803b15801561324f57600080fd5b505afa158015613263573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132879190614e14565b9052905061296381614303565b600080600080866001600160a01b03166370a08231896040518263ffffffff1660e01b81526004016132c69190614e9b565b60206040518083038186803b1580156132de57600080fd5b505afa1580156132f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133169190614e14565b90506000613349896001600160a01b03166366cb8d2f8a6040518263ffffffff1660e01b8152600401611c589190614e9b565b9050600082156133665761335f888885856143f9565b905061336a565b5060005b6133758a8a83613b5f565b9199909850909650945050505050565b6005546001600160a01b03848116911614156133ff576004546133bb906001600160a01b0386811691168363ffffffff613aad16565b60405163690f656160e01b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__9063690f656190612d21906001600160a01b0388169087908690600401614f43565b61341a6001600160a01b03851683858463ffffffff61387e16565b6040516309c8202b60e01b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__906309c8202b90612db5906001600160a01b0388169087908690600401614f43565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b1580156134a357600080fd5b505afa1580156134b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134db9190614994565b6001600160a01b0316149392505050565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec9061351d908590600401614e9b565b60206040518083038186803b15801561353557600080fd5b505afa158015613549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061356d9190614ac0565b80156126ae57506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c906135a0903090600401614e9b565b60206040518083038186803b1580156135b857600080fd5b505afa1580156135cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ae9190614ac0565b81516000908190815b8181101561364357846001600160a01b031686828151811061361757fe5b60200260200101516001600160a01b0316141561363b5792506001915061364f9050565b6001016135f9565b50600019600092509250505b9250929050565b600082613665575060006126ae565b8282028284828161367257fe5b04146126ab5760405162461bcd60e51b815260040161042c90615408565b60006126ab83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614448565b6040805160048082526024820183526020820180516001600160e01b0316630d0e30db60e41b17905291516347b7819960e11b815290916001600160a01b03861691638f6f03329161372a9187918791879101614f80565b600060405180830381600087803b15801561374457600080fd5b505af1158015613758573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526137809190810190614adc565b5050505050565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f7906135a0903090600401614e9b565b805160209091012090565b6000805481906137d9906001600160a01b031661447f565b6001600160a01b031663e6d642c530856040518363ffffffff1660e01b8152600401613806929190614f67565b60206040518083038186803b15801561381e57600080fd5b505afa158015613832573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138569190614994565b90506001600160a01b0381166126ae5760405162461bcd60e51b815260040161042c9061525f565b60608282604051602401613893929190614f67565b60408051601f198184030181529181526020820180516001600160e01b031663095ea7b360e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f0332906138ef9087906000908690600401614f80565b600060405180830381600087803b15801561390957600080fd5b505af115801561391d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118279190810190614adc565b6000805460405163792aa04f60e01b815282916001600160a01b03169063792aa04f906139789030908890600401614f67565b60206040518083038186803b15801561399057600080fd5b505afa1580156139a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139c89190614e14565b9050612c5d838263ffffffff6126da16565b80156107de576107de826000809054906101000a90046001600160a01b03166001600160a01b031663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015613a3157600080fd5b505afa158015613a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a699190614994565b6001600160a01b03861691908463ffffffff6144fe16565b60008184841115613aa55760405162461bcd60e51b815260040161042c919061506d565b505050900390565b606081604051602401613ac09190615766565b60408051601f198184030181529181526020820180516001600160e01b0316632e1a7d4d60e01b179052516347b7819960e11b81529091506001600160a01b03851690638f6f03329061372a9086906000908690600401614f80565b6000828201838110156126ab5760405162461bcd60e51b815260040161042c9061519f565b60006126ab826126f885670de0b6b3a764000063ffffffff61365616565b6000613b6b8484614640565b905080158015613b7b5750600082115b15613bf257613b8a84846146c7565b613bed576040516304e3532760e41b81526001600160a01b03851690634e35327090613bba908690600401614e9b565b600060405180830381600087803b158015613bd457600080fd5b505af1158015613be8573d6000803e3d6000fd5b505050505b613c6f565b808015613bfd575081155b15613c6f57613c0c84846146c7565b613c6f57604051636f86c89760e01b81526001600160a01b03851690636f86c89790613c3c908690600401614e9b565b600060405180830381600087803b158015613c5657600080fd5b505af1158015613c6a573d6000803e3d6000fd5b505050505b836001600160a01b0316632ba57d1784613c8885613d26565b6040518363ffffffff1660e01b8152600401613ca5929190614f67565b600060405180830381600087803b158015613cbf57600080fd5b505af1158015612de1573d6000803e3d6000fd5b600081613cf25760405162461bcd60e51b815260040161042c9061573c565b60008311613d015760006126ab565b6126ab6001612e75846126f883612c0289670de0b6b3a764000063ffffffff61365616565b6000600160ff1b82106126d65760405162461bcd60e51b815260040161042c906155b0565b81156140405760405163df5e9b2960e01b81526001600160a01b0386169063df5e9b2990613d7d908790600401614e9b565b60206040518083038186803b158015613d9557600080fd5b505afa158015613da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dcd9190614ac0565b613e94576040516304e3532760e41b81526001600160a01b03861690634e35327090613dfd908790600401614e9b565b600060405180830381600087803b158015613e1757600080fd5b505af1158015613e2b573d6000803e3d6000fd5b505060405163ea0ee55960e01b81526001600160a01b038816925063ea0ee5599150613e5d9087908790600401614eaf565b600060405180830381600087803b158015613e7757600080fd5b505af1158015613e8b573d6000803e3d6000fd5b50505050613f77565b604051637d96659360e01b81526001600160a01b03861690637d96659390613ec29087908790600401614eaf565b60206040518083038186803b158015613eda57600080fd5b505afa158015613eee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f129190614ac0565b613f775760405163ea0ee55960e01b81526001600160a01b0386169063ea0ee55990613f449087908790600401614eaf565b600060405180830381600087803b158015613f5e57600080fd5b505af1158015613f72573d6000803e3d6000fd5b505050505b6040516363a90fc160e01b81526001600160a01b038616906363a90fc190613fa790879087908790600401614f43565b600060405180830381600087803b158015613fc157600080fd5b505af1158015613fd5573d6000803e3d6000fd5b50506040516326898fe160e01b81526001600160a01b03881692506326898fe1915061400990879087908690600401614f17565b600060405180830381600087803b15801561402357600080fd5b505af1158015614037573d6000803e3d6000fd5b50505050613780565b80511561405f5760405162461bcd60e51b815260040161042c90615579565b6040516308bafae960e21b81526001600160a01b038616906322ebeba49061408d9087908790600401614eaf565b60206040518083038186803b1580156140a557600080fd5b505afa1580156140b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140dd9190614e14565b156137805760405163a7bdad0360e01b81526060906001600160a01b0387169063a7bdad0390614111908890600401614e9b565b60006040518083038186803b15801561412957600080fd5b505afa15801561413d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141659190810190614a08565b6040516366cb8d2f60e01b81529091506001600160a01b038716906366cb8d2f90614194908890600401614e9b565b60206040518083038186803b1580156141ac57600080fd5b505afa1580156141c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141e49190614e14565b1580156141f2575080516001145b1561429b57836001600160a01b03168160008151811061420e57fe5b60200260200101516001600160a01b03161461423c5760405162461bcd60e51b815260040161042c906153b8565b604051636f86c89760e01b81526001600160a01b03871690636f86c89790614268908890600401614e9b565b600060405180830381600087803b15801561428257600080fd5b505af1158015614296573d6000803e3d6000fd5b505050505b60405163acf3f07760e01b81526001600160a01b0387169063acf3f077906142c99088908890600401614eaf565b600060405180830381600087803b1580156142e357600080fd5b505af11580156142f7573d6000803e3d6000fd5b50505050505050505050565b80516001600160a01b03908116600090815260086020908152604080832060a08601519094168352929052205460ff1661434f5760405162461bcd60e51b815260040161042c906152b9565b80516001600160a01b03908116600090815260096020908152604080832060c08601519094168352929052205460ff1661439b5760405162461bcd60e51b815260040161042c906152e9565b8060c001516001600160a01b03168160a001516001600160a01b031614156143d55760405162461bcd60e51b815260040161042c9061512e565b60008160600151116123ce5760405162461bcd60e51b815260040161042c9061520d565b60008061441c61440f848863ffffffff6126da16565b869063ffffffff612c6516565b905061443e86614432868463ffffffff612c6516565b9063ffffffff613b4116565b9695505050505050565b600081836144695760405162461bcd60e51b815260040161042c919061506d565b50600083858161447557fe5b0495945050505050565b6040516373b2e76b60e11b81526000906001600160a01b0383169063e765ced6906144ae908490600401615766565b60206040518083038186803b1580156144c657600080fd5b505afa1580156144da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ae9190614994565b80156124f8576040516370a0823160e01b81526000906001600160a01b038516906370a0823190614533908890600401614e9b565b60206040518083038186803b15801561454b57600080fd5b505afa15801561455f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145839190614e14565b905061459185858585614753565b6040516370a0823160e01b81526000906001600160a01b038616906370a08231906145c0908990600401614e9b565b60206040518083038186803b1580156145d857600080fd5b505afa1580156145ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146109190614e14565b9050614622828463ffffffff612c6516565b81146118275760405162461bcd60e51b815260040161042c906154f3565b600080836001600160a01b03166366cb8d2f846040518263ffffffff1660e01b815260040161466f9190614e9b565b60206040518083038186803b15801561468757600080fd5b505afa15801561469b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146bf9190614e14565b139392505050565b600080836001600160a01b031663a7bdad03846040518263ffffffff1660e01b81526004016146f69190614e9b565b60006040518083038186803b15801561470e57600080fd5b505afa158015614722573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261474a9190810190614a08565b51119392505050565b80156124f8576060828260405160240161476e929190614f67565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f0332906138ef9087906000908690600401614f80565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081525090565b50805460008255906000526020600020908101906123ce919061183c91905b808211156126d65760008155600101614852565b600082601f830112614876578081fd5b813561488961488482615796565b61576f565b8181529150602080830190848101818402860182018710156148aa57600080fd5b60005b848110156148d25781356148c081615806565b845292820192908201906001016148ad565b505050505092915050565b600082601f8301126148ed578081fd5b81356148fb614884826157b6565b915080825283602082850101111561491257600080fd5b8060208401602084013760009082016020015292915050565b600082601f83011261493b578081fd5b8151614949614884826157b6565b915080825283602082850101111561496057600080fd5b6149718160208401602086016157da565b5092915050565b600060208284031215614989578081fd5b81356126ab81615806565b6000602082840312156149a5578081fd5b81516126ab81615806565b6000806000606084860312156149c4578182fd5b83516149cf81615806565b60208501516040860151919450925067ffffffffffffffff8111156149f2578182fd5b6149fe8682870161492b565b9150509250925092565b60006020808385031215614a1a578182fd5b825167ffffffffffffffff811115614a30578283fd5b80840185601f820112614a41578384fd5b80519150614a5161488483615796565b8281528381019082850185850284018601891015614a6d578687fd5b8693505b84841015614a98578051614a8481615806565b835260019390930192918501918501614a71565b50979650505050505050565b600060208284031215614ab5578081fd5b81356126ab8161581b565b600060208284031215614ad1578081fd5b81516126ab8161581b565b600060208284031215614aed578081fd5b815167ffffffffffffffff811115614b03578182fd5b612c5d8482850161492b565b60008060408385031215614b21578182fd5b8235614b2c81615806565b91506020830135614b3c81615806565b809150509250929050565b60008060408385031215614b59578182fd5b8235614b6481615806565b9150602083013567ffffffffffffffff811115614b7f578182fd5b614b8b85828601614866565b9150509250929050565b600080600060608486031215614ba9578081fd5b8335614bb481615806565b9250602084013567ffffffffffffffff80821115614bd0578283fd5b614bdc87838801614866565b93506040860135915080821115614bf1578283fd5b506149fe86828701614866565b60008060408385031215614c10578182fd5b8235614c1b81615806565b91506020830135614b3c8161581b565b60008060008060008060c08789031215614c43578384fd5b8635614c4e81615806565b95506020870135614c5e81615806565b94506040870135614c6e81615806565b935060608701359250608087013567ffffffffffffffff80821115614c91578384fd5b614c9d8a838b016148dd565b935060a0890135915080821115614cb2578283fd5b50614cbf89828a016148dd565b9150509295509295509295565b600080600080600080600060e0888a031215614ce6578485fd5b8735614cf181615806565b96506020880135614d0181615806565b95506040880135614d1181615806565b9450606088013593506080880135925060a088013567ffffffffffffffff80821115614d3b578283fd5b614d478b838c016148dd565b935060c08a0135915080821115614d5c578283fd5b50614d698a828b016148dd565b91505092959891949750929550565b60008060408385031215614d8a578182fd5b8235614d9581615806565b946020939093013593505050565b60008060008060808587031215614db8578182fd5b8435614dc381615806565b9350602085013592506040850135614dda81615806565b91506060850135614dea8161581b565b939692955090935050565b600060208284031215614e06578081fd5b8151600381106126ab578182fd5b600060208284031215614e25578081fd5b5051919050565b6000815180845260208085019450808401835b83811015614e645781516001600160a01b031687529582019590820190600101614e3f565b509495945050505050565b60008151808452614e878160208601602086016157da565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b038781168252868116602083015285166040820152606081018490526080810183905260c060a08201819052600090614f0b90830184614e6f565b98975050505050505050565b6001600160a01b03848116825283166020820152606060408201819052600090612f1290830184614e6f565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038516825283602083015260606040830152612f126060830184614e6f565b600060408252614fba6040830185614e2c565b8281036020840152612f128185614e2c565b6020808252825182820181905260009190848201906040850190845b8181101561500d5783516001600160a01b031683529284019291840191600101614fe8565b50909695505050505050565b901515815260200190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6000602082526126ab6020830184614e6f565b60208082526015908201527420b2323932b9b9903737ba1034b71030b93930bc9760591b604082015260600190565b6020808252601a908201527f436f6d706f6e656e74206d757374206265206e65676174697665000000000000604082015260600190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b602080825260119082015270135d5cdd08189948191a5999995c995b9d607a1b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b6020808252600d908201526c05175616e74697479206973203609c1b604082015260600190565b60208082526011908201527018d51bdad95b881b5d5cdd08195e1a5cdd607a1b604082015260600190565b60208082526015908201527426bab9ba103132903b30b634b21030b230b83a32b960591b604082015260600190565b6020808252601190820152700a6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b604082015260600190565b60208082526016908201527510dbdb1b185d195c985b081b9bdd08195b98589b195960521b604082015260600190565b602080825260129082015271109bdc9c9bddc81b9bdd08195b98589b195960721b604082015260600190565b6020808252818101527f53616665436173743a2076616c7565206d75737420626520706f736974697665604082015260600190565b60208082526018908201527f4f6e6c7920746865206d6f64756c652063616e2063616c6c0000000000000000604082015260600190565b60208082526018908201527f49737375616e6365206e6f7420696e697469616c697a65640000000000000000604082015260600190565b60208082526030908201527f45787465726e616c20706f736974696f6e73206d757374206265203020746f2060408201526f1c995b5bdd994818dbdb5c1bdb995b9d60821b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152732737ba1030b63637bbb2b21029b2ba2a37b5b2b760611b604082015260600190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b6020808252601d908201527f496e76616c696420706f7374207472616e736665722062616c616e6365000000604082015260600190565b6020808252600d908201526c105b1c9958591e481859191959609a1b604082015260600190565b6020808252600e908201526d109bdc9c9bddc8195b98589b195960921b604082015260600190565b60208082526018908201527f5061737365642064617461206d757374206265206e756c6c0000000000000000604082015260600190565b60208082526028908201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604082015267371034b73a191a9b60c11b606082015260800190565b60208082526024908201527f4d6f64756c65206d75737420626520656e61626c6564206f6e20636f6e74726f604082015263363632b960e11b606082015260800190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b60208082526012908201527110dbdb1b185d195c985b08195b98589b195960721b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602080825260099082015268139bdd08185919195960ba1b604082015260600190565b60208082526010908201526f043616e742064697669646520627920360841b604082015260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561578e57600080fd5b604052919050565b600067ffffffffffffffff8211156157ac578081fd5b5060209081020190565b600067ffffffffffffffff8211156157cc578081fd5b50601f01601f191660200190565b60005b838110156157f55781810151838201526020016157dd565b838111156124f85750506000910152565b6001600160a01b03811681146123ce57600080fd5b80151581146123ce57600080fdfea2646970667358221220dafeaf756108336c3d5aab6994fdb3b30cedf8dfb48ece632eb40e23013f272e64736f6c634300060a0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638da5cb5b11610104578063cffe5e82116100a2578063f2fde38b11610071578063f2fde38b146103b6578063f452c760146103c9578063f77c4791146103dc578063ffbad25c146103e4576101cf565b8063cffe5e821461036a578063d473e09a1461037d578063d4fd27eb14610390578063ee78244f146103a3576101cf565b8063b1dd4d92116100de578063b1dd4d9214610329578063c137f4d714610331578063c153dd0714610344578063c690a74c14610357576101cf565b80638da5cb5b146102ca578063a6e937b1146102e8578063b1c0267814610308576101cf565b80635199e418116101715780635ce0cef61161014b5780635ce0cef614610294578063715018a6146102a7578063717ca2a5146102af578063847ef08d146102c2576101cf565b80635199e4181461025b5780635809ae271461026e5780635b13651214610281576101cf565b80633fe6106b116101ad5780633fe6106b1461020f5780634a200fa5146102225780634fdd283c14610235578063516595fc14610248576101cf565b8063013c03a1146101d45780630df96ef6146101e95780630fb96b21146101fc575b600080fd5b6101e76101e2366004614978565b6103f7565b005b6101e76101f7366004614b47565b610493565b6101e761020a366004614da3565b6106bd565b6101e761021d366004614d78565b6107c9565b6101e7610230366004614b95565b6107e3565b6101e7610243366004614ccc565b610a68565b6101e7610256366004614b47565b610b91565b6101e7610269366004614aa4565b610db2565b6101e761027c366004614b47565b610e24565b6101e761028f366004614b0f565b610ff1565b6101e76102a2366004614b0f565b6110ed565b6101e761118a565b6101e76102bd366004614b47565b611209565b6101e761140d565b6102d261182f565b6040516102df9190614e9b565b60405180910390f35b6102fb6102f6366004614b0f565b61183f565b6040516102df9190615019565b61031b610316366004614978565b61185f565b6040516102df929190614fa7565b6102fb61193d565b6101e761033f366004614da3565b611946565b6101e7610352366004614d78565b611a45565b6101e7610365366004614bfe565b611a5a565b6101e7610378366004614bfe565b611ae3565b6102d261038b366004614978565b611ec3565b6101e761039e366004614c2b565b611ede565b6102fb6103b1366004614978565b612175565b6101e76103c4366004614978565b61218a565b6102fb6103d7366004614b0f565b612241565b6102d2612261565b6101e76103f2366004614ccc565b612270565b6103ff61237f565b6002546001600160a01b039081169116146104355760405162461bcd60e51b815260040161042c90615449565b60405180910390fd5b6001600160a01b038181166000908152600360205260409020541661046c5760405162461bcd60e51b815260040161042c90615719565b6001600160a01b0316600090815260036020526040902080546001600160a01b0319169055565b8161049d81612383565b6104a8836001611ae3565b60005b8251811015610672576000600360008584815181106104c657fe5b6020908102919091018101516001600160a01b039081168352828201939093526040918201600090812054898516825260098352838220941680825293909152205490915060ff1661052a5760405162461bcd60e51b815260040161042c906152e9565b6001600160a01b0380861660009081526008602090815260408083209385168352929052205460ff166105d157600654604051629c09c960e41b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__916309c09c90916105a0916001600160a01b03808b169287929091169060040161504a565b60006040518083038186803b1580156105b857600080fd5b505af41580156105cc573d6000803e3d6000fd5b505050505b6001600160a01b0380861660008181526009602090815260408083209486168352938152838220805460ff19169055918152600a9091522061061c906001018263ffffffff6123d116565b61066984838151811061062b57fe5b6020026020010151600a6000886001600160a01b03166001600160a01b031681526020019081526020016000206002016123d190919063ffffffff16565b506001016104ab565b5060001515836001600160a01b03167f1c400b459725a0446742d6688375dffe941d5f9a65fe3900c93e07d9e772250b846040516106b09190614fcc565b60405180910390a3505050565b836106c7816124fe565b6040516308bafae960e21b81526000906001600160a01b038716906322ebeba4906106f89087903090600401614eaf565b60206040518083038186803b15801561071057600080fd5b505afa158015610724573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107489190614e14565b90506000811261076a5760405162461bcd60e51b815260040161042c906150af565b60006107968661078a6107858560001963ffffffff61264016565b6126b4565b9063ffffffff6126da16565b6001600160a01b038087166000908152600360205260409020549192506107c09189911683612704565b50505050505050565b816107d3816124fe565b6107de836001611ae3565b505050565b82336107ef82826127b0565b846107f9816127da565b600c5460ff1661083b576001600160a01b0386166000908152600b602052604090205460ff1661083b5760405162461bcd60e51b815260040161042c9061547e565b856001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561087657600080fd5b505af115801561088a573d6000803e3d6000fd5b50505050856001600160a01b031663d7f1b27c6108d36040518060400160405280601581526020017444656661756c7449737375616e63654d6f64756c6560581b81525061289b565b6040518263ffffffff1660e01b81526004016108ef9190614e9b565b60206040518083038186803b15801561090757600080fd5b505afa15801561091b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093f9190614ac0565b61095b5760405162461bcd60e51b815260040161042c90615381565b6060866001600160a01b031663b2494df36040518163ffffffff1660e01b815260040160006040518083038186803b15801561099657600080fd5b505afa1580156109aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109d29190810190614a08565b905060005b8151811015610a53578181815181106109ec57fe5b60200260200101516001600160a01b031663d9b1b6e0896040518263ffffffff1660e01b8152600401610a1f9190614e9b565b600060405180830381600087803b158015610a3957600080fd5b505af1925050508015610a4a575060015b506001016109d7565b50610a5e8787611209565b6107c08786610b91565b60026001541415610a8b5760405162461bcd60e51b815260040161042c906156e2565b600260015586610a9a81612383565b610aa26147ca565b610ab289898989898960006128b9565b9050610acb81600001518260a001518360600151612970565b6000610ad9828a8a876129b4565b90506000610ae88b8a84612c42565b90506000610afc838363ffffffff612c6516565b9050610b1284600001518560c001518c84612ca7565b610b1c848b612deb565b896001600160a01b03168b6001600160a01b03168d6001600160a01b03167f7cda30123ddfc96659344700585861a8670352b9cc86d1b1054d10083b1dcdd4876020015188606001518688604051610b779493929190615024565b60405180910390a450506001805550505050505050505050565b81610b9b81612383565b60005b8251811015610d74576000838281518110610bb557fe5b6020908102919091018101516001600160a01b03808216600090815260039093526040909220549092501680610bfd5760405162461bcd60e51b815260040161042c90615234565b6001600160a01b0380871660009081526009602090815260408083209385168352929052205460ff1615610c435760405162461bcd60e51b815260040161042c90615551565b6001600160a01b0380871660009081526008602090815260408083209385168352929052205460ff16610ceb57600654604051632c5febc760e21b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__9163b17faf1c91610cba916001600160a01b03808c169287929091169060040161504a565b60006040518083038186803b158015610cd257600080fd5b505af4158015610ce6573d6000803e3d6000fd5b505050505b6001600160a01b0386811660008181526009602090815260408083209585168084529582528083208054600160ff199091168117909155938352600a82528220808401805480860182559084528284200180546001600160a01b031990811690971790556002018054808501825590835291200180549093169390911692909217905501610b9e565b5060011515836001600160a01b03167f1c400b459725a0446742d6688375dffe941d5f9a65fe3900c93e07d9e772250b846040516106b09190614fcc565b610dba61237f565b6002546001600160a01b03908116911614610de75760405162461bcd60e51b815260040161042c90615449565b600c805460ff19168215159081179091556040517f563e1633136cdd43b8793897cb53ba2a9e31c18b3ae0b6827fbbb03b9902e6c690600090a250565b81610e2e81612383565b610e39836001611ae3565b60005b8251811015610fb357600060036000858481518110610e5757fe5b6020908102919091018101516001600160a01b039081168352828201939093526040918201600090812054898516825260088352838220941680825293909152205490915060ff16610ebb5760405162461bcd60e51b815260040161042c906152b9565b6001600160a01b0380861660009081526009602090815260408083209385168352929052205460ff16610f6257600654604051629c09c960e41b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__916309c09c9091610f31916001600160a01b03808b169287929091169060040161504a565b60006040518083038186803b158015610f4957600080fd5b505af4158015610f5d573d6000803e3d6000fd5b505050505b6001600160a01b0380861660008181526008602090815260408083209486168352938152838220805460ff19169055918152600a90915220610faa908263ffffffff6123d116565b50600101610e3c565b5060001515836001600160a01b03167fdd2a86f23a66f86496c82312e991b49f87ad96c4f25094a43c49f7aca0ea3542846040516106b09190614fcc565b81610ffb81612383565b6040516335fc6c9f60e21b81526001600160a01b0384169063d7f1b27c90611027908590600401614e9b565b60206040518083038186803b15801561103f57600080fd5b505afa158015611053573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110779190614ac0565b6110935760405162461bcd60e51b815260040161042c90615381565b6040516306cd8db760e51b81526001600160a01b0383169063d9b1b6e0906110bf908690600401614e9b565b600060405180830381600087803b1580156110d957600080fd5b505af11580156107c0573d6000803e3d6000fd5b6110f561237f565b6002546001600160a01b039081169116146111225760405162461bcd60e51b815260040161042c90615449565b6001600160a01b03818116600090815260036020526040902054161561115a5760405162461bcd60e51b815260040161042c9061552a565b6001600160a01b0390811660009081526003602052604090208054919092166001600160a01b0319909116179055565b61119261237f565b6002546001600160a01b039081169116146111bf5760405162461bcd60e51b815260040161042c90615449565b6002546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600280546001600160a01b0319169055565b8161121381612383565b60005b82518110156113cf5760006003600085848151811061123157fe5b6020908102919091018101516001600160a01b0390811683529082019290925260400160002054169050806112785760405162461bcd60e51b815260040161042c90615234565b6001600160a01b0380861660009081526008602090815260408083209385168352929052205460ff16156112be5760405162461bcd60e51b815260040161042c906156b6565b6001600160a01b0380861660009081526009602090815260408083209385168352929052205460ff1661136657600654604051632c5febc760e21b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__9163b17faf1c91611335916001600160a01b03808b169287929091169060040161504a565b60006040518083038186803b15801561134d57600080fd5b505af4158015611361573d6000803e3d6000fd5b505050505b6001600160a01b03808616600081815260086020908152604080832095909416808352948152838220805460ff19166001908117909155928252600a81529281208054808401825590825292902090910180546001600160a01b03191690921790915501611216565b5060011515836001600160a01b03167fdd2a86f23a66f86496c82312e991b49f87ad96c4f25094a43c49f7aca0ea3542846040516106b09190614fcc565b33611417816123a9565b33611423816001611ae3565b6001600160a01b0381166000908152600a602090815260409182902060010180548351818402810184019094528084526060939283018282801561149057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611472575b50939450600093505050505b81518110156115a15760008282815181106114b357fe5b6020908102919091018101516001600160a01b0380871660009081526008845260408082209284168252919093529091205490915060ff1661156957600654604051629c09c960e41b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__916309c09c9091611538916001600160a01b03808a169287929091169060040161504a565b60006040518083038186803b15801561155057600080fd5b505af4158015611564573d6000803e3d6000fd5b505050505b6001600160a01b038085166000908152600960209081526040808320949093168252929092529020805460ff1916905560010161149c565b506001600160a01b0382166000908152600a602090815260409182902080548351818402810184019094528084526060939283018282801561160c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116115ee575b50939450600093505050505b81518110156116ed57600082828151811061162f57fe5b6020908102919091010151600654604051629c09c960e41b815291925073__$059b1e3c35e6526bf44b3e0b6a2a76e329$__916309c09c9091611685916001600160a01b03808b1692879291169060040161504a565b60006040518083038186803b15801561169d57600080fd5b505af41580156116b1573d6000803e3d6000fd5b505050506001600160a01b038581166000908152600860209081526040808320949093168252929092529020805460ff19169055600101611618565b506001600160a01b0383166000908152600a60205260408120906117118282614833565b61171f600183016000614833565b61172d600283016000614833565b50506060836001600160a01b031663b2494df36040518163ffffffff1660e01b815260040160006040518083038186803b15801561176a57600080fd5b505afa15801561177e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117a69190810190614a08565b905060005b8151811015611827578181815181106117c057fe5b60200260200101516001600160a01b031663e0799620866040518263ffffffff1660e01b81526004016117f39190614e9b565b600060405180830381600087803b15801561180d57600080fd5b505af192505050801561181e575060015b506001016117ab565b505050505050565b6002546001600160a01b03165b90565b600860209081526000928352604080842090915290825290205460ff1681565b6001600160a01b0381166000908152600a602090815260409182902080548351818402810184019094528084526060938493600284019284918301828280156118d157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116118b3575b505050505091508080548060200260200160405190810160405280929190818152602001828054801561192d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161190f575b5050505050905091509150915091565b600c5460ff1681565b83611950816124fe565b6040516308bafae960e21b81526000906001600160a01b038716906322ebeba4906119819087903090600401614eaf565b60206040518083038186803b15801561199957600080fd5b505afa1580156119ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d19190614e14565b9050600081126119f35760405162461bcd60e51b815260040161042c906150af565b6000611a1a86611a0e6107858560001963ffffffff61264016565b9063ffffffff612e3616565b6001600160a01b038087166000908152600360205260409020549192506107c0918991168784612ca7565b81611a4f816124fe565b6107de836000611ae3565b611a6261237f565b6002546001600160a01b03908116911614611a8f5760405162461bcd60e51b815260040161042c90615449565b6001600160a01b0382166000818152600b6020526040808220805460ff191685151590811790915590519092917f2035981b48691b10f6ac65174e570b4d0a8a889ae01bef3e5e7759ff9444f0c491a35050565b60026001541415611b065760405162461bcd60e51b815260040161042c906156e2565b600260015581611b15816123a9565b6000836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b5057600080fd5b505afa158015611b64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b889190614e14565b90508015611eb9576001600160a01b0384166000908152600a6020908152604091829020805483518184028101840190945280845260609392830182828015611bfa57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611bdc575b50939450600093505050505b8151811015611cd6576000828281518110611c1d57fe5b602002602001015190506000611ca8886001600160a01b03166366cb8d2f846040518263ffffffff1660e01b8152600401611c589190614e9b565b60206040518083038186803b158015611c7057600080fd5b505afa158015611c84573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107859190614e14565b90506000611cb7898488612e81565b9050808214611ccb57611ccb898483612f1b565b505050600101611c06565b506001600160a01b0385166000908152600a6020908152604091829020600101805483518184028101840190945280845260609392830182828015611d4457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d26575b5050506001600160a01b0389166000908152600a602090815260409182902060020180548351818402810184019094528084529596506060959294509250830182828015611dbb57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d9d575b50939450600093505050505b8251811015611eb4576000838281518110611dde57fe5b602002602001015190506000838381518110611df657fe5b6020026020010151905060008a6001600160a01b03166322ebeba483306040518363ffffffff1660e01b8152600401611e30929190614eaf565b60206040518083038186803b158015611e4857600080fd5b505afa158015611e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e809190614e14565b90506000611e908c858b8e612f35565b9050818114611ea457611ea48c8483613075565b505060019092019150611dc79050565b505050505b5050600180555050565b6003602052600090815260409020546001600160a01b031681565b60026001541415611f015760405162461bcd60e51b815260040161042c906156e2565b600260015585611f1081612383565b6000611f93886001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f4e57600080fd5b505afa158015611f62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f869190614e14565b869063ffffffff6126da16565b6001600160a01b03808a1660009081526009602090815260408083208b8516845260038352818420549094168352929052205490915060ff16611fe85760405162461bcd60e51b815260040161042c906152e9565b6001600160a01b038087166000908152600360205260408082205490516305eff7ef60e21b8152919216906317bfdfbc90612027908c90600401614e9b565b602060405180830381600087803b15801561204157600080fd5b505af1158015612055573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120799190614e14565b90506120836147ca565b6120938a8a8a86868b60006130a4565b90506120ac81600001518260a001518360600151612970565b6120b8818a8a886129b4565b506120cd81600001518260c001518a85612ca7565b604081015160e08201516120f4916001600160a01b038d16918b919063ffffffff61329416565b5050506121018189612deb565b876001600160a01b0316896001600160a01b03168b6001600160a01b03167f7cda30123ddfc96659344700585861a8670352b9cc86d1b1054d10083b1dcdd48460200151856060015187600060405161215d9493929190615024565b60405180910390a45050600180555050505050505050565b600b6020526000908152604090205460ff1681565b61219261237f565b6002546001600160a01b039081169116146121bf5760405162461bcd60e51b815260040161042c90615449565b6001600160a01b0381166121e55760405162461bcd60e51b815260040161042c90615159565b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b600960209081526000928352604080842090915290825290205460ff1681565b6000546001600160a01b031681565b600260015414156122935760405162461bcd60e51b815260040161042c906156e2565b6002600155866122a281612383565b6122aa6147ca565b6122ba89898989898960016128b9565b90506122d381600001518260c001518360600151612704565b60006122e1828a8a876129b4565b905060006122f08b8a84612c42565b90506000612304838363ffffffff612c6516565b905061231a84600001518560a001518c84613385565b612324848c612deb565b896001600160a01b03168b6001600160a01b03168d6001600160a01b03167f359f8b62a966cfd521a3815681266407201b20a7c334925faa49e7d9d5dd57ab876020015188606001518688604051610b779493929190615024565b3390565b61238d813361345e565b6123a95760405162461bcd60e51b815260040161042c9061567f565b6123b2816134ec565b6123ce5760405162461bcd60e51b815260040161042c906150e6565b50565b6000806124378480548060200260200160405190810160405280929190818152602001828054801561242c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161240e575b5050505050846135f0565b91509150806124585760405162461bcd60e51b815260040161042c90615080565b8354600019018281146124ca5784818154811061247157fe5b9060005260206000200160009054906101000a90046001600160a01b031685848154811061249b57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b848054806124d457fe5b600082815260209020810160001990810180546001600160a01b0319169055019055505b50505050565b6002604051631ade272960e11b81526001600160a01b038316906335bc4e529061252c903390600401614e9b565b60206040518083038186803b15801561254457600080fd5b505afa158015612558573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257c9190614df5565b600281111561258757fe5b146125a45760405162461bcd60e51b815260040161042c9061534a565b6000546040516342f6e38960e01b81526001600160a01b03909116906342f6e389906125d4903390600401614e9b565b60206040518083038186803b1580156125ec57600080fd5b505afa158015612600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126249190614ac0565b6123ce5760405162461bcd60e51b815260040161042c906155f8565b60008261264f575060006126ae565b826000191480156126635750600160ff1b82145b156126805760405162461bcd60e51b815260040161042c906154ac565b8282028284828161268d57fe5b05146126ab5760405162461bcd60e51b815260040161042c906154ac565b90505b92915050565b6000808212156126d65760405162461bcd60e51b815260040161042c90615315565b5090565b60006126ab670de0b6b3a76400006126f8858563ffffffff61365616565b9063ffffffff61369016565b60405163beee4b4b60e01b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__9063beee4b4b90612748906001600160a01b0387169086908690600401614f43565b60006040518083038186803b15801561276057600080fd5b505af4158015612774573d6000803e3d6000fd5b50506005546001600160a01b038581169116141591506107de9050576004546107de906001600160a01b0385811691168363ffffffff6136d216565b6127ba828261345e565b6127d65760405162461bcd60e51b815260040161042c9061567f565b5050565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec9061280a908490600401614e9b565b60206040518083038186803b15801561282257600080fd5b505afa158015612836573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285a9190614ac0565b6128765760405162461bcd60e51b815260040161042c9061563c565b61287f81613787565b6123ce5760405162461bcd60e51b815260040161042c906151d6565b6000806128a7836137b6565b90506128b2816137c1565b9392505050565b6128c16147ca565b6000886001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156128fc57600080fd5b505afa158015612910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129349190614e14565b905061296389898961294c8a8663ffffffff6126da16565b61295c8a8763ffffffff6126da16565b89896130a4565b9998505050505050505050565b60405163aed2dfc960e01b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__9063aed2dfc990612748906001600160a01b0387169086908690600401614f43565b60008085600001519050600086606001519050612a588688602001516001600160a01b031663334fc2896040518163ffffffff1660e01b815260040160206040518083038186803b158015612a0857600080fd5b505afa158015612a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a409190614994565b6001600160a01b03851691908463ffffffff61387e16565b600080606089602001516001600160a01b031663e171fcab8a8a88888f608001518d6040518763ffffffff1660e01b8152600401612a9b96959493929190614ec9565b60006040518083038186803b158015612ab357600080fd5b505afa158015612ac7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612aef91908101906149b0565b925092509250846001600160a01b0316638f6f03328484846040518463ffffffff1660e01b8152600401612b2593929190614f80565b600060405180830381600087803b158015612b3f57600080fd5b505af1158015612b53573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b7b9190810190614adc565b506000612c0e8b60e001518a6001600160a01b03166370a08231896040518263ffffffff1660e01b8152600401612bb29190614e9b565b60206040518083038186803b158015612bca57600080fd5b505afa158015612bde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c029190614e14565b9063ffffffff612c6516565b90508a60800151811015612c345760405162461bcd60e51b815260040161042c9061528e565b9a9950505050505050505050565b600080612c50600084613945565b9050612c5d8585836139da565b949350505050565b60006126ab83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a81565b6005546001600160a01b0384811691161415612d5657600454612cdd906001600160a01b0386811691168363ffffffff613aad16565b604051635d20259160e01b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__90635d20259190612d21906001600160a01b0388169087908690600401614f43565b60006040518083038186803b158015612d3957600080fd5b505af4158015612d4d573d6000803e3d6000fd5b505050506124f8565b612d716001600160a01b03851683858463ffffffff61387e16565b604051637d43967d60e11b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__9063fa872cfa90612db5906001600160a01b0388169087908690600401614f43565b60006040518083038186803b158015612dcd57600080fd5b505af4158015612de1573d6000803e3d6000fd5b5050505050505050565b815160a08301516040840151612e0f929190612e0a9083908390612e81565b612f1b565b6127d6826000015182612e3185600001518660c0015187604001516000612f35565b613075565b6000821580612e43575081155b15612e50575060006126ae565b6126ab6001612e75670de0b6b3a76400006126f883612c02898963ffffffff61365616565b9063ffffffff613b1c16565b600080836001600160a01b03166370a08231866040518263ffffffff1660e01b8152600401612eb09190614e9b565b60206040518083038186803b158015612ec857600080fd5b505afa158015612edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f009190614e14565b9050612f12818463ffffffff613b4116565b95945050505050565b6107de6001600160a01b038416838363ffffffff613b5f16565b60008082612fbe576040516395dd919360e01b81526001600160a01b038616906395dd919390612f69908990600401614e9b565b60206040518083038186803b158015612f8157600080fd5b505afa158015612f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb99190614e14565b61303c565b6040516305eff7ef60e21b81526001600160a01b038616906317bfdfbc90612fea908990600401614e9b565b602060405180830381600087803b15801561300457600080fd5b505af1158015613018573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303c9190614e14565b9050600061306a60001961305e613059858963ffffffff613cd316565b613d26565b9063ffffffff61264016565b979650505050505050565b6040805160208101909152600081526107de906001600160a01b0385169084903090859063ffffffff613d4b16565b6130ac6147ca565b6000886001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156130e757600080fd5b505afa1580156130fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061311f9190614e14565b90506131296147ca565b6040518061010001604052808b6001600160a01b0316815260200161314d8761289b565b6001600160a01b0316815260200183815260200188815260200187815260200185613192576001600160a01b03808c16600090815260036020526040902054166131ae565b6001600160a01b03808b16600090815260036020526040902054165b6001600160a01b03168152602001856131e1576001600160a01b03808b16600090815260036020526040902054166131fd565b6001600160a01b03808c16600090815260036020526040902054165b6001600160a01b03168152602001896001600160a01b03166370a082318d6040518263ffffffff1660e01b81526004016132379190614e9b565b60206040518083038186803b15801561324f57600080fd5b505afa158015613263573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132879190614e14565b9052905061296381614303565b600080600080866001600160a01b03166370a08231896040518263ffffffff1660e01b81526004016132c69190614e9b565b60206040518083038186803b1580156132de57600080fd5b505afa1580156132f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133169190614e14565b90506000613349896001600160a01b03166366cb8d2f8a6040518263ffffffff1660e01b8152600401611c589190614e9b565b9050600082156133665761335f888885856143f9565b905061336a565b5060005b6133758a8a83613b5f565b9199909850909650945050505050565b6005546001600160a01b03848116911614156133ff576004546133bb906001600160a01b0386811691168363ffffffff613aad16565b60405163690f656160e01b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__9063690f656190612d21906001600160a01b0388169087908690600401614f43565b61341a6001600160a01b03851683858463ffffffff61387e16565b6040516309c8202b60e01b815273__$059b1e3c35e6526bf44b3e0b6a2a76e329$__906309c8202b90612db5906001600160a01b0388169087908690600401614f43565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b1580156134a357600080fd5b505afa1580156134b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134db9190614994565b6001600160a01b0316149392505050565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec9061351d908590600401614e9b565b60206040518083038186803b15801561353557600080fd5b505afa158015613549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061356d9190614ac0565b80156126ae57506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c906135a0903090600401614e9b565b60206040518083038186803b1580156135b857600080fd5b505afa1580156135cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ae9190614ac0565b81516000908190815b8181101561364357846001600160a01b031686828151811061361757fe5b60200260200101516001600160a01b0316141561363b5792506001915061364f9050565b6001016135f9565b50600019600092509250505b9250929050565b600082613665575060006126ae565b8282028284828161367257fe5b04146126ab5760405162461bcd60e51b815260040161042c90615408565b60006126ab83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614448565b6040805160048082526024820183526020820180516001600160e01b0316630d0e30db60e41b17905291516347b7819960e11b815290916001600160a01b03861691638f6f03329161372a9187918791879101614f80565b600060405180830381600087803b15801561374457600080fd5b505af1158015613758573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526137809190810190614adc565b5050505050565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f7906135a0903090600401614e9b565b805160209091012090565b6000805481906137d9906001600160a01b031661447f565b6001600160a01b031663e6d642c530856040518363ffffffff1660e01b8152600401613806929190614f67565b60206040518083038186803b15801561381e57600080fd5b505afa158015613832573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138569190614994565b90506001600160a01b0381166126ae5760405162461bcd60e51b815260040161042c9061525f565b60608282604051602401613893929190614f67565b60408051601f198184030181529181526020820180516001600160e01b031663095ea7b360e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f0332906138ef9087906000908690600401614f80565b600060405180830381600087803b15801561390957600080fd5b505af115801561391d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118279190810190614adc565b6000805460405163792aa04f60e01b815282916001600160a01b03169063792aa04f906139789030908890600401614f67565b60206040518083038186803b15801561399057600080fd5b505afa1580156139a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139c89190614e14565b9050612c5d838263ffffffff6126da16565b80156107de576107de826000809054906101000a90046001600160a01b03166001600160a01b031663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015613a3157600080fd5b505afa158015613a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a699190614994565b6001600160a01b03861691908463ffffffff6144fe16565b60008184841115613aa55760405162461bcd60e51b815260040161042c919061506d565b505050900390565b606081604051602401613ac09190615766565b60408051601f198184030181529181526020820180516001600160e01b0316632e1a7d4d60e01b179052516347b7819960e11b81529091506001600160a01b03851690638f6f03329061372a9086906000908690600401614f80565b6000828201838110156126ab5760405162461bcd60e51b815260040161042c9061519f565b60006126ab826126f885670de0b6b3a764000063ffffffff61365616565b6000613b6b8484614640565b905080158015613b7b5750600082115b15613bf257613b8a84846146c7565b613bed576040516304e3532760e41b81526001600160a01b03851690634e35327090613bba908690600401614e9b565b600060405180830381600087803b158015613bd457600080fd5b505af1158015613be8573d6000803e3d6000fd5b505050505b613c6f565b808015613bfd575081155b15613c6f57613c0c84846146c7565b613c6f57604051636f86c89760e01b81526001600160a01b03851690636f86c89790613c3c908690600401614e9b565b600060405180830381600087803b158015613c5657600080fd5b505af1158015613c6a573d6000803e3d6000fd5b505050505b836001600160a01b0316632ba57d1784613c8885613d26565b6040518363ffffffff1660e01b8152600401613ca5929190614f67565b600060405180830381600087803b158015613cbf57600080fd5b505af1158015612de1573d6000803e3d6000fd5b600081613cf25760405162461bcd60e51b815260040161042c9061573c565b60008311613d015760006126ab565b6126ab6001612e75846126f883612c0289670de0b6b3a764000063ffffffff61365616565b6000600160ff1b82106126d65760405162461bcd60e51b815260040161042c906155b0565b81156140405760405163df5e9b2960e01b81526001600160a01b0386169063df5e9b2990613d7d908790600401614e9b565b60206040518083038186803b158015613d9557600080fd5b505afa158015613da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dcd9190614ac0565b613e94576040516304e3532760e41b81526001600160a01b03861690634e35327090613dfd908790600401614e9b565b600060405180830381600087803b158015613e1757600080fd5b505af1158015613e2b573d6000803e3d6000fd5b505060405163ea0ee55960e01b81526001600160a01b038816925063ea0ee5599150613e5d9087908790600401614eaf565b600060405180830381600087803b158015613e7757600080fd5b505af1158015613e8b573d6000803e3d6000fd5b50505050613f77565b604051637d96659360e01b81526001600160a01b03861690637d96659390613ec29087908790600401614eaf565b60206040518083038186803b158015613eda57600080fd5b505afa158015613eee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f129190614ac0565b613f775760405163ea0ee55960e01b81526001600160a01b0386169063ea0ee55990613f449087908790600401614eaf565b600060405180830381600087803b158015613f5e57600080fd5b505af1158015613f72573d6000803e3d6000fd5b505050505b6040516363a90fc160e01b81526001600160a01b038616906363a90fc190613fa790879087908790600401614f43565b600060405180830381600087803b158015613fc157600080fd5b505af1158015613fd5573d6000803e3d6000fd5b50506040516326898fe160e01b81526001600160a01b03881692506326898fe1915061400990879087908690600401614f17565b600060405180830381600087803b15801561402357600080fd5b505af1158015614037573d6000803e3d6000fd5b50505050613780565b80511561405f5760405162461bcd60e51b815260040161042c90615579565b6040516308bafae960e21b81526001600160a01b038616906322ebeba49061408d9087908790600401614eaf565b60206040518083038186803b1580156140a557600080fd5b505afa1580156140b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140dd9190614e14565b156137805760405163a7bdad0360e01b81526060906001600160a01b0387169063a7bdad0390614111908890600401614e9b565b60006040518083038186803b15801561412957600080fd5b505afa15801561413d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141659190810190614a08565b6040516366cb8d2f60e01b81529091506001600160a01b038716906366cb8d2f90614194908890600401614e9b565b60206040518083038186803b1580156141ac57600080fd5b505afa1580156141c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141e49190614e14565b1580156141f2575080516001145b1561429b57836001600160a01b03168160008151811061420e57fe5b60200260200101516001600160a01b03161461423c5760405162461bcd60e51b815260040161042c906153b8565b604051636f86c89760e01b81526001600160a01b03871690636f86c89790614268908890600401614e9b565b600060405180830381600087803b15801561428257600080fd5b505af1158015614296573d6000803e3d6000fd5b505050505b60405163acf3f07760e01b81526001600160a01b0387169063acf3f077906142c99088908890600401614eaf565b600060405180830381600087803b1580156142e357600080fd5b505af11580156142f7573d6000803e3d6000fd5b50505050505050505050565b80516001600160a01b03908116600090815260086020908152604080832060a08601519094168352929052205460ff1661434f5760405162461bcd60e51b815260040161042c906152b9565b80516001600160a01b03908116600090815260096020908152604080832060c08601519094168352929052205460ff1661439b5760405162461bcd60e51b815260040161042c906152e9565b8060c001516001600160a01b03168160a001516001600160a01b031614156143d55760405162461bcd60e51b815260040161042c9061512e565b60008160600151116123ce5760405162461bcd60e51b815260040161042c9061520d565b60008061441c61440f848863ffffffff6126da16565b869063ffffffff612c6516565b905061443e86614432868463ffffffff612c6516565b9063ffffffff613b4116565b9695505050505050565b600081836144695760405162461bcd60e51b815260040161042c919061506d565b50600083858161447557fe5b0495945050505050565b6040516373b2e76b60e11b81526000906001600160a01b0383169063e765ced6906144ae908490600401615766565b60206040518083038186803b1580156144c657600080fd5b505afa1580156144da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ae9190614994565b80156124f8576040516370a0823160e01b81526000906001600160a01b038516906370a0823190614533908890600401614e9b565b60206040518083038186803b15801561454b57600080fd5b505afa15801561455f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145839190614e14565b905061459185858585614753565b6040516370a0823160e01b81526000906001600160a01b038616906370a08231906145c0908990600401614e9b565b60206040518083038186803b1580156145d857600080fd5b505afa1580156145ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146109190614e14565b9050614622828463ffffffff612c6516565b81146118275760405162461bcd60e51b815260040161042c906154f3565b600080836001600160a01b03166366cb8d2f846040518263ffffffff1660e01b815260040161466f9190614e9b565b60206040518083038186803b15801561468757600080fd5b505afa15801561469b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146bf9190614e14565b139392505050565b600080836001600160a01b031663a7bdad03846040518263ffffffff1660e01b81526004016146f69190614e9b565b60006040518083038186803b15801561470e57600080fd5b505afa158015614722573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261474a9190810190614a08565b51119392505050565b80156124f8576060828260405160240161476e929190614f67565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f0332906138ef9087906000908690600401614f80565b60405180610100016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081525090565b50805460008255906000526020600020908101906123ce919061183c91905b808211156126d65760008155600101614852565b600082601f830112614876578081fd5b813561488961488482615796565b61576f565b8181529150602080830190848101818402860182018710156148aa57600080fd5b60005b848110156148d25781356148c081615806565b845292820192908201906001016148ad565b505050505092915050565b600082601f8301126148ed578081fd5b81356148fb614884826157b6565b915080825283602082850101111561491257600080fd5b8060208401602084013760009082016020015292915050565b600082601f83011261493b578081fd5b8151614949614884826157b6565b915080825283602082850101111561496057600080fd5b6149718160208401602086016157da565b5092915050565b600060208284031215614989578081fd5b81356126ab81615806565b6000602082840312156149a5578081fd5b81516126ab81615806565b6000806000606084860312156149c4578182fd5b83516149cf81615806565b60208501516040860151919450925067ffffffffffffffff8111156149f2578182fd5b6149fe8682870161492b565b9150509250925092565b60006020808385031215614a1a578182fd5b825167ffffffffffffffff811115614a30578283fd5b80840185601f820112614a41578384fd5b80519150614a5161488483615796565b8281528381019082850185850284018601891015614a6d578687fd5b8693505b84841015614a98578051614a8481615806565b835260019390930192918501918501614a71565b50979650505050505050565b600060208284031215614ab5578081fd5b81356126ab8161581b565b600060208284031215614ad1578081fd5b81516126ab8161581b565b600060208284031215614aed578081fd5b815167ffffffffffffffff811115614b03578182fd5b612c5d8482850161492b565b60008060408385031215614b21578182fd5b8235614b2c81615806565b91506020830135614b3c81615806565b809150509250929050565b60008060408385031215614b59578182fd5b8235614b6481615806565b9150602083013567ffffffffffffffff811115614b7f578182fd5b614b8b85828601614866565b9150509250929050565b600080600060608486031215614ba9578081fd5b8335614bb481615806565b9250602084013567ffffffffffffffff80821115614bd0578283fd5b614bdc87838801614866565b93506040860135915080821115614bf1578283fd5b506149fe86828701614866565b60008060408385031215614c10578182fd5b8235614c1b81615806565b91506020830135614b3c8161581b565b60008060008060008060c08789031215614c43578384fd5b8635614c4e81615806565b95506020870135614c5e81615806565b94506040870135614c6e81615806565b935060608701359250608087013567ffffffffffffffff80821115614c91578384fd5b614c9d8a838b016148dd565b935060a0890135915080821115614cb2578283fd5b50614cbf89828a016148dd565b9150509295509295509295565b600080600080600080600060e0888a031215614ce6578485fd5b8735614cf181615806565b96506020880135614d0181615806565b95506040880135614d1181615806565b9450606088013593506080880135925060a088013567ffffffffffffffff80821115614d3b578283fd5b614d478b838c016148dd565b935060c08a0135915080821115614d5c578283fd5b50614d698a828b016148dd565b91505092959891949750929550565b60008060408385031215614d8a578182fd5b8235614d9581615806565b946020939093013593505050565b60008060008060808587031215614db8578182fd5b8435614dc381615806565b9350602085013592506040850135614dda81615806565b91506060850135614dea8161581b565b939692955090935050565b600060208284031215614e06578081fd5b8151600381106126ab578182fd5b600060208284031215614e25578081fd5b5051919050565b6000815180845260208085019450808401835b83811015614e645781516001600160a01b031687529582019590820190600101614e3f565b509495945050505050565b60008151808452614e878160208601602086016157da565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b038781168252868116602083015285166040820152606081018490526080810183905260c060a08201819052600090614f0b90830184614e6f565b98975050505050505050565b6001600160a01b03848116825283166020820152606060408201819052600090612f1290830184614e6f565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b038516825283602083015260606040830152612f126060830184614e6f565b600060408252614fba6040830185614e2c565b8281036020840152612f128185614e2c565b6020808252825182820181905260009190848201906040850190845b8181101561500d5783516001600160a01b031683529284019291840191600101614fe8565b50909695505050505050565b901515815260200190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6000602082526126ab6020830184614e6f565b60208082526015908201527420b2323932b9b9903737ba1034b71030b93930bc9760591b604082015260600190565b6020808252601a908201527f436f6d706f6e656e74206d757374206265206e65676174697665000000000000604082015260600190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b602080825260119082015270135d5cdd08189948191a5999995c995b9d607a1b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b6020808252600d908201526c05175616e74697479206973203609c1b604082015260600190565b60208082526011908201527018d51bdad95b881b5d5cdd08195e1a5cdd607a1b604082015260600190565b60208082526015908201527426bab9ba103132903b30b634b21030b230b83a32b960591b604082015260600190565b6020808252601190820152700a6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b604082015260600190565b60208082526016908201527510dbdb1b185d195c985b081b9bdd08195b98589b195960521b604082015260600190565b602080825260129082015271109bdc9c9bddc81b9bdd08195b98589b195960721b604082015260600190565b6020808252818101527f53616665436173743a2076616c7565206d75737420626520706f736974697665604082015260600190565b60208082526018908201527f4f6e6c7920746865206d6f64756c652063616e2063616c6c0000000000000000604082015260600190565b60208082526018908201527f49737375616e6365206e6f7420696e697469616c697a65640000000000000000604082015260600190565b60208082526030908201527f45787465726e616c20706f736974696f6e73206d757374206265203020746f2060408201526f1c995b5bdd994818dbdb5c1bdb995b9d60821b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152732737ba1030b63637bbb2b21029b2ba2a37b5b2b760611b604082015260600190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b6020808252601d908201527f496e76616c696420706f7374207472616e736665722062616c616e6365000000604082015260600190565b6020808252600d908201526c105b1c9958591e481859191959609a1b604082015260600190565b6020808252600e908201526d109bdc9c9bddc8195b98589b195960921b604082015260600190565b60208082526018908201527f5061737365642064617461206d757374206265206e756c6c0000000000000000604082015260600190565b60208082526028908201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604082015267371034b73a191a9b60c11b606082015260800190565b60208082526024908201527f4d6f64756c65206d75737420626520656e61626c6564206f6e20636f6e74726f604082015263363632b960e11b606082015260800190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b60208082526012908201527110dbdb1b185d195c985b08195b98589b195960721b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602080825260099082015268139bdd08185919195960ba1b604082015260600190565b60208082526010908201526f043616e742064697669646520627920360841b604082015260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561578e57600080fd5b604052919050565b600067ffffffffffffffff8211156157ac578081fd5b5060209081020190565b600067ffffffffffffffff8211156157cc578081fd5b50601f01601f191660200190565b60005b838110156157f55781810151838201526020016157dd565b838111156124f85750506000910152565b6001600160a01b03811681146123ce57600080fd5b80151581146123ce57600080fdfea2646970667358221220dafeaf756108336c3d5aab6994fdb3b30cedf8dfb48ece632eb40e23013f272e64736f6c634300060a0033",
  "linkReferences": {
    "contracts/protocol/integration/lib/Compound.sol": {
      "Compound": [
        {
          "length": 20,
          "start": 2487
        },
        {
          "length": 20,
          "start": 4305
        },
        {
          "length": 20,
          "start": 4936
        },
        {
          "length": 20,
          "start": 5964
        },
        {
          "length": 20,
          "start": 6479
        },
        {
          "length": 20,
          "start": 6813
        },
        {
          "length": 20,
          "start": 11106
        },
        {
          "length": 20,
          "start": 11726
        },
        {
          "length": 20,
          "start": 12603
        },
        {
          "length": 20,
          "start": 12751
        },
        {
          "length": 20,
          "start": 14361
        },
        {
          "length": 20,
          "start": 14456
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/protocol/integration/lib/Compound.sol": {
      "Compound": [
        {
          "length": 20,
          "start": 1384
        },
        {
          "length": 20,
          "start": 3202
        },
        {
          "length": 20,
          "start": 3833
        },
        {
          "length": 20,
          "start": 4861
        },
        {
          "length": 20,
          "start": 5376
        },
        {
          "length": 20,
          "start": 5710
        },
        {
          "length": 20,
          "start": 10003
        },
        {
          "length": 20,
          "start": 10623
        },
        {
          "length": 20,
          "start": 11500
        },
        {
          "length": 20,
          "start": 11648
        },
        {
          "length": 20,
          "start": 13258
        },
        {
          "length": 20,
          "start": 13353
        }
      ]
    }
  }
}
