{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "enum IPolicyPoolConfig.GovernanceActions",
          "name": "action",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "GovernanceAction",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "GUARDIAN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LEVEL1_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LEVEL2_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LEVEL3_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "RM_PROVIDER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "TWEAK_EXPIRATION",
      "outputs": [
        {
          "internalType": "uint40",
          "name": "",
          "type": "uint40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currency",
      "outputs": [
        {
          "internalType": "contract IERC20Metadata",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ensuroFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lossProb",
          "type": "uint256"
        },
        {
          "internalType": "uint40",
          "name": "expiration",
          "type": "uint40"
        }
      ],
      "name": "getMinimumPremium",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastTweak",
      "outputs": [
        {
          "internalType": "uint40",
          "name": "",
          "type": "uint40"
        },
        {
          "internalType": "uint56",
          "name": "",
          "type": "uint56"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxScrPerPolicy",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "moc",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "policyPool",
      "outputs": [
        {
          "internalType": "contract IPolicyPool",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "scrAmount",
          "type": "uint256"
        }
      ],
      "name": "releaseScr",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "scrInterestRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "scrLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "scrPercentage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newEnsuroFee",
          "type": "uint256"
        }
      ],
      "name": "setEnsuroFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newMaxScrPerPolicy",
          "type": "uint256"
        }
      ],
      "name": "setMaxScrPerPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newMoc",
          "type": "uint256"
        }
      ],
      "name": "setMoc",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newScrInterestRate",
          "type": "uint256"
        }
      ],
      "name": "setScrInterestRate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newScrLimit",
          "type": "uint256"
        }
      ],
      "name": "setScrLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newScrPercentage",
          "type": "uint256"
        }
      ],
      "name": "setScrPercentage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "wallet_",
          "type": "address"
        }
      ],
      "name": "setWallet",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalScr",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "wallet",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "allSourcePaths": {
    "10": "contracts/PolicyPoolComponent.sol",
    "12": "contracts/RiskModule.sol",
    "14": "contracts/WadRayMath.sol",
    "31": "interfaces/IAssetManager.sol",
    "32": "interfaces/IEToken.sol",
    "33": "interfaces/IExchange.sol",
    "34": "interfaces/IInsolvencyHook.sol",
    "35": "interfaces/ILPWhitelist.sol",
    "37": "interfaces/IPolicyPool.sol",
    "38": "interfaces/IPolicyPoolComponent.sol",
    "39": "interfaces/IPolicyPoolConfig.sol",
    "40": "interfaces/IRiskModule.sol",
    "67": "node_modules/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol",
    "68": "node_modules/@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol",
    "69": "node_modules/@openzeppelin/contracts-upgradeable/interfaces/draft-IERC1822Upgradeable.sol",
    "7": "contracts/Policy.sol",
    "70": "node_modules/@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol",
    "72": "node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
    "73": "node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol",
    "74": "node_modules/@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol",
    "83": "node_modules/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol",
    "87": "node_modules/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol",
    "88": "node_modules/@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol",
    "98": "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"
  },
  "ast": {
    "absolutePath": "contracts/RiskModule.sol",
    "exportedSymbols": {
      "AccessControlUpgradeable": [
        19470
      ],
      "IPolicyPool": [
        14671
      ],
      "IPolicyPoolConfig": [
        14792
      ],
      "IRiskModule": [
        17857
      ],
      "Policy": [
        5952
      ],
      "PolicyPoolComponent": [
        9172
      ],
      "RiskModule": [
        10806
      ],
      "WadRayMath": [
        11252
      ]
    },
    "id": 10807,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 9969,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "39:23:12"
      },
      {
        "absolutePath": "contracts/WadRayMath.sol",
        "file": "./WadRayMath.sol",
        "id": 9971,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 10807,
        "sourceUnit": 11253,
        "src": "64:44:12",
        "symbolAliases": [
          {
            "foreign": {
              "id": 9970,
              "name": "WadRayMath",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "72:10:12",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol",
        "id": 9973,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 10807,
        "sourceUnit": 19471,
        "src": "109:113:12",
        "symbolAliases": [
          {
            "foreign": {
              "id": 9972,
              "name": "AccessControlUpgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "117:24:12",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "interfaces/IPolicyPool.sol",
        "file": "../interfaces/IPolicyPool.sol",
        "id": 9975,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 10807,
        "sourceUnit": 14672,
        "src": "223:58:12",
        "symbolAliases": [
          {
            "foreign": {
              "id": 9974,
              "name": "IPolicyPool",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "231:11:12",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/PolicyPoolComponent.sol",
        "file": "./PolicyPoolComponent.sol",
        "id": 9977,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 10807,
        "sourceUnit": 9173,
        "src": "282:62:12",
        "symbolAliases": [
          {
            "foreign": {
              "id": 9976,
              "name": "PolicyPoolComponent",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "290:19:12",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "interfaces/IRiskModule.sol",
        "file": "../interfaces/IRiskModule.sol",
        "id": 9979,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 10807,
        "sourceUnit": 17858,
        "src": "345:58:12",
        "symbolAliases": [
          {
            "foreign": {
              "id": 9978,
              "name": "IRiskModule",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "353:11:12",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "interfaces/IPolicyPoolConfig.sol",
        "file": "../interfaces/IPolicyPoolConfig.sol",
        "id": 9981,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 10807,
        "sourceUnit": 14793,
        "src": "404:70:12",
        "symbolAliases": [
          {
            "foreign": {
              "id": 9980,
              "name": "IPolicyPoolConfig",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "412:17:12",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/Policy.sol",
        "file": "./Policy.sol",
        "id": 9983,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 10807,
        "sourceUnit": 5953,
        "src": "475:36:12",
        "symbolAliases": [
          {
            "foreign": {
              "id": 9982,
              "name": "Policy",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "483:6:12",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 9985,
              "name": "IRiskModule",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 17857,
              "src": "763:11:12"
            },
            "id": 9986,
            "nodeType": "InheritanceSpecifier",
            "src": "763:11:12"
          },
          {
            "baseName": {
              "id": 9987,
              "name": "AccessControlUpgradeable",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 19470,
              "src": "776:24:12"
            },
            "id": 9988,
            "nodeType": "InheritanceSpecifier",
            "src": "776:24:12"
          },
          {
            "baseName": {
              "id": 9989,
              "name": "PolicyPoolComponent",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 9172,
              "src": "802:19:12"
            },
            "id": 9990,
            "nodeType": "InheritanceSpecifier",
            "src": "802:19:12"
          }
        ],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 9984,
          "nodeType": "StructuredDocumentation",
          "src": "513:217:12",
          "text": " @title Ensuro Risk Module base contract\n @dev Risk Module that keeps the configuration and is responsible for pricing and policy resolution\n @custom:security-contact security@ensuro.co\n @author Ensuro"
        },
        "fullyImplemented": true,
        "id": 10806,
        "linearizedBaseContracts": [
          10806,
          9172,
          19141,
          18122,
          19470,
          26312,
          27269,
          26397,
          26020,
          18011,
          25978,
          25609,
          19544,
          17857
        ],
        "name": "RiskModule",
        "nameLocation": "749:10:12",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 9994,
            "libraryName": {
              "id": 9991,
              "name": "Policy",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 5952,
              "src": "832:6:12"
            },
            "nodeType": "UsingForDirective",
            "src": "826:35:12",
            "typeName": {
              "id": 9993,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 9992,
                "name": "Policy.PolicyData",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 5686,
                "src": "843:17:12"
              },
              "referencedDeclaration": 5686,
              "src": "843:17:12",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_PolicyData_$5686_storage_ptr",
                "typeString": "struct Policy.PolicyData"
              }
            }
          },
          {
            "id": 9997,
            "libraryName": {
              "id": 9995,
              "name": "WadRayMath",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 11252,
              "src": "870:10:12"
            },
            "nodeType": "UsingForDirective",
            "src": "864:29:12",
            "typeName": {
              "id": 9996,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "885:7:12",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "id": 10000,
            "mutability": "constant",
            "name": "SECONDS_IN_YEAR_RAY",
            "nameLocation": "923:19:12",
            "nodeType": "VariableDeclaration",
            "scope": 10806,
            "src": "897:59:12",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 9998,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "897:7:12",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "3331353336303030653237",
              "id": 9999,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "945:11:12",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_31536000000000000000000000000000000_by_1",
                "typeString": "int_const 3153...(27 digits omitted)...0000"
              },
              "value": "31536000e27"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "functionSelector": "a9a24f27",
            "id": 10005,
            "mutability": "constant",
            "name": "RM_PROVIDER_ROLE",
            "nameLocation": "1083:16:12",
            "nodeType": "VariableDeclaration",
            "scope": 10806,
            "src": "1059:72:12",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 10001,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1059:7:12",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "524d5f50524f56494445525f524f4c45",
                  "id": 10003,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1112:18:12",
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_0df0a8869cf58168a14cd7ac426ff1b8c6ff5d5c800c6f44803f3431dcb3bad1",
                    "typeString": "literal_string \"RM_PROVIDER_ROLE\""
                  },
                  "value": "RM_PROVIDER_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_0df0a8869cf58168a14cd7ac426ff1b8c6ff5d5c800c6f44803f3431dcb3bad1",
                    "typeString": "literal_string \"RM_PROVIDER_ROLE\""
                  }
                ],
                "id": 10002,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": -8,
                "src": "1102:9:12",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 10004,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1102:29:12",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 10007,
            "mutability": "mutable",
            "name": "_name",
            "nameLocation": "1151:5:12",
            "nodeType": "VariableDeclaration",
            "scope": 10806,
            "src": "1136:20:12",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 10006,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1136:6:12",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 10009,
            "mutability": "mutable",
            "name": "_scrPercentage",
            "nameLocation": "1177:14:12",
            "nodeType": "VariableDeclaration",
            "scope": 10806,
            "src": "1160:31:12",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 10008,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1160:7:12",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 10011,
            "mutability": "mutable",
            "name": "_moc",
            "nameLocation": "1330:4:12",
            "nodeType": "VariableDeclaration",
            "scope": 10806,
            "src": "1313:21:12",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 10010,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1313:7:12",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 10013,
            "mutability": "mutable",
            "name": "_ensuroFee",
            "nameLocation": "1456:10:12",
            "nodeType": "VariableDeclaration",
            "scope": 10806,
            "src": "1439:27:12",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 10012,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1439:7:12",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 10015,
            "mutability": "mutable",
            "name": "_scrInterestRate",
            "nameLocation": "1550:16:12",
            "nodeType": "VariableDeclaration",
            "scope": 10806,
            "src": "1533:33:12",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 10014,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1533:7:12",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 10017,
            "mutability": "mutable",
            "name": "_maxScrPerPolicy",
            "nameLocation": "1635:16:12",
            "nodeType": "VariableDeclaration",
            "scope": 10806,
            "src": "1618:33:12",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 10016,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1618:7:12",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 10019,
            "mutability": "mutable",
            "name": "_scrLimit",
            "nameLocation": "1703:9:12",
            "nodeType": "VariableDeclaration",
            "scope": 10806,
            "src": "1686:26:12",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 10018,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1686:7:12",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 10021,
            "mutability": "mutable",
            "name": "_totalScr",
            "nameLocation": "1784:9:12",
            "nodeType": "VariableDeclaration",
            "scope": 10806,
            "src": "1767:26:12",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 10020,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1767:7:12",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 10023,
            "mutability": "mutable",
            "name": "_wallet",
            "nameLocation": "1864:7:12",
            "nodeType": "VariableDeclaration",
            "scope": 10806,
            "src": "1847:24:12",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 10022,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1847:7:12",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10033,
              "nodeType": "Block",
              "src": "2082:2:12",
              "statements": []
            },
            "documentation": {
              "id": 10024,
              "nodeType": "StructuredDocumentation",
              "src": "1914:48:12",
              "text": "@custom:oz-upgrades-unsafe-allow constructor"
            },
            "id": 10034,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 10030,
                    "name": "policyPool_",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10027,
                    "src": "2069:11:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                      "typeString": "contract IPolicyPool"
                    }
                  }
                ],
                "id": 10031,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 10029,
                  "name": "PolicyPoolComponent",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9172,
                  "src": "2049:19:12"
                },
                "nodeType": "ModifierInvocation",
                "src": "2049:32:12"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10028,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10027,
                  "mutability": "mutable",
                  "name": "policyPool_",
                  "nameLocation": "2036:11:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10034,
                  "src": "2024:23:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                    "typeString": "contract IPolicyPool"
                  },
                  "typeName": {
                    "id": 10026,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 10025,
                      "name": "IPolicyPool",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 14671,
                      "src": "2024:11:12"
                    },
                    "referencedDeclaration": 14671,
                    "src": "2024:11:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                      "typeString": "contract IPolicyPool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2023:25:12"
            },
            "returnParameters": {
              "id": 10032,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2082:0:12"
            },
            "scope": 10806,
            "src": "2012:72:12",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10070,
              "nodeType": "Block",
              "src": "2986:239:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 10054,
                      "name": "__AccessControl_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19163,
                      "src": "2992:20:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 10055,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2992:22:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10056,
                  "nodeType": "ExpressionStatement",
                  "src": "2992:22:12"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 10057,
                      "name": "__PolicyPoolComponent_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8866,
                      "src": "3020:26:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 10058,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3020:28:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10059,
                  "nodeType": "ExpressionStatement",
                  "src": "3020:28:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 10061,
                        "name": "name_",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10037,
                        "src": "3089:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "id": 10062,
                        "name": "scrPercentage_",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10039,
                        "src": "3102:14:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 10063,
                        "name": "ensuroFee_",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10041,
                        "src": "3124:10:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 10064,
                        "name": "scrInterestRate_",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10043,
                        "src": "3142:16:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 10065,
                        "name": "maxScrPerPolicy_",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10045,
                        "src": "3166:16:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 10066,
                        "name": "scrLimit_",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10047,
                        "src": "3190:9:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 10067,
                        "name": "wallet_",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10049,
                        "src": "3207:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 10060,
                      "name": "__RiskModule_init_unchained",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10137,
                      "src": "3054:27:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (string memory,uint256,uint256,uint256,uint256,uint256,address)"
                      }
                    },
                    "id": 10068,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3054:166:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10069,
                  "nodeType": "ExpressionStatement",
                  "src": "3054:166:12"
                }
              ]
            },
            "documentation": {
              "id": 10035,
              "nodeType": "StructuredDocumentation",
              "src": "2088:611:12",
              "text": " @dev Initializes the RiskModule\n @param name_ Name of the Risk Module\n @param scrPercentage_ Solvency Capital Requirement percentage, to calculate\ncapital requirement as % of (payout - premium)  (in ray)\n @param ensuroFee_ % of pure premium that will go for Ensuro treasury (in ray)\n @param scrInterestRate_ % of interest to charge for the SCR (in ray)\n @param maxScrPerPolicy_ Max SCR to be allocated to this module (in wad)\n @param scrLimit_ Max SCR to be allocated to this module (in wad)\n @param wallet_ Address of the RiskModule provider"
            },
            "id": 10071,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 10052,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 10051,
                  "name": "initializer",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 19518,
                  "src": "2974:11:12"
                },
                "nodeType": "ModifierInvocation",
                "src": "2974:11:12"
              }
            ],
            "name": "__RiskModule_init",
            "nameLocation": "2762:17:12",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10050,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10037,
                  "mutability": "mutable",
                  "name": "name_",
                  "nameLocation": "2799:5:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10071,
                  "src": "2785:19:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 10036,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2785:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10039,
                  "mutability": "mutable",
                  "name": "scrPercentage_",
                  "nameLocation": "2818:14:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10071,
                  "src": "2810:22:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10038,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2810:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10041,
                  "mutability": "mutable",
                  "name": "ensuroFee_",
                  "nameLocation": "2846:10:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10071,
                  "src": "2838:18:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10040,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2838:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10043,
                  "mutability": "mutable",
                  "name": "scrInterestRate_",
                  "nameLocation": "2870:16:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10071,
                  "src": "2862:24:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10042,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2862:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10045,
                  "mutability": "mutable",
                  "name": "maxScrPerPolicy_",
                  "nameLocation": "2900:16:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10071,
                  "src": "2892:24:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10044,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2892:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10047,
                  "mutability": "mutable",
                  "name": "scrLimit_",
                  "nameLocation": "2930:9:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10071,
                  "src": "2922:17:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10046,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2922:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10049,
                  "mutability": "mutable",
                  "name": "wallet_",
                  "nameLocation": "2953:7:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10071,
                  "src": "2945:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10048,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2945:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2779:185:12"
            },
            "returnParameters": {
              "id": 10053,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2986:0:12"
            },
            "scope": 10806,
            "src": "2753:472:12",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10136,
              "nodeType": "Block",
              "src": "3523:345:12",
              "statements": [
                {
                  "expression": {
                    "id": 10092,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 10090,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10007,
                      "src": "3529:5:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 10091,
                      "name": "name_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10073,
                      "src": "3537:5:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "3529:13:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 10093,
                  "nodeType": "ExpressionStatement",
                  "src": "3529:13:12"
                },
                {
                  "expression": {
                    "id": 10096,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 10094,
                      "name": "_scrPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10009,
                      "src": "3548:14:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 10095,
                      "name": "scrPercentage_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10075,
                      "src": "3565:14:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3548:31:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 10097,
                  "nodeType": "ExpressionStatement",
                  "src": "3548:31:12"
                },
                {
                  "expression": {
                    "id": 10101,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 10098,
                      "name": "_moc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10011,
                      "src": "3585:4:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 10099,
                        "name": "WadRayMath",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11252,
                        "src": "3592:10:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_WadRayMath_$11252_$",
                          "typeString": "type(library WadRayMath)"
                        }
                      },
                      "id": 10100,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "RAY",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10957,
                      "src": "3592:14:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3585:21:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 10102,
                  "nodeType": "ExpressionStatement",
                  "src": "3585:21:12"
                },
                {
                  "expression": {
                    "id": 10105,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 10103,
                      "name": "_ensuroFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10013,
                      "src": "3612:10:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 10104,
                      "name": "ensuroFee_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10077,
                      "src": "3625:10:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3612:23:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 10106,
                  "nodeType": "ExpressionStatement",
                  "src": "3612:23:12"
                },
                {
                  "expression": {
                    "id": 10109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 10107,
                      "name": "_scrInterestRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10015,
                      "src": "3641:16:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 10108,
                      "name": "scrInterestRate_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10079,
                      "src": "3660:16:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3641:35:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 10110,
                  "nodeType": "ExpressionStatement",
                  "src": "3641:35:12"
                },
                {
                  "expression": {
                    "id": 10113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 10111,
                      "name": "_maxScrPerPolicy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10017,
                      "src": "3682:16:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 10112,
                      "name": "maxScrPerPolicy_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10081,
                      "src": "3701:16:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3682:35:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 10114,
                  "nodeType": "ExpressionStatement",
                  "src": "3682:35:12"
                },
                {
                  "expression": {
                    "id": 10117,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 10115,
                      "name": "_scrLimit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10019,
                      "src": "3723:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 10116,
                      "name": "scrLimit_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10083,
                      "src": "3735:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3723:21:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 10118,
                  "nodeType": "ExpressionStatement",
                  "src": "3723:21:12"
                },
                {
                  "expression": {
                    "id": 10121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 10119,
                      "name": "_totalScr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10021,
                      "src": "3750:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 10120,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3762:1:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3750:13:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 10122,
                  "nodeType": "ExpressionStatement",
                  "src": "3750:13:12"
                },
                {
                  "expression": {
                    "id": 10125,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 10123,
                      "name": "_wallet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10023,
                      "src": "3769:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 10124,
                      "name": "wallet_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10085,
                      "src": "3779:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3769:17:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 10126,
                  "nodeType": "ExpressionStatement",
                  "src": "3769:17:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 10128,
                        "name": "DEFAULT_ADMIN_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19184,
                        "src": "3803:18:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 10129,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 26005,
                          "src": "3823:10:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 10130,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3823:12:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 10127,
                      "name": "_setupRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19373,
                      "src": "3792:10:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 10131,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3792:44:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10132,
                  "nodeType": "ExpressionStatement",
                  "src": "3792:44:12"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 10133,
                      "name": "_validateParameters",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        10206
                      ],
                      "referencedDeclaration": 10206,
                      "src": "3842:19:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$__$",
                        "typeString": "function () view"
                      }
                    },
                    "id": 10134,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3842:21:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10135,
                  "nodeType": "ExpressionStatement",
                  "src": "3842:21:12"
                }
              ]
            },
            "id": 10137,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 10088,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 10087,
                  "name": "initializer",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 19518,
                  "src": "3511:11:12"
                },
                "nodeType": "ModifierInvocation",
                "src": "3511:11:12"
              }
            ],
            "name": "__RiskModule_init_unchained",
            "nameLocation": "3289:27:12",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10086,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10073,
                  "mutability": "mutable",
                  "name": "name_",
                  "nameLocation": "3336:5:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10137,
                  "src": "3322:19:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 10072,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3322:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10075,
                  "mutability": "mutable",
                  "name": "scrPercentage_",
                  "nameLocation": "3355:14:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10137,
                  "src": "3347:22:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10074,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3347:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10077,
                  "mutability": "mutable",
                  "name": "ensuroFee_",
                  "nameLocation": "3383:10:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10137,
                  "src": "3375:18:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10076,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3375:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10079,
                  "mutability": "mutable",
                  "name": "scrInterestRate_",
                  "nameLocation": "3407:16:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10137,
                  "src": "3399:24:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10078,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3399:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10081,
                  "mutability": "mutable",
                  "name": "maxScrPerPolicy_",
                  "nameLocation": "3437:16:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10137,
                  "src": "3429:24:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10080,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3429:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10083,
                  "mutability": "mutable",
                  "name": "scrLimit_",
                  "nameLocation": "3467:9:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10137,
                  "src": "3459:17:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10082,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3459:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10085,
                  "mutability": "mutable",
                  "name": "wallet_",
                  "nameLocation": "3490:7:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10137,
                  "src": "3482:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10084,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3482:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3316:185:12"
            },
            "returnParameters": {
              "id": 10089,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3523:0:12"
            },
            "scope": 10806,
            "src": "3280:588:12",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              9062
            ],
            "body": {
              "id": 10205,
              "nodeType": "Block",
              "src": "3972:653:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10149,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10145,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 10142,
                            "name": "_scrPercentage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10009,
                            "src": "3993:14:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "expression": {
                              "id": 10143,
                              "name": "WadRayMath",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11252,
                              "src": "4011:10:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_WadRayMath_$11252_$",
                                "typeString": "type(library WadRayMath)"
                              }
                            },
                            "id": 10144,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "RAY",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 10957,
                            "src": "4011:14:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3993:32:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10148,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 10146,
                            "name": "_scrPercentage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10009,
                            "src": "4029:14:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 10147,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4046:1:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "4029:18:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3993:54:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "56616c69646174696f6e3a2073637250657263656e74616765206d757374206265203c3d31",
                        "id": 10150,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4055:39:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a61ca870a257b48b3be0c77e282660568e89a231c2dd96a8d25696d600be1daa",
                          "typeString": "literal_string \"Validation: scrPercentage must be <=1\""
                        },
                        "value": "Validation: scrPercentage must be <=1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a61ca870a257b48b3be0c77e282660568e89a231c2dd96a8d25696d600be1daa",
                          "typeString": "literal_string \"Validation: scrPercentage must be <=1\""
                        }
                      ],
                      "id": 10141,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3978:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3978:122:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10152,
                  "nodeType": "ExpressionStatement",
                  "src": "3978:122:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10168,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10160,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 10154,
                            "name": "_moc",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10011,
                            "src": "4121:4:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 10158,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 10155,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4130:1:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "expression": {
                                    "id": 10156,
                                    "name": "WadRayMath",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11252,
                                    "src": "4134:10:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_WadRayMath_$11252_$",
                                      "typeString": "type(library WadRayMath)"
                                    }
                                  },
                                  "id": 10157,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "RAY",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 10957,
                                  "src": "4134:14:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4130:18:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 10159,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "4129:20:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4121:28:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10167,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 10161,
                            "name": "_moc",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10011,
                            "src": "4153:4:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 10165,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 10162,
                                    "name": "WadRayMath",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11252,
                                    "src": "4162:10:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_WadRayMath_$11252_$",
                                      "typeString": "type(library WadRayMath)"
                                    }
                                  },
                                  "id": 10163,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "RAY",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 10957,
                                  "src": "4162:14:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "hexValue": "32",
                                  "id": 10164,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4179:1:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "4162:18:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 10166,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "4161:20:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4153:28:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "4121:60:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "56616c69646174696f6e3a206d6f63206d757374206265205b302e352c20325d",
                        "id": 10169,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4189:34:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_70315ee4572bddc3d2aedbdde6541e0b2ce96340ccb0a51ec6bf2a5405eb95f2",
                          "typeString": "literal_string \"Validation: moc must be [0.5, 2]\""
                        },
                        "value": "Validation: moc must be [0.5, 2]"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_70315ee4572bddc3d2aedbdde6541e0b2ce96340ccb0a51ec6bf2a5405eb95f2",
                          "typeString": "literal_string \"Validation: moc must be [0.5, 2]\""
                        }
                      ],
                      "id": 10153,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4106:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10170,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4106:123:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10171,
                  "nodeType": "ExpressionStatement",
                  "src": "4106:123:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 10176,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 10173,
                          "name": "_ensuroFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10013,
                          "src": "4243:10:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "expression": {
                            "id": 10174,
                            "name": "WadRayMath",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11252,
                            "src": "4257:10:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_WadRayMath_$11252_$",
                              "typeString": "type(library WadRayMath)"
                            }
                          },
                          "id": 10175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "RAY",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10957,
                          "src": "4257:14:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4243:28:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "56616c69646174696f6e3a20656e7375726f466565206d757374206265203c3d2031",
                        "id": 10177,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4273:36:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4b43a8152ae72511057e6c0fd388ed10125d056c362fcdc1dc6596fc28c741f0",
                          "typeString": "literal_string \"Validation: ensuroFee must be <= 1\""
                        },
                        "value": "Validation: ensuroFee must be <= 1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4b43a8152ae72511057e6c0fd388ed10125d056c362fcdc1dc6596fc28c741f0",
                          "typeString": "literal_string \"Validation: ensuroFee must be <= 1\""
                        }
                      ],
                      "id": 10172,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4235:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4235:75:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10179,
                  "nodeType": "ExpressionStatement",
                  "src": "4235:75:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 10184,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 10181,
                          "name": "_scrInterestRate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10015,
                          "src": "4324:16:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "expression": {
                            "id": 10182,
                            "name": "WadRayMath",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11252,
                            "src": "4344:10:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_WadRayMath_$11252_$",
                              "typeString": "type(library WadRayMath)"
                            }
                          },
                          "id": 10183,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "RAY",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10957,
                          "src": "4344:14:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4324:34:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "56616c69646174696f6e3a20736372496e74657265737452617465206d757374206265203c3d203120283130302529",
                        "id": 10185,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4360:49:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b62967c79cd25f1fe0033a734b0e18a25def46863cd398fbaec167ae1dc1063",
                          "typeString": "literal_string \"Validation: scrInterestRate must be <= 1 (100%)\""
                        },
                        "value": "Validation: scrInterestRate must be <= 1 (100%)"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b62967c79cd25f1fe0033a734b0e18a25def46863cd398fbaec167ae1dc1063",
                          "typeString": "literal_string \"Validation: scrInterestRate must be <= 1 (100%)\""
                        }
                      ],
                      "id": 10180,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4316:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10186,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4316:94:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10187,
                  "nodeType": "ExpressionStatement",
                  "src": "4316:94:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 10191,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 10189,
                          "name": "_scrLimit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10019,
                          "src": "4458:9:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 10190,
                          "name": "_totalScr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10021,
                          "src": "4471:9:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4458:22:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "56616c69646174696f6e3a207363724c696d69742063616e2774206265206c657373207468616e2061637475616c20746f74616c536372",
                        "id": 10192,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4482:57:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fa799b49e7b655f5dce009c1a9421aba6e3e1078d80f8322488106822422b13c",
                          "typeString": "literal_string \"Validation: scrLimit can't be less than actual totalScr\""
                        },
                        "value": "Validation: scrLimit can't be less than actual totalScr"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fa799b49e7b655f5dce009c1a9421aba6e3e1078d80f8322488106822422b13c",
                          "typeString": "literal_string \"Validation: scrLimit can't be less than actual totalScr\""
                        }
                      ],
                      "id": 10188,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4450:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10193,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4450:90:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10194,
                  "nodeType": "ExpressionStatement",
                  "src": "4450:90:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 10201,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 10196,
                          "name": "_wallet",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10023,
                          "src": "4554:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 10199,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4573:1:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 10198,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4565:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 10197,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4565:7:12",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 10200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4565:10:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "4554:21:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "56616c69646174696f6e3a2057616c6c65742063616e2774206265207a65726f2061646472657373",
                        "id": 10202,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4577:42:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_941d886a2afe50fca8ee3c91e4017ea92767bd6a275d49707c09282e859d8c4f",
                          "typeString": "literal_string \"Validation: Wallet can't be zero address\""
                        },
                        "value": "Validation: Wallet can't be zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_941d886a2afe50fca8ee3c91e4017ea92767bd6a275d49707c09282e859d8c4f",
                          "typeString": "literal_string \"Validation: Wallet can't be zero address\""
                        }
                      ],
                      "id": 10195,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4546:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10203,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4546:74:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10204,
                  "nodeType": "ExpressionStatement",
                  "src": "4546:74:12"
                }
              ]
            },
            "id": 10206,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_validateParameters",
            "nameLocation": "3927:19:12",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 10139,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3963:8:12"
            },
            "parameters": {
              "id": 10138,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3946:2:12"
            },
            "returnParameters": {
              "id": 10140,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3972:0:12"
            },
            "scope": 10806,
            "src": "3918:707:12",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              17811
            ],
            "body": {
              "id": 10214,
              "nodeType": "Block",
              "src": "4690:23:12",
              "statements": [
                {
                  "expression": {
                    "id": 10212,
                    "name": "_name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10007,
                    "src": "4703:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 10211,
                  "id": 10213,
                  "nodeType": "Return",
                  "src": "4696:12:12"
                }
              ]
            },
            "functionSelector": "06fdde03",
            "id": 10215,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "name",
            "nameLocation": "4638:4:12",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 10208,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4657:8:12"
            },
            "parameters": {
              "id": 10207,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4642:2:12"
            },
            "returnParameters": {
              "id": 10211,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10210,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 10215,
                  "src": "4675:13:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 10209,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4675:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4674:15:12"
            },
            "scope": 10806,
            "src": "4629:84:12",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              17816
            ],
            "body": {
              "id": 10223,
              "nodeType": "Block",
              "src": "4781:32:12",
              "statements": [
                {
                  "expression": {
                    "id": 10221,
                    "name": "_scrPercentage",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10009,
                    "src": "4794:14:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10220,
                  "id": 10222,
                  "nodeType": "Return",
                  "src": "4787:21:12"
                }
              ]
            },
            "functionSelector": "bf8e934d",
            "id": 10224,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "scrPercentage",
            "nameLocation": "4726:13:12",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 10217,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4754:8:12"
            },
            "parameters": {
              "id": 10216,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4739:2:12"
            },
            "returnParameters": {
              "id": 10220,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10219,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 10224,
                  "src": "4772:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10218,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4772:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4771:9:12"
            },
            "scope": 10806,
            "src": "4717:96:12",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              17821
            ],
            "body": {
              "id": 10232,
              "nodeType": "Block",
              "src": "4871:22:12",
              "statements": [
                {
                  "expression": {
                    "id": 10230,
                    "name": "_moc",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10011,
                    "src": "4884:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10229,
                  "id": 10231,
                  "nodeType": "Return",
                  "src": "4877:11:12"
                }
              ]
            },
            "functionSelector": "53428253",
            "id": 10233,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "moc",
            "nameLocation": "4826:3:12",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 10226,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4844:8:12"
            },
            "parameters": {
              "id": 10225,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4829:2:12"
            },
            "returnParameters": {
              "id": 10229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10228,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 10233,
                  "src": "4862:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10227,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4862:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4861:9:12"
            },
            "scope": 10806,
            "src": "4817:76:12",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              17826
            ],
            "body": {
              "id": 10241,
              "nodeType": "Block",
              "src": "4957:28:12",
              "statements": [
                {
                  "expression": {
                    "id": 10239,
                    "name": "_ensuroFee",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10013,
                    "src": "4970:10:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10238,
                  "id": 10240,
                  "nodeType": "Return",
                  "src": "4963:17:12"
                }
              ]
            },
            "functionSelector": "d44499a8",
            "id": 10242,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ensuroFee",
            "nameLocation": "4906:9:12",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 10235,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4930:8:12"
            },
            "parameters": {
              "id": 10234,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4915:2:12"
            },
            "returnParameters": {
              "id": 10238,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10237,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 10242,
                  "src": "4948:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10236,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4948:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4947:9:12"
            },
            "scope": 10806,
            "src": "4897:88:12",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              17831
            ],
            "body": {
              "id": 10250,
              "nodeType": "Block",
              "src": "5055:34:12",
              "statements": [
                {
                  "expression": {
                    "id": 10248,
                    "name": "_scrInterestRate",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10015,
                    "src": "5068:16:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10247,
                  "id": 10249,
                  "nodeType": "Return",
                  "src": "5061:23:12"
                }
              ]
            },
            "functionSelector": "9d90724d",
            "id": 10251,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "scrInterestRate",
            "nameLocation": "4998:15:12",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 10244,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5028:8:12"
            },
            "parameters": {
              "id": 10243,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5013:2:12"
            },
            "returnParameters": {
              "id": 10247,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10246,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 10251,
                  "src": "5046:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10245,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5046:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5045:9:12"
            },
            "scope": 10806,
            "src": "4989:100:12",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              17836
            ],
            "body": {
              "id": 10259,
              "nodeType": "Block",
              "src": "5159:34:12",
              "statements": [
                {
                  "expression": {
                    "id": 10257,
                    "name": "_maxScrPerPolicy",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10017,
                    "src": "5172:16:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10256,
                  "id": 10258,
                  "nodeType": "Return",
                  "src": "5165:23:12"
                }
              ]
            },
            "functionSelector": "5d505fe7",
            "id": 10260,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "maxScrPerPolicy",
            "nameLocation": "5102:15:12",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 10253,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5132:8:12"
            },
            "parameters": {
              "id": 10252,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5117:2:12"
            },
            "returnParameters": {
              "id": 10256,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10255,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 10260,
                  "src": "5150:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10254,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5150:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5149:9:12"
            },
            "scope": 10806,
            "src": "5093:100:12",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              17841
            ],
            "body": {
              "id": 10268,
              "nodeType": "Block",
              "src": "5256:27:12",
              "statements": [
                {
                  "expression": {
                    "id": 10266,
                    "name": "_scrLimit",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10019,
                    "src": "5269:9:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10265,
                  "id": 10267,
                  "nodeType": "Return",
                  "src": "5262:16:12"
                }
              ]
            },
            "functionSelector": "41ea6a0f",
            "id": 10269,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "scrLimit",
            "nameLocation": "5206:8:12",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 10262,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5229:8:12"
            },
            "parameters": {
              "id": 10261,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5214:2:12"
            },
            "returnParameters": {
              "id": 10265,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10264,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 10269,
                  "src": "5247:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10263,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5247:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5246:9:12"
            },
            "scope": 10806,
            "src": "5197:86:12",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              17846
            ],
            "body": {
              "id": 10277,
              "nodeType": "Block",
              "src": "5346:27:12",
              "statements": [
                {
                  "expression": {
                    "id": 10275,
                    "name": "_totalScr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10021,
                    "src": "5359:9:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10274,
                  "id": 10276,
                  "nodeType": "Return",
                  "src": "5352:16:12"
                }
              ]
            },
            "functionSelector": "ca996de3",
            "id": 10278,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalScr",
            "nameLocation": "5296:8:12",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 10271,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5319:8:12"
            },
            "parameters": {
              "id": 10270,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5304:2:12"
            },
            "returnParameters": {
              "id": 10274,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10273,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 10278,
                  "src": "5337:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10272,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5337:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5336:9:12"
            },
            "scope": 10806,
            "src": "5287:86:12",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              17851
            ],
            "body": {
              "id": 10286,
              "nodeType": "Block",
              "src": "5434:25:12",
              "statements": [
                {
                  "expression": {
                    "id": 10284,
                    "name": "_wallet",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10023,
                    "src": "5447:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 10283,
                  "id": 10285,
                  "nodeType": "Return",
                  "src": "5440:14:12"
                }
              ]
            },
            "functionSelector": "521eb273",
            "id": 10287,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "wallet",
            "nameLocation": "5386:6:12",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 10280,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5407:8:12"
            },
            "parameters": {
              "id": 10279,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5392:2:12"
            },
            "returnParameters": {
              "id": 10283,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10282,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 10287,
                  "src": "5425:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10281,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5425:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5424:9:12"
            },
            "scope": 10806,
            "src": "5377:82:12",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10327,
              "nodeType": "Block",
              "src": "5574:363:12",
              "statements": [
                {
                  "assignments": [
                    10297
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10297,
                      "mutability": "mutable",
                      "name": "tweak",
                      "nameLocation": "5585:5:12",
                      "nodeType": "VariableDeclaration",
                      "scope": 10327,
                      "src": "5580:10:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 10296,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "5580:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 10302,
                  "initialValue": {
                    "id": 10301,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "5593:25:12",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 10299,
                          "name": "LEVEL2_ROLE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8742,
                          "src": "5606:11:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 10298,
                        "name": "hasPoolRole",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8936,
                        "src": "5594:11:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (bytes32) view returns (bool)"
                        }
                      },
                      "id": 10300,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5594:24:12",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5580:38:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10311,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 10305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "5639:6:12",
                          "subExpression": {
                            "id": 10304,
                            "name": "tweak",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10297,
                            "src": "5640:5:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 10307,
                              "name": "_scrPercentage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10009,
                              "src": "5661:14:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 10308,
                              "name": "newScrPercentage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10289,
                              "src": "5677:16:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "31653236",
                              "id": 10309,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5695:4:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_100000000000000000000000000_by_1",
                                "typeString": "int_const 100000000000000000000000000"
                              },
                              "value": "1e26"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_100000000000000000000000000_by_1",
                                "typeString": "int_const 100000000000000000000000000"
                              }
                            ],
                            "id": 10306,
                            "name": "_isTweakRay",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8997,
                            "src": "5649:11:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                            }
                          },
                          "id": 10310,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5649:51:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5639:61:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "547765616b2065786365656465643a2073637250657263656e7461676520747765616b73206f6e6c7920757020746f20313025",
                        "id": 10312,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5708:53:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3663797364e7197bb594f6e199c70c3049f564a1dc15ff1288ac7c6c0ddbd45a",
                          "typeString": "literal_string \"Tweak exceeded: scrPercentage tweaks only up to 10%\""
                        },
                        "value": "Tweak exceeded: scrPercentage tweaks only up to 10%"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3663797364e7197bb594f6e199c70c3049f564a1dc15ff1288ac7c6c0ddbd45a",
                          "typeString": "literal_string \"Tweak exceeded: scrPercentage tweaks only up to 10%\""
                        }
                      ],
                      "id": 10303,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5624:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10313,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5624:143:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10314,
                  "nodeType": "ExpressionStatement",
                  "src": "5624:143:12"
                },
                {
                  "expression": {
                    "id": 10317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 10315,
                      "name": "_scrPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10009,
                      "src": "5773:14:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 10316,
                      "name": "newScrPercentage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10289,
                      "src": "5790:16:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5773:33:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 10318,
                  "nodeType": "ExpressionStatement",
                  "src": "5773:33:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "expression": {
                            "id": 10320,
                            "name": "IPolicyPoolConfig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14792,
                            "src": "5837:17:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IPolicyPoolConfig_$14792_$",
                              "typeString": "type(contract IPolicyPoolConfig)"
                            }
                          },
                          "id": 10321,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "GovernanceActions",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14718,
                          "src": "5837:35:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_GovernanceActions_$14718_$",
                            "typeString": "type(enum IPolicyPoolConfig.GovernanceActions)"
                          }
                        },
                        "id": 10322,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "setScrPercentage",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14696,
                        "src": "5837:52:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_GovernanceActions_$14718",
                          "typeString": "enum IPolicyPoolConfig.GovernanceActions"
                        }
                      },
                      {
                        "id": 10323,
                        "name": "newScrPercentage",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10289,
                        "src": "5897:16:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 10324,
                        "name": "tweak",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10297,
                        "src": "5921:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_GovernanceActions_$14718",
                          "typeString": "enum IPolicyPoolConfig.GovernanceActions"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 10319,
                      "name": "_parameterChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9087,
                      "src": "5812:17:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_GovernanceActions_$14718_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (enum IPolicyPoolConfig.GovernanceActions,uint256,bool)"
                      }
                    },
                    "id": 10325,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5812:120:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10326,
                  "nodeType": "ExpressionStatement",
                  "src": "5812:120:12"
                }
              ]
            },
            "functionSelector": "e61735c0",
            "id": 10328,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 10292,
                    "name": "LEVEL2_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8742,
                    "src": "5546:11:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "id": 10293,
                    "name": "LEVEL3_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8747,
                    "src": "5559:11:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 10294,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 10291,
                  "name": "onlyPoolRole2",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8826,
                  "src": "5532:13:12"
                },
                "nodeType": "ModifierInvocation",
                "src": "5532:39:12"
              }
            ],
            "name": "setScrPercentage",
            "nameLocation": "5472:16:12",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10290,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10289,
                  "mutability": "mutable",
                  "name": "newScrPercentage",
                  "nameLocation": "5497:16:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10328,
                  "src": "5489:24:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10288,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5489:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5488:26:12"
            },
            "returnParameters": {
              "id": 10295,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5574:0:12"
            },
            "scope": 10806,
            "src": "5463:474:12",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 10368,
              "nodeType": "Block",
              "src": "6022:251:12",
              "statements": [
                {
                  "assignments": [
                    10338
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10338,
                      "mutability": "mutable",
                      "name": "tweak",
                      "nameLocation": "6033:5:12",
                      "nodeType": "VariableDeclaration",
                      "scope": 10368,
                      "src": "6028:10:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 10337,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "6028:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 10343,
                  "initialValue": {
                    "id": 10342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "6041:25:12",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 10340,
                          "name": "LEVEL2_ROLE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8742,
                          "src": "6054:11:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 10339,
                        "name": "hasPoolRole",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8936,
                        "src": "6042:11:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (bytes32) view returns (bool)"
                        }
                      },
                      "id": 10341,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6042:24:12",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6028:38:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10352,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 10346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "6080:6:12",
                          "subExpression": {
                            "id": 10345,
                            "name": "tweak",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10338,
                            "src": "6081:5:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 10348,
                              "name": "_moc",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10011,
                              "src": "6102:4:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 10349,
                              "name": "newMoc",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10330,
                              "src": "6108:6:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "31653236",
                              "id": 10350,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6116:4:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_100000000000000000000000000_by_1",
                                "typeString": "int_const 100000000000000000000000000"
                              },
                              "value": "1e26"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_100000000000000000000000000_by_1",
                                "typeString": "int_const 100000000000000000000000000"
                              }
                            ],
                            "id": 10347,
                            "name": "_isTweakRay",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8997,
                            "src": "6090:11:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                            }
                          },
                          "id": 10351,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6090:31:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "6080:41:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "547765616b2065786365656465643a206d6f6320747765616b73206f6e6c7920757020746f20313025",
                        "id": 10353,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6123:43:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_099ae8125705a2558f5262761ed1b63325bbb60c00500c9264f8fb6846d9283b",
                          "typeString": "literal_string \"Tweak exceeded: moc tweaks only up to 10%\""
                        },
                        "value": "Tweak exceeded: moc tweaks only up to 10%"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_099ae8125705a2558f5262761ed1b63325bbb60c00500c9264f8fb6846d9283b",
                          "typeString": "literal_string \"Tweak exceeded: moc tweaks only up to 10%\""
                        }
                      ],
                      "id": 10344,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6072:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10354,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6072:95:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10355,
                  "nodeType": "ExpressionStatement",
                  "src": "6072:95:12"
                },
                {
                  "expression": {
                    "id": 10358,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 10356,
                      "name": "_moc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10011,
                      "src": "6173:4:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 10357,
                      "name": "newMoc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10330,
                      "src": "6180:6:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6173:13:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 10359,
                  "nodeType": "ExpressionStatement",
                  "src": "6173:13:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "expression": {
                            "id": 10361,
                            "name": "IPolicyPoolConfig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14792,
                            "src": "6210:17:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IPolicyPoolConfig_$14792_$",
                              "typeString": "type(contract IPolicyPoolConfig)"
                            }
                          },
                          "id": 10362,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "GovernanceActions",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14718,
                          "src": "6210:35:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_GovernanceActions_$14718_$",
                            "typeString": "type(enum IPolicyPoolConfig.GovernanceActions)"
                          }
                        },
                        "id": 10363,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "setMoc",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14697,
                        "src": "6210:42:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_GovernanceActions_$14718",
                          "typeString": "enum IPolicyPoolConfig.GovernanceActions"
                        }
                      },
                      {
                        "id": 10364,
                        "name": "newMoc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10330,
                        "src": "6254:6:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 10365,
                        "name": "tweak",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10338,
                        "src": "6262:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_GovernanceActions_$14718",
                          "typeString": "enum IPolicyPoolConfig.GovernanceActions"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 10360,
                      "name": "_parameterChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9087,
                      "src": "6192:17:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_GovernanceActions_$14718_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (enum IPolicyPoolConfig.GovernanceActions,uint256,bool)"
                      }
                    },
                    "id": 10366,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6192:76:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10367,
                  "nodeType": "ExpressionStatement",
                  "src": "6192:76:12"
                }
              ]
            },
            "functionSelector": "b9ea870a",
            "id": 10369,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 10333,
                    "name": "LEVEL2_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8742,
                    "src": "5996:11:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "id": 10334,
                    "name": "LEVEL3_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8747,
                    "src": "6009:11:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 10335,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 10332,
                  "name": "onlyPoolRole2",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8826,
                  "src": "5982:13:12"
                },
                "nodeType": "ModifierInvocation",
                "src": "5982:39:12"
              }
            ],
            "name": "setMoc",
            "nameLocation": "5950:6:12",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10331,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10330,
                  "mutability": "mutable",
                  "name": "newMoc",
                  "nameLocation": "5965:6:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10369,
                  "src": "5957:14:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10329,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5957:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5956:16:12"
            },
            "returnParameters": {
              "id": 10336,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6022:0:12"
            },
            "scope": 10806,
            "src": "5941:332:12",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 10409,
              "nodeType": "Block",
              "src": "6392:377:12",
              "statements": [
                {
                  "assignments": [
                    10379
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10379,
                      "mutability": "mutable",
                      "name": "tweak",
                      "nameLocation": "6403:5:12",
                      "nodeType": "VariableDeclaration",
                      "scope": 10409,
                      "src": "6398:10:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 10378,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "6398:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 10384,
                  "initialValue": {
                    "id": 10383,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "6411:25:12",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 10381,
                          "name": "LEVEL2_ROLE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8742,
                          "src": "6424:11:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 10380,
                        "name": "hasPoolRole",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8936,
                        "src": "6412:11:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (bytes32) view returns (bool)"
                        }
                      },
                      "id": 10382,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6412:24:12",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6398:38:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10393,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 10387,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "6457:6:12",
                          "subExpression": {
                            "id": 10386,
                            "name": "tweak",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10379,
                            "src": "6458:5:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 10389,
                              "name": "_scrInterestRate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10015,
                              "src": "6479:16:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 10390,
                              "name": "newScrInterestRate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10371,
                              "src": "6497:18:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "33653236",
                              "id": 10391,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6517:4:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_300000000000000000000000000_by_1",
                                "typeString": "int_const 300000000000000000000000000"
                              },
                              "value": "3e26"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_300000000000000000000000000_by_1",
                                "typeString": "int_const 300000000000000000000000000"
                              }
                            ],
                            "id": 10388,
                            "name": "_isTweakRay",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8997,
                            "src": "6467:11:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                            }
                          },
                          "id": 10392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6467:55:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "6457:65:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "547765616b2065786365656465643a20736372496e7465726573745261746520747765616b73206f6e6c7920757020746f20333025",
                        "id": 10394,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6530:55:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_27fec61a06f1aa2124ec3e9b67280c7c6366a96b4885e5dc1677751e57c3e1d4",
                          "typeString": "literal_string \"Tweak exceeded: scrInterestRate tweaks only up to 30%\""
                        },
                        "value": "Tweak exceeded: scrInterestRate tweaks only up to 30%"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_27fec61a06f1aa2124ec3e9b67280c7c6366a96b4885e5dc1677751e57c3e1d4",
                          "typeString": "literal_string \"Tweak exceeded: scrInterestRate tweaks only up to 30%\""
                        }
                      ],
                      "id": 10385,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6442:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6442:149:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10396,
                  "nodeType": "ExpressionStatement",
                  "src": "6442:149:12"
                },
                {
                  "expression": {
                    "id": 10399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 10397,
                      "name": "_scrInterestRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10015,
                      "src": "6597:16:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 10398,
                      "name": "newScrInterestRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10371,
                      "src": "6616:18:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6597:37:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 10400,
                  "nodeType": "ExpressionStatement",
                  "src": "6597:37:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "expression": {
                            "id": 10402,
                            "name": "IPolicyPoolConfig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14792,
                            "src": "6665:17:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IPolicyPoolConfig_$14792_$",
                              "typeString": "type(contract IPolicyPoolConfig)"
                            }
                          },
                          "id": 10403,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "GovernanceActions",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14718,
                          "src": "6665:35:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_GovernanceActions_$14718_$",
                            "typeString": "type(enum IPolicyPoolConfig.GovernanceActions)"
                          }
                        },
                        "id": 10404,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "setScrInterestRate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14698,
                        "src": "6665:54:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_GovernanceActions_$14718",
                          "typeString": "enum IPolicyPoolConfig.GovernanceActions"
                        }
                      },
                      {
                        "id": 10405,
                        "name": "newScrInterestRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10371,
                        "src": "6727:18:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 10406,
                        "name": "tweak",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10379,
                        "src": "6753:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_GovernanceActions_$14718",
                          "typeString": "enum IPolicyPoolConfig.GovernanceActions"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 10401,
                      "name": "_parameterChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9087,
                      "src": "6640:17:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_GovernanceActions_$14718_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (enum IPolicyPoolConfig.GovernanceActions,uint256,bool)"
                      }
                    },
                    "id": 10407,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6640:124:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10408,
                  "nodeType": "ExpressionStatement",
                  "src": "6640:124:12"
                }
              ]
            },
            "functionSelector": "dab5d88d",
            "id": 10410,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 10374,
                    "name": "LEVEL2_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8742,
                    "src": "6364:11:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "id": 10375,
                    "name": "LEVEL3_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8747,
                    "src": "6377:11:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 10376,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 10373,
                  "name": "onlyPoolRole2",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8826,
                  "src": "6350:13:12"
                },
                "nodeType": "ModifierInvocation",
                "src": "6350:39:12"
              }
            ],
            "name": "setScrInterestRate",
            "nameLocation": "6286:18:12",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10372,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10371,
                  "mutability": "mutable",
                  "name": "newScrInterestRate",
                  "nameLocation": "6313:18:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10410,
                  "src": "6305:26:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10370,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6305:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6304:28:12"
            },
            "returnParameters": {
              "id": 10377,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6392:0:12"
            },
            "scope": 10806,
            "src": "6277:492:12",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 10450,
              "nodeType": "Block",
              "src": "6866:311:12",
              "statements": [
                {
                  "assignments": [
                    10420
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10420,
                      "mutability": "mutable",
                      "name": "tweak",
                      "nameLocation": "6877:5:12",
                      "nodeType": "VariableDeclaration",
                      "scope": 10450,
                      "src": "6872:10:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 10419,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "6872:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 10425,
                  "initialValue": {
                    "id": 10424,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "6885:25:12",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 10422,
                          "name": "LEVEL2_ROLE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8742,
                          "src": "6898:11:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 10421,
                        "name": "hasPoolRole",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8936,
                        "src": "6886:11:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (bytes32) view returns (bool)"
                        }
                      },
                      "id": 10423,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6886:24:12",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6872:38:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10434,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 10428,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "6931:6:12",
                          "subExpression": {
                            "id": 10427,
                            "name": "tweak",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10420,
                            "src": "6932:5:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 10430,
                              "name": "_ensuroFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10013,
                              "src": "6953:10:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 10431,
                              "name": "newEnsuroFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10412,
                              "src": "6965:12:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "33653236",
                              "id": 10432,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6979:4:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_300000000000000000000000000_by_1",
                                "typeString": "int_const 300000000000000000000000000"
                              },
                              "value": "3e26"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_300000000000000000000000000_by_1",
                                "typeString": "int_const 300000000000000000000000000"
                              }
                            ],
                            "id": 10429,
                            "name": "_isTweakRay",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8997,
                            "src": "6941:11:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                            }
                          },
                          "id": 10433,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6941:43:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "6931:53:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "547765616b2065786365656465643a20656e7375726f46656520747765616b73206f6e6c7920757020746f20333025",
                        "id": 10435,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6992:49:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_aea6800098daeb7c30df84412ffa365a7be5f53c4d3074d38ebba251a8be4897",
                          "typeString": "literal_string \"Tweak exceeded: ensuroFee tweaks only up to 30%\""
                        },
                        "value": "Tweak exceeded: ensuroFee tweaks only up to 30%"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_aea6800098daeb7c30df84412ffa365a7be5f53c4d3074d38ebba251a8be4897",
                          "typeString": "literal_string \"Tweak exceeded: ensuroFee tweaks only up to 30%\""
                        }
                      ],
                      "id": 10426,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6916:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6916:131:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10437,
                  "nodeType": "ExpressionStatement",
                  "src": "6916:131:12"
                },
                {
                  "expression": {
                    "id": 10440,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 10438,
                      "name": "_ensuroFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10013,
                      "src": "7053:10:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 10439,
                      "name": "newEnsuroFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10412,
                      "src": "7066:12:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7053:25:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 10441,
                  "nodeType": "ExpressionStatement",
                  "src": "7053:25:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "expression": {
                            "id": 10443,
                            "name": "IPolicyPoolConfig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14792,
                            "src": "7102:17:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IPolicyPoolConfig_$14792_$",
                              "typeString": "type(contract IPolicyPoolConfig)"
                            }
                          },
                          "id": 10444,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "GovernanceActions",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14718,
                          "src": "7102:35:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_GovernanceActions_$14718_$",
                            "typeString": "type(enum IPolicyPoolConfig.GovernanceActions)"
                          }
                        },
                        "id": 10445,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "setEnsuroFee",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14699,
                        "src": "7102:48:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_GovernanceActions_$14718",
                          "typeString": "enum IPolicyPoolConfig.GovernanceActions"
                        }
                      },
                      {
                        "id": 10446,
                        "name": "newEnsuroFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10412,
                        "src": "7152:12:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 10447,
                        "name": "tweak",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10420,
                        "src": "7166:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_GovernanceActions_$14718",
                          "typeString": "enum IPolicyPoolConfig.GovernanceActions"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 10442,
                      "name": "_parameterChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9087,
                      "src": "7084:17:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_GovernanceActions_$14718_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (enum IPolicyPoolConfig.GovernanceActions,uint256,bool)"
                      }
                    },
                    "id": 10448,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7084:88:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10449,
                  "nodeType": "ExpressionStatement",
                  "src": "7084:88:12"
                }
              ]
            },
            "functionSelector": "089a8504",
            "id": 10451,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 10415,
                    "name": "LEVEL2_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8742,
                    "src": "6840:11:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "id": 10416,
                    "name": "LEVEL3_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8747,
                    "src": "6853:11:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 10417,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 10414,
                  "name": "onlyPoolRole2",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8826,
                  "src": "6826:13:12"
                },
                "nodeType": "ModifierInvocation",
                "src": "6826:39:12"
              }
            ],
            "name": "setEnsuroFee",
            "nameLocation": "6782:12:12",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10412,
                  "mutability": "mutable",
                  "name": "newEnsuroFee",
                  "nameLocation": "6803:12:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10451,
                  "src": "6795:20:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10411,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6795:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6794:22:12"
            },
            "returnParameters": {
              "id": 10418,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6866:0:12"
            },
            "scope": 10806,
            "src": "6773:404:12",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 10491,
              "nodeType": "Block",
              "src": "7296:377:12",
              "statements": [
                {
                  "assignments": [
                    10461
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10461,
                      "mutability": "mutable",
                      "name": "tweak",
                      "nameLocation": "7307:5:12",
                      "nodeType": "VariableDeclaration",
                      "scope": 10491,
                      "src": "7302:10:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 10460,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "7302:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 10466,
                  "initialValue": {
                    "id": 10465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "7315:25:12",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 10463,
                          "name": "LEVEL2_ROLE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8742,
                          "src": "7328:11:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 10462,
                        "name": "hasPoolRole",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8936,
                        "src": "7316:11:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (bytes32) view returns (bool)"
                        }
                      },
                      "id": 10464,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7316:24:12",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7302:38:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10475,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 10469,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "7361:6:12",
                          "subExpression": {
                            "id": 10468,
                            "name": "tweak",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10461,
                            "src": "7362:5:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 10471,
                              "name": "_maxScrPerPolicy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10017,
                              "src": "7383:16:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 10472,
                              "name": "newMaxScrPerPolicy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10453,
                              "src": "7401:18:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "33653137",
                              "id": 10473,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7421:4:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_300000000000000000_by_1",
                                "typeString": "int_const 300000000000000000"
                              },
                              "value": "3e17"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_300000000000000000_by_1",
                                "typeString": "int_const 300000000000000000"
                              }
                            ],
                            "id": 10470,
                            "name": "_isTweakWad",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9058,
                            "src": "7371:11:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                            }
                          },
                          "id": 10474,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7371:55:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "7361:65:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "547765616b2065786365656465643a206d6178536372506572506f6c69637920747765616b73206f6e6c7920757020746f20333025",
                        "id": 10476,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7434:55:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1cd65257fbde54a1eddd93c0cb86ff832b32cc16cb6852ece8e87eed37003b65",
                          "typeString": "literal_string \"Tweak exceeded: maxScrPerPolicy tweaks only up to 30%\""
                        },
                        "value": "Tweak exceeded: maxScrPerPolicy tweaks only up to 30%"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1cd65257fbde54a1eddd93c0cb86ff832b32cc16cb6852ece8e87eed37003b65",
                          "typeString": "literal_string \"Tweak exceeded: maxScrPerPolicy tweaks only up to 30%\""
                        }
                      ],
                      "id": 10467,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7346:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7346:149:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10478,
                  "nodeType": "ExpressionStatement",
                  "src": "7346:149:12"
                },
                {
                  "expression": {
                    "id": 10481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 10479,
                      "name": "_maxScrPerPolicy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10017,
                      "src": "7501:16:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 10480,
                      "name": "newMaxScrPerPolicy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10453,
                      "src": "7520:18:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7501:37:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 10482,
                  "nodeType": "ExpressionStatement",
                  "src": "7501:37:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "expression": {
                            "id": 10484,
                            "name": "IPolicyPoolConfig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14792,
                            "src": "7569:17:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IPolicyPoolConfig_$14792_$",
                              "typeString": "type(contract IPolicyPoolConfig)"
                            }
                          },
                          "id": 10485,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "GovernanceActions",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14718,
                          "src": "7569:35:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_GovernanceActions_$14718_$",
                            "typeString": "type(enum IPolicyPoolConfig.GovernanceActions)"
                          }
                        },
                        "id": 10486,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "setMaxScrPerPolicy",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14700,
                        "src": "7569:54:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_GovernanceActions_$14718",
                          "typeString": "enum IPolicyPoolConfig.GovernanceActions"
                        }
                      },
                      {
                        "id": 10487,
                        "name": "newMaxScrPerPolicy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10453,
                        "src": "7631:18:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 10488,
                        "name": "tweak",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10461,
                        "src": "7657:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_GovernanceActions_$14718",
                          "typeString": "enum IPolicyPoolConfig.GovernanceActions"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 10483,
                      "name": "_parameterChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9087,
                      "src": "7544:17:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_GovernanceActions_$14718_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (enum IPolicyPoolConfig.GovernanceActions,uint256,bool)"
                      }
                    },
                    "id": 10489,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7544:124:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10490,
                  "nodeType": "ExpressionStatement",
                  "src": "7544:124:12"
                }
              ]
            },
            "functionSelector": "22875d63",
            "id": 10492,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 10456,
                    "name": "LEVEL2_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8742,
                    "src": "7268:11:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "id": 10457,
                    "name": "LEVEL3_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8747,
                    "src": "7281:11:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 10458,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 10455,
                  "name": "onlyPoolRole2",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8826,
                  "src": "7254:13:12"
                },
                "nodeType": "ModifierInvocation",
                "src": "7254:39:12"
              }
            ],
            "name": "setMaxScrPerPolicy",
            "nameLocation": "7190:18:12",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10454,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10453,
                  "mutability": "mutable",
                  "name": "newMaxScrPerPolicy",
                  "nameLocation": "7217:18:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10492,
                  "src": "7209:26:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10452,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7209:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7208:28:12"
            },
            "returnParameters": {
              "id": 10459,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7296:0:12"
            },
            "scope": 10806,
            "src": "7181:492:12",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 10565,
              "nodeType": "Block",
              "src": "7791:665:12",
              "statements": [
                {
                  "assignments": [
                    10503
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10503,
                      "mutability": "mutable",
                      "name": "tweak",
                      "nameLocation": "7802:5:12",
                      "nodeType": "VariableDeclaration",
                      "scope": 10565,
                      "src": "7797:10:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 10502,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "7797:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 10513,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 10512,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 10507,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "7810:25:12",
                      "subExpression": {
                        "arguments": [
                          {
                            "id": 10505,
                            "name": "LEVEL2_ROLE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8742,
                            "src": "7823:11:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 10504,
                          "name": "hasPoolRole",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8936,
                          "src": "7811:11:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                            "typeString": "function (bytes32) view returns (bool)"
                          }
                        },
                        "id": 10506,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7811:24:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "id": 10511,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "7839:25:12",
                      "subExpression": {
                        "arguments": [
                          {
                            "id": 10509,
                            "name": "LEVEL1_ROLE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8737,
                            "src": "7852:11:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 10508,
                          "name": "hasPoolRole",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8936,
                          "src": "7840:11:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                            "typeString": "function (bytes32) view returns (bool)"
                          }
                        },
                        "id": 10510,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7840:24:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "7810:54:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7797:67:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10522,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 10516,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "7885:6:12",
                          "subExpression": {
                            "id": 10515,
                            "name": "tweak",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10503,
                            "src": "7886:5:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 10518,
                              "name": "_scrLimit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10019,
                              "src": "7907:9:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 10519,
                              "name": "newScrLimit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10494,
                              "src": "7918:11:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "31653137",
                              "id": 10520,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7931:4:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_100000000000000000_by_1",
                                "typeString": "int_const 100000000000000000"
                              },
                              "value": "1e17"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_100000000000000000_by_1",
                                "typeString": "int_const 100000000000000000"
                              }
                            ],
                            "id": 10517,
                            "name": "_isTweakWad",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9058,
                            "src": "7895:11:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                            }
                          },
                          "id": 10521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7895:41:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "7885:51:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "547765616b2065786365656465643a207363724c696d697420747765616b73206f6e6c7920757020746f20313025",
                        "id": 10523,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7944:48:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0917ac1cf720e592af0b602bfeacd6d034fd7685f8f69db65cfacd18a4eb1c91",
                          "typeString": "literal_string \"Tweak exceeded: scrLimit tweaks only up to 10%\""
                        },
                        "value": "Tweak exceeded: scrLimit tweaks only up to 10%"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0917ac1cf720e592af0b602bfeacd6d034fd7685f8f69db65cfacd18a4eb1c91",
                          "typeString": "literal_string \"Tweak exceeded: scrLimit tweaks only up to 10%\""
                        }
                      ],
                      "id": 10514,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7870:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10524,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7870:128:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10525,
                  "nodeType": "ExpressionStatement",
                  "src": "7870:128:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 10542,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 10533,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 10529,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 10527,
                              "name": "newScrLimit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10494,
                              "src": "8019:11:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<=",
                            "rightExpression": {
                              "id": 10528,
                              "name": "_scrLimit",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10019,
                              "src": "8034:9:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "8019:24:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 10531,
                                "name": "LEVEL1_ROLE",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8737,
                                "src": "8067:11:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 10530,
                              "name": "hasPoolRole",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8936,
                              "src": "8055:11:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$",
                                "typeString": "function (bytes32) view returns (bool)"
                              }
                            },
                            "id": 10532,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8055:24:12",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "8019:60:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10541,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "hexValue": "31653137",
                                "id": 10538,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8130:4:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_100000000000000000_by_1",
                                  "typeString": "int_const 100000000000000000"
                                },
                                "value": "1e17"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_100000000000000000_by_1",
                                  "typeString": "int_const 100000000000000000"
                                }
                              ],
                              "expression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 10534,
                                    "name": "_policyPool",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8754,
                                    "src": "8091:11:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                                      "typeString": "contract IPolicyPool"
                                    }
                                  },
                                  "id": 10535,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "totalETokenSupply",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 14670,
                                  "src": "8091:29:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view external returns (uint256)"
                                  }
                                },
                                "id": 10536,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8091:31:12",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 10537,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "wadMul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11048,
                              "src": "8091:38:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 10539,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8091:44:12",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 10540,
                            "name": "newScrLimit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10494,
                            "src": "8138:11:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8091:58:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "8019:130:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "547765616b2065786365656465643a20496e6372656173652c203e3d313025206f662074686520746f74616c206c69717569646974792c207265717569726573204c4556454c315f524f4c45",
                        "id": 10543,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8157:78:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_588dd3c1b41bd80cca6db62b58180a10a698427b92796a525a99f9f80d9c2721",
                          "typeString": "literal_string \"Tweak exceeded: Increase, >=10% of the total liquidity, requires LEVEL1_ROLE\""
                        },
                        "value": "Tweak exceeded: Increase, >=10% of the total liquidity, requires LEVEL1_ROLE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_588dd3c1b41bd80cca6db62b58180a10a698427b92796a525a99f9f80d9c2721",
                          "typeString": "literal_string \"Tweak exceeded: Increase, >=10% of the total liquidity, requires LEVEL1_ROLE\""
                        }
                      ],
                      "id": 10526,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8004:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10544,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8004:237:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10545,
                  "nodeType": "ExpressionStatement",
                  "src": "8004:237:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 10549,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 10547,
                          "name": "newScrLimit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10494,
                          "src": "8255:11:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 10548,
                          "name": "_totalScr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10021,
                          "src": "8270:9:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8255:24:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "43616e27742073657420534352206c657373207468616e2063757272656e742053435220616c6c6f636174696f6e",
                        "id": 10550,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8281:48:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_bfb64aa56d64958b5905befc77b532f8269b603b0f3239e433e083973818caf8",
                          "typeString": "literal_string \"Can't set SCR less than current SCR allocation\""
                        },
                        "value": "Can't set SCR less than current SCR allocation"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_bfb64aa56d64958b5905befc77b532f8269b603b0f3239e433e083973818caf8",
                          "typeString": "literal_string \"Can't set SCR less than current SCR allocation\""
                        }
                      ],
                      "id": 10546,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8247:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10551,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8247:83:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10552,
                  "nodeType": "ExpressionStatement",
                  "src": "8247:83:12"
                },
                {
                  "expression": {
                    "id": 10555,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 10553,
                      "name": "_scrLimit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10019,
                      "src": "8336:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 10554,
                      "name": "newScrLimit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10494,
                      "src": "8348:11:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8336:23:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 10556,
                  "nodeType": "ExpressionStatement",
                  "src": "8336:23:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "expression": {
                            "id": 10558,
                            "name": "IPolicyPoolConfig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14792,
                            "src": "8383:17:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IPolicyPoolConfig_$14792_$",
                              "typeString": "type(contract IPolicyPoolConfig)"
                            }
                          },
                          "id": 10559,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "GovernanceActions",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14718,
                          "src": "8383:35:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_GovernanceActions_$14718_$",
                            "typeString": "type(enum IPolicyPoolConfig.GovernanceActions)"
                          }
                        },
                        "id": 10560,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "setScrLimit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14701,
                        "src": "8383:47:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_GovernanceActions_$14718",
                          "typeString": "enum IPolicyPoolConfig.GovernanceActions"
                        }
                      },
                      {
                        "id": 10561,
                        "name": "newScrLimit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10494,
                        "src": "8432:11:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 10562,
                        "name": "tweak",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10503,
                        "src": "8445:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_GovernanceActions_$14718",
                          "typeString": "enum IPolicyPoolConfig.GovernanceActions"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 10557,
                      "name": "_parameterChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9087,
                      "src": "8365:17:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_GovernanceActions_$14718_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (enum IPolicyPoolConfig.GovernanceActions,uint256,bool)"
                      }
                    },
                    "id": 10563,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8365:86:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10564,
                  "nodeType": "ExpressionStatement",
                  "src": "8365:86:12"
                }
              ]
            },
            "functionSelector": "f33323a4",
            "id": 10566,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 10497,
                    "name": "LEVEL1_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8737,
                    "src": "7750:11:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "id": 10498,
                    "name": "LEVEL2_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8742,
                    "src": "7763:11:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  {
                    "id": 10499,
                    "name": "LEVEL3_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8747,
                    "src": "7776:11:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 10500,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 10496,
                  "name": "onlyPoolRole3",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8807,
                  "src": "7736:13:12"
                },
                "nodeType": "ModifierInvocation",
                "src": "7736:52:12"
              }
            ],
            "name": "setScrLimit",
            "nameLocation": "7686:11:12",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10495,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10494,
                  "mutability": "mutable",
                  "name": "newScrLimit",
                  "nameLocation": "7706:11:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10566,
                  "src": "7698:19:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10493,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7698:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7697:21:12"
            },
            "returnParameters": {
              "id": 10501,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7791:0:12"
            },
            "scope": 10806,
            "src": "7677:779:12",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 10592,
              "nodeType": "Block",
              "src": "8532:156:12",
              "statements": [
                {
                  "expression": {
                    "id": 10576,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 10574,
                      "name": "_wallet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10023,
                      "src": "8538:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 10575,
                      "name": "wallet_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10568,
                      "src": "8548:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8538:17:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 10577,
                  "nodeType": "ExpressionStatement",
                  "src": "8538:17:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "expression": {
                            "id": 10579,
                            "name": "IPolicyPoolConfig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14792,
                            "src": "8586:17:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IPolicyPoolConfig_$14792_$",
                              "typeString": "type(contract IPolicyPoolConfig)"
                            }
                          },
                          "id": 10580,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "GovernanceActions",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14718,
                          "src": "8586:35:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_GovernanceActions_$14718_$",
                            "typeString": "type(enum IPolicyPoolConfig.GovernanceActions)"
                          }
                        },
                        "id": 10581,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "setWallet",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 14704,
                        "src": "8586:45:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_GovernanceActions_$14718",
                          "typeString": "enum IPolicyPoolConfig.GovernanceActions"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 10586,
                                "name": "wallet_",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10568,
                                "src": "8655:7:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 10585,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8647:7:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint160_$",
                                "typeString": "type(uint160)"
                              },
                              "typeName": {
                                "id": 10584,
                                "name": "uint160",
                                "nodeType": "ElementaryTypeName",
                                "src": "8647:7:12",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 10587,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8647:16:12",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          ],
                          "id": 10583,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8639:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 10582,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "8639:7:12",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 10588,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8639:25:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "66616c7365",
                        "id": 10589,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8672:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_GovernanceActions_$14718",
                          "typeString": "enum IPolicyPoolConfig.GovernanceActions"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 10578,
                      "name": "_parameterChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9087,
                      "src": "8561:17:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_enum$_GovernanceActions_$14718_$_t_uint256_$_t_bool_$returns$__$",
                        "typeString": "function (enum IPolicyPoolConfig.GovernanceActions,uint256,bool)"
                      }
                    },
                    "id": 10590,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8561:122:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10591,
                  "nodeType": "ExpressionStatement",
                  "src": "8561:122:12"
                }
              ]
            },
            "functionSelector": "deaa59df",
            "id": 10593,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 10571,
                    "name": "RM_PROVIDER_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10005,
                    "src": "8514:16:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 10572,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 10570,
                  "name": "onlyRole",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 19197,
                  "src": "8505:8:12"
                },
                "nodeType": "ModifierInvocation",
                "src": "8505:26:12"
              }
            ],
            "name": "setWallet",
            "nameLocation": "8469:9:12",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10569,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10568,
                  "mutability": "mutable",
                  "name": "wallet_",
                  "nameLocation": "8487:7:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10593,
                  "src": "8479:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10567,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8479:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8478:17:12"
            },
            "returnParameters": {
              "id": 10573,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8532:0:12"
            },
            "scope": 10806,
            "src": "8460:228:12",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 10675,
              "nodeType": "Block",
              "src": "8818:507:12",
              "statements": [
                {
                  "assignments": [
                    10605
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10605,
                      "mutability": "mutable",
                      "name": "purePremium",
                      "nameLocation": "8832:11:12",
                      "nodeType": "VariableDeclaration",
                      "scope": 10675,
                      "src": "8824:19:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 10604,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8824:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 10618,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 10612,
                                  "name": "moc",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10233,
                                  "src": "8887:3:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                    "typeString": "function () view returns (uint256)"
                                  }
                                },
                                "id": 10613,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8887:5:12",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 10610,
                                "name": "lossProb",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10597,
                                "src": "8871:8:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 10611,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "rayMul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11144,
                              "src": "8871:15:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 10614,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8871:22:12",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 10606,
                                "name": "payout",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10595,
                                "src": "8846:6:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 10607,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "wadToRay",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11251,
                              "src": "8846:15:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256) pure returns (uint256)"
                              }
                            },
                            "id": 10608,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8846:17:12",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 10609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "rayMul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11144,
                          "src": "8846:24:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 10615,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8846:48:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 10616,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "rayToWad",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11225,
                      "src": "8846:57:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint256)"
                      }
                    },
                    "id": 10617,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8846:59:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8824:81:12"
                },
                {
                  "assignments": [
                    10620
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10620,
                      "mutability": "mutable",
                      "name": "scr",
                      "nameLocation": "8919:3:12",
                      "nodeType": "VariableDeclaration",
                      "scope": 10675,
                      "src": "8911:11:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 10619,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8911:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 10630,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 10629,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 10623,
                                "name": "scrPercentage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10224,
                                "src": "8939:13:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                  "typeString": "function () view returns (uint256)"
                                }
                              },
                              "id": 10624,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8939:15:12",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 10625,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "rayToWad",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11225,
                            "src": "8939:24:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (uint256)"
                            }
                          },
                          "id": 10626,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8939:26:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 10621,
                          "name": "payout",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10595,
                          "src": "8925:6:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 10622,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "wadMul",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11048,
                        "src": "8925:13:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 10627,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8925:41:12",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 10628,
                      "name": "purePremium",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10605,
                      "src": "8969:11:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8925:55:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8911:69:12"
                },
                {
                  "assignments": [
                    10632
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10632,
                      "mutability": "mutable",
                      "name": "interestRate",
                      "nameLocation": "8994:12:12",
                      "nodeType": "VariableDeclaration",
                      "scope": 10675,
                      "src": "8986:20:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 10631,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8986:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 10648,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "components": [
                          {
                            "arguments": [
                              {
                                "id": 10643,
                                "name": "SECONDS_IN_YEAR_RAY",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10000,
                                "src": "9077:19:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 10640,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "id": 10633,
                                        "name": "scrInterestRate",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10251,
                                        "src": "9018:15:12",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                          "typeString": "function () view returns (uint256)"
                                        }
                                      },
                                      "id": 10634,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "9018:17:12",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 10638,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 10635,
                                            "name": "expiration",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 10599,
                                            "src": "9039:10:12",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint40",
                                              "typeString": "uint40"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "expression": {
                                              "id": 10636,
                                              "name": "block",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -4,
                                              "src": "9052:5:12",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_block",
                                                "typeString": "block"
                                              }
                                            },
                                            "id": 10637,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "timestamp",
                                            "nodeType": "MemberAccess",
                                            "src": "9052:15:12",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "9039:28:12",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 10639,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "9038:30:12",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "9018:50:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 10641,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "9017:52:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 10642,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "rayDiv",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11193,
                              "src": "9017:59:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 10644,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9017:80:12",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 10645,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "9009:94:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 10646,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "rayToWad",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11225,
                      "src": "9009:103:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint256)"
                      }
                    },
                    "id": 10647,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9009:105:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8986:128:12"
                },
                {
                  "assignments": [
                    10650
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10650,
                      "mutability": "mutable",
                      "name": "premiumForLps",
                      "nameLocation": "9128:13:12",
                      "nodeType": "VariableDeclaration",
                      "scope": 10675,
                      "src": "9120:21:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 10649,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9120:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 10655,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 10653,
                        "name": "interestRate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10632,
                        "src": "9155:12:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 10651,
                        "name": "scr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10620,
                        "src": "9144:3:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 10652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "wadMul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11048,
                      "src": "9144:10:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 10654,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9144:24:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9120:48:12"
                },
                {
                  "assignments": [
                    10657
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10657,
                      "mutability": "mutable",
                      "name": "premiumForEnsuro",
                      "nameLocation": "9182:16:12",
                      "nodeType": "VariableDeclaration",
                      "scope": 10675,
                      "src": "9174:24:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 10656,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9174:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 10668,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 10663,
                              "name": "ensuroFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10242,
                              "src": "9238:9:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 10664,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9238:11:12",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 10665,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "rayToWad",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11225,
                          "src": "9238:20:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256) pure returns (uint256)"
                          }
                        },
                        "id": 10666,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9238:22:12",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 10660,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 10658,
                              "name": "purePremium",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10605,
                              "src": "9202:11:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "id": 10659,
                              "name": "premiumForLps",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10650,
                              "src": "9216:13:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "9202:27:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 10661,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "9201:29:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 10662,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "wadMul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11048,
                      "src": "9201:36:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 10667,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9201:60:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9174:87:12"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 10673,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 10671,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 10669,
                        "name": "purePremium",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10605,
                        "src": "9274:11:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "id": 10670,
                        "name": "premiumForEnsuro",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10657,
                        "src": "9288:16:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "9274:30:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "id": 10672,
                      "name": "premiumForLps",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10650,
                      "src": "9307:13:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9274:46:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10603,
                  "id": 10674,
                  "nodeType": "Return",
                  "src": "9267:53:12"
                }
              ]
            },
            "functionSelector": "8bac3a24",
            "id": 10676,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getMinimumPremium",
            "nameLocation": "8701:17:12",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10600,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10595,
                  "mutability": "mutable",
                  "name": "payout",
                  "nameLocation": "8732:6:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10676,
                  "src": "8724:14:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10594,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8724:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10597,
                  "mutability": "mutable",
                  "name": "lossProb",
                  "nameLocation": "8752:8:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10676,
                  "src": "8744:16:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10596,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8744:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10599,
                  "mutability": "mutable",
                  "name": "expiration",
                  "nameLocation": "8773:10:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10676,
                  "src": "8766:17:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 10598,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "8766:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8718:69:12"
            },
            "returnParameters": {
              "id": 10603,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10602,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 10676,
                  "src": "8809:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10601,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8809:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8808:9:12"
            },
            "scope": 10806,
            "src": "8692:633:12",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10791,
              "nodeType": "Block",
              "src": "9542:842:12",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 10699,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 10697,
                          "name": "premium",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10680,
                          "src": "9556:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "id": 10698,
                          "name": "payout",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10678,
                          "src": "9566:6:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9556:16:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "5072656d69756d206d757374206265206c657373207468616e207061796f7574",
                        "id": 10700,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9574:34:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_803a72235080d0c93bcc2d9f25a9bf4bd2fdc545cd6f58e9283384107fe51d3a",
                          "typeString": "literal_string \"Premium must be less than payout\""
                        },
                        "value": "Premium must be less than payout"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_803a72235080d0c93bcc2d9f25a9bf4bd2fdc545cd6f58e9283384107fe51d3a",
                          "typeString": "literal_string \"Premium must be less than payout\""
                        }
                      ],
                      "id": 10696,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9548:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10701,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9548:61:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10702,
                  "nodeType": "ExpressionStatement",
                  "src": "9548:61:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        },
                        "id": 10710,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 10704,
                          "name": "expiration",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10684,
                          "src": "9623:10:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 10707,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "9643:5:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 10708,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "timestamp",
                              "nodeType": "MemberAccess",
                              "src": "9643:15:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 10706,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9636:6:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint40_$",
                              "typeString": "type(uint40)"
                            },
                            "typeName": {
                              "id": 10705,
                              "name": "uint40",
                              "nodeType": "ElementaryTypeName",
                              "src": "9636:6:12",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 10709,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9636:23:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        },
                        "src": "9623:36:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45787069726174696f6e206d75737420626520696e2074686520667574757265",
                        "id": 10711,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9661:34:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e51be23fffc8d654f2b8be05621f285613ec88b72065f526c8aeb267eafb777f",
                          "typeString": "literal_string \"Expiration must be in the future\""
                        },
                        "value": "Expiration must be in the future"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e51be23fffc8d654f2b8be05621f285613ec88b72065f526c8aeb267eafb777f",
                          "typeString": "literal_string \"Expiration must be in the future\""
                        }
                      ],
                      "id": 10703,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9615:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10712,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9615:81:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10713,
                  "nodeType": "ExpressionStatement",
                  "src": "9615:81:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 10720,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 10715,
                          "name": "customer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10686,
                          "src": "9710:8:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 10718,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9730:1:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 10717,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9722:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 10716,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "9722:7:12",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 10719,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9722:10:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "9710:22:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "437573746f6d65722063616e2774206265207a65726f2061646472657373",
                        "id": 10721,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9734:32:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_48f31f9b3ebd6f33639052e1a728fd135f52ed4ae8827899396d2369b9b2efb9",
                          "typeString": "literal_string \"Customer can't be zero address\""
                        },
                        "value": "Customer can't be zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_48f31f9b3ebd6f33639052e1a728fd135f52ed4ae8827899396d2369b9b2efb9",
                          "typeString": "literal_string \"Customer can't be zero address\""
                        }
                      ],
                      "id": 10714,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9702:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10722,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9702:65:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10723,
                  "nodeType": "ExpressionStatement",
                  "src": "9702:65:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 10736,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 10729,
                              "name": "customer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10686,
                              "src": "9821:8:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 10732,
                                  "name": "_policyPool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8754,
                                  "src": "9839:11:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                                    "typeString": "contract IPolicyPool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                                    "typeString": "contract IPolicyPool"
                                  }
                                ],
                                "id": 10731,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "9831:7:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 10730,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9831:7:12",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 10733,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9831:20:12",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 10725,
                                  "name": "_policyPool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8754,
                                  "src": "9788:11:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                                    "typeString": "contract IPolicyPool"
                                  }
                                },
                                "id": 10726,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "currency",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 14572,
                                "src": "9788:20:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IERC20Metadata_$16271_$",
                                  "typeString": "function () view external returns (contract IERC20Metadata)"
                                }
                              },
                              "id": 10727,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9788:22:12",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Metadata_$16271",
                                "typeString": "contract IERC20Metadata"
                              }
                            },
                            "id": 10728,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "allowance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 16665,
                            "src": "9788:32:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view external returns (uint256)"
                            }
                          },
                          "id": 10734,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9788:64:12",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 10735,
                          "name": "premium",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10680,
                          "src": "9856:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9788:75:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "596f75206d75737420616c6c6f7720454e5355524f20746f207472616e7366657220746865207072656d69756d",
                        "id": 10737,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9871:47:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_25841d72cc7bfa6230c7f962cfbae4a2f4fb414516c5a0c773fcb129f7b8fd29",
                          "typeString": "literal_string \"You must allow ENSURO to transfer the premium\""
                        },
                        "value": "You must allow ENSURO to transfer the premium"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_25841d72cc7bfa6230c7f962cfbae4a2f4fb414516c5a0c773fcb129f7b8fd29",
                          "typeString": "literal_string \"You must allow ENSURO to transfer the premium\""
                        }
                      ],
                      "id": 10724,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9773:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10738,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9773:151:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10739,
                  "nodeType": "ExpressionStatement",
                  "src": "9773:151:12"
                },
                {
                  "assignments": [
                    10744
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10744,
                      "mutability": "mutable",
                      "name": "policy",
                      "nameLocation": "9955:6:12",
                      "nodeType": "VariableDeclaration",
                      "scope": 10791,
                      "src": "9930:31:12",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_PolicyData_$5686_memory_ptr",
                        "typeString": "struct Policy.PolicyData"
                      },
                      "typeName": {
                        "id": 10743,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 10742,
                          "name": "Policy.PolicyData",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 5686,
                          "src": "9930:17:12"
                        },
                        "referencedDeclaration": 5686,
                        "src": "9930:17:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PolicyData_$5686_storage_ptr",
                          "typeString": "struct Policy.PolicyData"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 10753,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 10747,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -28,
                        "src": "9989:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_RiskModule_$10806",
                          "typeString": "contract RiskModule"
                        }
                      },
                      {
                        "id": 10748,
                        "name": "premium",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10680,
                        "src": "10001:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 10749,
                        "name": "payout",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10678,
                        "src": "10016:6:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 10750,
                        "name": "lossProb",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10682,
                        "src": "10030:8:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 10751,
                        "name": "expiration",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10684,
                        "src": "10046:10:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_RiskModule_$10806",
                          "typeString": "contract RiskModule"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "expression": {
                        "id": 10745,
                        "name": "Policy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5952,
                        "src": "9964:6:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Policy_$5952_$",
                          "typeString": "type(library Policy)"
                        }
                      },
                      "id": 10746,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5873,
                      "src": "9964:17:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IRiskModule_$17857_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint40_$returns$_t_struct$_PolicyData_$5686_memory_ptr_$",
                        "typeString": "function (contract IRiskModule,uint256,uint256,uint256,uint40) view returns (struct Policy.PolicyData memory)"
                      }
                    },
                    "id": 10752,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9964:98:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_PolicyData_$5686_memory_ptr",
                      "typeString": "struct Policy.PolicyData memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9930:132:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 10758,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 10755,
                            "name": "policy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10744,
                            "src": "10076:6:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_PolicyData_$5686_memory_ptr",
                              "typeString": "struct Policy.PolicyData memory"
                            }
                          },
                          "id": 10756,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "scr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5668,
                          "src": "10076:10:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "id": 10757,
                          "name": "_maxScrPerPolicy",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10017,
                          "src": "10090:16:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "10076:30:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "5269736b4d6f64756c653a20534352206973206d6f7265207468616e206d6178696d756d2070657220706f6c696379",
                        "id": 10759,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10108:49:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_55ffd983a615145e55a1414562a273507602e657a4b86d74dfabe5a0c162e488",
                          "typeString": "literal_string \"RiskModule: SCR is more than maximum per policy\""
                        },
                        "value": "RiskModule: SCR is more than maximum per policy"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_55ffd983a615145e55a1414562a273507602e657a4b86d74dfabe5a0c162e488",
                          "typeString": "literal_string \"RiskModule: SCR is more than maximum per policy\""
                        }
                      ],
                      "id": 10754,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10068:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10760,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10068:90:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10761,
                  "nodeType": "ExpressionStatement",
                  "src": "10068:90:12"
                },
                {
                  "expression": {
                    "id": 10765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 10762,
                      "name": "_totalScr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10021,
                      "src": "10164:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "expression": {
                        "id": 10763,
                        "name": "policy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10744,
                        "src": "10177:6:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PolicyData_$5686_memory_ptr",
                          "typeString": "struct Policy.PolicyData memory"
                        }
                      },
                      "id": 10764,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "scr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5668,
                      "src": "10177:10:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10164:23:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 10766,
                  "nodeType": "ExpressionStatement",
                  "src": "10164:23:12"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 10770,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 10768,
                          "name": "_totalScr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10021,
                          "src": "10201:9:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "id": 10769,
                          "name": "_scrLimit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10019,
                          "src": "10214:9:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "10201:22:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "5269736b4d6f64756c653a20534352206c696d6974206578636565646564",
                        "id": 10771,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10225:32:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_02d2fd88d1460008c9809a8a87f34aa284b63ad04a9e52a1d152ddc024a68cf2",
                          "typeString": "literal_string \"RiskModule: SCR limit exceeded\""
                        },
                        "value": "RiskModule: SCR limit exceeded"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_02d2fd88d1460008c9809a8a87f34aa284b63ad04a9e52a1d152ddc024a68cf2",
                          "typeString": "literal_string \"RiskModule: SCR limit exceeded\""
                        }
                      ],
                      "id": 10767,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10193:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 10772,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10193:65:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10773,
                  "nodeType": "ExpressionStatement",
                  "src": "10193:65:12"
                },
                {
                  "assignments": [
                    10775
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10775,
                      "mutability": "mutable",
                      "name": "policyId",
                      "nameLocation": "10272:8:12",
                      "nodeType": "VariableDeclaration",
                      "scope": 10791,
                      "src": "10264:16:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 10774,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10264:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 10782,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 10778,
                        "name": "policy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10744,
                        "src": "10305:6:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PolicyData_$5686_memory_ptr",
                          "typeString": "struct Policy.PolicyData memory"
                        }
                      },
                      {
                        "id": 10779,
                        "name": "customer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10686,
                        "src": "10313:8:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 10780,
                        "name": "internalId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10688,
                        "src": "10323:10:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_PolicyData_$5686_memory_ptr",
                          "typeString": "struct Policy.PolicyData memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        }
                      ],
                      "expression": {
                        "id": 10776,
                        "name": "_policyPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8754,
                        "src": "10283:11:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPolicyPool_$14671",
                          "typeString": "contract IPolicyPool"
                        }
                      },
                      "id": 10777,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "newPolicy",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14601,
                      "src": "10283:21:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_struct$_PolicyData_$5686_memory_ptr_$_t_address_$_t_uint96_$returns$_t_uint256_$",
                        "typeString": "function (struct Policy.PolicyData memory,address,uint96) external returns (uint256)"
                      }
                    },
                    "id": 10781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10283:51:12",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10264:70:12"
                },
                {
                  "expression": {
                    "id": 10787,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 10783,
                        "name": "policy",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10744,
                        "src": "10340:6:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PolicyData_$5686_memory_ptr",
                          "typeString": "struct Policy.PolicyData memory"
                        }
                      },
                      "id": 10785,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5662,
                      "src": "10340:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 10786,
                      "name": "policyId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10775,
                      "src": "10352:8:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10340:20:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 10788,
                  "nodeType": "ExpressionStatement",
                  "src": "10340:20:12"
                },
                {
                  "expression": {
                    "id": 10789,
                    "name": "policy",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10744,
                    "src": "10373:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_PolicyData_$5686_memory_ptr",
                      "typeString": "struct Policy.PolicyData memory"
                    }
                  },
                  "functionReturnParameters": 10695,
                  "id": 10790,
                  "nodeType": "Return",
                  "src": "10366:13:12"
                }
              ]
            },
            "id": 10792,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 10691,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 10690,
                  "name": "whenNotPaused",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 18073,
                  "src": "9493:13:12"
                },
                "nodeType": "ModifierInvocation",
                "src": "9493:13:12"
              }
            ],
            "name": "_newPolicy",
            "nameLocation": "9338:10:12",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10689,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10678,
                  "mutability": "mutable",
                  "name": "payout",
                  "nameLocation": "9362:6:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10792,
                  "src": "9354:14:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10677,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9354:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10680,
                  "mutability": "mutable",
                  "name": "premium",
                  "nameLocation": "9382:7:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10792,
                  "src": "9374:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10679,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9374:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10682,
                  "mutability": "mutable",
                  "name": "lossProb",
                  "nameLocation": "9403:8:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10792,
                  "src": "9395:16:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10681,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9395:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10684,
                  "mutability": "mutable",
                  "name": "expiration",
                  "nameLocation": "9424:10:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10792,
                  "src": "9417:17:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 10683,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "9417:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10686,
                  "mutability": "mutable",
                  "name": "customer",
                  "nameLocation": "9448:8:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10792,
                  "src": "9440:16:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10685,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9440:7:12",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10688,
                  "mutability": "mutable",
                  "name": "internalId",
                  "nameLocation": "9469:10:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10792,
                  "src": "9462:17:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  },
                  "typeName": {
                    "id": 10687,
                    "name": "uint96",
                    "nodeType": "ElementaryTypeName",
                    "src": "9462:6:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9348:135:12"
            },
            "returnParameters": {
              "id": 10695,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10694,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 10792,
                  "src": "9516:24:12",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_PolicyData_$5686_memory_ptr",
                    "typeString": "struct Policy.PolicyData"
                  },
                  "typeName": {
                    "id": 10693,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 10692,
                      "name": "Policy.PolicyData",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 5686,
                      "src": "9516:17:12"
                    },
                    "referencedDeclaration": 5686,
                    "src": "9516:17:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_PolicyData_$5686_storage_ptr",
                      "typeString": "struct Policy.PolicyData"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9515:26:12"
            },
            "scope": 10806,
            "src": "9329:1055:12",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              17856
            ],
            "body": {
              "id": 10804,
              "nodeType": "Block",
              "src": "10460:260:12",
              "statements": [
                {
                  "expression": {
                    "id": 10802,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 10800,
                      "name": "_totalScr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10021,
                      "src": "10693:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "id": 10801,
                      "name": "scrAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10794,
                      "src": "10706:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10693:22:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 10803,
                  "nodeType": "ExpressionStatement",
                  "src": "10693:22:12"
                }
              ]
            },
            "functionSelector": "9cbbcd92",
            "id": 10805,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 10798,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 10797,
                  "name": "onlyPolicyPool",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 8780,
                  "src": "10445:14:12"
                },
                "nodeType": "ModifierInvocation",
                "src": "10445:14:12"
              }
            ],
            "name": "releaseScr",
            "nameLocation": "10397:10:12",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 10796,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10436:8:12"
            },
            "parameters": {
              "id": 10795,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10794,
                  "mutability": "mutable",
                  "name": "scrAmount",
                  "nameLocation": "10416:9:12",
                  "nodeType": "VariableDeclaration",
                  "scope": 10805,
                  "src": "10408:17:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10793,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10408:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10407:19:12"
            },
            "returnParameters": {
              "id": 10799,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10460:0:12"
            },
            "scope": 10806,
            "src": "10388:332:12",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 10807,
        "src": "731:9991:12",
        "usedErrors": []
      }
    ],
    "src": "39:10684:12"
  },
  "bytecode": "",
  "bytecodeSha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.6+commit.11564f7e"
  },
  "contractName": "RiskModule",
  "coverageMap": {
    "branches": {},
    "statements": {}
  },
  "dependencies": [
    "AccessControlUpgradeable",
    "ContextUpgradeable",
    "ERC165Upgradeable",
    "ERC1967UpgradeUpgradeable",
    "IAccessControlUpgradeable",
    "IAssetManager",
    "IERC165Upgradeable",
    "IERC1822ProxiableUpgradeable",
    "IERC20Metadata",
    "IEToken",
    "IExchange",
    "IInsolvencyHook",
    "ILPWhitelist",
    "IPolicyPool",
    "IPolicyPoolComponent",
    "IPolicyPoolConfig",
    "IPriceOracle",
    "IRiskModule",
    "Initializable",
    "PausableUpgradeable",
    "Policy",
    "PolicyPoolComponent",
    "UUPSUpgradeable",
    "WadRayMath"
  ],
  "deployedBytecode": "",
  "deployedSourceMap": "",
  "language": "Solidity",
  "natspec": {
    "author": "Ensuro",
    "custom:security-contact": "security@ensuro.co",
    "details": "Risk Module that keeps the configuration and is responsible for pricing and policy resolution",
    "kind": "dev",
    "methods": {
      "constructor": {
        "custom:oz-upgrades-unsafe-allow": "constructor"
      },
      "getRoleAdmin(bytes32)": {
        "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."
      },
      "grantRole(bytes32,address)": {
        "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role."
      },
      "hasRole(bytes32,address)": {
        "details": "Returns `true` if `account` has been granted `role`."
      },
      "paused()": {
        "details": "Returns true if the contract is paused, and false otherwise."
      },
      "proxiableUUID()": {
        "details": "Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate that the this implementation remains valid after an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."
      },
      "renounceRole(bytes32,address)": {
        "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`."
      },
      "revokeRole(bytes32,address)": {
        "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role."
      },
      "supportsInterface(bytes4)": {
        "details": "See {IERC165-supportsInterface}."
      },
      "upgradeTo(address)": {
        "details": "Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."
      },
      "upgradeToAndCall(address,bytes)": {
        "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."
      }
    },
    "title": "Ensuro Risk Module base contract",
    "version": 1
  },
  "offset": [
    731,
    10722
  ],
  "opcodes": "",
  "pcMap": {},
  "sha1": "c81e1a80d048f987b0456ff9c53412ada5761d39",
  "source": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\nimport {WadRayMath} from \"./WadRayMath.sol\";\nimport {AccessControlUpgradeable} from \"@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol\";\nimport {IPolicyPool} from \"../interfaces/IPolicyPool.sol\";\nimport {PolicyPoolComponent} from \"./PolicyPoolComponent.sol\";\nimport {IRiskModule} from \"../interfaces/IRiskModule.sol\";\nimport {IPolicyPoolConfig} from \"../interfaces/IPolicyPoolConfig.sol\";\nimport {Policy} from \"./Policy.sol\";\n\n/**\n * @title Ensuro Risk Module base contract\n * @dev Risk Module that keeps the configuration and is responsible for pricing and policy resolution\n * @custom:security-contact security@ensuro.co\n * @author Ensuro\n */\nabstract contract RiskModule is IRiskModule, AccessControlUpgradeable, PolicyPoolComponent {\n  using Policy for Policy.PolicyData;\n  using WadRayMath for uint256;\n\n  uint256 internal constant SECONDS_IN_YEAR_RAY = 31536000e27; /* 365 * 24 * 3600 * 10e27 */\n\n  // For parameters that can be changed by the risk module provider\n  bytes32 public constant RM_PROVIDER_ROLE = keccak256(\"RM_PROVIDER_ROLE\");\n\n  string private _name;\n  uint256 internal _scrPercentage; // in ray - Solvency Capital Requirement percentage, to calculate\n  // capital requirement as % of (payout - premium)\n  uint256 internal _moc; // in ray - Margin Of Conservativism - factor that multiplies lossProb\n  // to calculate purePremium\n  uint256 internal _ensuroFee; // in ray - % of pure premium that will go for Ensuro treasury\n  uint256 internal _scrInterestRate; // in ray - % of interest to charge for the SCR\n  uint256 internal _maxScrPerPolicy; // in wad - Max SCR per policy\n  uint256 internal _scrLimit; // in wad - Max SCR to be allocated to this module\n  uint256 internal _totalScr; // in wad - Current SCR allocated to this module\n\n  address internal _wallet; // Address of the RiskModule provider\n\n  /// @custom:oz-upgrades-unsafe-allow constructor\n  // solhint-disable-next-line no-empty-blocks\n  constructor(IPolicyPool policyPool_) PolicyPoolComponent(policyPool_) {}\n\n  /**\n   * @dev Initializes the RiskModule\n   * @param name_ Name of the Risk Module\n   * @param scrPercentage_ Solvency Capital Requirement percentage, to calculate\n                          capital requirement as % of (payout - premium)  (in ray)\n   * @param ensuroFee_ % of pure premium that will go for Ensuro treasury (in ray)\n   * @param scrInterestRate_ % of interest to charge for the SCR (in ray)\n   * @param maxScrPerPolicy_ Max SCR to be allocated to this module (in wad)\n   * @param scrLimit_ Max SCR to be allocated to this module (in wad)\n   * @param wallet_ Address of the RiskModule provider\n   */\n  // solhint-disable-next-line func-name-mixedcase\n  function __RiskModule_init(\n    string memory name_,\n    uint256 scrPercentage_,\n    uint256 ensuroFee_,\n    uint256 scrInterestRate_,\n    uint256 maxScrPerPolicy_,\n    uint256 scrLimit_,\n    address wallet_\n  ) internal initializer {\n    __AccessControl_init();\n    __PolicyPoolComponent_init();\n    __RiskModule_init_unchained(\n      name_,\n      scrPercentage_,\n      ensuroFee_,\n      scrInterestRate_,\n      maxScrPerPolicy_,\n      scrLimit_,\n      wallet_\n    );\n  }\n\n  // solhint-disable-next-line func-name-mixedcase\n  function __RiskModule_init_unchained(\n    string memory name_,\n    uint256 scrPercentage_,\n    uint256 ensuroFee_,\n    uint256 scrInterestRate_,\n    uint256 maxScrPerPolicy_,\n    uint256 scrLimit_,\n    address wallet_\n  ) internal initializer {\n    _name = name_;\n    _scrPercentage = scrPercentage_;\n    _moc = WadRayMath.RAY;\n    _ensuroFee = ensuroFee_;\n    _scrInterestRate = scrInterestRate_;\n    _maxScrPerPolicy = maxScrPerPolicy_;\n    _scrLimit = scrLimit_;\n    _totalScr = 0;\n    _wallet = wallet_;\n    _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());\n    _validateParameters();\n  }\n\n  // runs validation on RiskModule parameters\n  function _validateParameters() internal view override {\n    require(\n      _scrPercentage <= WadRayMath.RAY && _scrPercentage > 0,\n      \"Validation: scrPercentage must be <=1\"\n    );\n    require(\n      _moc <= (2 * WadRayMath.RAY) && _moc >= (WadRayMath.RAY / 2),\n      \"Validation: moc must be [0.5, 2]\"\n    );\n    require(_ensuroFee <= WadRayMath.RAY, \"Validation: ensuroFee must be <= 1\");\n    require(_scrInterestRate <= WadRayMath.RAY, \"Validation: scrInterestRate must be <= 1 (100%)\");\n    // _maxScrPerPolicy no limits\n    require(_scrLimit >= _totalScr, \"Validation: scrLimit can't be less than actual totalScr\");\n    require(_wallet != address(0), \"Validation: Wallet can't be zero address\");\n  }\n\n  function name() public view override returns (string memory) {\n    return _name;\n  }\n\n  function scrPercentage() public view override returns (uint256) {\n    return _scrPercentage;\n  }\n\n  function moc() public view override returns (uint256) {\n    return _moc;\n  }\n\n  function ensuroFee() public view override returns (uint256) {\n    return _ensuroFee;\n  }\n\n  function scrInterestRate() public view override returns (uint256) {\n    return _scrInterestRate;\n  }\n\n  function maxScrPerPolicy() public view override returns (uint256) {\n    return _maxScrPerPolicy;\n  }\n\n  function scrLimit() public view override returns (uint256) {\n    return _scrLimit;\n  }\n\n  function totalScr() public view override returns (uint256) {\n    return _totalScr;\n  }\n\n  function wallet() public view override returns (address) {\n    return _wallet;\n  }\n\n  function setScrPercentage(uint256 newScrPercentage)\n    external\n    onlyPoolRole2(LEVEL2_ROLE, LEVEL3_ROLE)\n  {\n    bool tweak = !hasPoolRole(LEVEL2_ROLE);\n    require(\n      !tweak || _isTweakRay(_scrPercentage, newScrPercentage, 1e26),\n      \"Tweak exceeded: scrPercentage tweaks only up to 10%\"\n    );\n    _scrPercentage = newScrPercentage;\n    _parameterChanged(\n      IPolicyPoolConfig.GovernanceActions.setScrPercentage,\n      newScrPercentage,\n      tweak\n    );\n  }\n\n  function setMoc(uint256 newMoc) external onlyPoolRole2(LEVEL2_ROLE, LEVEL3_ROLE) {\n    bool tweak = !hasPoolRole(LEVEL2_ROLE);\n    require(!tweak || _isTweakRay(_moc, newMoc, 1e26), \"Tweak exceeded: moc tweaks only up to 10%\");\n    _moc = newMoc;\n    _parameterChanged(IPolicyPoolConfig.GovernanceActions.setMoc, newMoc, tweak);\n  }\n\n  function setScrInterestRate(uint256 newScrInterestRate)\n    external\n    onlyPoolRole2(LEVEL2_ROLE, LEVEL3_ROLE)\n  {\n    bool tweak = !hasPoolRole(LEVEL2_ROLE);\n    require(\n      !tweak || _isTweakRay(_scrInterestRate, newScrInterestRate, 3e26),\n      \"Tweak exceeded: scrInterestRate tweaks only up to 30%\"\n    );\n    _scrInterestRate = newScrInterestRate;\n    _parameterChanged(\n      IPolicyPoolConfig.GovernanceActions.setScrInterestRate,\n      newScrInterestRate,\n      tweak\n    );\n  }\n\n  function setEnsuroFee(uint256 newEnsuroFee) external onlyPoolRole2(LEVEL2_ROLE, LEVEL3_ROLE) {\n    bool tweak = !hasPoolRole(LEVEL2_ROLE);\n    require(\n      !tweak || _isTweakRay(_ensuroFee, newEnsuroFee, 3e26),\n      \"Tweak exceeded: ensuroFee tweaks only up to 30%\"\n    );\n    _ensuroFee = newEnsuroFee;\n    _parameterChanged(IPolicyPoolConfig.GovernanceActions.setEnsuroFee, newEnsuroFee, tweak);\n  }\n\n  function setMaxScrPerPolicy(uint256 newMaxScrPerPolicy)\n    external\n    onlyPoolRole2(LEVEL2_ROLE, LEVEL3_ROLE)\n  {\n    bool tweak = !hasPoolRole(LEVEL2_ROLE);\n    require(\n      !tweak || _isTweakWad(_maxScrPerPolicy, newMaxScrPerPolicy, 3e17),\n      \"Tweak exceeded: maxScrPerPolicy tweaks only up to 30%\"\n    );\n    _maxScrPerPolicy = newMaxScrPerPolicy;\n    _parameterChanged(\n      IPolicyPoolConfig.GovernanceActions.setMaxScrPerPolicy,\n      newMaxScrPerPolicy,\n      tweak\n    );\n  }\n\n  function setScrLimit(uint256 newScrLimit)\n    external\n    onlyPoolRole3(LEVEL1_ROLE, LEVEL2_ROLE, LEVEL3_ROLE)\n  {\n    bool tweak = !hasPoolRole(LEVEL2_ROLE) && !hasPoolRole(LEVEL1_ROLE);\n    require(\n      !tweak || _isTweakWad(_scrLimit, newScrLimit, 1e17),\n      \"Tweak exceeded: scrLimit tweaks only up to 10%\"\n    );\n    require(\n      newScrLimit <= _scrLimit ||\n        hasPoolRole(LEVEL1_ROLE) ||\n        _policyPool.totalETokenSupply().wadMul(1e17) > newScrLimit,\n      \"Tweak exceeded: Increase, >=10% of the total liquidity, requires LEVEL1_ROLE\"\n    );\n    require(newScrLimit >= _totalScr, \"Can't set SCR less than current SCR allocation\");\n    _scrLimit = newScrLimit;\n    _parameterChanged(IPolicyPoolConfig.GovernanceActions.setScrLimit, newScrLimit, tweak);\n  }\n\n  function setWallet(address wallet_) external onlyRole(RM_PROVIDER_ROLE) {\n    _wallet = wallet_;\n    _parameterChanged(\n      IPolicyPoolConfig.GovernanceActions.setWallet,\n      uint256(uint160(wallet_)),\n      false\n    );\n  }\n\n  function getMinimumPremium(\n    uint256 payout,\n    uint256 lossProb,\n    uint40 expiration\n  ) public view returns (uint256) {\n    uint256 purePremium = payout.wadToRay().rayMul(lossProb.rayMul(moc())).rayToWad();\n    uint256 scr = payout.wadMul(scrPercentage().rayToWad()) - purePremium;\n    uint256 interestRate = (\n      (scrInterestRate() * (expiration - block.timestamp)).rayDiv(SECONDS_IN_YEAR_RAY)\n    ).rayToWad();\n    uint256 premiumForLps = scr.wadMul(interestRate);\n    uint256 premiumForEnsuro = (purePremium + premiumForLps).wadMul(ensuroFee().rayToWad());\n    return purePremium + premiumForEnsuro + premiumForLps;\n  }\n\n  function _newPolicy(\n    uint256 payout,\n    uint256 premium,\n    uint256 lossProb,\n    uint40 expiration,\n    address customer,\n    uint96 internalId\n  ) internal whenNotPaused returns (Policy.PolicyData memory) {\n    require(premium < payout, \"Premium must be less than payout\");\n    require(expiration > uint40(block.timestamp), \"Expiration must be in the future\");\n    require(customer != address(0), \"Customer can't be zero address\");\n    require(\n      _policyPool.currency().allowance(customer, address(_policyPool)) >= premium,\n      \"You must allow ENSURO to transfer the premium\"\n    );\n    Policy.PolicyData memory policy = Policy.initialize(\n      this,\n      premium,\n      payout,\n      lossProb,\n      expiration\n    );\n    require(policy.scr <= _maxScrPerPolicy, \"RiskModule: SCR is more than maximum per policy\");\n    _totalScr += policy.scr;\n    require(_totalScr <= _scrLimit, \"RiskModule: SCR limit exceeded\");\n    uint256 policyId = _policyPool.newPolicy(policy, customer, internalId);\n    policy.id = policyId;\n    return policy;\n  }\n\n  function releaseScr(uint256 scrAmount) external override onlyPolicyPool {\n    // In the Python protype this function is called `remove_policy` and receives\n    // all the policy. Since we just need the amount, for performance reasons\n    // we just send the amount and the method is called releaseScr\n    _totalScr -= scrAmount;\n  }\n}\n",
  "sourceMap": "",
  "sourcePath": "contracts/RiskModule.sol",
  "type": "contract"
}