{
  "contractName": "CEGEngine",
  "abi": [
    {
      "inputs": [],
      "name": "MAX_CYCLE_SIZE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAX_EVENT_SCHEDULE_SIZE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ONE_POINT_ZERO",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PRECISION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum EndOfMonthConvention",
          "name": "eomc",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "startTime",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "i",
              "type": "uint256"
            },
            {
              "internalType": "enum P",
              "name": "p",
              "type": "uint8"
            },
            {
              "internalType": "enum S",
              "name": "s",
              "type": "uint8"
            },
            {
              "internalType": "bool",
              "name": "isSet",
              "type": "bool"
            }
          ],
          "internalType": "struct IPS",
          "name": "cycle",
          "type": "tuple"
        }
      ],
      "name": "adjustEndOfMonthConvention",
      "outputs": [
        {
          "internalType": "enum EndOfMonthConvention",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        },
        {
          "internalType": "enum BusinessDayConvention",
          "name": "bdc",
          "type": "uint8"
        },
        {
          "internalType": "enum Calendar",
          "name": "calendar",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "maturityDate",
          "type": "uint256"
        }
      ],
      "name": "computeEventTimeForEvent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        }
      ],
      "name": "decodeEvent",
      "outputs": [
        {
          "internalType": "enum EventType",
          "name": "",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "scheduleTime",
          "type": "uint256"
        }
      ],
      "name": "encodeEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        }
      ],
      "name": "getEpochOffset",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "internalType": "enum BusinessDayConvention",
          "name": "convention",
          "type": "uint8"
        },
        {
          "internalType": "enum Calendar",
          "name": "calendar",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "maturityDate",
          "type": "uint256"
        }
      ],
      "name": "shiftCalcTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "internalType": "enum BusinessDayConvention",
          "name": "convention",
          "type": "uint8"
        },
        {
          "internalType": "enum Calendar",
          "name": "calendar",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "maturityDate",
          "type": "uint256"
        }
      ],
      "name": "shiftEventTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "contractType",
      "outputs": [
        {
          "internalType": "enum ContractType",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CEGTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "state",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "externalData",
          "type": "bytes32"
        }
      ],
      "name": "computeStateForEvent",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CEGTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "state",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "externalData",
          "type": "bytes32"
        }
      ],
      "name": "computePayoffForEvent",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CEGTerms",
          "name": "terms",
          "type": "tuple"
        }
      ],
      "name": "computeInitialState",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CEGTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "segmentStart",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "segmentEnd",
          "type": "uint256"
        }
      ],
      "name": "computeNonCyclicScheduleSegment",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CEGTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "segmentStart",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "segmentEnd",
          "type": "uint256"
        },
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        }
      ],
      "name": "computeCyclicScheduleSegment",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CEGTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "lastScheduleTime",
          "type": "uint256"
        },
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        }
      ],
      "name": "computeNextCyclicEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CEGTerms",
          "name": "",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        },
        {
          "internalType": "bool",
          "name": "hasUnderlying",
          "type": "bool"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "underlyingState",
          "type": "tuple"
        }
      ],
      "name": "isEventScheduled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.11+commit.5ef660b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"MAX_CYCLE_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_EVENT_SCHEDULE_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ONE_POINT_ZERO\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRECISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"eomc\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"enum S\",\"name\":\"s\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IPS\",\"name\":\"cycle\",\"type\":\"tuple\"}],\"name\":\"adjustEndOfMonthConvention\",\"outputs\":[{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractRole\",\"name\":\"contractRole\",\"type\":\"uint8\"},{\"internalType\":\"enum DayCountConvention\",\"name\":\"dayCountConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"businessDayConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"endOfMonthConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum FeeBasis\",\"name\":\"feeBasis\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractPerformance\",\"name\":\"creditEventTypeCovered\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"settlementCurrency\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"contractDealDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"purchaseDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cycleAnchorDateOfFee\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"delinquencyRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeAccrued\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"priceAtPurchaseDate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"coverageOfCreditEnhancement\",\"type\":\"int256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IP\",\"name\":\"gracePeriod\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IP\",\"name\":\"delinquencyPeriod\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"enum S\",\"name\":\"s\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IPS\",\"name\":\"cycleOfFee\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_2\",\"type\":\"tuple\"}],\"internalType\":\"struct CEGTerms\",\"name\":\"terms\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"segmentStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"segmentEnd\",\"type\":\"uint256\"},{\"internalType\":\"enum EventType\",\"name\":\"eventType\",\"type\":\"uint8\"}],\"name\":\"computeCyclicScheduleSegment\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_event\",\"type\":\"bytes32\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"bdc\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"}],\"name\":\"computeEventTimeForEvent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractRole\",\"name\":\"contractRole\",\"type\":\"uint8\"},{\"internalType\":\"enum DayCountConvention\",\"name\":\"dayCountConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"businessDayConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"endOfMonthConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum FeeBasis\",\"name\":\"feeBasis\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractPerformance\",\"name\":\"creditEventTypeCovered\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"settlementCurrency\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"contractDealDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"purchaseDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cycleAnchorDateOfFee\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"delinquencyRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeAccrued\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"priceAtPurchaseDate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"coverageOfCreditEnhancement\",\"type\":\"int256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IP\",\"name\":\"gracePeriod\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IP\",\"name\":\"delinquencyPeriod\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"enum S\",\"name\":\"s\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IPS\",\"name\":\"cycleOfFee\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_2\",\"type\":\"tuple\"}],\"internalType\":\"struct CEGTerms\",\"name\":\"terms\",\"type\":\"tuple\"}],\"name\":\"computeInitialState\",\"outputs\":[{\"components\":[{\"internalType\":\"enum ContractPerformance\",\"name\":\"contractPerformance\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonPerformingDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exerciseDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"terminationDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastCouponDay\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"accruedInterest\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeAccrued\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nominalInterestRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"interestScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"notionalScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nextPrincipalRedemptionPayment\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseAmount\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseQuantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"quantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"couponAmountFixed\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"marginFactor\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"adjustmentFactor\",\"type\":\"int256\"}],\"internalType\":\"struct State\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractRole\",\"name\":\"contractRole\",\"type\":\"uint8\"},{\"internalType\":\"enum DayCountConvention\",\"name\":\"dayCountConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"businessDayConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"endOfMonthConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum FeeBasis\",\"name\":\"feeBasis\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractPerformance\",\"name\":\"creditEventTypeCovered\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"settlementCurrency\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"contractDealDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"purchaseDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cycleAnchorDateOfFee\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"delinquencyRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeAccrued\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"priceAtPurchaseDate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"coverageOfCreditEnhancement\",\"type\":\"int256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IP\",\"name\":\"gracePeriod\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IP\",\"name\":\"delinquencyPeriod\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"enum S\",\"name\":\"s\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IPS\",\"name\":\"cycleOfFee\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_2\",\"type\":\"tuple\"}],\"internalType\":\"struct CEGTerms\",\"name\":\"terms\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"lastScheduleTime\",\"type\":\"uint256\"},{\"internalType\":\"enum EventType\",\"name\":\"eventType\",\"type\":\"uint8\"}],\"name\":\"computeNextCyclicEvent\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractRole\",\"name\":\"contractRole\",\"type\":\"uint8\"},{\"internalType\":\"enum DayCountConvention\",\"name\":\"dayCountConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"businessDayConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"endOfMonthConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum FeeBasis\",\"name\":\"feeBasis\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractPerformance\",\"name\":\"creditEventTypeCovered\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"settlementCurrency\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"contractDealDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"purchaseDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cycleAnchorDateOfFee\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"delinquencyRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeAccrued\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"priceAtPurchaseDate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"coverageOfCreditEnhancement\",\"type\":\"int256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IP\",\"name\":\"gracePeriod\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IP\",\"name\":\"delinquencyPeriod\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"enum S\",\"name\":\"s\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IPS\",\"name\":\"cycleOfFee\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_2\",\"type\":\"tuple\"}],\"internalType\":\"struct CEGTerms\",\"name\":\"terms\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"segmentStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"segmentEnd\",\"type\":\"uint256\"}],\"name\":\"computeNonCyclicScheduleSegment\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractRole\",\"name\":\"contractRole\",\"type\":\"uint8\"},{\"internalType\":\"enum DayCountConvention\",\"name\":\"dayCountConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"businessDayConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"endOfMonthConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum FeeBasis\",\"name\":\"feeBasis\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractPerformance\",\"name\":\"creditEventTypeCovered\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"settlementCurrency\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"contractDealDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"purchaseDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cycleAnchorDateOfFee\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"delinquencyRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeAccrued\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"priceAtPurchaseDate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"coverageOfCreditEnhancement\",\"type\":\"int256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IP\",\"name\":\"gracePeriod\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IP\",\"name\":\"delinquencyPeriod\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"enum S\",\"name\":\"s\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IPS\",\"name\":\"cycleOfFee\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_2\",\"type\":\"tuple\"}],\"internalType\":\"struct CEGTerms\",\"name\":\"terms\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"enum ContractPerformance\",\"name\":\"contractPerformance\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonPerformingDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exerciseDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"terminationDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastCouponDay\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"accruedInterest\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeAccrued\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nominalInterestRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"interestScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"notionalScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nextPrincipalRedemptionPayment\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseAmount\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseQuantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"quantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"couponAmountFixed\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"marginFactor\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"adjustmentFactor\",\"type\":\"int256\"}],\"internalType\":\"struct State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_event\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"externalData\",\"type\":\"bytes32\"}],\"name\":\"computePayoffForEvent\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractRole\",\"name\":\"contractRole\",\"type\":\"uint8\"},{\"internalType\":\"enum DayCountConvention\",\"name\":\"dayCountConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"businessDayConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"endOfMonthConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum FeeBasis\",\"name\":\"feeBasis\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractPerformance\",\"name\":\"creditEventTypeCovered\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"settlementCurrency\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"contractDealDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"purchaseDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cycleAnchorDateOfFee\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"delinquencyRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeAccrued\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"priceAtPurchaseDate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"coverageOfCreditEnhancement\",\"type\":\"int256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IP\",\"name\":\"gracePeriod\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IP\",\"name\":\"delinquencyPeriod\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"enum S\",\"name\":\"s\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IPS\",\"name\":\"cycleOfFee\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_2\",\"type\":\"tuple\"}],\"internalType\":\"struct CEGTerms\",\"name\":\"terms\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"enum ContractPerformance\",\"name\":\"contractPerformance\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonPerformingDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exerciseDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"terminationDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastCouponDay\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"accruedInterest\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeAccrued\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nominalInterestRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"interestScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"notionalScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nextPrincipalRedemptionPayment\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseAmount\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseQuantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"quantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"couponAmountFixed\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"marginFactor\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"adjustmentFactor\",\"type\":\"int256\"}],\"internalType\":\"struct State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_event\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"externalData\",\"type\":\"bytes32\"}],\"name\":\"computeStateForEvent\",\"outputs\":[{\"components\":[{\"internalType\":\"enum ContractPerformance\",\"name\":\"contractPerformance\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonPerformingDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exerciseDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"terminationDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastCouponDay\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"accruedInterest\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeAccrued\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nominalInterestRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"interestScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"notionalScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nextPrincipalRedemptionPayment\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseAmount\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseQuantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"quantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"couponAmountFixed\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"marginFactor\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"adjustmentFactor\",\"type\":\"int256\"}],\"internalType\":\"struct State\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractType\",\"outputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_event\",\"type\":\"bytes32\"}],\"name\":\"decodeEvent\",\"outputs\":[{\"internalType\":\"enum EventType\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"scheduleTime\",\"type\":\"uint256\"}],\"name\":\"encodeEvent\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum EventType\",\"name\":\"eventType\",\"type\":\"uint8\"}],\"name\":\"getEpochOffset\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_event\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractRole\",\"name\":\"contractRole\",\"type\":\"uint8\"},{\"internalType\":\"enum DayCountConvention\",\"name\":\"dayCountConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"businessDayConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"endOfMonthConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum FeeBasis\",\"name\":\"feeBasis\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractPerformance\",\"name\":\"creditEventTypeCovered\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"settlementCurrency\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"contractDealDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"purchaseDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cycleAnchorDateOfFee\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"delinquencyRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeAccrued\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"priceAtPurchaseDate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"coverageOfCreditEnhancement\",\"type\":\"int256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IP\",\"name\":\"gracePeriod\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IP\",\"name\":\"delinquencyPeriod\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"enum S\",\"name\":\"s\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IPS\",\"name\":\"cycleOfFee\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_2\",\"type\":\"tuple\"}],\"internalType\":\"struct CEGTerms\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"enum ContractPerformance\",\"name\":\"contractPerformance\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonPerformingDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exerciseDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"terminationDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastCouponDay\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"accruedInterest\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeAccrued\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nominalInterestRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"interestScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"notionalScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nextPrincipalRedemptionPayment\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseAmount\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseQuantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"quantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"couponAmountFixed\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"marginFactor\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"adjustmentFactor\",\"type\":\"int256\"}],\"internalType\":\"struct State\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"hasUnderlying\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"enum ContractPerformance\",\"name\":\"contractPerformance\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonPerformingDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exerciseDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"terminationDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastCouponDay\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"accruedInterest\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeAccrued\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nominalInterestRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"interestScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"notionalScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nextPrincipalRedemptionPayment\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseAmount\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseQuantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"quantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"couponAmountFixed\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"marginFactor\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"adjustmentFactor\",\"type\":\"int256\"}],\"internalType\":\"struct State\",\"name\":\"underlyingState\",\"type\":\"tuple\"}],\"name\":\"isEventScheduled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"convention\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"}],\"name\":\"shiftCalcTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"convention\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"}],\"name\":\"shiftEventTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"All numbers except unix timestamp are represented as multiple of 10 ** 18 inputs have to be multiplied by 10 ** 18, outputs have to multplied by 10 ** -18\",\"kind\":\"dev\",\"methods\":{\"adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))\":{\"details\":\"The following is considered to dertermine if schedule dates are shifted to the end of month: - The convention SD (same day) means not adjusting, EM (end of month) means adjusting - Dates are only shifted if the schedule start date is an end-of-month date - Dates are only shifted if the schedule cycle is based on an \\\"M\\\" period unit or multiple thereof\",\"params\":{\"cycle\":\"the cycle struct\",\"eomc\":\"the end of month convention to adjust\",\"startTime\":\"timestamp of the cycle start\"},\"returns\":{\"_0\":\"the adjusted end of month convention\"}},\"computeCyclicScheduleSegment((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint256,uint8)\":{\"params\":{\"eventType\":\"eventType of the cyclic schedule\",\"segmentEnd\":\"end timestamp of the segement\",\"segmentStart\":\"start timestamp of the segment\",\"terms\":\"terms of the contract\"},\"returns\":{\"_0\":\"event schedule segment\"}},\"computeEventTimeForEvent(bytes32,uint8,uint8,uint256)\":{\"details\":\"For optimization reasons not located in EventUtil by applying the BDC specified in the terms\"},\"computeInitialState((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)))\":{\"params\":{\"terms\":\"terms of the contract\"},\"returns\":{\"_0\":\"initial state of the contract\"}},\"computeNextCyclicEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint8)\":{\"params\":{\"eventType\":\"eventType of the cyclic schedule\",\"lastScheduleTime\":\"last occurrence of cyclic event\",\"terms\":\"terms of the contract\"},\"returns\":{\"_0\":\"event schedule segment\"}},\"computeNonCyclicScheduleSegment((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint256)\":{\"params\":{\"segmentEnd\":\"end timestamp of the segement\",\"segmentStart\":\"start timestamp of the segment\",\"terms\":\"terms of the contract\"},\"returns\":{\"_0\":\"segment of the non-cyclic schedule\"}},\"computePayoffForEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bytes32,bytes32)\":{\"params\":{\"_event\":\"event for which the payoff should be evaluated\",\"externalData\":\"external data needed for POF evaluation (e.g. fxRate)\",\"state\":\"current state of the contract\",\"terms\":\"terms of the contract\"},\"returns\":{\"_0\":\"the payoff of the event\"}},\"computeStateForEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bytes32,bytes32)\":{\"params\":{\"_event\":\"event to be applied to the contract state\",\"externalData\":\"external data needed for STF evaluation (e.g. rate for RR events)\",\"state\":\"current state of the contract\",\"terms\":\"terms of the contract\"},\"returns\":{\"_0\":\"the resulting contract state\"}},\"isEventScheduled(bytes32,(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bool,(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256))\":{\"params\":{\"_event\":\"event for which to check if its still scheduled param terms terms of the contract param state current state of the contract\",\"hasUnderlying\":\"boolean indicating whether the contract has an underlying contract\",\"underlyingState\":\"state of the underlying (empty state object if non-existing)\"},\"returns\":{\"_0\":\"boolean indicating whether event is still scheduled\"}}},\"title\":\"CEGEngine\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))\":{\"notice\":\"This function makes an adjustment on the end of month convention.\"},\"computeCyclicScheduleSegment((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint256,uint8)\":{\"notice\":\"Computes a schedule segment of cyclic contract events based on the contract terms and the specified timestamps.\"},\"computeEventTimeForEvent(bytes32,uint8,uint8,uint256)\":{\"notice\":\"Returns the event time for a given schedule time\"},\"computeInitialState((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)))\":{\"notice\":\"Initialize contract state space based on the contract terms.\"},\"computeNextCyclicEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint8)\":{\"notice\":\"Computes a schedule segment of cyclic contract events based on the contract terms and the specified timestamps.\"},\"computeNonCyclicScheduleSegment((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint256)\":{\"notice\":\"Computes a schedule segment of non-cyclic contract events based on the contract terms and the specified timestamps.\"},\"computePayoffForEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bytes32,bytes32)\":{\"notice\":\"Evaluates the payoff for an event under the current state of the contract.\"},\"computeStateForEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bytes32,bytes32)\":{\"notice\":\"Applys an event to the current state of a contract and returns the resulting contract state.\"},\"getEpochOffset(uint8)\":{\"notice\":\"Returns the epoch offset for a given event type to determine the correct order of events if multiple events have the same timestamp\"},\"isEventScheduled(bytes32,(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bool,(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256))\":{\"notice\":\"Verifies that the provided event is still scheduled under the terms, the current state of the contract and the current state of the underlying.\"},\"shiftCalcTime(uint256,uint8,uint8,uint256)\":{\"notice\":\"Used in POFs and STFs for DCFs. No shifting is applied if a Calc/Shift instead of Shift/Calc BDC is provided.\"}},\"notice\":\"Inherits from BaseEngine by implementing STFs, POFs according to the ACTUS standard for a CEC contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@atpar/actus-solidity/contracts/Engines/CEG/CEGEngine.sol\":\"CEGEngine\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@atpar/actus-solidity/contracts/Core/ACTUSConstants.sol\":{\"keccak256\":\"0xd7588866afdab6298dd5b64c5fe0ca63230236538d711932e7a5a17928d1226b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2a0678d5f895239119f463a3ae8a58c5c27b872c91db1cd4253ce5866481c6cd\",\"dweb:/ipfs/QmPXsMXFf1Qar8JCnKTL6Nizf63sZEQQt7XosrdeEnG2CE\"]},\"@atpar/actus-solidity/contracts/Core/ACTUSTypes.sol\":{\"keccak256\":\"0x4374a4c79ef02bb008994431870badedd532d09639fef8d7378039faee88d4dd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c0d32929c237f8d04ff4117611292f874bb1dd785b8ec94c04389d608c11481c\",\"dweb:/ipfs/QmVu3awVGWDvqMCjPhmzcCQCRg4VNr5XxcDRWDECTr17TV\"]},\"@atpar/actus-solidity/contracts/Core/Conventions/BusinessDayConventions.sol\":{\"keccak256\":\"0xb67309595d06a957324467896ed9ece5db6c064a40733528d2405593d083f358\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a77e96b548901c4ee87943de5a7093d178bffe1daa72b6e303ddc1fac93f5173\",\"dweb:/ipfs/QmctKP5Hp7B4YtzzC5q3cRJJiiPS4a5US6vpHDb94paaFT\"]},\"@atpar/actus-solidity/contracts/Core/Conventions/ContractRoleConventions.sol\":{\"keccak256\":\"0x0e86e103607557626fc092ae2c9e2ea643115640a0b212ec34ef074edb3cc048\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://91386c9f6d3f83f6712eb0cb6378cfb7de4ef9745280e4ac7e12bad1dd97c4b3\",\"dweb:/ipfs/QmSJ9EoPorkSrhKSNhM9WBYMTtYuLqjHCpPThf8KHWRp7r\"]},\"@atpar/actus-solidity/contracts/Core/Conventions/DayCountConventions.sol\":{\"keccak256\":\"0x7147f1662bbd8abd04dffe454db3743828bae4476621ff158c94dd967b8573e1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d3be9ed484ad75d87b485d7c779d72b980c711735ed7e2ebc9622949a51857a0\",\"dweb:/ipfs/QmVdyMD4PW8wMdhbxoQBqAVNNN7fRwvpTVpCWKBLbLoqmh\"]},\"@atpar/actus-solidity/contracts/Core/Conventions/EndOfMonthConventions.sol\":{\"keccak256\":\"0xe004912bd32ef22ac6ee91f35a3855b06492d8a89f585f1a508c1c26349fd880\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e70d558bee746b797cdcadf84d5c9cd1b77fc6e99a089524ecaeb91201c71dcd\",\"dweb:/ipfs/QmcxpSKn5ZG4DPrSkm1Pxd21So6NKcHdiX5zfpExD5eLpv\"]},\"@atpar/actus-solidity/contracts/Core/Core.sol\":{\"keccak256\":\"0x0863cccef5f0e90e295c9b913a7d18b7e029cbd33179d4d23b2e5c8479b2077b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d7a9fb13a29e64eaad1e97129952d23c6be6e2c5224dfdd0b62766330b05efd1\",\"dweb:/ipfs/QmUyTmuSfv3kDw4wGrP7ZemJJcxWRNRPYvwNc3WEC1YWoR\"]},\"@atpar/actus-solidity/contracts/Core/SignedMath.sol\":{\"keccak256\":\"0x179745be164f4540d848a50eeb8aea4ec3a0ddabc50f4c122c41ec0463e849c7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e1088b178902de60c611c2dffd2c8943cc7b68988c9083936b760864775db7da\",\"dweb:/ipfs/QmV9XYTU6a8nPzoJv9FjRV4Z2rfbymGGARmzka57ydD1FG\"]},\"@atpar/actus-solidity/contracts/Core/Utils/CycleUtils.sol\":{\"keccak256\":\"0x230700c45141dbc7973f813d1eae8ea2fe3a804489b7f29f46d44ac5d5f12048\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a2bebe3ddd62e9c2ede6a298ef956b8315198da601223a3900d07490dab3b7f1\",\"dweb:/ipfs/QmWyQxUsCjGMRKmxseE61qaipeqHVcZ6tLhVXvLfKnFkxo\"]},\"@atpar/actus-solidity/contracts/Core/Utils/EventUtils.sol\":{\"keccak256\":\"0x9995f89d4c5981ed389e941f578414eb901a4fde0b2eb5d815a43d86a9f53d98\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bc3b3a4f33554f80e19328158ff913d700ff8133d08f434b33a846852cb927dd\",\"dweb:/ipfs/QmawYPv9PguBqrFN5YquvUvbYC2MdtTC4Zkyj3uGxiieHW\"]},\"@atpar/actus-solidity/contracts/Core/Utils/PeriodUtils.sol\":{\"keccak256\":\"0xb549e34dc631989f8aae1b8a397bf77598b8c018860645a627d2929229543a79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://8a0ef5e2ad69ef87b9fc2beeed66336b3857c576efb9833b40a1be2ee35786fc\",\"dweb:/ipfs/QmT33MWqdjecGoPj8Js6a5fgESTcGW5vbQqYamKRDJZnhS\"]},\"@atpar/actus-solidity/contracts/Core/Utils/Utils.sol\":{\"keccak256\":\"0xeb3b016061350187b61618b1f0fed88e3dcc6feb8098a873ac55ae861a61a280\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://eff5591bd3ea0d66b85c0d0ed9d92388946f6ee67e8079656a828cc7a94d6bf1\",\"dweb:/ipfs/QmZPfJpENC62LEZWqWDnu8LmTrrv6CDtJkbTdQtdNpuDds\"]},\"@atpar/actus-solidity/contracts/Engines/CEG/CEGEngine.sol\":{\"keccak256\":\"0xa3bc470497580947af5d3994d7c7fe153518585f720e91ec56daaf5ce5bb4867\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://33db204aa11000640429fe4ce2f5d8e7ff5e86080e731b1bb71b77245181d732\",\"dweb:/ipfs/QmdbL2dgyMNpsLe5Eu2A9jzCU1TWYQEGcGyMcjfCFwiKLF\"]},\"@atpar/actus-solidity/contracts/Engines/CEG/CEGPOF.sol\":{\"keccak256\":\"0x211a4b9715a267f0b5dc306b6e742143ddfac12a79157757a132b7cbb8937671\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://73c16c24c28556d5b5b44c39b45d81a6dd605ddf08a5921ce18050bae926c4f1\",\"dweb:/ipfs/QmTq5a62f6TdgrJd1frZARNAS3EX4Lqc3hHtHJE9BJewP9\"]},\"@atpar/actus-solidity/contracts/Engines/CEG/CEGSTF.sol\":{\"keccak256\":\"0x82a5077051c47b8318eace68948331174d000593f0a81238d701a6e32958bf23\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://aea0c7604aa03e7993da7272e8bb66420d0d73a29863b4bfa468bb332aee6eb9\",\"dweb:/ipfs/QmYN3R7vVMMaUEN1d8Zt2NAAZRUf2Wwo9DuWbWri6MRiaH\"]},\"@atpar/actus-solidity/contracts/Engines/CEG/ICEGEngine.sol\":{\"keccak256\":\"0xedc41629661d186ac7b0a91d13d1dec18f0a6b94596dca992e1a0c6fd2ef1456\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6d88db090aa0494d8e8c33b93cd1f4eb96218b62b8d3afbc5fde945d78f8a898\",\"dweb:/ipfs/Qma6P3wHn4smrjRT79QXPGb5zjzkckgYC9ys7XFdKD23n3\"]},\"@atpar/actus-solidity/contracts/Engines/IEngine.sol\":{\"keccak256\":\"0xdee7e7d2f233c108231be14130dc2dbcf8eb0374636034f75c330a4cd3e1c7cc\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0fe8e1c0c4d447b4b180f53574016ff852af90faa1230be5b4c81464b9b5ffc8\",\"dweb:/ipfs/QmctLgYPvacjTzNS7iJBDkXjEzdbD4GDkVnZE9FJa26oX4\"]},\"@atpar/actus-solidity/contracts/external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol\":{\"keccak256\":\"0x679533db9ba3257086015c0435c7d0de7a0a2f352a9de725db294e3f42c17391\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c586a5d8d9a654840c3655ccd4e47458d1e781c7542ec6fd2c29638b0dee57d\",\"dweb:/ipfs/QmeoQpnTMU4pa4iwKJcKmbNm7P54UCxux2G9rJyTCyq8GZ\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xaa0e11a791bc975d581a4f5b7a8d9c16a880a354c89312318ae072ae3e740409\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://982d8b344f76193834260436d74c81e5a8f9e89106bb4cd72bbaabda4f3f59c2\",\"dweb:/ipfs/QmSrvP5TkQRhKDVCTpsV3uaKLBhkt7PjUY89vdtM9o5ybK\"]},\"openzeppelin-solidity/contracts/math/SignedSafeMath.sol\":{\"keccak256\":\"0xb2db870ccd849f107e3196d346fc4983eb9a041d117b9ff3a53950df606658b7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0add6dbdceb130d5cd140b8106e7884606dce98e817b3547e0967b76921bd473\",\"dweb:/ipfs/QmRUhmQKxoVFhHaQKHPNUYeSty1rw9TDcDPB5PdDUkqvbg\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b506130de806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063811322fb116100ad578063dad412b511610071578063dad412b514610269578063e05a66e01461027c578063e726d6801461028f578063edc0465f1461024c578063f5586e05146102a257610121565b8063811322fb1461021e578063aaf5eb6814610231578063b90f736814610239578063c40c5a981461024c578063cb2ef6f71461025457610121565b80631f252723116100f45780631f252723146101af578063392aef8e146101c257806367b58117146101e25780636f37e55b146101f557806372540003146101fd57610121565b80630ba295ba14610126578063179331f31461014f5780631a2e165d1461016f5780631a7709111461018f575b600080fd5b610139610134366004612560565b6102b5565b60405161014691906128a7565b60405180910390f35b61016261015d3660046123ff565b610448565b6040516101469190612913565b61018261017d366004612314565b610518565b60405161014691906128f6565b6101a261019d36600461235e565b61053d565b60405161014691906128eb565b6101826101bd3660046124a0565b6105a6565b6101d56101d03660046124a0565b610672565b6040516101469190612f57565b6101d56101f0366004612484565b6106a2565b61018261070c565b61021061020b3660046122fc565b610718565b604051610146929190612921565b61018261022c36600461243d565b610741565b610182610755565b6101826102473660046124e7565b61075a565b6101826107dd565b61025c6107e2565b60405161014691906128ff565b61013961027736600461252a565b6107e7565b61018261028a366004612459565b610913565b61018261029d366004612873565b610931565b6101826102b0366004612873565b610a7d565b60606102bf6120a6565b6000600384601c8111156102cf57fe5b14156103b9576101c0870135156103b9576102e86120a6565b6103236101c08901356101808a013561030a368c90038c016103608d0161275b565b61031a60c08d0160a08e016123e3565b60018c8c610ae8565b905060005b60788160ff1610156103b657818160ff166078811061034357fe5b6020020151610351576103b6565b61036f828260ff166078811061036357fe5b60200201518989610cd2565b610378576103ae565b6103966003838360ff166078811061038c57fe5b6020020151610913565b8484607881106103a257fe5b60200201526001909201915b600101610328565b50505b60608167ffffffffffffffff811180156103d257600080fd5b506040519080825280602002602001820160405280156103fc578160200160208202803683370190505b50905060005b8281101561043a5783816078811061041657fe5b602002015182828151811061042757fe5b6020908102919091010152600101610402565b50925050505b949350505050565b6000600184600181111561045857fe5b14156104d45761046783610d01565b61047084610d23565b1480156104bf575060028260200151600581111561048a57fe5b14806104a557506003826020015160058111156104a357fe5b145b806104bf57506004826020015160058111156104bd57fe5b145b156104cc57506001610511565b506000610511565b60008460018111156104e257fe5b14156104f057506000610511565b60405162461bcd60e51b815260040161050890612e0e565b60405180910390fd5b9392505050565b60008061052486610718565b91505061053381868686610931565b9695505050505050565b60008061054987610718565b509050831561059757600381601c81111561056057fe5b14806105775750601481601c81111561057557fe5b145b801561058857506000836101c00135135b1561059757600091505061059d565b60019150505b95945050505050565b6000806105bb610140870161012088016122e1565b6001600160a01b03161415801561060657506105df610140860161012087016122e1565b6001600160a01b03166105fa610120870161010088016122e1565b6001600160a01b031614155b1561064a5761064382610637610621368990038901896125ac565b61063036899003890189612776565b8787610d32565b9063ffffffff610e0316565b9050610440565b61059d61065c368790038701876125ac565b61066b36879003870187612776565b8585610d32565b61067a6120c5565b61059d61068c368790038701876125ac565b61069b36879003870187612776565b8585610ea1565b6106aa6120c5565b6106b26120c5565b6000815261016083013560208201526101808301356060808301919091526101e0840135906106ef906106ea908601604087016123c4565b610f72565b60000b0260e082015261022083013561012082015290505b919050565b670de0b6b3a764000081565b6000808060f884901c601c81111561072c57fe5b92505067ffffffffffffffff83169050915091565b600081601c81111561074f57fe5b92915050565b601281565b6000600382601c81111561076a57fe5b14156107d3576101c0840135156107d35760006107af610793368790038701610360880161275b565b6107a360c0880160a089016123e3565b876101c0013587611036565b9050806107c0575060009050610511565b6107cb600382610913565b915050610511565b5060009392505050565b607881565b601090565b60606107f16120a6565b60006101a08601351561083c5761080e866101a001358686610cd2565b1561083c57610823600f876101a00135610913565b828261ffff166078811061083357fe5b60200201526001015b61084c8661018001358686610cd2565b15156001141561087f576108666014876101800135610913565b828261ffff166078811061087657fe5b60200201526001015b60608161ffff1667ffffffffffffffff8111801561089c57600080fd5b506040519080825280602002602001820160405280156108c6578160200160208202803683370190505b50905060005b8261ffff16811015610908578381607881106108e457fe5b60200201518282815181106108f557fe5b60209081029190910101526001016108cc565b509695505050505050565b60008160f884601c81111561092457fe5b60ff16901b179392505050565b600081851415610942575083610440565b600184600881111561095057fe5b14806109675750600384600881111561096557fe5b145b15610976576106438584611091565b600284600881111561098457fe5b148061099b5750600484600881111561099957fe5b145b156109df5760006109ac8685611091565b90506109b7866110ed565b6109c0826110ed565b14156109cd579050610440565b6109d78685611104565b915050610440565b60058460088111156109ed57fe5b1480610a0457506007846008811115610a0257fe5b145b15610a13576106438584611104565b6006846008811115610a2157fe5b1480610a3857506008846008811115610a3657fe5b145b15610a74576000610a498685611104565b9050610a54866110ed565b610a5d826110ed565b1415610a6a579050610440565b6109d78685611091565b50929392505050565b60006003846008811115610a8d57fe5b1480610aa457506004846008811115610aa257fe5b145b80610aba57506007846008811115610ab857fe5b145b80610ad057506008846008811115610ace57fe5b145b15610adc575083610440565b61059d85858585610931565b610af06120a6565b610af86120a6565b6060870151600090610b6057610b0f8a8686610cd2565b15610b2a5789828260788110610b2157fe5b60200201526001015b610b35898686610cd2565b15610b585760018615151415610b585788828260788110610b5257fe5b60200201525b509050610cc7565b89600080610b6f8a848d610448565b90505b8b831015610c0457610b85838989610cd2565b15610bc35760768410610baa5760405162461bcd60e51b81526004016105089061298c565b82858560788110610bb757fe5b60200201526001909301925b600191820191816001811115610bd557fe5b14610bea57610be58b8e84611152565b610bfd565b610bfd610bf88c8f85611152565b611283565b9250610b72565b60018915151415610c3257610c1a8c8989610cd2565b15610c32578b858560788110610c2c57fe5b60200201525b600084118015610c4f5750610c4f85600186036078811061036357fe5b15610cbf5760008b604001516001811115610c6657fe5b148015610c735750600184115b8015610c7f5750828c14155b15610cbf57848460788110610c9057fe5b6020020151856001860360788110610ca457fe5b6020020152848460788110610cb557fe5b6020020160008152505b509293505050505b979650505050505050565b600081831115610ce457506000610511565b838311158015610cf45750818411155b156107d357506001610511565b60008080610d1462015180855b046112b2565b50915091506104408282611348565b60006104406201518083610d0e565b6000806000610d4085610718565b9092509050600b82601c811115610d5357fe5b1415610d6457600092505050610440565b600382601c811115610d7257fe5b1415610d8d57610d84878783876113ce565b92505050610440565b601a82601c811115610d9b57fe5b1415610dac57600092505050610440565b601b82601c811115610dba57fe5b1415610dcc57610d8487878387611487565b601482601c811115610dda57fe5b1415610deb57600092505050610440565b60405162461bcd60e51b815260040161050890612be2565b6000821580610e10575081155b15610e1d5750600061074f565b82600019148015610e315750600160ff1b82145b15610e4e5760405162461bcd60e51b815260040161050890612b9b565b82820282848281610e5b57fe5b0514610e795760405162461bcd60e51b815260040161050890612b9b565b670de0b6b3a76400008105806104405760405162461bcd60e51b815260040161050890612ab4565b610ea96120c5565b600080610eb585610718565b9092509050600382601c811115610ec857fe5b1415610eda57610d848787838761149c565b601a82601c811115610ee857fe5b1415610efa57610d84878783876114b8565b601b82601c811115610f0857fe5b1415610f1a57610d848787838761157d565b601482601c811115610f2857fe5b1415610f3a57610d84878783876115b4565b600b82601c811115610f4857fe5b1415610f5a57610d84878783876115cb565b60405162461bcd60e51b815260040161050890612f01565b60008082600c811115610f8157fe5b1415610f8f57506001610707565b600182600c811115610f9d57fe5b1415610fac5750600019610707565b600682600c811115610fba57fe5b1415610fc857506001610707565b600782600c811115610fd657fe5b1415610fe55750600019610707565b600282600c811115610ff357fe5b141561100157506001610707565b600382600c81111561100f57fe5b141561101e5750600019610707565b60405162461bcd60e51b815260040161050890612b47565b60608401516000901580611048575081155b15611054575081610440565b6001611061858588610448565b600181111561106c57fe5b146110825761107d85836001611152565b61059d565b61059d610bf886846001611152565b600060018260018111156110a157fe5b14156110e6576110b0836116b6565b600614156110ca576110c38360026116c9565b905061074f565b6110d3836116b6565b600714156110e6576110c38360016116c9565b5090919050565b60006110fc6201518083610d0e565b509392505050565b6000600182600181111561111457fe5b14156110e657611123836116b6565b60061415611136576110c38360016116de565b61113f836116b6565b600714156110e6576110c38360026116de565b600080808560200151600581111561116657fe5b1415611181578451610643908590850263ffffffff6116c916565b60018560200151600581111561119357fe5b14156111b1578451610643908590850260070263ffffffff6116c916565b6002856020015160058111156111c357fe5b14156111de578451610643908590850263ffffffff6116f316565b6003856020015160058111156111f057fe5b141561120e578451610643908590850260030263ffffffff6116f316565b60048560200151600581111561122057fe5b141561123e578451610643908590850260060263ffffffff6116f316565b60058560200151600581111561125057fe5b141561126b578451610643908590850263ffffffff61176d16565b60405162461bcd60e51b8152600401610508906129da565b60008060008061129285611794565b9194509250905060006112a58484611348565b90506105338484836117b2565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161130957fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806113595750816003145b806113645750816005145b8061136f5750816007145b8061137a5750816008145b80611385575081600a145b80611390575081600c145b1561139d5750601f61074f565b816002146113ad5750601e61074f565b6113b6836117cc565b6113c157601c6113c4565b601d5b60ff169392505050565b6000808560c0015160018111156113e157fe5b1415611405578461024001516113fa8660400151610f72565b60000b029050610440565b60006114506114278660200151886080015189602001518a6101800151610a7d565b6114408689608001518a602001518b6101800151610a7d565b88606001518961018001516117f1565b90506105336114758660e0015161063789610240015185610e0390919063ffffffff16565b6101208701519063ffffffff6118ee16565b6101208301516101c084015101949350505050565b6114a46120c5565b505060006101208301526020820152919050565b6114c06120c5565b60006114e26114278660200151886080015189602001518a6101800151610a7d565b60208601859052610280870151909150611502908463ffffffff610e0316565b6101c08601526080850184905260008660c00151600181111561152157fe5b14156115495785610240015161153a8760400151610f72565b60000b02610120860152611573565b61156c6114758660e0015161063789610240015185610e0390919063ffffffff16565b6101208601525b5092949350505050565b6115856120c5565b600060e085018190526101208501528360045b908160058111156115a557fe5b90525050506020820152919050565b6115bc6120c5565b600060e0850152836004611598565b6115d36120c5565b600084604001516000146115eb578460400151611604565b6116048487608001518860200151896101800151610931565b6102a08701516040015190915083906000901561163f57600061162c896102a0015185611934565b905080831161163d57600180895291505b505b876102c00151604001518015611653575080155b15611682576000611669896102c0015185611934565b905080831161167b5760028852611680565b600388525b505b60408701516116aa576116a48689608001518a602001518b6101800151610931565b60408801525b50949695505050505050565b6007620151809091046003010660010190565b62015180810282018281101561074f57600080fd5b62015180810282038281111561074f57600080fd5b60008080806117056201518087610d0e565b600c91880160001981018381049490940196509450925090066001019150600061172f8484611348565b90508082111561173d578091505b62015180870662015180611752868686611a60565b020194508685101561176357600080fd5b5050505092915050565b600080808061177f6201518087610d0e565b918701945092509050600061172f8484611348565b600080806117a56201518085610d0e565b9196909550909350915050565b6000620151806117c3858585611a60565b02949350505050565b6000600482061580156117e157506064820615155b8061074f57505061019090061590565b6000848410156118135760405162461bcd60e51b815260040161050890612cdd565b600083600581111561182157fe5b1415611831576106438585611adc565b600183600581111561183f57fe5b141561184f576106438585611bfc565b600283600581111561185d57fe5b141561186d576106438585611c27565b600483600581111561187b57fe5b141561188b576106438585611c46565b600383600581111561189957fe5b14156118aa57610643858584611d07565b60058360058111156118b857fe5b14156118d65760405162461bcd60e51b815260040161050890612c2f565b60405162461bcd60e51b815260040161050890612a28565b60008282018183128015906119035750838112155b80611918575060008312801561191857508381125b6105115760405162461bcd60e51b815260040161050890612b06565b600080808460200151600581111561194857fe5b141561196857835161196190849063ffffffff6116c916565b9050610511565b60018460200151600581111561197a57fe5b141561199657835161196190849060070263ffffffff6116c916565b6002846020015160058111156119a857fe5b14156119c157835161196190849063ffffffff6116f316565b6003846020015160058111156119d357fe5b14156119ef57835161196190849060030263ffffffff6116f316565b600484602001516005811115611a0157fe5b1415611a1d57835161196190849060060263ffffffff6116f316565b600584602001516005811115611a2f57fe5b1415611a4857835161196190849063ffffffff61176d16565b60405162461bcd60e51b815260040161050890612db1565b60006107b2841015611a7157600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f0281611aad57fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b600080611ae884611ddd565b90506000611af584611ddd565b90506000611b0286611df5565b611b0e5761016d611b12565b61016e5b61ffff16905081831415611b4457611b3a81611b2e8888611e12565b9063ffffffff611e2d16565b935050505061074f565b6000611b4f86611df5565b611b5b5761016d611b5f565b61016e5b61ffff1690506000611b9083611b2e8a611b8b611b838a600163ffffffff611ee916565b6001806117b2565b611e12565b90506000611bad83611b2e611ba7886001806117b2565b8b611e12565b9050611bef611bd36001611bc7888a63ffffffff611f0e16565b9063ffffffff611f0e16565b611be3848463ffffffff6118ee16565b9063ffffffff6118ee16565b9998505050505050505050565b6000610511610168611b2e62015180611c1b868863ffffffff611f0e16565b9063ffffffff611f5016565b600061051161016d611b2e62015180611c1b868863ffffffff611f0e16565b6000806000806000806000611c5a89611794565b975095509350611c6988611794565b945092509050601f861415611c7d57601e95505b82601f1415611c8b57601e92505b6000611c9d848863ffffffff611f9216565b90506000611cb1848863ffffffff611f9216565b90506000611cc5848863ffffffff611f9216565b9050611cf7610168611b2e85611be3611ce587601e63ffffffff611fd816565b611be38761016863ffffffff611fd816565b9c9b505050505050505050505050565b6000806000806000806000611d1b8a611794565b975095509350611d2a89611794565b945092509050611d398a610d01565b861415611d4557601e95505b8789148015611d545750816002145b158015611d685750611d6589610d01565b83145b15611d7257601e92505b6000611d84848863ffffffff611f9216565b90506000611d98848863ffffffff611f9216565b90506000611dac848863ffffffff611f9216565b9050611dcc610168611b2e85611be3611ce587601e63ffffffff611fd816565b9d9c50505050505050505050505050565b6000611dec6201518083610d0e565b50909392505050565b600080611e056201518084610d0e565b50509050610511816117cc565b600081831115611e2157600080fd5b50620151809190030490565b600081611e4c5760405162461bcd60e51b815260040161050890612ebd565b82611e595750600061074f565b670de0b6b3a764000083810290848281611e6f57fe5b0514611e8d5760405162461bcd60e51b815260040161050890612d6b565b82600019148015611ea15750600160ff1b84145b15611ebe5760405162461bcd60e51b815260040161050890612d6b565b6000838281611ec957fe5b059050806104405760405162461bcd60e51b815260040161050890612c8c565b6000828201838110156105115760405162461bcd60e51b815260040161050890612a7d565b600061051183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612043565b600061051183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061206f565b6000818303818312801590611fa75750838113155b80611fbc5750600083128015611fbc57508381135b6105115760405162461bcd60e51b815260040161050890612e79565b600082611fe75750600061074f565b82600019148015611ffb5750600160ff1b82145b156120185760405162461bcd60e51b815260040161050890612d24565b8282028284828161202557fe5b05146105115760405162461bcd60e51b815260040161050890612d24565b600081848411156120675760405162461bcd60e51b81526004016105089190612939565b505050900390565b600081836120905760405162461bcd60e51b81526004016105089190612939565b50600083858161209c57fe5b0495945050505050565b60405180610f0001604052806078906020820280368337509192915050565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356001600160a01b038116811461074f57600080fd5b80356009811061074f57600080fd5b803561074f81613074565b803561074f81613081565b8035600d811061074f57600080fd5b80356013811061074f57600080fd5b60006104e082840312156121cb578081fd5b50919050565b6000608082840312156121e2578081fd5b6121ec608061303c565b90508135815260208201356020820152604082013561220a8161308e565b6040820152606082013561221d8161308e565b606082015292915050565b600060808284031215612239578081fd5b612243608061303c565b905081358152602082013561225781613081565b6020820152604082013561226a81613074565b6040820152606082013561221d81613063565b60006060828403121561228e578081fd5b612298606061303c565b90508135815260208201356122ac81613081565b6020820152604082013580151581146122c457600080fd5b604082015292915050565b600061028082840312156121cb578081fd5b6000602082840312156122f2578081fd5b610511838361215f565b60006020828403121561230d578081fd5b5035919050565b60008060008060808587031215612329578283fd5b8435935060208501356009811061233e578384fd5b9250604085013561234e81613074565b9396929550929360600135925050565b6000806000806000610a208688031215612376578283fd5b8535945061238787602088016121b9565b93506123978761050088016122cf565b92506107808601356123a881613063565b91506123b8876107a088016122cf565b90509295509295909350565b6000602082840312156123d5578081fd5b8135600d8110610511578182fd5b6000602082840312156123f4578081fd5b813561051181613074565b600080600060c08486031215612413578081fd5b833561241e81613074565b9250602084013591506124348560408601612228565b90509250925092565b60006020828403121561244e578081fd5b81356105118161309b565b6000806040838503121561246b578182fd5b82356124768161309b565b946020939093013593505050565b60006104e08284031215612496578081fd5b61051183836121b9565b6000806000806107a085870312156124b6578182fd5b6124c086866121b9565b93506124d0866104e087016122cf565b939693955050505061076082013591610780013590565b600080600061052084860312156124fc578081fd5b61250685856121b9565b92506104e0840135915061050084013561251f8161309b565b809150509250925092565b6000806000610520848603121561253f578081fd5b61254985856121b9565b956104e08501359550610500909401359392505050565b6000806000806105408587031215612576578182fd5b61258086866121b9565b93506104e0850135925061050085013591506105208501356125a18161309b565b939692955090935050565b60006104e082840312156125be578081fd5b6125c961034061303c565b6125d384846121aa565b81526125e28460208501612185565b60208201526125f4846040850161219b565b60408201526126068460608501612190565b60608201526126188460808501612176565b608082015261262a8460a08501612185565b60a082015261263c8460c08501612185565b60c082015261264e8460e08501612190565b60e08201526101006126628582860161215f565b908201526101206126758585830161215f565b908201526101408381013590820152610160808401359082015261018080840135908201526101a080840135908201526101c080840135908201526101e08084013590820152610200808401359082015261022080840135908201526102408084013590820152610260808401359082015261028080840135908201526102a06127018582860161227d565b908201526103006127148585830161227d565b6102c0830152612728856103608601612228565b6102e083015261273c856103e086016121d1565b9082015261274e8461046085016121d1565b6103208201529392505050565b60006080828403121561276c578081fd5b6105118383612228565b6000610280808385031215612789578182fd5b6127928161303c565b61279c8585612190565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b60008060008060808587031215612888578182fd5b8435935061233e8660208701612176565b600681106128a357fe5b9052565b6020808252825182820181905260009190848201906040850190845b818110156128df578351835292840192918401916001016128c3565b50909695505050505050565b901515815260200190565b90815260200190565b602081016013831061290d57fe5b91905290565b602081016002831061290d57fe5b60408101601d841061292f57fe5b9281526020015290565b6000602080835283518082850152825b8181101561296557858101830151858201604001528201612949565b818111156129765783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602e908201527f5363686564756c652e636f6d70757465446174657346726f6d4379636c653a2060408201526d4d41585f4359434c455f53495a4560901b606082015260800190565b6020808252602e908201527f5363686564756c652e6765744e6578744379636c65446174653a20415454524960408201526d1095551157d393d517d193d5539160921b606082015260800190565b60208082526035908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a6040820152741020aa2a2924a12aaa22afa727aa2fa327aaa7221760591b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526032908201527f5369676e65644d6174682e666c6f61744d756c743a2043414e4e4f545f524550604082015271524553454e545f4752414e554c415249545960701b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526034908201527f436f6e7472616374526f6c65436f6e76656e74696f6e2e726f6c655369676e3a6040820152730810551514925095551157d393d517d193d5539160621b606082015260800190565b60208082526027908201527f5369676e65644d6174682e666c6f61744d756c743a204f564552464c4f575f4460408201526611551150d5115160ca1b606082015260800190565b6020808252602d908201527f434547456e67696e652e7061796f666646756e6374696f6e3a2041545452494260408201526c15551157d393d517d193d55391609a1b606082015260800190565b60208082526039908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a60408201527f204154545249425554455f4e4f545f535550504f525445442e00000000000000606082015260800190565b60208082526031908201527f5369676e65644d6174682e666c6f61744469763a2043414e4e4f545f524550526040820152704553454e545f4752414e554c415249545960781b606082015260800190565b60208082526027908201527f436f72652e796561724672616374696f6e3a2053544152545f4e4f545f42454660408201526613d49157d1539160ca1b606082015260800190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526026908201527f5369676e65644d6174682e666c6f61744469763a204f564552464c4f575f4445604082015265151150d5115160d21b606082015260800190565b60208082526037908201527f506572696f645574696c732e67657454696d657374616d70506c75735065726960408201527f6f643a204154545249425554455f4e4f545f464f554e44000000000000000000606082015260800190565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b60208082526024908201527f5369676e65644d6174682e666c6f61744469763a20444956494445445f42595f6040820152635a45524f60e01b606082015260800190565b60208082526036908201527f434547456e67696e652e73746174655472616e736974696f6e46756e6374696f6040820152751b8e8810551514925095551157d393d517d193d5539160521b606082015260800190565b600061028082019050612f6b828451612899565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60405181810167ffffffffffffffff8111828210171561305b57600080fd5b604052919050565b801515811461307157600080fd5b50565b6002811061307157600080fd5b6006811061307157600080fd5b6005811061307157600080fd5b601d811061307157600080fdfea2646970667358221220d6fe6225c0c30e3717b01dc938633b912190cca5f3b871a6b3ac04cb1ec8a44364736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101215760003560e01c8063811322fb116100ad578063dad412b511610071578063dad412b514610269578063e05a66e01461027c578063e726d6801461028f578063edc0465f1461024c578063f5586e05146102a257610121565b8063811322fb1461021e578063aaf5eb6814610231578063b90f736814610239578063c40c5a981461024c578063cb2ef6f71461025457610121565b80631f252723116100f45780631f252723146101af578063392aef8e146101c257806367b58117146101e25780636f37e55b146101f557806372540003146101fd57610121565b80630ba295ba14610126578063179331f31461014f5780631a2e165d1461016f5780631a7709111461018f575b600080fd5b610139610134366004612560565b6102b5565b60405161014691906128a7565b60405180910390f35b61016261015d3660046123ff565b610448565b6040516101469190612913565b61018261017d366004612314565b610518565b60405161014691906128f6565b6101a261019d36600461235e565b61053d565b60405161014691906128eb565b6101826101bd3660046124a0565b6105a6565b6101d56101d03660046124a0565b610672565b6040516101469190612f57565b6101d56101f0366004612484565b6106a2565b61018261070c565b61021061020b3660046122fc565b610718565b604051610146929190612921565b61018261022c36600461243d565b610741565b610182610755565b6101826102473660046124e7565b61075a565b6101826107dd565b61025c6107e2565b60405161014691906128ff565b61013961027736600461252a565b6107e7565b61018261028a366004612459565b610913565b61018261029d366004612873565b610931565b6101826102b0366004612873565b610a7d565b60606102bf6120a6565b6000600384601c8111156102cf57fe5b14156103b9576101c0870135156103b9576102e86120a6565b6103236101c08901356101808a013561030a368c90038c016103608d0161275b565b61031a60c08d0160a08e016123e3565b60018c8c610ae8565b905060005b60788160ff1610156103b657818160ff166078811061034357fe5b6020020151610351576103b6565b61036f828260ff166078811061036357fe5b60200201518989610cd2565b610378576103ae565b6103966003838360ff166078811061038c57fe5b6020020151610913565b8484607881106103a257fe5b60200201526001909201915b600101610328565b50505b60608167ffffffffffffffff811180156103d257600080fd5b506040519080825280602002602001820160405280156103fc578160200160208202803683370190505b50905060005b8281101561043a5783816078811061041657fe5b602002015182828151811061042757fe5b6020908102919091010152600101610402565b50925050505b949350505050565b6000600184600181111561045857fe5b14156104d45761046783610d01565b61047084610d23565b1480156104bf575060028260200151600581111561048a57fe5b14806104a557506003826020015160058111156104a357fe5b145b806104bf57506004826020015160058111156104bd57fe5b145b156104cc57506001610511565b506000610511565b60008460018111156104e257fe5b14156104f057506000610511565b60405162461bcd60e51b815260040161050890612e0e565b60405180910390fd5b9392505050565b60008061052486610718565b91505061053381868686610931565b9695505050505050565b60008061054987610718565b509050831561059757600381601c81111561056057fe5b14806105775750601481601c81111561057557fe5b145b801561058857506000836101c00135135b1561059757600091505061059d565b60019150505b95945050505050565b6000806105bb610140870161012088016122e1565b6001600160a01b03161415801561060657506105df610140860161012087016122e1565b6001600160a01b03166105fa610120870161010088016122e1565b6001600160a01b031614155b1561064a5761064382610637610621368990038901896125ac565b61063036899003890189612776565b8787610d32565b9063ffffffff610e0316565b9050610440565b61059d61065c368790038701876125ac565b61066b36879003870187612776565b8585610d32565b61067a6120c5565b61059d61068c368790038701876125ac565b61069b36879003870187612776565b8585610ea1565b6106aa6120c5565b6106b26120c5565b6000815261016083013560208201526101808301356060808301919091526101e0840135906106ef906106ea908601604087016123c4565b610f72565b60000b0260e082015261022083013561012082015290505b919050565b670de0b6b3a764000081565b6000808060f884901c601c81111561072c57fe5b92505067ffffffffffffffff83169050915091565b600081601c81111561074f57fe5b92915050565b601281565b6000600382601c81111561076a57fe5b14156107d3576101c0840135156107d35760006107af610793368790038701610360880161275b565b6107a360c0880160a089016123e3565b876101c0013587611036565b9050806107c0575060009050610511565b6107cb600382610913565b915050610511565b5060009392505050565b607881565b601090565b60606107f16120a6565b60006101a08601351561083c5761080e866101a001358686610cd2565b1561083c57610823600f876101a00135610913565b828261ffff166078811061083357fe5b60200201526001015b61084c8661018001358686610cd2565b15156001141561087f576108666014876101800135610913565b828261ffff166078811061087657fe5b60200201526001015b60608161ffff1667ffffffffffffffff8111801561089c57600080fd5b506040519080825280602002602001820160405280156108c6578160200160208202803683370190505b50905060005b8261ffff16811015610908578381607881106108e457fe5b60200201518282815181106108f557fe5b60209081029190910101526001016108cc565b509695505050505050565b60008160f884601c81111561092457fe5b60ff16901b179392505050565b600081851415610942575083610440565b600184600881111561095057fe5b14806109675750600384600881111561096557fe5b145b15610976576106438584611091565b600284600881111561098457fe5b148061099b5750600484600881111561099957fe5b145b156109df5760006109ac8685611091565b90506109b7866110ed565b6109c0826110ed565b14156109cd579050610440565b6109d78685611104565b915050610440565b60058460088111156109ed57fe5b1480610a0457506007846008811115610a0257fe5b145b15610a13576106438584611104565b6006846008811115610a2157fe5b1480610a3857506008846008811115610a3657fe5b145b15610a74576000610a498685611104565b9050610a54866110ed565b610a5d826110ed565b1415610a6a579050610440565b6109d78685611091565b50929392505050565b60006003846008811115610a8d57fe5b1480610aa457506004846008811115610aa257fe5b145b80610aba57506007846008811115610ab857fe5b145b80610ad057506008846008811115610ace57fe5b145b15610adc575083610440565b61059d85858585610931565b610af06120a6565b610af86120a6565b6060870151600090610b6057610b0f8a8686610cd2565b15610b2a5789828260788110610b2157fe5b60200201526001015b610b35898686610cd2565b15610b585760018615151415610b585788828260788110610b5257fe5b60200201525b509050610cc7565b89600080610b6f8a848d610448565b90505b8b831015610c0457610b85838989610cd2565b15610bc35760768410610baa5760405162461bcd60e51b81526004016105089061298c565b82858560788110610bb757fe5b60200201526001909301925b600191820191816001811115610bd557fe5b14610bea57610be58b8e84611152565b610bfd565b610bfd610bf88c8f85611152565b611283565b9250610b72565b60018915151415610c3257610c1a8c8989610cd2565b15610c32578b858560788110610c2c57fe5b60200201525b600084118015610c4f5750610c4f85600186036078811061036357fe5b15610cbf5760008b604001516001811115610c6657fe5b148015610c735750600184115b8015610c7f5750828c14155b15610cbf57848460788110610c9057fe5b6020020151856001860360788110610ca457fe5b6020020152848460788110610cb557fe5b6020020160008152505b509293505050505b979650505050505050565b600081831115610ce457506000610511565b838311158015610cf45750818411155b156107d357506001610511565b60008080610d1462015180855b046112b2565b50915091506104408282611348565b60006104406201518083610d0e565b6000806000610d4085610718565b9092509050600b82601c811115610d5357fe5b1415610d6457600092505050610440565b600382601c811115610d7257fe5b1415610d8d57610d84878783876113ce565b92505050610440565b601a82601c811115610d9b57fe5b1415610dac57600092505050610440565b601b82601c811115610dba57fe5b1415610dcc57610d8487878387611487565b601482601c811115610dda57fe5b1415610deb57600092505050610440565b60405162461bcd60e51b815260040161050890612be2565b6000821580610e10575081155b15610e1d5750600061074f565b82600019148015610e315750600160ff1b82145b15610e4e5760405162461bcd60e51b815260040161050890612b9b565b82820282848281610e5b57fe5b0514610e795760405162461bcd60e51b815260040161050890612b9b565b670de0b6b3a76400008105806104405760405162461bcd60e51b815260040161050890612ab4565b610ea96120c5565b600080610eb585610718565b9092509050600382601c811115610ec857fe5b1415610eda57610d848787838761149c565b601a82601c811115610ee857fe5b1415610efa57610d84878783876114b8565b601b82601c811115610f0857fe5b1415610f1a57610d848787838761157d565b601482601c811115610f2857fe5b1415610f3a57610d84878783876115b4565b600b82601c811115610f4857fe5b1415610f5a57610d84878783876115cb565b60405162461bcd60e51b815260040161050890612f01565b60008082600c811115610f8157fe5b1415610f8f57506001610707565b600182600c811115610f9d57fe5b1415610fac5750600019610707565b600682600c811115610fba57fe5b1415610fc857506001610707565b600782600c811115610fd657fe5b1415610fe55750600019610707565b600282600c811115610ff357fe5b141561100157506001610707565b600382600c81111561100f57fe5b141561101e5750600019610707565b60405162461bcd60e51b815260040161050890612b47565b60608401516000901580611048575081155b15611054575081610440565b6001611061858588610448565b600181111561106c57fe5b146110825761107d85836001611152565b61059d565b61059d610bf886846001611152565b600060018260018111156110a157fe5b14156110e6576110b0836116b6565b600614156110ca576110c38360026116c9565b905061074f565b6110d3836116b6565b600714156110e6576110c38360016116c9565b5090919050565b60006110fc6201518083610d0e565b509392505050565b6000600182600181111561111457fe5b14156110e657611123836116b6565b60061415611136576110c38360016116de565b61113f836116b6565b600714156110e6576110c38360026116de565b600080808560200151600581111561116657fe5b1415611181578451610643908590850263ffffffff6116c916565b60018560200151600581111561119357fe5b14156111b1578451610643908590850260070263ffffffff6116c916565b6002856020015160058111156111c357fe5b14156111de578451610643908590850263ffffffff6116f316565b6003856020015160058111156111f057fe5b141561120e578451610643908590850260030263ffffffff6116f316565b60048560200151600581111561122057fe5b141561123e578451610643908590850260060263ffffffff6116f316565b60058560200151600581111561125057fe5b141561126b578451610643908590850263ffffffff61176d16565b60405162461bcd60e51b8152600401610508906129da565b60008060008061129285611794565b9194509250905060006112a58484611348565b90506105338484836117b2565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161130957fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806113595750816003145b806113645750816005145b8061136f5750816007145b8061137a5750816008145b80611385575081600a145b80611390575081600c145b1561139d5750601f61074f565b816002146113ad5750601e61074f565b6113b6836117cc565b6113c157601c6113c4565b601d5b60ff169392505050565b6000808560c0015160018111156113e157fe5b1415611405578461024001516113fa8660400151610f72565b60000b029050610440565b60006114506114278660200151886080015189602001518a6101800151610a7d565b6114408689608001518a602001518b6101800151610a7d565b88606001518961018001516117f1565b90506105336114758660e0015161063789610240015185610e0390919063ffffffff16565b6101208701519063ffffffff6118ee16565b6101208301516101c084015101949350505050565b6114a46120c5565b505060006101208301526020820152919050565b6114c06120c5565b60006114e26114278660200151886080015189602001518a6101800151610a7d565b60208601859052610280870151909150611502908463ffffffff610e0316565b6101c08601526080850184905260008660c00151600181111561152157fe5b14156115495785610240015161153a8760400151610f72565b60000b02610120860152611573565b61156c6114758660e0015161063789610240015185610e0390919063ffffffff16565b6101208601525b5092949350505050565b6115856120c5565b600060e085018190526101208501528360045b908160058111156115a557fe5b90525050506020820152919050565b6115bc6120c5565b600060e0850152836004611598565b6115d36120c5565b600084604001516000146115eb578460400151611604565b6116048487608001518860200151896101800151610931565b6102a08701516040015190915083906000901561163f57600061162c896102a0015185611934565b905080831161163d57600180895291505b505b876102c00151604001518015611653575080155b15611682576000611669896102c0015185611934565b905080831161167b5760028852611680565b600388525b505b60408701516116aa576116a48689608001518a602001518b6101800151610931565b60408801525b50949695505050505050565b6007620151809091046003010660010190565b62015180810282018281101561074f57600080fd5b62015180810282038281111561074f57600080fd5b60008080806117056201518087610d0e565b600c91880160001981018381049490940196509450925090066001019150600061172f8484611348565b90508082111561173d578091505b62015180870662015180611752868686611a60565b020194508685101561176357600080fd5b5050505092915050565b600080808061177f6201518087610d0e565b918701945092509050600061172f8484611348565b600080806117a56201518085610d0e565b9196909550909350915050565b6000620151806117c3858585611a60565b02949350505050565b6000600482061580156117e157506064820615155b8061074f57505061019090061590565b6000848410156118135760405162461bcd60e51b815260040161050890612cdd565b600083600581111561182157fe5b1415611831576106438585611adc565b600183600581111561183f57fe5b141561184f576106438585611bfc565b600283600581111561185d57fe5b141561186d576106438585611c27565b600483600581111561187b57fe5b141561188b576106438585611c46565b600383600581111561189957fe5b14156118aa57610643858584611d07565b60058360058111156118b857fe5b14156118d65760405162461bcd60e51b815260040161050890612c2f565b60405162461bcd60e51b815260040161050890612a28565b60008282018183128015906119035750838112155b80611918575060008312801561191857508381125b6105115760405162461bcd60e51b815260040161050890612b06565b600080808460200151600581111561194857fe5b141561196857835161196190849063ffffffff6116c916565b9050610511565b60018460200151600581111561197a57fe5b141561199657835161196190849060070263ffffffff6116c916565b6002846020015160058111156119a857fe5b14156119c157835161196190849063ffffffff6116f316565b6003846020015160058111156119d357fe5b14156119ef57835161196190849060030263ffffffff6116f316565b600484602001516005811115611a0157fe5b1415611a1d57835161196190849060060263ffffffff6116f316565b600584602001516005811115611a2f57fe5b1415611a4857835161196190849063ffffffff61176d16565b60405162461bcd60e51b815260040161050890612db1565b60006107b2841015611a7157600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f0281611aad57fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b600080611ae884611ddd565b90506000611af584611ddd565b90506000611b0286611df5565b611b0e5761016d611b12565b61016e5b61ffff16905081831415611b4457611b3a81611b2e8888611e12565b9063ffffffff611e2d16565b935050505061074f565b6000611b4f86611df5565b611b5b5761016d611b5f565b61016e5b61ffff1690506000611b9083611b2e8a611b8b611b838a600163ffffffff611ee916565b6001806117b2565b611e12565b90506000611bad83611b2e611ba7886001806117b2565b8b611e12565b9050611bef611bd36001611bc7888a63ffffffff611f0e16565b9063ffffffff611f0e16565b611be3848463ffffffff6118ee16565b9063ffffffff6118ee16565b9998505050505050505050565b6000610511610168611b2e62015180611c1b868863ffffffff611f0e16565b9063ffffffff611f5016565b600061051161016d611b2e62015180611c1b868863ffffffff611f0e16565b6000806000806000806000611c5a89611794565b975095509350611c6988611794565b945092509050601f861415611c7d57601e95505b82601f1415611c8b57601e92505b6000611c9d848863ffffffff611f9216565b90506000611cb1848863ffffffff611f9216565b90506000611cc5848863ffffffff611f9216565b9050611cf7610168611b2e85611be3611ce587601e63ffffffff611fd816565b611be38761016863ffffffff611fd816565b9c9b505050505050505050505050565b6000806000806000806000611d1b8a611794565b975095509350611d2a89611794565b945092509050611d398a610d01565b861415611d4557601e95505b8789148015611d545750816002145b158015611d685750611d6589610d01565b83145b15611d7257601e92505b6000611d84848863ffffffff611f9216565b90506000611d98848863ffffffff611f9216565b90506000611dac848863ffffffff611f9216565b9050611dcc610168611b2e85611be3611ce587601e63ffffffff611fd816565b9d9c50505050505050505050505050565b6000611dec6201518083610d0e565b50909392505050565b600080611e056201518084610d0e565b50509050610511816117cc565b600081831115611e2157600080fd5b50620151809190030490565b600081611e4c5760405162461bcd60e51b815260040161050890612ebd565b82611e595750600061074f565b670de0b6b3a764000083810290848281611e6f57fe5b0514611e8d5760405162461bcd60e51b815260040161050890612d6b565b82600019148015611ea15750600160ff1b84145b15611ebe5760405162461bcd60e51b815260040161050890612d6b565b6000838281611ec957fe5b059050806104405760405162461bcd60e51b815260040161050890612c8c565b6000828201838110156105115760405162461bcd60e51b815260040161050890612a7d565b600061051183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612043565b600061051183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061206f565b6000818303818312801590611fa75750838113155b80611fbc5750600083128015611fbc57508381135b6105115760405162461bcd60e51b815260040161050890612e79565b600082611fe75750600061074f565b82600019148015611ffb5750600160ff1b82145b156120185760405162461bcd60e51b815260040161050890612d24565b8282028284828161202557fe5b05146105115760405162461bcd60e51b815260040161050890612d24565b600081848411156120675760405162461bcd60e51b81526004016105089190612939565b505050900390565b600081836120905760405162461bcd60e51b81526004016105089190612939565b50600083858161209c57fe5b0495945050505050565b60405180610f0001604052806078906020820280368337509192915050565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356001600160a01b038116811461074f57600080fd5b80356009811061074f57600080fd5b803561074f81613074565b803561074f81613081565b8035600d811061074f57600080fd5b80356013811061074f57600080fd5b60006104e082840312156121cb578081fd5b50919050565b6000608082840312156121e2578081fd5b6121ec608061303c565b90508135815260208201356020820152604082013561220a8161308e565b6040820152606082013561221d8161308e565b606082015292915050565b600060808284031215612239578081fd5b612243608061303c565b905081358152602082013561225781613081565b6020820152604082013561226a81613074565b6040820152606082013561221d81613063565b60006060828403121561228e578081fd5b612298606061303c565b90508135815260208201356122ac81613081565b6020820152604082013580151581146122c457600080fd5b604082015292915050565b600061028082840312156121cb578081fd5b6000602082840312156122f2578081fd5b610511838361215f565b60006020828403121561230d578081fd5b5035919050565b60008060008060808587031215612329578283fd5b8435935060208501356009811061233e578384fd5b9250604085013561234e81613074565b9396929550929360600135925050565b6000806000806000610a208688031215612376578283fd5b8535945061238787602088016121b9565b93506123978761050088016122cf565b92506107808601356123a881613063565b91506123b8876107a088016122cf565b90509295509295909350565b6000602082840312156123d5578081fd5b8135600d8110610511578182fd5b6000602082840312156123f4578081fd5b813561051181613074565b600080600060c08486031215612413578081fd5b833561241e81613074565b9250602084013591506124348560408601612228565b90509250925092565b60006020828403121561244e578081fd5b81356105118161309b565b6000806040838503121561246b578182fd5b82356124768161309b565b946020939093013593505050565b60006104e08284031215612496578081fd5b61051183836121b9565b6000806000806107a085870312156124b6578182fd5b6124c086866121b9565b93506124d0866104e087016122cf565b939693955050505061076082013591610780013590565b600080600061052084860312156124fc578081fd5b61250685856121b9565b92506104e0840135915061050084013561251f8161309b565b809150509250925092565b6000806000610520848603121561253f578081fd5b61254985856121b9565b956104e08501359550610500909401359392505050565b6000806000806105408587031215612576578182fd5b61258086866121b9565b93506104e0850135925061050085013591506105208501356125a18161309b565b939692955090935050565b60006104e082840312156125be578081fd5b6125c961034061303c565b6125d384846121aa565b81526125e28460208501612185565b60208201526125f4846040850161219b565b60408201526126068460608501612190565b60608201526126188460808501612176565b608082015261262a8460a08501612185565b60a082015261263c8460c08501612185565b60c082015261264e8460e08501612190565b60e08201526101006126628582860161215f565b908201526101206126758585830161215f565b908201526101408381013590820152610160808401359082015261018080840135908201526101a080840135908201526101c080840135908201526101e08084013590820152610200808401359082015261022080840135908201526102408084013590820152610260808401359082015261028080840135908201526102a06127018582860161227d565b908201526103006127148585830161227d565b6102c0830152612728856103608601612228565b6102e083015261273c856103e086016121d1565b9082015261274e8461046085016121d1565b6103208201529392505050565b60006080828403121561276c578081fd5b6105118383612228565b6000610280808385031215612789578182fd5b6127928161303c565b61279c8585612190565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b60008060008060808587031215612888578182fd5b8435935061233e8660208701612176565b600681106128a357fe5b9052565b6020808252825182820181905260009190848201906040850190845b818110156128df578351835292840192918401916001016128c3565b50909695505050505050565b901515815260200190565b90815260200190565b602081016013831061290d57fe5b91905290565b602081016002831061290d57fe5b60408101601d841061292f57fe5b9281526020015290565b6000602080835283518082850152825b8181101561296557858101830151858201604001528201612949565b818111156129765783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602e908201527f5363686564756c652e636f6d70757465446174657346726f6d4379636c653a2060408201526d4d41585f4359434c455f53495a4560901b606082015260800190565b6020808252602e908201527f5363686564756c652e6765744e6578744379636c65446174653a20415454524960408201526d1095551157d393d517d193d5539160921b606082015260800190565b60208082526035908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a6040820152741020aa2a2924a12aaa22afa727aa2fa327aaa7221760591b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526032908201527f5369676e65644d6174682e666c6f61744d756c743a2043414e4e4f545f524550604082015271524553454e545f4752414e554c415249545960701b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526034908201527f436f6e7472616374526f6c65436f6e76656e74696f6e2e726f6c655369676e3a6040820152730810551514925095551157d393d517d193d5539160621b606082015260800190565b60208082526027908201527f5369676e65644d6174682e666c6f61744d756c743a204f564552464c4f575f4460408201526611551150d5115160ca1b606082015260800190565b6020808252602d908201527f434547456e67696e652e7061796f666646756e6374696f6e3a2041545452494260408201526c15551157d393d517d193d55391609a1b606082015260800190565b60208082526039908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a60408201527f204154545249425554455f4e4f545f535550504f525445442e00000000000000606082015260800190565b60208082526031908201527f5369676e65644d6174682e666c6f61744469763a2043414e4e4f545f524550526040820152704553454e545f4752414e554c415249545960781b606082015260800190565b60208082526027908201527f436f72652e796561724672616374696f6e3a2053544152545f4e4f545f42454660408201526613d49157d1539160ca1b606082015260800190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526026908201527f5369676e65644d6174682e666c6f61744469763a204f564552464c4f575f4445604082015265151150d5115160d21b606082015260800190565b60208082526037908201527f506572696f645574696c732e67657454696d657374616d70506c75735065726960408201527f6f643a204154545249425554455f4e4f545f464f554e44000000000000000000606082015260800190565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b60208082526024908201527f5369676e65644d6174682e666c6f61744469763a20444956494445445f42595f6040820152635a45524f60e01b606082015260800190565b60208082526036908201527f434547456e67696e652e73746174655472616e736974696f6e46756e6374696f6040820152751b8e8810551514925095551157d393d517d193d5539160521b606082015260800190565b600061028082019050612f6b828451612899565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60405181810167ffffffffffffffff8111828210171561305b57600080fd5b604052919050565b801515811461307157600080fd5b50565b6002811061307157600080fd5b6006811061307157600080fd5b6005811061307157600080fd5b601d811061307157600080fdfea2646970667358221220d6fe6225c0c30e3717b01dc938633b912190cca5f3b871a6b3ac04cb1ec8a44364736f6c634300060b0033",
  "immutableReferences": {},
  "sourceMap": "514:11246:93:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "514:11246:93:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5052:1418;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1010:924:78;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;631:346:84:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8190:685:93:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1860:734::-;;;;;;:::i;:::-;;:::i;1100:376::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2779:484::-;;;;;;:::i;:::-;;:::i;298:52:73:-;;;:::i;487:293:82:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;956:145::-;;;;;;:::i;:::-;;:::i;254:38:73:-;;;:::i;6826:764:93:-;;;;;;:::i;:::-;;:::i;356:44:73:-;;;:::i;576:110:93:-;;;:::i;:::-;;;;;;;:::i;3628:1018::-;;;;;;:::i;:::-;;:::i;234:247:82:-;;;;;;:::i;:::-;;:::i;1599:2214:75:-;;;;;;:::i;:::-;;:::i;648:583::-;;;;;;:::i;:::-;;:::i;5052:1418:93:-;5280:16;5312:46;;:::i;:::-;5368:13;5413:12;5400:9;:25;;;;;;;;;5396:839;;;5465:26;;;;:31;5461:764;;5516:42;;:::i;:::-;5561:312;5611:26;;;;5659:18;;;;5561:312;;;;;;;5699:16;;;5561:312;:::i;:::-;5737:26;;;;;;;;:::i;:::-;5785:4;5811:12;5845:10;5561:28;:312::i;:::-;5516:357;-1:-1:-1;5896:7:93;5891:320;397:3:73;5909:1:93;:18;;;5891:320;;;5960:11;5972:1;5960:14;;;;;;;;;;;;;5956:30;;5981:5;;5956:30;6012:53;6024:11;6036:1;6024:14;;;;;;;;;;;;;6040:12;6054:10;6012:11;:53::i;:::-;6008:76;;6076:8;;6008:76;6122:41;6134:12;6148:11;6160:1;6148:14;;;;;;;;;;;;;6122:11;:41::i;:::-;6106:6;6113:5;6106:13;;;;;;;;;;:57;6185:7;;;;;5891:320;5929:3;;5891:320;;;;5461:764;;6296:25;6338:5;6324:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6324:20:93;-1:-1:-1;6296:48:93;-1:-1:-1;6359:9:93;6354:84;6378:5;6374:1;:9;6354:84;;;6418:6;6425:1;6418:9;;;;;;;;;;;6404:8;6413:1;6404:11;;;;;;;;;;;;;;;;;:23;6385:3;;6354:84;;;-1:-1:-1;6455:8:93;-1:-1:-1;;;5052:1418:93;;;;;;;:::o;1010:924:78:-;1185:20;1233:24;1225:4;:32;;;;;;;;;1221:618;;;1483:53;1526:9;1483:42;:53::i;:::-;1434:45;1469:9;1434:34;:45::i;:::-;:102;:174;;;;-1:-1:-1;1568:3:78;1557:5;:7;;;:14;;;;;;;;;:32;;;-1:-1:-1;1586:3:78;1575:5;:7;;;:14;;;;;;;;;1557:32;:50;;;-1:-1:-1;1604:3:78;1593:5;:7;;;:14;;;;;;;;;1557:50;1413:274;;;-1:-1:-1;1648:24:78;1641:31;;1413:274;-1:-1:-1;1707:23:78;1700:30;;1221:618;1759:23;1751:4;:31;;;;;;;;;1747:92;;;-1:-1:-1;1805:23:78;1798:30;;1747:92;1848:79;;-1:-1:-1;;;1848:79:78;;;;;;;:::i;:::-;;;;;;;;1010:924;;;;;;:::o;631:346:84:-;794:7;820:20;844:19;856:6;844:11;:19::i;:::-;817:46;;;913:57;928:12;942:3;947:8;957:12;913:14;:57::i;:::-;906:64;631:346;-1:-1:-1;;;;;;631:346:84:o;8190:685:93:-;8453:4;8474:19;8498;8510:6;8498:11;:19::i;:::-;8473:44;;;8532:13;8528:319;;;8673:12;8660:9;:25;;;;;;;;;:54;;;-1:-1:-1;8702:12:93;8689:9;:25;;;;;;;;;8660:54;8659:118;;;;;8775:1;8735:15;:30;;;:42;8659:118;8638:199;;;8817:5;8810:12;;;;;8638:199;8864:4;8857:11;;;8190:685;;;;;;;;:::o;1860:734::-;2078:6;;2184:24;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2184:38:93;;;:84;;;;-1:-1:-1;2244:24:93;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2226:42:93;:14;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2226:42:93;;;2184:84;2180:282;;;2291:160;2437:12;2291:128;;;;;;;;2323:5;2291:128;:::i;:::-;;;;;;;;2346:5;2291:128;:::i;:::-;2369:6;2393:12;2291:14;:128::i;:::-;:138;:160;:138;:160;:::i;:::-;2284:167;;;;2180:282;2479:108;;;;;;;;2507:5;2479:108;:::i;:::-;;;;;;;;2526:5;2479:108;:::i;:::-;2545:6;2565:12;2479:14;:108::i;1100:376::-;1317:12;;:::i;:::-;1352:117;;;;;;;;1389:5;1352:117;:::i;:::-;;;;;;;;1408:5;1352:117;:::i;:::-;1427:6;1447:12;1352:23;:117::i;2779:484::-;2897:12;;:::i;:::-;2925:18;;:::i;:::-;2982:22;2954:50;;3033:16;;;;3014;;;:35;3080:18;;;;3059;;;;:39;;;;3165:23;;;;;3134:28;;3143:18;;;;;;;;:::i;:::-;3134:8;:28::i;:::-;:54;;;3108:23;;;:80;3217:16;;;;3198;;;:35;3108:5;-1:-1:-1;2779:484:93;;;;:::o;298:52:73:-;338:12;298:52;:::o;487:293:82:-;569:9;;;659:3;649:13;;;625:40;;;;;;;;603:62;-1:-1:-1;;698:32:82;;;;-1:-1:-1;487:293:82;;;:::o;956:145::-;1046:7;1084:9;1076:18;;;;;;;;1069:25;956:145;-1:-1:-1;;956:145:82:o;254:38:73:-;290:2;254:38;:::o;6826:764:93:-;7023:7;7079:12;7066:9;:25;;;;;;;;;7062:494;;;7111:26;;;;:31;7107:439;;7162:19;7184:227;;;;;;;;7243:16;;;7184:227;:::i;:::-;7281:26;;;;;;;;:::i;:::-;7329:5;:26;;;7377:16;7184:37;:227::i;:::-;7162:249;-1:-1:-1;7433:16:93;7429:39;;-1:-1:-1;7466:1:93;;-1:-1:-1;7451:17:93;;7429:39;7493:38;7505:12;7519:11;7493;:38::i;:::-;7486:45;;;;;7107:439;-1:-1:-1;7581:1:93;6826:764;;;;;:::o;356:44:73:-;397:3;356:44;:::o;576:110:93:-;663:16;576:110;:::o;3628:1018::-;3830:16;3862:46;;:::i;:::-;3918:12;3965:18;;;;:23;3961:236;;4008:57;4020:5;:18;;;4040:12;4054:10;4008:11;:57::i;:::-;4004:183;;;4101:46;4113:13;4128:5;:18;;;4101:11;:46::i;:::-;4085:6;4092:5;4085:13;;;;;;;;;;;;:62;4165:7;;4004:183;4237:57;4249:5;:18;;;4269:12;4283:10;4237:11;:57::i;:::-;:65;;4298:4;4237:65;4233:178;;;4334:45;4346:12;4360:5;:18;;;4334:11;:45::i;:::-;4318:6;4325:5;4318:13;;;;;;;;;;;;:61;4393:7;;4233:178;4472:25;4514:5;4500:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4500:20:93;-1:-1:-1;4472:48:93;-1:-1:-1;4535:9:93;4530:84;4554:5;4550:9;;:1;:9;4530:84;;;4594:6;4601:1;4594:9;;;;;;;;;;;4580:8;4589:1;4580:11;;;;;;;;;;;;;;;;;:23;4561:3;;4530:84;;;-1:-1:-1;4631:8:93;3628:1018;-1:-1:-1;;;;;;3628:1018:93:o;234:247:82:-;343:7;451:12;425:3;409:9;403:16;;;;;;;;395:25;;387:41;;:77;;234:247;-1:-1:-1;;;234:247:82:o;1599:2214:75:-;1800:7;1890:12;1877:9;:25;1873:47;;;-1:-1:-1;1911:9:75;1904:16;;1873:47;2003:25;1989:10;:39;;;;;;;;;:82;;;-1:-1:-1;2046:25:75;2032:10;:39;;;;;;;;;1989:82;1985:1795;;;2094:60;2134:9;2145:8;2094:39;:60::i;1985:1795::-;2372:26;2358:10;:40;;;;;;;;;:84;;;-1:-1:-1;2416:26:75;2402:10;:40;;;;;;;;;2358:84;2354:1426;;;2458:34;2495:60;2535:9;2546:8;2495:39;:60::i;:::-;2458:97;;2641:47;2678:9;2641:36;:47::i;:::-;2573:64;2610:26;2573:36;:64::i;:::-;:115;2569:187;;;2715:26;-1:-1:-1;2708:33:75;;2569:187;2776:61;2817:9;2828:8;2776:40;:61::i;:::-;2769:68;;;;;2354:1426;2928:25;2914:10;:39;;;;;;;;;:82;;;-1:-1:-1;2971:25:75;2957:10;:39;;;;;;;;;2914:82;2910:870;;;3019:61;3060:9;3071:8;3019:40;:61::i;2910:870::-;3301:26;3287:10;:40;;;;;;;;;:84;;;-1:-1:-1;3345:26:75;3331:10;:40;;;;;;;;;3287:84;3283:497;;;3387:35;3425:61;3466:9;3477:8;3425:40;:61::i;:::-;3387:99;;3573:47;3610:9;3573:36;:47::i;:::-;3504:65;3541:27;3504:36;:65::i;:::-;:116;3500:189;;;3647:27;-1:-1:-1;3640:34:75;;3500:189;3709:60;3749:9;3760:8;3709:39;:60::i;3283:497::-;-1:-1:-1;3797:9:75;;1599:2214;-1:-1:-1;;;1599:2214:75:o;648:583::-;848:7;902:25;888:10;:39;;;;;;;;;:95;;;-1:-1:-1;957:26:75;943:10;:40;;;;;;;;;888:95;:150;;;-1:-1:-1;1013:25:75;999:10;:39;;;;;;;;;888:150;:206;;;-1:-1:-1;1068:26:75;1054:10;:40;;;;;;;;;888:206;871:275;;;-1:-1:-1;1126:9:75;1119:16;;871:275;1163:61;1178:9;1189:10;1201:8;1211:12;1163:14;:61::i;2384:2503:81:-;2673:30;;:::i;:::-;2719:36;;:::i;:::-;3048:11;;;;2765:13;;3044:360;;3088:49;3100:10;3112:12;3126:10;3088:11;:49::i;:::-;3084:138;;;3172:10;3157:5;3163;3157:12;;;;;;;;;;:25;3200:7;;3084:138;3239:47;3251:8;3261:12;3275:10;3239:11;:47::i;:::-;3235:133;;;3324:4;3310:18;;;;3306:47;;;3345:8;3330:5;3336;3330:12;;;;;;;;;;:23;3306:47;-1:-1:-1;3388:5:81;-1:-1:-1;3381:12:81;;3044:360;3429:10;3414:12;;3512:51;3539:4;3429:10;3557:5;3512:26;:51::i;:::-;3478:85;;3650:615;3664:8;3657:4;:15;3650:615;;;3790:43;3802:4;3808:12;3822:10;3790:11;:43::i;:::-;3786:231;;;3870:18;3861:28;;3853:87;;;;-1:-1:-1;;;3853:87:81;;;;;;;:::i;:::-;3973:4;3958:5;3964;3958:12;;;;;;;;;;:19;3995:7;;;;;3786:231;4031:12;;;;;4066:10;:38;;;;;;;;;4065:189;;4207:47;4224:5;4231:10;4243;4207:16;:47::i;:::-;4065:189;;;4124:64;4140:47;4157:5;4164:10;4176;4140:16;:47::i;:::-;4124:15;:64::i;:::-;4058:196;;3650:615;;;4349:4;4335:18;;;;4331:157;;;4373:47;4385:8;4395:12;4409:10;4373:11;:47::i;:::-;4369:109;;;4455:8;4440:5;4446;4440:12;;;;;;;;;;:23;4369:109;4615:1;4607:5;:9;:68;;;;;4620:55;4632:5;4646:1;4638:5;:9;4632:16;;;;;;4620:55;4603:255;;;4706:6;4695:5;:7;;;:17;;;;;;;;;:30;;;;;4724:1;4716:5;:9;4695:30;:50;;;;;4741:4;4729:8;:16;;4695:50;4691:157;;;4784:5;4790;4784:12;;;;;;;;;;;4765:5;4779:1;4771:5;:9;4765:16;;;;;;;;;;:31;4821:5;4827;4821:12;;;;;;;;;;4814:19;;;;4691:157;-1:-1:-1;4875:5:81;;-1:-1:-1;;;;2384:2503:81;;;;;;;;;;:::o;5714:342::-;5877:4;5918:12;5901:14;:29;5897:47;;;-1:-1:-1;5939:5:81;5932:12;;5897:47;5976:9;5958:14;:27;;:56;;;;;6002:12;5989:9;:25;;5958:56;5954:73;;;-1:-1:-1;6023:4:81;6016:11;;6258:217:106;6321:16;;;6376:40;1020:12;6388:9;:27;;6376:11;:40::i;:::-;6349:67;;;;;6440:28;6456:4;6462:5;6440:15;:28::i;7362:132::-;7417:8;7447:40;1020:12;7459:9;:27;;10961:797:93;11151:6;11174:19;11195:20;11219:19;11231:6;11219:11;:19::i;:::-;11173:65;;-1:-1:-1;11173:65:93;-1:-1:-1;11355:12:93;11342:9;:25;;;;;;;;;11338:39;;;11376:1;11369:8;;;;;;11338:39;11404:12;11391:9;:25;;;;;;;;;11387:90;;;11425:52;11436:5;11443;11450:12;11464;11425:10;:52::i;:::-;11418:59;;;;;;11387:90;11504:12;11491:9;:25;;;;;;;;;11487:39;;;11525:1;11518:8;;;;;;11487:39;11553:13;11540:9;:26;;;;;;;;;11536:92;;;11575:53;11587:5;11594;11601:12;11615;11575:11;:53::i;11536:92::-;11655:12;11642:9;:25;;;;;;;;;11638:39;;;11676:1;11669:8;;;;;;11638:39;11696:55;;-1:-1:-1;;;11696:55:93;;;;;;;:::i;613:527:80:-;699:6;725;;;:16;;-1:-1:-1;735:6:80;;725:16;721:30;;;-1:-1:-1;750:1:80;743:8;;721:30;772:1;-1:-1:-1;;772:7:80;:26;;;;;-1:-1:-1;;;783:1:80;:15;772:26;770:29;762:81;;;;-1:-1:-1;;;762:81:80;;;;;;;:::i;:::-;864:5;;;868:1;864;:5;:1;887:5;;;;;:10;879:62;;;;-1:-1:-1;;;879:62:80;;;;;;;:::i;:::-;353:15;1010:25;;;1045:69;;;;-1:-1:-1;;;1045:69:80;;;;;;;:::i;9450:966:93:-;9649:12;;:::i;:::-;9678:19;9699:20;9723:19;9735:6;9723:11;:19::i;:::-;9677:65;;-1:-1:-1;9677:65:93;-1:-1:-1;9859:12:93;9846:9;:25;;;;;;;;;9842:90;;;9880:52;9891:5;9898;9905:12;9919;9880:10;:52::i;9842:90::-;9959:12;9946:9;:25;;;;;;;;;9942:90;;;9980:52;9991:5;9998;10005:12;10019;9980:10;:52::i;9942:90::-;10059:13;10046:9;:26;;;;;;;;;10042:92;;;10081:53;10093:5;10100;10107:12;10121;10081:11;:53::i;10042:92::-;10161:12;10148:9;:25;;;;;;;;;10144:90;;;10182:52;10193:5;10200;10207:12;10221;10182:10;:52::i;10144:90::-;10261:12;10248:9;:25;;;;;;;;;10244:90;;;10282:52;10293:5;10300;10307:12;10321;10282:10;:52::i;10244:90::-;10345:64;;-1:-1:-1;;;10345:64:93;;;;;;;:::i;251:523:76:-;343:4;;367:12;:32;;;;;;;;;363:46;;;-1:-1:-1;408:1:76;401:8;;363:46;439:16;423:12;:32;;;;;;;;;419:47;;;-1:-1:-1;;;457:9:76;;419:47;497:16;481:12;:32;;;;;;;;;477:46;;;-1:-1:-1;522:1:76;515:8;;477:46;553:16;537:12;:32;;;;;;;;;533:47;;;-1:-1:-1;;;571:9:76;;533:47;611:16;595:12;:32;;;;;;;;;591:46;;;-1:-1:-1;636:1:76;629:8;;591:46;667:16;651:12;:32;;;;;;;;;647:47;;;-1:-1:-1;;;685:9:76;;647:47;705:62;;-1:-1:-1;;;705:62:76;;;;;;;:::i;5092:543:81:-;5339:11;;;;5312:7;;5339:20;;:42;;-1:-1:-1;5363:18:81;;5339:42;5335:65;;;-1:-1:-1;5390:10:81;5383:17;;5335:65;5474:24;5419:51;5446:4;5452:10;5464:5;5419:26;:51::i;:::-;:79;;;;;;;;;5418:210;;5587:41;5604:5;5611:13;5626:1;5587:16;:41::i;:::-;5418:210;;;5514:58;5530:41;5547:5;5554:13;5569:1;5530:16;:41::i;3980:550:75:-;4114:7;4153:11;4141:8;:23;;;;;;;;;4137:361;;;4184:51;4225:9;4184:40;:51::i;:::-;4239:1;4184:56;4180:308;;;4267:49;4303:9;4314:1;4267:35;:49::i;:::-;4260:56;;;;4180:308;4341:51;4382:9;4341:40;:51::i;:::-;4396:1;4341:56;4337:151;;;4424:49;4460:9;4471:1;4424:35;:49::i;4337:151::-;-1:-1:-1;4514:9:75;;3980:550;-1:-1:-1;3980:550:75:o;7219:138:106:-;7276:10;7310:40;1020:12;7322:9;:27;;7310:40;-1:-1:-1;7298:52:106;7219:138;-1:-1:-1;;;7219:138:106:o;4694:551:75:-;4829:7;4868:11;4856:8;:23;;;;;;;;;4852:361;;;4899:51;4940:9;4899:40;:51::i;:::-;4954:1;4899:56;4895:308;;;4982:49;5018:9;5029:1;4982:35;:49::i;4895:308::-;5056:51;5097:9;5056:40;:51::i;:::-;5111:1;5056:56;5052:151;;;5139:49;5175:9;5186:1;5139:35;:49::i;620:957:81:-;751:7;;;809:5;:7;;;:14;;;;;;;;;805:736;;;873:7;;854:40;;:10;;873:20;;854:40;:18;:40;:::i;805:736::-;926:3;915:5;:7;;;:14;;;;;;;;;911:630;;;979:7;;960:44;;:10;;979:24;;989:1;979:24;960:44;:18;:44;:::i;911:630::-;1036:3;1025:5;:7;;;:14;;;;;;;;;1021:520;;;1091:7;;1070:42;;:10;;1091:20;;1070:42;:20;:42;:::i;1021:520::-;1144:3;1133:5;:7;;;:14;;;;;;;;;1129:412;;;1199:7;;1178:46;;:10;;1199:24;;1209:1;1199:24;1178:46;:20;:46;:::i;1129:412::-;1256:3;1245:5;:7;;;:14;;;;;;;;;1241:300;;;1311:7;;1290:46;;:10;;1311:24;;1321:1;1311:24;1290:46;:20;:46;:::i;1241:300::-;1368:3;1357:5;:7;;;:14;;;;;;;;;1353:188;;;1422:7;;1402:41;;:10;;1422:20;;1402:41;:19;:41;:::i;1353:188::-;1474:56;;-1:-1:-1;;;1474:56:81;;;;;;;:::i;2150:865:78:-;2226:7;2717:12;2733:13;2750:11;2786:54;2830:9;2786:43;:54::i;:::-;2765:75;;-1:-1:-1;2765:75:78;-1:-1:-1;2765:75:78;-1:-1:-1;2844:22:78;2869:56;2765:75;;2869:43;:56::i;:::-;2844:81;;2937:74;2983:4;2989:5;2996:14;2937:45;:74::i;3309:605:106:-;3365:9;;;3425:5;3450:31;;;3365:9;3507:6;3499:1;:5;;:14;;-1:-1:-1;3550:1:106;3545;3532:6;:10;;:14;3531:20;3527:24;;;;3561:9;3590:7;3573:4;3585:1;3581:5;;3573:14;:24;;-1:-1:-1;3630:1:106;3615:4;:12;;:16;3611:1;:20;3634:2;3611:25;3607:29;;3646:10;3668:4;3664:1;3659:2;:6;:13;;;;;;;-1:-1:-1;3682:8:106;3713:2;3697:4;:13;;:18;3693:22;;;-1:-1:-1;3738:2:106;3729:6;:11;-1:-1:-1;;3803:6:106;;;;3796:3;:14;:22;;;;:26;;;3768:1;3772:2;:6;;;3759:19;;;;;;;;-1:-1:-1;3729:11:106;-1:-1:-1;3796:26:106;-1:-1:-1;;;;3309:605:106:o;6480:383::-;6551:16;6583:5;6592:1;6583:10;:24;;;;6597:5;6606:1;6597:10;6583:24;:38;;;;6611:5;6620:1;6611:10;6583:38;:52;;;;6625:5;6634:1;6625:10;6583:52;:66;;;;6639:5;6648:1;6639:10;6583:66;:81;;;;6653:5;6662:2;6653:11;6583:81;:96;;;;6668:5;6677:2;6668:11;6583:96;6579:278;;;-1:-1:-1;6709:2:106;6579:278;;;6732:5;6741:1;6732:10;6728:129;;-1:-1:-1;6772:2:106;6728:129;;;6819:17;6831:4;6819:11;:17::i;:::-;:27;;6844:2;6819:27;;;6839:2;6819:27;6805:41;;;6480:383;-1:-1:-1;;;6480:383:106:o;791:1019:94:-;989:6;;1015:5;:14;;;:28;;;;;;;;;1011:158;;;1131:5;:13;;;1084:28;1093:5;:18;;;1084:8;:28::i;:::-;:60;;;1059:99;;;;1011:158;1179:24;1247:328;1277:96;1291:5;:16;;;1309:5;:27;;;1338:5;:14;;;1354:5;:18;;;1277:13;:96::i;:::-;1391:92;1405:12;1419:5;:27;;;1448:5;:14;;;1464:5;:18;;;1391:13;:92::i;:::-;1501:5;:24;;;1543:5;:18;;;1247:12;:328::i;:::-;1227:348;;1617:176;1668:111;1755:5;:23;;;1668:59;1713:5;:13;;;1668:17;:44;;:59;;;;:::i;:111::-;1617:16;;;;;:176;:33;:176;:::i;392:286::-;655:16;;;;632:20;;;;:39;392:286;;;;;;:::o;4617:324:95:-;4822:12;;:::i;:::-;-1:-1:-1;;4869:1:95;4850:16;;;:20;4880:16;;;:31;4850:16;4617:324;-1:-1:-1;4617:324:95:o;2476:1271::-;2669:12;;:::i;:::-;2697:24;2765:328;2795:96;2809:5;:16;;;2827:5;:27;;;2856:5;:14;;;2872:5;:18;;;2795:13;:96::i;2765:328::-;3113:16;;;:31;;;3251:33;;;;2745:348;;-1:-1:-1;3251:65:95;;3302:12;3251:65;:43;:65;:::i;:::-;3228:20;;;:88;3326:18;;;:33;;;-1:-1:-1;3374:5:95;:14;;;:28;;;;;;;;;3370:348;;;3468:5;:13;;;3437:28;3446:5;:18;;;3437:8;:28::i;:::-;:44;;;3418:16;;;:63;3370:348;;;3531:176;3582:111;3669:5;:23;;;3582:59;3627:5;:13;;;3582:17;:44;;:59;;;;:::i;3531:176::-;3512:16;;;:195;3370:348;-1:-1:-1;3735:5:95;;2476:1271;-1:-1:-1;;;;2476:1271:95:o;3753:422::-;3959:12;;:::i;:::-;4013:1;3987:23;;;:27;;;4024:16;;;:20;3987:5;4082:22;4054:50;;;;;;;;;;;;;-1:-1:-1;;;4114:16:95;;;:31;:16;3753:422;-1:-1:-1;3753:422:95:o;2079:391::-;2284:12;;:::i;:::-;2338:1;2312:23;;;:27;:5;2377:22;2349:50;;399:1674;591:12;;:::i;:::-;651:25;680:5;:23;;;707:1;680:28;679:242;;898:5;:23;;;679:242;;;724:171;756:12;786:5;:27;;;831:5;:14;;;863:5;:18;;;724:14;:171::i;:::-;1033:17;;;;:23;;;651:270;;-1:-1:-1;967:12:95;;932:24;;1029:305;;;1072:17;1092:60;1115:5;:17;;;1134;1092:22;:60::i;:::-;1072:80;;1190:9;1170:16;:29;1166:158;;1247:22;1219:50;;;1247:22;-1:-1:-1;1166:158:95;1029:305;;1348:5;:23;;;:29;;;:49;;;;;1382:15;1381:16;1348:49;1344:398;;;1413:23;1439:66;1462:5;:23;;;1487:17;1439:22;:66::i;:::-;1413:92;;1543:15;1523:16;:35;1519:213;;1606:22;1578:50;;1519:213;;;1695:22;1667:50;;1519:213;1344:398;;1756:23;;;;1752:292;;1862:171;1894:12;1924:5;:27;;;1969:5;:14;;;2001:5;:18;;;1862:14;:171::i;:::-;1836:23;;;:197;1752:292;-1:-1:-1;2061:5:95;;399:1674;-1:-1:-1;;;;;;399:1674:95:o;6898:175:106:-;7061:1;1020:12;6998:27;;;7056:1;7048:9;7047:15;7065:1;7047:19;;6898:175::o;9033:198::-;1020:12;9157:23;;9145:35;;9198:25;;;;9190:34;;;;;10938:198;1020:12;11062:23;;11050:35;;11103:25;;;;11095:34;;;;;8467:561;8539:17;;;;8604:40;1020:12;8616:9;:27;;8604:40;8702:2;8654:16;;;-1:-1:-1;;8689:9:106;;8688:16;;;8680:24;;;;;-1:-1:-1;8654:16:106;-1:-1:-1;8568:76:106;-1:-1:-1;8702:2:106;8722:16;8741:1;8722:20;8714:28;;8752:16;8771:28;8787:4;8793:5;8771:15;:28::i;:::-;8752:47;;8819:11;8813:3;:17;8809:65;;;8852:11;8846:17;;8809:65;1020:12;8950:9;:27;1020:12;8898:31;8912:4;8918:5;8925:3;8898:13;:31::i;:::-;:49;:79;8883:94;;9011:9;8995:12;:25;;8987:34;;;;;;8467:561;;;;;;;;:::o;7977:485::-;8047:17;;;;8112:40;1020:12;8124:9;:27;;8112:40;8162:14;;;;-1:-1:-1;8076:76:106;-1:-1:-1;8076:76:106;-1:-1:-1;8186:16:106;8205:28;8162:14;8076:76;8205:15;:28::i;4390:175::-;4454:9;;;4518:40;1020:12;4530:9;:27;;4518:40;4497:61;;;;-1:-1:-1;4497:61:106;;-1:-1:-1;4390:175:106;-1:-1:-1;;4390:175:106:o;3920:177::-;4003:14;1020:12;4041:31;4055:4;4061:5;4068:3;4041:13;:31::i;:::-;:49;;3920:177;-1:-1:-1;;;;3920:177:106:o;5820:157::-;5875:13;5920:1;5913:4;:8;:13;5912:36;;;;-1:-1:-1;5939:3:106;5932:4;:10;:15;;5912:36;5911:59;;;-1:-1:-1;;5961:3:106;5954:10;;:15;;5820:157::o;648:1214:77:-;848:6;894:14;878:12;:30;;870:82;;;;-1:-1:-1;;;870:82:77;;;;;;;:::i;:::-;974:21;966:4;:29;;;;;;;;;962:894;;;1018:42;1031:14;1047:12;1018;:42::i;962:894::-;1089:23;1081:4;:31;;;;;;;;;1077:779;;;1135:46;1152:14;1168:12;1135:16;:46::i;1077:779::-;1210:23;1202:4;:31;;;;;;;;;1198:658;;;1256:50;1277:14;1293:12;1256:20;:50::i;1198:658::-;1335:26;1327:4;:34;;;;;;;;;1323:533;;;1384:47;1402:14;1418:12;1384:17;:47::i;1323:533::-;1460:30;1452:4;:38;;;;;;;;;1448:408;;;1513:65;1535:14;1551:12;1565;1513:21;:65::i;1448:408::-;1607:26;1599:4;:34;;;;;;;;;1595:261;;;1684:67;;-1:-1:-1;;;1684:67:77;;;;;;;:::i;1595:261::-;1782:63;;-1:-1:-1;;;1782:63:77;;;;;;;:::i;1651:210:118:-;1707:6;1736:5;;;1760:6;;;;;;:16;;;1775:1;1770;:6;;1760:16;1759:38;;;;1786:1;1782;:5;:14;;;;;1795:1;1791;:5;1782:14;1751:84;;;;-1:-1:-1;;;1751:84:118;;;;;;;:::i;443:879:83:-;559:7;;;617:6;:8;;;:15;;;;;;;;;613:673;;;681:8;;663:27;;:9;;:27;:17;:27;:::i;:::-;648:42;;613:673;;;723:3;711:6;:8;;;:15;;;;;;;;;707:579;;;775:8;;757:31;;:9;;786:1;775:12;757:31;:17;:31;:::i;707:579::-;821:3;809:6;:8;;;:15;;;;;;;;;805:481;;;875:8;;855:29;;:9;;:29;:19;:29;:::i;805:481::-;917:3;905:6;:8;;;:15;;;;;;;;;901:385;;;971:8;;951:33;;:9;;982:1;971:12;951:33;:19;:33;:::i;901:385::-;1017:3;1005:6;:8;;;:15;;;;;;;;;1001:285;;;1071:8;;1051:33;;:9;;1082:1;1071:12;1051:33;:19;:33;:::i;1001:285::-;1117:3;1105:6;:8;;;:15;;;;;;;;;1101:185;;;1170:8;;1151:28;;:9;;:28;:18;:28;:::i;1101:185::-;1210:65;;-1:-1:-1;;;1210:65:83;;;;;;;:::i;2045:511:106:-;2124:10;2162:4;2154;:12;;2146:21;;;;;;2193:4;2225:5;2256:3;2177:9;1157:7;2490:1;2440;2483:3;2454:4;2477:2;-1:-1:-1;;2462:11:106;;2461:18;2446:33;;;2445:41;2440:47;:51;2425:2;;-1:-1:-1;;2399:11:106;;2398:18;2419:2;2398:23;2394:1;2385:6;:10;:36;2378:3;:44;:49;;;;;;2364:1;2319:4;2358:2;-1:-1:-1;;2343:11:106;;2342:18;2327:33;;2335:4;2327:33;2319:42;:46;2301:5;2284:4;:22;:81;:143;:207;:234;2271:247;;2542:6;2529:20;;2045:511;;;;;;;;;:::o;1921:1110:77:-;2026:6;2048:14;2065:46;2101:9;2065:35;:46::i;:::-;2048:63;;2121:14;2138:44;2174:7;2138:35;:44::i;:::-;2121:61;;2193:17;2214:49;2253:9;2214:38;:49::i;:::-;2213:63;;2273:3;2213:63;;;2267:3;2213:63;2193:83;;;;2301:6;2291;:16;2287:139;;;2330:85;2404:10;2337:56;2374:9;2385:7;2337:36;:56::i;:::-;2330:73;:85;:73;:85;:::i;:::-;2323:92;;;;;;;2287:139;2436:18;2458:47;2497:7;2458:38;:47::i;:::-;2457:61;;2515:3;2457:61;;;2509:3;2457:61;2436:82;;;-1:-1:-1;2529:20:77;2552:178;2719:10;2559:149;2609:9;2632:66;2678:13;:6;2689:1;2678:13;:10;:13;:::i;:::-;2693:1;2696;2632:45;:66::i;:::-;2559:36;:149::i;2552:178::-;2529:201;;2740:21;2764:170;2922:11;2771:140;2821:59;2867:6;2875:1;2878;2821:45;:59::i;:::-;2894:7;2771:36;:140::i;2764:170::-;2740:194;-1:-1:-1;2952:72:77;2997:25;3020:1;2997:18;:6;3008;2997:18;:10;:18;:::i;:::-;:22;:25;:22;:25;:::i;:::-;2952:33;:13;2970:14;2952:33;:17;:33;:::i;:::-;:37;:72;:37;:72;:::i;:::-;2945:79;1921:1110;-1:-1:-1;;;;;;;;;1921:1110:77:o;3092:204::-;3201:6;3231:57;3284:3;3238:35;3267:5;3239:22;:7;3251:9;3239:22;:11;:22;:::i;:::-;3238:28;:35;:28;:35;:::i;3363:208::-;3476:6;3506:57;3559:3;3513:35;3542:5;3514:22;:7;3526:9;3514:22;:11;:22;:::i;3634:831::-;3744:6;3766:13;3789:15;3814:14;3839:13;3862:15;3887:14;3939:54;3983:9;3939:43;:54::i;:::-;3912:81;-1:-1:-1;3912:81:77;-1:-1:-1;3912:81:77;-1:-1:-1;4030:52:77;4074:7;4030:43;:52::i;:::-;4003:79;-1:-1:-1;4003:79:77;-1:-1:-1;4003:79:77;-1:-1:-1;4106:2:77;4097:11;;4093:52;;;4132:2;4124:10;;4093:52;4159:5;4168:2;4159:11;4155:52;;;4194:2;4186:10;;4155:52;4217:11;4231:32;4238:5;4256;4231:32;:17;:32;:::i;:::-;4217:46;-1:-1:-1;4273:11:77;4287:36;4294:7;4314;4287:36;:19;:36;:::i;:::-;4273:50;-1:-1:-1;4333:11:77;4347:34;4354:6;4373;4347:34;:18;:34;:::i;:::-;4333:48;-1:-1:-1;4400:57:77;4453:3;4401:41;4437:4;4401:31;4419:12;:4;4428:2;4419:12;:8;:12;:::i;:::-;4401:13;:4;4410:3;4401:13;:8;:13;:::i;4400:57::-;4392:66;3634:831;-1:-1:-1;;;;;;;;;;;;3634:831:77:o;4533:1003::-;4669:6;4691:13;4714:15;4739:14;4764:13;4787:15;4812:14;4864:54;4908:9;4864:43;:54::i;:::-;4837:81;-1:-1:-1;4837:81:77;-1:-1:-1;4837:81:77;-1:-1:-1;4955:52:77;4999:7;4955:43;:52::i;:::-;4928:79;-1:-1:-1;4928:79:77;-1:-1:-1;4928:79:77;-1:-1:-1;5031:53:77;5074:9;5031:42;:53::i;:::-;5022:5;:62;5018:103;;;5108:2;5100:10;;5018:103;5148:12;5137:7;:23;:39;;;;;5164:7;5175:1;5164:12;5137:39;5135:42;:106;;;;;5190:51;5233:7;5190:42;:51::i;:::-;5181:5;:60;5135:106;5131:147;;;5265:2;5257:10;;5131:147;5288:11;5302:32;5309:5;5327;5302:32;:17;:32;:::i;:::-;5288:46;-1:-1:-1;5344:11:77;5358:36;5365:7;5385;5358:36;:19;:36;:::i;:::-;5344:50;-1:-1:-1;5404:11:77;5418:34;5425:6;5444;5418:34;:18;:34;:::i;:::-;5404:48;-1:-1:-1;5471:57:77;5524:3;5472:41;5508:4;5472:31;5490:12;:4;5499:2;5490:12;:8;:12;:::i;5471:57::-;5463:66;4533:1003;-1:-1:-1;;;;;;;;;;;;;4533:1003:77:o;7079:135:106:-;7135:9;7167:40;1020:12;7179:9;:27;;7167:40;-1:-1:-1;7156:51:106;;7079:135;-1:-1:-1;;;7079:135:106:o;5630:185::-;5689:13;;5730:40;1020:12;5742:9;:27;;5730:40;5714:56;;;;5791:17;5803:4;5791:11;:17::i;12485:210::-;12564:10;12611:11;12594:13;:28;;12586:37;;;;;;-1:-1:-1;1020:12:106;12642:27;;;12641:47;;12485:210::o;1146:600:80:-;1231:6;1261;1253:55;;;;-1:-1:-1;;;1253:55:80;;;;;;;:::i;:::-;1372:6;1368:20;;-1:-1:-1;1387:1:80;1380:8;;1368:20;353:15;1409:25;;;;:1;:25;:1;1452:5;;;;;:30;1444:81;;;;-1:-1:-1;;;1444:81:80;;;;;;;:::i;:::-;1546:1;-1:-1:-1;;1546:7:80;:26;;;;;-1:-1:-1;;;1557:1:80;:15;1546:26;1544:29;1536:80;;;;-1:-1:-1;;;1536:80:80;;;;;;;:::i;:::-;1626:8;1641:1;1637;:5;;;;;;;-1:-1:-1;1660:6:80;1652:68;;;;-1:-1:-1;;;1652:68:80;;;;;;;:::i;867:176:117:-;925:7;956:5;;;979:6;;;;971:46;;;;-1:-1:-1;;;971:46:117;;;;;;;:::i;1307:134::-;1365:7;1391:43;1395:1;1398;1391:43;;;;;;;;;;;;;;;;;:3;:43::i;3066:130::-;3124:7;3150:39;3154:1;3157;3150:39;;;;;;;;;;;;;;;;;:3;:39::i;1357:213:118:-;1413:6;1442:5;;;1466:6;;;;;;:16;;;1481:1;1476;:6;;1466:16;1465:38;;;;1492:1;1488;:5;:14;;;;;1501:1;1497;:5;1488:14;1457:87;;;;-1:-1:-1;;;1457:87:118;;;;;;;:::i;325:554::-;381:6;621;617:45;;-1:-1:-1;650:1:118;643:8;;617:45;682:1;-1:-1:-1;;682:7:118;:27;;;;;-1:-1:-1;;;693:1:118;:16;682:27;680:30;672:82;;;;-1:-1:-1;;;672:82:118;;;;;;;:::i;:::-;776:5;;;780:1;776;:5;:1;799:5;;;;;:10;791:62;;;;-1:-1:-1;;;791:62:118;;;;;;;:::i;1725:187:117:-;1811:7;1846:12;1838:6;;;;1830:29;;;;-1:-1:-1;;;1830:29:117;;;;;;;;:::i;:::-;-1:-1:-1;;;1881:5:117;;;1725:187::o;3671:338::-;3757:7;3857:12;3850:5;3842:28;;;;-1:-1:-1;;;3842:28:117;;;;;;;;:::i;:::-;;3880:9;3896:1;3892;:5;;;;;;;3671:338;-1:-1:-1;;;;;3671:338:117:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;72:20;;-1:-1;;;;;48893:54;;50577:35;;50567:2;;50626:1;;50616:12;410:184;504:20;;50980:1;50970:12;;50960:2;;50996:1;;50986:12;601:158;682:20;;707:47;682:20;707:47;:::i;766:180::-;858:20;;883:58;858:20;883:58;:::i;1335:166::-;1420:20;;51596:2;51586:13;;51576:2;;51613:1;;51603:12;1508:166;1593:20;;51716:2;51706:13;;51696:2;;51733:1;;51723:12;2848:162;;2961:4;2952:6;2947:3;2943:16;2939:27;2936:2;;;-1:-1;;2969:12;2936:2;-1:-1;2989:15;2929:81;-1:-1;2929:81::o;7645:826::-;;7770:4;7758:9;7753:3;7749:19;7745:30;7742:2;;;-1:-1;;7778:12;7742:2;7806:20;7770:4;7806:20;:::i;:::-;7797:29;;353:6;340:20;7892:16;7885:75;8024:2;8082:9;8078:22;340:20;8024:2;8043:5;8039:16;8032:75;8169:2;8254:9;8250:22;1047:20;1072:60;1126:5;1072:60;:::i;:::-;8169:2;8184:16;;8177:102;8340:2;8421:22;;1047:20;1072:60;1047:20;1072:60;:::i;:::-;8340:2;8355:16;;8348:102;8359:5;7736:735;-1:-1;;7736:735::o;8495:755::-;;8606:4;8594:9;8589:3;8585:19;8581:30;8578:2;;;-1:-1;;8614:12;8578:2;8642:20;8606:4;8642:20;:::i;:::-;8633:29;;13534:6;13521:20;8723:16;8716:75;8849:2;8914:9;8910:22;858:20;883:58;935:5;883:58;:::i;:::-;8849:2;8864:16;;8857:82;8997:2;9058:22;;682:20;707:47;682:20;707:47;:::i;:::-;8997:2;9012:16;;9005:82;9149:2;9200:22;;206:20;231:30;206:20;231:30;:::i;9273:606::-;;9383:4;9371:9;9366:3;9362:19;9358:30;9355:2;;;-1:-1;;9391:12;9355:2;9419:20;9383:4;9419:20;:::i;:::-;9410:29;;13534:6;13521:20;9500:16;9493:75;9626:2;9691:9;9687:22;858:20;883:58;935:5;883:58;:::i;:::-;9626:2;9641:16;;9634:82;9778:2;9829:22;;206:20;48028:13;;48021:21;50698:32;;50688:2;;-1:-1;;50734:12;50688:2;9778;9793:16;;9786:72;9797:5;9349:530;-1:-1;;9349:530::o;9907:158::-;;10017:3;10008:6;10003:3;9999:16;9995:26;9992:2;;;-1:-1;;10024:12;13591:241;;13695:2;13683:9;13674:7;13670:23;13666:32;13663:2;;;-1:-1;;13701:12;13663:2;13763:53;13808:7;13784:22;13763:53;:::i;13839:241::-;;13943:2;13931:9;13922:7;13918:23;13914:32;13911:2;;;-1:-1;;13949:12;13911:2;-1:-1;340:20;;13905:175;-1:-1;13905:175::o;14087:699::-;;;;;14283:3;14271:9;14262:7;14258:23;14254:33;14251:2;;;-1:-1;;14290:12;14251:2;353:6;340:20;14342:63;;14442:2;14512:9;14508:22;504:20;50980:1;50973:5;50970:12;50960:2;;-1:-1;;50986:12;50960:2;14450:90;-1:-1;14577:2;14630:22;;682:20;707:47;682:20;707:47;:::i;:::-;14245:541;;;;-1:-1;14585:77;;14699:2;14738:22;13521:20;;-1:-1;;14245:541::o;14793:905::-;;;;;;15043:4;15031:9;15022:7;15018:23;15014:34;15011:2;;;-1:-1;;15051:12;15011:2;353:6;340:20;15103:63;;15221:82;15295:7;15203:2;15275:9;15271:22;15221:82;:::i;:::-;15211:92;;15360:79;15431:7;15340:4;15411:9;15407:22;15360:79;:::i;:::-;15350:89;;15476:4;15518:9;15514:22;206:20;231:30;255:5;231:30;:::i;:::-;15486:60;-1:-1;15603:79;15674:7;15583:4;15650:22;;15603:79;:::i;:::-;15593:89;;15005:693;;;;;;;;:::o;15705:277::-;;15827:2;15815:9;15806:7;15802:23;15798:32;15795:2;;;-1:-1;;15833:12;15795:2;1433:6;1420:20;51596:2;51589:5;51586:13;51576:2;;-1:-1;;51603:12;15989:293;;16119:2;16107:9;16098:7;16094:23;16090:32;16087:2;;;-1:-1;;16125:12;16087:2;695:6;682:20;707:47;748:5;707:47;:::i;16289:588::-;;;;16475:3;16463:9;16454:7;16450:23;16446:33;16443:2;;;-1:-1;;16482:12;16443:2;695:6;682:20;707:47;748:5;707:47;:::i;:::-;16534:89;-1:-1;16660:2;16699:22;;13521:20;;-1:-1;16786:75;16853:7;16768:2;16829:22;;16786:75;:::i;:::-;16776:85;;16437:440;;;;;:::o;16884:271::-;;17003:2;16991:9;16982:7;16978:23;16974:32;16971:2;;;-1:-1;;17009:12;16971:2;2150:6;2137:20;2162:48;2204:5;2162:48;:::i;17162:396::-;;;17298:2;17286:9;17277:7;17273:23;17269:32;17266:2;;;-1:-1;;17304:12;17266:2;2150:6;2137:20;2162:48;2204:5;2162:48;:::i;:::-;17356:78;17471:2;17510:22;;;;13521:20;;-1:-1;;;17260:298::o;17565:301::-;;17698:4;17686:9;17677:7;17673:23;17669:34;17666:2;;;-1:-1;;17706:12;17666:2;17768:82;17842:7;17818:22;17768:82;:::i;17873:734::-;;;;;18083:4;18071:9;18062:7;18058:23;18054:34;18051:2;;;-1:-1;;18091:12;18051:2;18153:82;18227:7;18203:22;18153:82;:::i;:::-;18143:92;;18292:79;18363:7;18272:4;18343:9;18339:22;18292:79;:::i;:::-;18045:562;;18282:89;;-1:-1;;;;18408:4;18449:22;;340:20;;18518:4;18559:22;340:20;;18045:562::o;18614:585::-;;;;18796:4;18784:9;18775:7;18771:23;18767:34;18764:2;;;-1:-1;;18804:12;18764:2;18866:82;18940:7;18916:22;18866:82;:::i;:::-;18856:92;;18985:4;19030:9;19026:22;13521:20;18995:63;;19095:4;19155:9;19151:22;2137:20;2162:48;2204:5;2162:48;:::i;:::-;19105:78;;;;18758:441;;;;;:::o;19206:555::-;;;;19373:4;19361:9;19352:7;19348:23;19344:34;19341:2;;;-1:-1;;19381:12;19341:2;19443:82;19517:7;19493:22;19443:82;:::i;:::-;19433:92;19562:4;19603:22;;13521:20;;-1:-1;19672:4;19713:22;;;13521:20;;19335:426;-1:-1;;;19335:426::o;19768:712::-;;;;;19967:4;19955:9;19946:7;19942:23;19938:34;19935:2;;;-1:-1;;19975:12;19935:2;20037:82;20111:7;20087:22;20037:82;:::i;:::-;20027:92;;20156:4;20201:9;20197:22;13521:20;20166:63;;20266:4;20311:9;20307:22;13521:20;20276:63;;20376:4;20436:9;20432:22;2137:20;2162:48;2204:5;2162:48;:::i;:::-;19929:551;;;;-1:-1;19929:551;;-1:-1;;19929:551::o;20487:297::-;;20618:4;20606:9;20597:7;20593:23;20589:34;20586:2;;;-1:-1;;20626:12;20586:2;3193:22;3208:6;3193:22;:::i;:::-;3305:67;3368:3;3344:22;3305:67;:::i;:::-;3287:16;3280:93;3471:63;3530:3;3438:2;3510:9;3506:22;3471:63;:::i;:::-;3438:2;3457:5;3453:16;3446:89;3637:67;3700:3;3604:2;3680:9;3676:22;3637:67;:::i;:::-;3604:2;3623:5;3619:16;3612:93;3813:73;3882:3;3780:2;3862:9;3858:22;3813:73;:::i;:::-;3780:2;3799:5;3795:16;3788:99;3999:76;4071:3;3965;4051:9;4047:22;3999:76;:::i;:::-;3965:3;3985:5;3981:16;3974:102;4187:75;4258:3;4153;4238:9;4234:22;4187:75;:::i;:::-;4153:3;4173:5;4169:16;4162:101;4362:63;4421:3;4328;4401:9;4397:22;4362:63;:::i;:::-;4328:3;4348:5;4344:16;4337:89;4539:74;4609:3;4505;4589:9;4585:22;4539:74;:::i;:::-;4505:3;4525:5;4521:16;4514:100;4679:3;4715:49;4760:3;4679;4740:9;4736:22;4715:49;:::i;:::-;4695:18;;;4688:77;4840:3;4876:49;4921:3;4897:22;;;4876:49;:::i;:::-;4856:18;;;4849:77;4999:3;5056:22;;;13521:20;5015:18;;;5008:77;5152:3;5209:22;;;13521:20;5168:18;;;5161:77;5307:3;5364:22;;;13521:20;5323:18;;;5316:77;5462:3;5519:22;;;13521:20;5478:18;;;5471:77;5625:3;5682:22;;;13521:20;5641:18;;;5634:77;5785:3;5841:22;;;2755:20;5801:18;;;5794:76;5942:3;5998:22;;;2755:20;5958:18;;;5951:76;6094:3;6150:22;;;2755:20;6110:18;;;6103:76;6243:3;6299:22;;;2755:20;6259:18;;;6252:76;6404:3;6460:22;;;2755:20;6420:18;;;6413:76;6573:3;6629:22;;;2755:20;6589:18;;;6582:76;6726:3;6762:70;6828:3;6804:22;;;6762:70;:::i;:::-;6742:18;;;6735:98;6907:3;6943:70;7009:3;6985:22;;;6943:70;:::i;:::-;6934:6;6927:5;6923:18;6916:98;7117:71;7184:3;7081;7164:9;7160:22;7117:71;:::i;:::-;7108:6;7101:5;7097:18;7090:99;7301:85;7382:3;7265;7362:9;7358:22;7301:85;:::i;:::-;7281:18;;;7274:113;7500:85;7581:3;7463:4;7557:22;;7500:85;:::i;:::-;7491:6;7480:18;;7473:113;7484:5;20580:204;-1:-1;;;20580:204::o;20791:286::-;;20917:3;20905:9;20896:7;20892:23;20888:33;20885:2;;;-1:-1;;20924:12;20885:2;20986:75;21053:7;21029:22;20986:75;:::i;21084:290::-;;21212:3;;21200:9;21191:7;21187:23;21183:33;21180:2;;;-1:-1;;21219:12;21180:2;10242:22;21212:3;10242:22;:::i;:::-;10361:74;10431:3;10407:22;10361:74;:::i;:::-;10336:100;;10503:2;10557:22;;;13521:20;10518:16;;;10511:75;10660:2;10714:22;;;13521:20;10675:16;;;10668:75;10812:2;10866:22;;;13521:20;10827:16;;;10820:75;10964:3;11019:22;;;13521:20;10980:16;;;10973:75;11120:3;11175:22;;;13521:20;11136:16;;;11129:75;11274:3;11329:22;;;13521:20;11290:16;;;11283:75;11432:3;11486:22;;;2755:20;11448:16;;;11441:74;11587:3;11643:22;;;2755:20;11603:18;;;11596:76;11739:3;11795:22;;;2755:20;11755:18;;;11748:76;11900:3;11956:22;;;2755:20;11916:18;;;11909:76;12067:3;12123:22;;;2755:20;12083:18;;;12076:76;12234:3;12290:22;;;2755:20;12250:18;;;12243:76;12406:3;12462:22;;;2755:20;12422:18;;;12415:76;12562:3;12618:22;;;2755:20;12578:18;;;12571:76;12720:3;12776:22;;;2755:20;12736:18;;;12729:76;12870:3;12926:22;;;2755:20;12886:18;;;12879:76;13029:3;13085:22;;;2755:20;13045:18;;;13038:76;13183:3;13239:22;;;2755:20;13199:18;;;13192:76;13341:3;13397:22;;;2755:20;13357:18;;;13350:76;;;;-1:-1;10343:16;;21174:200;-1:-1;;21174:200::o;21381:699::-;;;;;21577:3;21565:9;21556:7;21552:23;21548:33;21545:2;;;-1:-1;;21584:12;21545:2;13534:6;13521:20;21636:63;;21754:80;21826:7;21736:2;21806:9;21802:22;21754:80;:::i;23339:162::-;50134:1;50127:5;50124:12;50114:2;;50140:9;50114:2;23423:73;;23417:84::o;35835:370::-;36012:2;36026:47;;;47220:12;;35997:18;;;47624:19;;;35835:370;;36012:2;47074:14;;;;47664;;;;35835:370;22708:260;22733:6;22730:1;22727:13;22708:260;;;22794:13;;23170:37;;47479:14;;;;22241;;;;22755:1;22748:9;22708:260;;;-1:-1;36079:116;;35983:222;-1:-1;;;;;;35983:222::o;36212:210::-;48028:13;;48021:21;23063:34;;36333:2;36318:18;;36304:118::o;36429:222::-;23170:37;;;36556:2;36541:18;;36527:124::o;36658:254::-;36801:2;36786:18;;50250:2;50240:13;;50230:2;;50257:9;50230:2;23595:66;;;36772:140;:::o;36919:270::-;37070:2;37055:18;;50375:1;50365:12;;50355:2;;50381:9;37196:359;37364:2;37349:18;;50488:2;50478:13;;50468:2;;50495:9;50468:2;23938:63;;;37541:2;37526:18;23170:37;37335:220;:::o;37787:310::-;;37934:2;;37955:17;37948:47;24382:5;47220:12;47636:6;37934:2;37923:9;37919:18;47624:19;-1:-1;49731:101;49745:6;49742:1;49739:13;49731:101;;;49812:11;;;;;49806:18;49793:11;;;47664:14;49793:11;49786:39;49760:10;;49731:101;;;49847:6;49844:1;49841:13;49838:2;;;-1:-1;47664:14;49903:6;37923:9;49894:16;;49887:27;49838:2;-1:-1;50019:7;50003:14;-1:-1;;49999:28;24540:39;;;;47664:14;24540:39;;37905:192;-1:-1;;;37905:192::o;38104:416::-;38304:2;38318:47;;;24816:2;38289:18;;;47624:19;24852:34;47664:14;;;24832:55;-1:-1;;;24907:12;;;24900:38;24957:12;;;38275:245::o;38527:416::-;38727:2;38741:47;;;25208:2;38712:18;;;47624:19;25244:34;47664:14;;;25224:55;-1:-1;;;25299:12;;;25292:38;25349:12;;;38698:245::o;38950:416::-;39150:2;39164:47;;;25600:2;39135:18;;;47624:19;25636:34;47664:14;;;25616:55;-1:-1;;;25691:12;;;25684:45;25748:12;;;39121:245::o;39373:416::-;39573:2;39587:47;;;25999:2;39558:18;;;47624:19;26035:29;47664:14;;;26015:50;26084:12;;;39544:245::o;39796:416::-;39996:2;40010:47;;;26335:2;39981:18;;;47624:19;26371:34;47664:14;;;26351:55;-1:-1;;;26426:12;;;26419:42;26480:12;;;39967:245::o;40219:416::-;40419:2;40433:47;;;26731:2;40404:18;;;47624:19;26767:34;47664:14;;;26747:55;-1:-1;;;26822:12;;;26815:25;26859:12;;;40390:245::o;40642:416::-;40842:2;40856:47;;;27110:2;40827:18;;;47624:19;27146:34;47664:14;;;27126:55;-1:-1;;;27201:12;;;27194:44;27257:12;;;40813:245::o;41065:416::-;41265:2;41279:47;;;27508:2;41250:18;;;47624:19;27544:34;47664:14;;;27524:55;-1:-1;;;27599:12;;;27592:31;27642:12;;;41236:245::o;41488:416::-;41688:2;41702:47;;;27893:2;41673:18;;;47624:19;27929:34;47664:14;;;27909:55;-1:-1;;;27984:12;;;27977:37;28033:12;;;41659:245::o;41911:416::-;42111:2;42125:47;;;28284:2;42096:18;;;47624:19;28320:34;47664:14;;;28300:55;28389:27;28375:12;;;28368:49;28436:12;;;42082:245::o;42334:416::-;42534:2;42548:47;;;28687:2;42519:18;;;47624:19;28723:34;47664:14;;;28703:55;-1:-1;;;28778:12;;;28771:41;28831:12;;;42505:245::o;42757:416::-;42957:2;42971:47;;;29082:2;42942:18;;;47624:19;29118:34;47664:14;;;29098:55;-1:-1;;;29173:12;;;29166:31;29216:12;;;42928:245::o;43180:416::-;43380:2;43394:47;;;29467:2;43365:18;;;47624:19;29503:34;47664:14;;;29483:55;-1:-1;;;29558:12;;;29551:31;29601:12;;;43351:245::o;43603:416::-;43803:2;43817:47;;;29852:2;43788:18;;;47624:19;29888:34;47664:14;;;29868:55;-1:-1;;;29943:12;;;29936:30;29985:12;;;43774:245::o;44026:416::-;44226:2;44240:47;;;30236:2;44211:18;;;47624:19;30272:34;47664:14;;;30252:55;30341:25;30327:12;;;30320:47;30386:12;;;44197:245::o;44449:416::-;44649:2;44663:47;;;30637:2;44634:18;;;47624:19;30673:34;47664:14;;;30653:55;30742:34;30728:12;;;30721:56;-1:-1;;;30797:12;;;30790:29;30838:12;;;44620:245::o;44872:416::-;45072:2;45086:47;;;31089:2;45057:18;;;47624:19;31125:34;47664:14;;;31105:55;-1:-1;;;31180:12;;;31173:28;31220:12;;;45043:245::o;45295:416::-;45495:2;45509:47;;;31471:2;45480:18;;;47624:19;31507:34;47664:14;;;31487:55;-1:-1;;;31562:12;;;31555:28;31602:12;;;45466:245::o;45718:416::-;45918:2;45932:47;;;31853:2;45903:18;;;47624:19;31889:34;47664:14;;;31869:55;-1:-1;;;31944:12;;;31937:46;32002:12;;;45889:245::o;46141:319::-;;46316:3;46305:9;46301:19;46293:27;;32316:86;32387:14;32293:16;32287:23;32316:86;:::i;:::-;32487:4;32476:16;;;32470:23;32547:14;;;23170:37;32654:4;32643:16;;;32637:23;32714:14;;;23170:37;32816:4;32805:16;;;32799:23;32876:14;;;23170:37;32978:4;32967:16;;;32961:23;33038:14;;;23170:37;33143:4;33132:16;;;33126:23;33203:14;;;23170:37;33306:4;33295:16;;;33289:23;33366:14;;;23170:37;33473:4;33462:16;;;33456:23;33531:14;;;23170:37;33636:6;33625:18;;;33619:25;33696:16;;;23170:37;33798:6;33787:18;;;33781:25;33858:16;;;23170:37;33969:6;33958:18;;;33952:25;34029:16;;;23170:37;34146:6;34135:18;;;34129:25;34206:16;;;23170:37;34323:6;34312:18;;;34306:25;34383:16;;;23170:37;34505:6;34494:18;;;34488:25;34565:16;;;23170:37;34671:6;34660:18;;;34654:25;34731:16;;;23170:37;34839:6;34828:18;;;34822:25;34899:16;;;23170:37;34999:6;34988:18;;;34982:25;35059:16;;;23170:37;35168:6;35157:18;;;35151:25;35228:16;;;23170:37;35332:6;35321:18;;;35315:25;35392:16;;;23170:37;35500:6;35489:18;;;35483:25;35560:16;;;;23170:37;;;;46287:173;:::o;46696:256::-;46758:2;46752:9;46784:17;;;46859:18;46844:34;;46880:22;;;46841:62;46838:2;;;46916:1;;46906:12;46838:2;46758;46925:22;46736:216;;-1:-1;46736:216::o;50642:111::-;50723:5;48028:13;48021:21;50701:5;50698:32;50688:2;;50744:1;;50734:12;50688:2;50682:71;:::o;51012:108::-;51095:1;51088:5;51085:12;51075:2;;51111:1;;51101:12;51127:119;51221:1;51214:5;51211:12;51201:2;;51237:1;;51227:12;51253:121;51349:1;51342:5;51339:12;51329:2;;51365:1;;51355:12;52001:110;52085:2;52078:5;52075:13;52065:2;;52102:1;;52092:12",
  "source": "// \"SPDX-License-Identifier: Apache-2.0\"\npragma solidity ^0.6.11;\npragma experimental ABIEncoderV2;\n\nimport \"../../Core/Core.sol\";\nimport \"./ICEGEngine.sol\";\nimport \"./CEGSTF.sol\";\nimport \"./CEGPOF.sol\";\n\n\n/**\n * @title CEGEngine\n * @notice Inherits from BaseEngine by implementing STFs, POFs according to the ACTUS standard for a CEC contract\n * @dev All numbers except unix timestamp are represented as multiple of 10 ** 18\n * inputs have to be multiplied by 10 ** 18, outputs have to multplied by 10 ** -18\n */\ncontract CEGEngine is Core, CEGSTF, CEGPOF, ICEGEngine {\n\n    function contractType() external pure override returns (ContractType) {\n        return ContractType.CEG;\n    }\n\n    /**\n     * Applys an event to the current state of a contract and returns the resulting contract state.\n     * @param terms terms of the contract\n     * @param state current state of the contract\n     * @param _event event to be applied to the contract state\n     * @param externalData external data needed for STF evaluation (e.g. rate for RR events)\n     * @return the resulting contract state\n     */\n    function computeStateForEvent(\n        CEGTerms calldata terms,\n        State calldata state,\n        bytes32 _event,\n        bytes32 externalData\n    )\n        external\n        pure\n        override\n        returns (State memory)\n    {\n        return stateTransitionFunction(\n            terms,\n            state,\n            _event,\n            externalData\n        );\n    }\n\n    /**\n     * Evaluates the payoff for an event under the current state of the contract.\n     * @param terms terms of the contract\n     * @param state current state of the contract\n     * @param _event event for which the payoff should be evaluated\n     * @param externalData external data needed for POF evaluation (e.g. fxRate)\n     * @return the payoff of the event\n     */\n    function computePayoffForEvent(\n        CEGTerms calldata terms,\n        State calldata state,\n        bytes32 _event,\n        bytes32 externalData\n    )\n        external\n        pure\n        override\n        returns (int256)\n    {\n        // if alternative settlementCurrency is set then apply fxRate to payoff\n        if (terms.settlementCurrency != address(0) && terms.currency != terms.settlementCurrency) {\n            return payoffFunction(\n                terms,\n                state,\n                _event,\n                externalData\n            ).floatMult(int256(externalData));\n        }\n\n        return payoffFunction(\n            terms,\n            state,\n            _event,\n            externalData\n        );\n    }\n\n    /**\n     * @notice Initialize contract state space based on the contract terms.\n     * @param terms terms of the contract\n     * @return initial state of the contract\n     */\n    function computeInitialState(CEGTerms calldata terms)\n        external\n        pure\n        override\n        returns (State memory)\n    {\n        State memory state;\n\n        state.contractPerformance = ContractPerformance.PF;\n        state.statusDate = terms.statusDate;\n        state.maturityDate = terms.maturityDate;\n        state.notionalPrincipal = roleSign(terms.contractRole) * terms.notionalPrincipal;\n        state.feeAccrued = terms.feeAccrued;\n\n        return state;\n    }\n\n    /**\n     * @notice Computes a schedule segment of non-cyclic contract events based on the contract terms\n     * and the specified timestamps.\n     * @param terms terms of the contract\n     * @param segmentStart start timestamp of the segment\n     * @param segmentEnd end timestamp of the segement\n     * @return segment of the non-cyclic schedule\n     */\n    function computeNonCyclicScheduleSegment(\n        CEGTerms calldata terms,\n        uint256 segmentStart,\n        uint256 segmentEnd\n    )\n        external\n        pure\n        override\n        returns (bytes32[] memory)\n    {\n        bytes32[MAX_EVENT_SCHEDULE_SIZE] memory events;\n        uint16 index;\n\n        // purchase\n        if (terms.purchaseDate != 0) {\n            if (isInSegment(terms.purchaseDate, segmentStart, segmentEnd)) {\n                events[index] = encodeEvent(EventType.PRD, terms.purchaseDate);\n                index++;\n            }\n        }\n\n        // maturity event\n        if (isInSegment(terms.maturityDate, segmentStart, segmentEnd) == true) {\n            events[index] = encodeEvent(EventType.MD, terms.maturityDate);\n            index++;\n        }\n\n        // remove null entries from returned array\n        bytes32[] memory schedule = new bytes32[](index);\n        for (uint256 i = 0; i < index; i++) {\n            schedule[i] = events[i];\n        }\n\n        return schedule;\n    }\n\n    /**\n     * @notice Computes a schedule segment of cyclic contract events based on the contract terms\n     * and the specified timestamps.\n     * @param terms terms of the contract\n     * @param segmentStart start timestamp of the segment\n     * @param segmentEnd end timestamp of the segement\n     * @param eventType eventType of the cyclic schedule\n     * @return event schedule segment\n     */\n    function computeCyclicScheduleSegment(\n        CEGTerms calldata terms,\n        uint256 segmentStart,\n        uint256 segmentEnd,\n        EventType eventType\n    )\n        external\n        pure\n        override\n        returns (bytes32[] memory)\n    {\n        bytes32[MAX_EVENT_SCHEDULE_SIZE] memory events;\n        uint256 index = 0;\n\n        if (eventType == EventType.FP) {\n            // fees\n            if (terms.cycleAnchorDateOfFee != 0) {\n                uint256[MAX_CYCLE_SIZE] memory feeSchedule = computeDatesFromCycleSegment(\n                    terms.cycleAnchorDateOfFee,\n                    terms.maturityDate,\n                    terms.cycleOfFee,\n                    terms.endOfMonthConvention,\n                    true,\n                    segmentStart,\n                    segmentEnd\n                );\n                for (uint8 i = 0; i < MAX_CYCLE_SIZE; i++) {\n                    if (feeSchedule[i] == 0) break;\n                    if (isInSegment(feeSchedule[i], segmentStart, segmentEnd) == false) continue;\n                    events[index] = encodeEvent(EventType.FP, feeSchedule[i]);\n                    index++;\n                }\n            }\n        }\n\n        // remove null entries from returned array\n        bytes32[] memory schedule = new bytes32[](index);\n        for (uint256 i = 0; i < index; i++) {\n            schedule[i] = events[i];\n        }\n\n        return schedule;\n    }\n\n    /**\n     * @notice Computes a schedule segment of cyclic contract events based on the contract terms\n     * and the specified timestamps.\n     * @param terms terms of the contract\n     * @param lastScheduleTime last occurrence of cyclic event\n     * @param eventType eventType of the cyclic schedule\n     * @return event schedule segment\n     */\n    function computeNextCyclicEvent(\n        CEGTerms calldata terms,\n        uint256 lastScheduleTime,\n        EventType eventType\n    )\n        external\n        pure\n        override\n        returns(bytes32)\n    {\n        // fees\n        if (eventType == EventType.FP) {\n            if (terms.cycleAnchorDateOfFee != 0) {\n                uint256 nextFeeDate = computeNextCycleDateFromPrecedingDate(\n                    terms.cycleOfFee,\n                    terms.endOfMonthConvention,\n                    terms.cycleAnchorDateOfFee,\n                    lastScheduleTime\n                );\n                if (nextFeeDate == 0) return bytes32(0);\n                return encodeEvent(EventType.FP, nextFeeDate);\n            }\n        }\n\n        return bytes32(0);\n    }\n\n    /**\n     * @notice Verifies that the provided event is still scheduled under the terms, the current state of the\n     * contract and the current state of the underlying.\n     * @param _event event for which to check if its still scheduled\n     * param terms terms of the contract\n     * param state current state of the contract\n     * @param hasUnderlying boolean indicating whether the contract has an underlying contract\n     * @param underlyingState state of the underlying (empty state object if non-existing)\n     * @return boolean indicating whether event is still scheduled\n     */\n    function isEventScheduled(\n        bytes32 _event,\n        CEGTerms calldata /* terms */,\n        State calldata /* state */,\n        bool hasUnderlying,\n        State calldata underlyingState\n    )\n        external\n        pure\n        override\n        returns (bool)\n    {\n        (EventType eventType,) = decodeEvent(_event);\n\n        if (hasUnderlying) {\n            // FP, MD events only scheduled up to execution of the Guarantee\n            if (\n                (eventType == EventType.FP || eventType == EventType.MD)\n                && underlyingState.exerciseAmount > int256(0)\n            ) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * @notice Implements abstract method which is defined in BaseEngine.\n     * Applies an event to the current state of the contract and returns the resulting state.\n     * The inheriting Engine contract has to map the events type to the designated STF.\n     * @param terms terms of the contract\n     * @param state current state of the contract\n     * @param _event event for which to evaluate the next state for\n     * @param externalData external data needed for STF evaluation (e.g. rate for RR events)\n     * @return the resulting contract state\n     */\n    function stateTransitionFunction(\n        CEGTerms memory terms,\n        State memory state,\n        bytes32 _event,\n        bytes32 externalData\n    )\n        internal\n        pure\n        returns (State memory)\n    {\n        (EventType eventType, uint256 scheduleTime) = decodeEvent(_event);\n\n        /*\n         * Note:\n         * Not supported: PRD (Purchase) events\n         */\n\n        if (eventType == EventType.FP) return STF_CEG_FP(terms, state, scheduleTime, externalData);\n        if (eventType == EventType.XD) return STF_CEG_XD(terms, state, scheduleTime, externalData);\n        if (eventType == EventType.STD) return STF_CEG_STD(terms, state, scheduleTime, externalData);\n        if (eventType == EventType.MD) return STF_CEG_MD(terms, state, scheduleTime, externalData);\n        if (eventType == EventType.CE) return STF_CEG_CE(terms, state, scheduleTime, externalData);\n\n        revert(\"CEGEngine.stateTransitionFunction: ATTRIBUTE_NOT_FOUND\");\n    }\n\n    /**\n     * @notice Implements abstract method which is defined in BaseEngine.\n     * Computes the payoff for an event under the current state of the contract.\n     * The inheriting Engine contract has to map the events type to the designated POF.\n     * @param terms terms of the contract\n     * @param state current state of the contract\n     * @param _event event for which the payoff should be evaluated\n     * @param externalData external data needed for POF evaluation (e.g. fxRate)\n     * @return the payoff of the event\n     */\n    function payoffFunction(\n        CEGTerms memory terms,\n        State memory state,\n        bytes32 _event,\n        bytes32 externalData\n    )\n        internal\n        pure\n        returns (int256)\n    {\n        (EventType eventType, uint256 scheduleTime) = decodeEvent(_event);\n\n        /*\n         * Note:\n         * Not supported: PRD (Purchase) events\n         */\n\n        if (eventType == EventType.CE) return 0;\n        if (eventType == EventType.FP) return POF_CEG_FP(terms, state, scheduleTime, externalData);\n        if (eventType == EventType.XD) return 0;\n        if (eventType == EventType.STD) return POF_CEG_STD(terms, state, scheduleTime, externalData);\n        if (eventType == EventType.MD) return 0;\n        \n        revert(\"CEGEngine.payoffFunction: ATTRIBUTE_NOT_FOUND\");\n    }\n}",
  "sourcePath": "@atpar/actus-solidity/contracts/Engines/CEG/CEGEngine.sol",
  "ast": {
    "absolutePath": "@atpar/actus-solidity/contracts/Engines/CEG/CEGEngine.sol",
    "exportedSymbols": {
      "CEGEngine": [
        29689
      ]
    },
    "id": 29690,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 29019,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:93"
      },
      {
        "id": 29020,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:93"
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Core/Core.sol",
        "file": "../../Core/Core.sol",
        "id": 29021,
        "nodeType": "ImportDirective",
        "scope": 29690,
        "sourceUnit": 24036,
        "src": "101:29:93",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Engines/CEG/ICEGEngine.sol",
        "file": "./ICEGEngine.sol",
        "id": 29022,
        "nodeType": "ImportDirective",
        "scope": 29690,
        "sourceUnit": 30295,
        "src": "131:26:93",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Engines/CEG/CEGSTF.sol",
        "file": "./CEGSTF.sol",
        "id": 29023,
        "nodeType": "ImportDirective",
        "scope": 29690,
        "sourceUnit": 30194,
        "src": "158:22:93",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Engines/CEG/CEGPOF.sol",
        "file": "./CEGPOF.sol",
        "id": 29024,
        "nodeType": "ImportDirective",
        "scope": 29690,
        "sourceUnit": 29797,
        "src": "181:22:93",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 29026,
              "name": "Core",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24035,
              "src": "536:4:93",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Core_$24035",
                "typeString": "contract Core"
              }
            },
            "id": 29027,
            "nodeType": "InheritanceSpecifier",
            "src": "536:4:93"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 29028,
              "name": "CEGSTF",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 30193,
              "src": "542:6:93",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CEGSTF_$30193",
                "typeString": "contract CEGSTF"
              }
            },
            "id": 29029,
            "nodeType": "InheritanceSpecifier",
            "src": "542:6:93"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 29030,
              "name": "CEGPOF",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 29796,
              "src": "550:6:93",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CEGPOF_$29796",
                "typeString": "contract CEGPOF"
              }
            },
            "id": 29031,
            "nodeType": "InheritanceSpecifier",
            "src": "550:6:93"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 29032,
              "name": "ICEGEngine",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 30294,
              "src": "558:10:93",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ICEGEngine_$30294",
                "typeString": "contract ICEGEngine"
              }
            },
            "id": 29033,
            "nodeType": "InheritanceSpecifier",
            "src": "558:10:93"
          }
        ],
        "contractDependencies": [
          22465,
          23277,
          23340,
          23895,
          24013,
          24035,
          24668,
          24758,
          24885,
          24931,
          29796,
          30193,
          30294,
          32432
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 29025,
          "nodeType": "StructuredDocumentation",
          "src": "206:307:93",
          "text": " @title CEGEngine\n @notice Inherits from BaseEngine by implementing STFs, POFs according to the ACTUS standard for a CEC contract\n @dev All numbers except unix timestamp are represented as multiple of 10 ** 18\n inputs have to be multiplied by 10 ** 18, outputs have to multplied by 10 ** -18"
        },
        "fullyImplemented": true,
        "id": 29689,
        "linearizedBaseContracts": [
          29689,
          30294,
          32432,
          29796,
          30193,
          24035,
          24931,
          24668,
          24885,
          24013,
          23895,
          23340,
          22465,
          24758,
          23277
        ],
        "name": "CEGEngine",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "baseFunctions": [
              32431
            ],
            "body": {
              "id": 29042,
              "nodeType": "Block",
              "src": "646:40:93",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 29039,
                      "name": "ContractType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22559,
                      "src": "663:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_ContractType_$22559_$",
                        "typeString": "type(enum ContractType)"
                      }
                    },
                    "id": 29040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "CEG",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "663:16:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ContractType_$22559",
                      "typeString": "enum ContractType"
                    }
                  },
                  "functionReturnParameters": 29038,
                  "id": 29041,
                  "nodeType": "Return",
                  "src": "656:23:93"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "cb2ef6f7",
            "id": 29043,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "contractType",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 29035,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "614:8:93"
            },
            "parameters": {
              "id": 29034,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "597:2:93"
            },
            "returnParameters": {
              "id": 29038,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29037,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29043,
                  "src": "632:12:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_ContractType_$22559",
                    "typeString": "enum ContractType"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29036,
                    "name": "ContractType",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22559,
                    "src": "632:12:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ContractType_$22559",
                      "typeString": "enum ContractType"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "631:14:93"
            },
            "scope": 29689,
            "src": "576:110:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              30223
            ],
            "body": {
              "id": 29065,
              "nodeType": "Block",
              "src": "1335:141:93",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 29059,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29046,
                        "src": "1389:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                          "typeString": "struct CEGTerms calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 29060,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29048,
                        "src": "1408:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                          "typeString": "struct State calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 29061,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29050,
                        "src": "1427:6:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 29062,
                        "name": "externalData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29052,
                        "src": "1447:12:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                          "typeString": "struct CEGTerms calldata"
                        },
                        {
                          "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                          "typeString": "struct State calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 29058,
                      "name": "stateTransitionFunction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29616,
                      "src": "1352:23:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                        "typeString": "function (struct CEGTerms memory,struct State memory,bytes32,bytes32) pure returns (struct State memory)"
                      }
                    },
                    "id": 29063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1352:117:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 29057,
                  "id": 29064,
                  "nodeType": "Return",
                  "src": "1345:124:93"
                }
              ]
            },
            "documentation": {
              "id": 29044,
              "nodeType": "StructuredDocumentation",
              "src": "692:403:93",
              "text": " Applys an event to the current state of a contract and returns the resulting contract state.\n @param terms terms of the contract\n @param state current state of the contract\n @param _event event to be applied to the contract state\n @param externalData external data needed for STF evaluation (e.g. rate for RR events)\n @return the resulting contract state"
            },
            "functionSelector": "392aef8e",
            "id": 29066,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeStateForEvent",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 29054,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1291:8:93"
            },
            "parameters": {
              "id": 29053,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29046,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29066,
                  "src": "1139:23:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                    "typeString": "struct CEGTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29045,
                    "name": "CEGTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22852,
                    "src": "1139:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CEGTerms_$22852_storage_ptr",
                      "typeString": "struct CEGTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29048,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29066,
                  "src": "1172:20:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29047,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "1172:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29050,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29066,
                  "src": "1202:14:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29049,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1202:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29052,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29066,
                  "src": "1226:20:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29051,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1226:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1129:123:93"
            },
            "returnParameters": {
              "id": 29057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29056,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29066,
                  "src": "1317:12:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29055,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "1317:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1316:14:93"
            },
            "scope": 29689,
            "src": "1100:376:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              30237
            ],
            "body": {
              "id": 29116,
              "nodeType": "Block",
              "src": "2090:504:93",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 29093,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 29087,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 29081,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29069,
                          "src": "2184:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                            "typeString": "struct CEGTerms calldata"
                          }
                        },
                        "id": 29082,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "settlementCurrency",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22819,
                        "src": "2184:24:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 29085,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2220:1:93",
                            "subdenomination": null,
                            "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": 29084,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2212:7:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 29083,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2212:7:93",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 29086,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2212:10:93",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "2184:38:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 29092,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 29088,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29069,
                          "src": "2226:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                            "typeString": "struct CEGTerms calldata"
                          }
                        },
                        "id": 29089,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "currency",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22817,
                        "src": "2226:14:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 29090,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29069,
                          "src": "2244:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                            "typeString": "struct CEGTerms calldata"
                          }
                        },
                        "id": 29091,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "settlementCurrency",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22819,
                        "src": "2244:24:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "2226:42:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2184:84:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29108,
                  "nodeType": "IfStatement",
                  "src": "2180:282:93",
                  "trueBody": {
                    "id": 29107,
                    "nodeType": "Block",
                    "src": "2270:192:93",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 29103,
                                  "name": "externalData",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29075,
                                  "src": "2437:12:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 29102,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2430:6:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int256_$",
                                  "typeString": "type(int256)"
                                },
                                "typeName": {
                                  "id": 29101,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2430:6:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 29104,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2430:20:93",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 29095,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29069,
                                  "src": "2323:5:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                    "typeString": "struct CEGTerms calldata"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 29096,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29071,
                                  "src": "2346:5:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                                    "typeString": "struct State calldata"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 29097,
                                  "name": "_event",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29073,
                                  "src": "2369:6:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 29098,
                                  "name": "externalData",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29075,
                                  "src": "2393:12:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                    "typeString": "struct CEGTerms calldata"
                                  },
                                  {
                                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                                    "typeString": "struct State calldata"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 29094,
                                "name": "payoffFunction",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 29688,
                                "src": "2291:14:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_int256_$",
                                  "typeString": "function (struct CEGTerms memory,struct State memory,bytes32,bytes32) pure returns (int256)"
                                }
                              },
                              "id": 29099,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2291:128:93",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 29100,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "floatMult",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24120,
                            "src": "2291:138:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 29105,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2291:160:93",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 29080,
                        "id": 29106,
                        "nodeType": "Return",
                        "src": "2284:167:93"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 29110,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29069,
                        "src": "2507:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                          "typeString": "struct CEGTerms calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 29111,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29071,
                        "src": "2526:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                          "typeString": "struct State calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 29112,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29073,
                        "src": "2545:6:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 29113,
                        "name": "externalData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29075,
                        "src": "2565:12:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                          "typeString": "struct CEGTerms calldata"
                        },
                        {
                          "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                          "typeString": "struct State calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 29109,
                      "name": "payoffFunction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29688,
                      "src": "2479:14:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_int256_$",
                        "typeString": "function (struct CEGTerms memory,struct State memory,bytes32,bytes32) pure returns (int256)"
                      }
                    },
                    "id": 29114,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2479:108:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 29080,
                  "id": 29115,
                  "nodeType": "Return",
                  "src": "2472:115:93"
                }
              ]
            },
            "documentation": {
              "id": 29067,
              "nodeType": "StructuredDocumentation",
              "src": "1482:373:93",
              "text": " Evaluates the payoff for an event under the current state of the contract.\n @param terms terms of the contract\n @param state current state of the contract\n @param _event event for which the payoff should be evaluated\n @param externalData external data needed for POF evaluation (e.g. fxRate)\n @return the payoff of the event"
            },
            "functionSelector": "1f252723",
            "id": 29117,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computePayoffForEvent",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 29077,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2052:8:93"
            },
            "parameters": {
              "id": 29076,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29069,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29117,
                  "src": "1900:23:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                    "typeString": "struct CEGTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29068,
                    "name": "CEGTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22852,
                    "src": "1900:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CEGTerms_$22852_storage_ptr",
                      "typeString": "struct CEGTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29071,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29117,
                  "src": "1933:20:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29070,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "1933:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29073,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29117,
                  "src": "1963:14:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29072,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1963:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29075,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29117,
                  "src": "1987:20:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29074,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1987:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1890:123:93"
            },
            "returnParameters": {
              "id": 29080,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29079,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29117,
                  "src": "2078:6:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 29078,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2078:6:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2077:8:93"
            },
            "scope": 29689,
            "src": "1860:734:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              30209
            ],
            "body": {
              "id": 29171,
              "nodeType": "Block",
              "src": "2915:348:93",
              "statements": [
                {
                  "assignments": [
                    29127
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29127,
                      "mutability": "mutable",
                      "name": "state",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29171,
                      "src": "2925:18:93",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 29126,
                        "name": "State",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22673,
                        "src": "2925:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                          "typeString": "struct State"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 29128,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2925:18:93"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 29134,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29129,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29127,
                        "src": "2954:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 29131,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "contractPerformance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22634,
                      "src": "2954:25:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                        "typeString": "enum ContractPerformance"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29132,
                        "name": "ContractPerformance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22513,
                        "src": "2982:19:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_ContractPerformance_$22513_$",
                          "typeString": "type(enum ContractPerformance)"
                        }
                      },
                      "id": 29133,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "PF",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2982:22:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                        "typeString": "enum ContractPerformance"
                      }
                    },
                    "src": "2954:50:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                      "typeString": "enum ContractPerformance"
                    }
                  },
                  "id": 29135,
                  "nodeType": "ExpressionStatement",
                  "src": "2954:50:93"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 29141,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29136,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29127,
                        "src": "3014:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 29138,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "3014:16:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29139,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29120,
                        "src": "3033:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                          "typeString": "struct CEGTerms calldata"
                        }
                      },
                      "id": 29140,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22823,
                      "src": "3033:16:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3014:35:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 29142,
                  "nodeType": "ExpressionStatement",
                  "src": "3014:35:93"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 29148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29143,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29127,
                        "src": "3059:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 29145,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "maturityDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22640,
                      "src": "3059:18:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29146,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29120,
                        "src": "3080:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                          "typeString": "struct CEGTerms calldata"
                        }
                      },
                      "id": 29147,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "maturityDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22825,
                      "src": "3080:18:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3059:39:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 29149,
                  "nodeType": "ExpressionStatement",
                  "src": "3059:39:93"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 29160,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29150,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29127,
                        "src": "3108:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 29152,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "notionalPrincipal",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22648,
                      "src": "3108:23:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "id": 29159,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 29154,
                              "name": "terms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29120,
                              "src": "3143:5:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                "typeString": "struct CEGTerms calldata"
                              }
                            },
                            "id": 29155,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "contractRole",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22805,
                            "src": "3143:18:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          ],
                          "id": 29153,
                          "name": "roleSign",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23339,
                          "src": "3134:8:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_enum$_ContractRole_$22539_$returns$_t_int8_$",
                            "typeString": "function (enum ContractRole) pure returns (int8)"
                          }
                        },
                        "id": 29156,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3134:28:93",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_int8",
                          "typeString": "int8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 29157,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29120,
                          "src": "3165:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                            "typeString": "struct CEGTerms calldata"
                          }
                        },
                        "id": 29158,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "notionalPrincipal",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22831,
                        "src": "3165:23:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "src": "3134:54:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "3108:80:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 29161,
                  "nodeType": "ExpressionStatement",
                  "src": "3108:80:93"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 29167,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29162,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29127,
                        "src": "3198:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 29164,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "feeAccrued",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22652,
                      "src": "3198:16:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29165,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29120,
                        "src": "3217:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                          "typeString": "struct CEGTerms calldata"
                        }
                      },
                      "id": 29166,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "feeAccrued",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22835,
                      "src": "3217:16:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "3198:35:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 29168,
                  "nodeType": "ExpressionStatement",
                  "src": "3198:35:93"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 29169,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 29127,
                    "src": "3251:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 29125,
                  "id": 29170,
                  "nodeType": "Return",
                  "src": "3244:12:93"
                }
              ]
            },
            "documentation": {
              "id": 29118,
              "nodeType": "StructuredDocumentation",
              "src": "2600:174:93",
              "text": " @notice Initialize contract state space based on the contract terms.\n @param terms terms of the contract\n @return initial state of the contract"
            },
            "functionSelector": "67b58117",
            "id": 29172,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeInitialState",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 29122,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2871:8:93"
            },
            "parameters": {
              "id": 29121,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29120,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29172,
                  "src": "2808:23:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                    "typeString": "struct CEGTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29119,
                    "name": "CEGTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22852,
                    "src": "2808:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CEGTerms_$22852_storage_ptr",
                      "typeString": "struct CEGTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2807:25:93"
            },
            "returnParameters": {
              "id": 29125,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29124,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29172,
                  "src": "2897:12:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29123,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "2897:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2896:14:93"
            },
            "scope": 29689,
            "src": "2779:484:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              30250
            ],
            "body": {
              "id": 29281,
              "nodeType": "Block",
              "src": "3852:794:93",
              "statements": [
                {
                  "assignments": [
                    29191
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29191,
                      "mutability": "mutable",
                      "name": "events",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29281,
                      "src": "3862:46:93",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                        "typeString": "bytes32[120]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 29189,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3862:7:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 29190,
                        "length": {
                          "argumentTypes": null,
                          "id": 29188,
                          "name": "MAX_EVENT_SCHEDULE_SIZE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22464,
                          "src": "3870:23:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "ArrayTypeName",
                        "src": "3862:32:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$120_storage_ptr",
                          "typeString": "bytes32[120]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 29192,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3862:46:93"
                },
                {
                  "assignments": [
                    29194
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29194,
                      "mutability": "mutable",
                      "name": "index",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29281,
                      "src": "3918:12:93",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 29193,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "3918:6:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 29195,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3918:12:93"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 29199,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29196,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29175,
                        "src": "3965:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                          "typeString": "struct CEGTerms calldata"
                        }
                      },
                      "id": 29197,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "purchaseDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22827,
                      "src": "3965:18:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 29198,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3987:1:93",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3965:23:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29223,
                  "nodeType": "IfStatement",
                  "src": "3961:236:93",
                  "trueBody": {
                    "id": 29222,
                    "nodeType": "Block",
                    "src": "3990:207:93",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 29201,
                                "name": "terms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 29175,
                                "src": "4020:5:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                  "typeString": "struct CEGTerms calldata"
                                }
                              },
                              "id": 29202,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "purchaseDate",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22827,
                              "src": "4020:18:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 29203,
                              "name": "segmentStart",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29177,
                              "src": "4040:12:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 29204,
                              "name": "segmentEnd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29179,
                              "src": "4054:10:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 29200,
                            "name": "isInSegment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24667,
                            "src": "4008:11:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                            }
                          },
                          "id": 29205,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4008:57:93",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 29221,
                        "nodeType": "IfStatement",
                        "src": "4004:183:93",
                        "trueBody": {
                          "id": 29220,
                          "nodeType": "Block",
                          "src": "4067:120:93",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 29215,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 29206,
                                    "name": "events",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 29191,
                                    "src": "4085:6:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                                      "typeString": "bytes32[120] memory"
                                    }
                                  },
                                  "id": 29208,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 29207,
                                    "name": "index",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 29194,
                                    "src": "4092:5:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "4085:13:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 29210,
                                        "name": "EventType",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 22610,
                                        "src": "4113:9:93",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                                          "typeString": "type(enum EventType)"
                                        }
                                      },
                                      "id": 29211,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "PRD",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "4113:13:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_EventType_$22610",
                                        "typeString": "enum EventType"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 29212,
                                        "name": "terms",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 29175,
                                        "src": "4128:5:93",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                          "typeString": "struct CEGTerms calldata"
                                        }
                                      },
                                      "id": 29213,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "purchaseDate",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 22827,
                                      "src": "4128:18:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_enum$_EventType_$22610",
                                        "typeString": "enum EventType"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 29209,
                                    "name": "encodeEvent",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24702,
                                    "src": "4101:11:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_enum$_EventType_$22610_$_t_uint256_$returns$_t_bytes32_$",
                                      "typeString": "function (enum EventType,uint256) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 29214,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4101:46:93",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "4085:62:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 29216,
                              "nodeType": "ExpressionStatement",
                              "src": "4085:62:93"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 29218,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "4165:7:93",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 29217,
                                  "name": "index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29194,
                                  "src": "4165:5:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "id": 29219,
                              "nodeType": "ExpressionStatement",
                              "src": "4165:7:93"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 29231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 29225,
                            "name": "terms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29175,
                            "src": "4249:5:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                              "typeString": "struct CEGTerms calldata"
                            }
                          },
                          "id": 29226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "maturityDate",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22825,
                          "src": "4249:18:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29227,
                          "name": "segmentStart",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29177,
                          "src": "4269:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29228,
                          "name": "segmentEnd",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29179,
                          "src": "4283:10:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 29224,
                        "name": "isInSegment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24667,
                        "src": "4237:11:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                          "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                        }
                      },
                      "id": 29229,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4237:57:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 29230,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4298:4:93",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "4237:65:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29247,
                  "nodeType": "IfStatement",
                  "src": "4233:178:93",
                  "trueBody": {
                    "id": 29246,
                    "nodeType": "Block",
                    "src": "4304:107:93",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 29241,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 29232,
                              "name": "events",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29191,
                              "src": "4318:6:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                                "typeString": "bytes32[120] memory"
                              }
                            },
                            "id": 29234,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 29233,
                              "name": "index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29194,
                              "src": "4325:5:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "4318:13:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 29236,
                                  "name": "EventType",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22610,
                                  "src": "4346:9:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                                    "typeString": "type(enum EventType)"
                                  }
                                },
                                "id": 29237,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "MD",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4346:12:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_EventType_$22610",
                                  "typeString": "enum EventType"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 29238,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29175,
                                  "src": "4360:5:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                    "typeString": "struct CEGTerms calldata"
                                  }
                                },
                                "id": 29239,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "maturityDate",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22825,
                                "src": "4360:18:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_enum$_EventType_$22610",
                                  "typeString": "enum EventType"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 29235,
                              "name": "encodeEvent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24702,
                              "src": "4334:11:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_enum$_EventType_$22610_$_t_uint256_$returns$_t_bytes32_$",
                                "typeString": "function (enum EventType,uint256) pure returns (bytes32)"
                              }
                            },
                            "id": 29240,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4334:45:93",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "4318:61:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 29242,
                        "nodeType": "ExpressionStatement",
                        "src": "4318:61:93"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 29244,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "4393:7:93",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 29243,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29194,
                            "src": "4393:5:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 29245,
                        "nodeType": "ExpressionStatement",
                        "src": "4393:7:93"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    29252
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29252,
                      "mutability": "mutable",
                      "name": "schedule",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29281,
                      "src": "4472:25:93",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 29250,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4472:7:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 29251,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "4472:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 29258,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 29256,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29194,
                        "src": "4514:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "id": 29255,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "4500:13:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 29253,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4504:7:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 29254,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "4504:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 29257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4500:20:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4472:48:93"
                },
                {
                  "body": {
                    "id": 29277,
                    "nodeType": "Block",
                    "src": "4566:48:93",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 29275,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 29269,
                              "name": "schedule",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29252,
                              "src": "4580:8:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            "id": 29271,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 29270,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29260,
                              "src": "4589:1:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "4580:11:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 29272,
                              "name": "events",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29191,
                              "src": "4594:6:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                                "typeString": "bytes32[120] memory"
                              }
                            },
                            "id": 29274,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 29273,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29260,
                              "src": "4601:1:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4594:9:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "4580:23:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 29276,
                        "nodeType": "ExpressionStatement",
                        "src": "4580:23:93"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 29265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29263,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29260,
                      "src": "4550:1:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 29264,
                      "name": "index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29194,
                      "src": "4554:5:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "src": "4550:9:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 29278,
                  "initializationExpression": {
                    "assignments": [
                      29260
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 29260,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 29278,
                        "src": "4535:9:93",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 29259,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4535:7:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 29262,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 29261,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4547:1:93",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "4535:13:93"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 29267,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4561:3:93",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 29266,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29260,
                        "src": "4561:1:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 29268,
                    "nodeType": "ExpressionStatement",
                    "src": "4561:3:93"
                  },
                  "nodeType": "ForStatement",
                  "src": "4530:84:93"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 29279,
                    "name": "schedule",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 29252,
                    "src": "4631:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 29185,
                  "id": 29280,
                  "nodeType": "Return",
                  "src": "4624:15:93"
                }
              ]
            },
            "documentation": {
              "id": 29173,
              "nodeType": "StructuredDocumentation",
              "src": "3269:354:93",
              "text": " @notice Computes a schedule segment of non-cyclic contract events based on the contract terms\n and the specified timestamps.\n @param terms terms of the contract\n @param segmentStart start timestamp of the segment\n @param segmentEnd end timestamp of the segement\n @return segment of the non-cyclic schedule"
            },
            "functionSelector": "dad412b5",
            "id": 29282,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeNonCyclicScheduleSegment",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 29181,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3804:8:93"
            },
            "parameters": {
              "id": 29180,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29175,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29282,
                  "src": "3678:23:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                    "typeString": "struct CEGTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29174,
                    "name": "CEGTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22852,
                    "src": "3678:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CEGTerms_$22852_storage_ptr",
                      "typeString": "struct CEGTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29177,
                  "mutability": "mutable",
                  "name": "segmentStart",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29282,
                  "src": "3711:20:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29176,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3711:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29179,
                  "mutability": "mutable",
                  "name": "segmentEnd",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29282,
                  "src": "3741:18:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29178,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3741:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3668:97:93"
            },
            "returnParameters": {
              "id": 29185,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29184,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29282,
                  "src": "3830:16:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 29182,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "3830:7:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 29183,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3830:9:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3829:18:93"
            },
            "scope": 29689,
            "src": "3628:1018:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              30265
            ],
            "body": {
              "id": 29419,
              "nodeType": "Block",
              "src": "5302:1168:93",
              "statements": [
                {
                  "assignments": [
                    29303
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29303,
                      "mutability": "mutable",
                      "name": "events",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29419,
                      "src": "5312:46:93",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                        "typeString": "bytes32[120]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 29301,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5312:7:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 29302,
                        "length": {
                          "argumentTypes": null,
                          "id": 29300,
                          "name": "MAX_EVENT_SCHEDULE_SIZE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22464,
                          "src": "5320:23:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "ArrayTypeName",
                        "src": "5312:32:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$120_storage_ptr",
                          "typeString": "bytes32[120]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 29304,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5312:46:93"
                },
                {
                  "assignments": [
                    29306
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29306,
                      "mutability": "mutable",
                      "name": "index",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29419,
                      "src": "5368:13:93",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29305,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5368:7:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 29308,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 29307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5384:1:93",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5368:17:93"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29312,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29309,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29291,
                      "src": "5400:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29310,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "5413:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29311,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "FP",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5413:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "5400:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29385,
                  "nodeType": "IfStatement",
                  "src": "5396:839:93",
                  "trueBody": {
                    "id": 29384,
                    "nodeType": "Block",
                    "src": "5427:808:93",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 29316,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 29313,
                              "name": "terms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29285,
                              "src": "5465:5:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                "typeString": "struct CEGTerms calldata"
                              }
                            },
                            "id": 29314,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "cycleAnchorDateOfFee",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22829,
                            "src": "5465:26:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 29315,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5495:1:93",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5465:31:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 29383,
                        "nodeType": "IfStatement",
                        "src": "5461:764:93",
                        "trueBody": {
                          "id": 29382,
                          "nodeType": "Block",
                          "src": "5498:727:93",
                          "statements": [
                            {
                              "assignments": [
                                29322
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 29322,
                                  "mutability": "mutable",
                                  "name": "feeSchedule",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 29382,
                                  "src": "5516:42:93",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                    "typeString": "uint256[120]"
                                  },
                                  "typeName": {
                                    "baseType": {
                                      "id": 29320,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5516:7:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 29321,
                                    "length": {
                                      "argumentTypes": null,
                                      "id": 29319,
                                      "name": "MAX_CYCLE_SIZE",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 22461,
                                      "src": "5524:14:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "ArrayTypeName",
                                    "src": "5516:23:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$120_storage_ptr",
                                      "typeString": "uint256[120]"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 29336,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29324,
                                      "name": "terms",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 29285,
                                      "src": "5611:5:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                        "typeString": "struct CEGTerms calldata"
                                      }
                                    },
                                    "id": 29325,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "cycleAnchorDateOfFee",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22829,
                                    "src": "5611:26:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29326,
                                      "name": "terms",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 29285,
                                      "src": "5659:5:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                        "typeString": "struct CEGTerms calldata"
                                      }
                                    },
                                    "id": 29327,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "maturityDate",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22825,
                                    "src": "5659:18:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29328,
                                      "name": "terms",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 29285,
                                      "src": "5699:5:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                        "typeString": "struct CEGTerms calldata"
                                      }
                                    },
                                    "id": 29329,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "cycleOfFee",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22847,
                                    "src": "5699:16:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_IPS_$22486_calldata_ptr",
                                      "typeString": "struct IPS calldata"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29330,
                                      "name": "terms",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 29285,
                                      "src": "5737:5:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                        "typeString": "struct CEGTerms calldata"
                                      }
                                    },
                                    "id": 29331,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "endOfMonthConvention",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22811,
                                    "src": "5737:26:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                      "typeString": "enum EndOfMonthConvention"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "74727565",
                                    "id": 29332,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5785:4:93",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "true"
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 29333,
                                    "name": "segmentStart",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 29287,
                                    "src": "5811:12:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 29334,
                                    "name": "segmentEnd",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 29289,
                                    "src": "5845:10:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_IPS_$22486_calldata_ptr",
                                      "typeString": "struct IPS calldata"
                                    },
                                    {
                                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                      "typeString": "enum EndOfMonthConvention"
                                    },
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 29323,
                                  "name": "computeDatesFromCycleSegment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24588,
                                  "src": "5561:28:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_struct$_IPS_$22486_memory_ptr_$_t_enum$_EndOfMonthConvention_$22580_$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$120_memory_ptr_$",
                                    "typeString": "function (uint256,uint256,struct IPS memory,enum EndOfMonthConvention,bool,uint256,uint256) pure returns (uint256[120] memory)"
                                  }
                                },
                                "id": 29335,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5561:312:93",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                  "typeString": "uint256[120] memory"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "5516:357:93"
                            },
                            {
                              "body": {
                                "id": 29380,
                                "nodeType": "Block",
                                "src": "5934:277:93",
                                "statements": [
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 29351,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 29347,
                                          "name": "feeSchedule",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 29322,
                                          "src": "5960:11:93",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                            "typeString": "uint256[120] memory"
                                          }
                                        },
                                        "id": 29349,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 29348,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 29338,
                                          "src": "5972:1:93",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "5960:14:93",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 29350,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "5978:1:93",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "5960:19:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 29353,
                                    "nodeType": "IfStatement",
                                    "src": "5956:30:93",
                                    "trueBody": {
                                      "id": 29352,
                                      "nodeType": "Break",
                                      "src": "5981:5:93"
                                    }
                                  },
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "id": 29362,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 29355,
                                              "name": "feeSchedule",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 29322,
                                              "src": "6024:11:93",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                                "typeString": "uint256[120] memory"
                                              }
                                            },
                                            "id": 29357,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 29356,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 29338,
                                              "src": "6036:1:93",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "6024:14:93",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 29358,
                                            "name": "segmentStart",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 29287,
                                            "src": "6040:12:93",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 29359,
                                            "name": "segmentEnd",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 29289,
                                            "src": "6054:10:93",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 29354,
                                          "name": "isInSegment",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 24667,
                                          "src": "6012:11:93",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                            "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                                          }
                                        },
                                        "id": 29360,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6012:53:93",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "66616c7365",
                                        "id": 29361,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6069:5:93",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        "value": "false"
                                      },
                                      "src": "6012:62:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 29364,
                                    "nodeType": "IfStatement",
                                    "src": "6008:76:93",
                                    "trueBody": {
                                      "id": 29363,
                                      "nodeType": "Continue",
                                      "src": "6076:8:93"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29375,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 29365,
                                          "name": "events",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 29303,
                                          "src": "6106:6:93",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                                            "typeString": "bytes32[120] memory"
                                          }
                                        },
                                        "id": 29367,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 29366,
                                          "name": "index",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 29306,
                                          "src": "6113:5:93",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "6106:13:93",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 29369,
                                              "name": "EventType",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 22610,
                                              "src": "6134:9:93",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                                                "typeString": "type(enum EventType)"
                                              }
                                            },
                                            "id": 29370,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "FP",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "6134:12:93",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_enum$_EventType_$22610",
                                              "typeString": "enum EventType"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 29371,
                                              "name": "feeSchedule",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 29322,
                                              "src": "6148:11:93",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                                "typeString": "uint256[120] memory"
                                              }
                                            },
                                            "id": 29373,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 29372,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 29338,
                                              "src": "6160:1:93",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "6148:14:93",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_enum$_EventType_$22610",
                                              "typeString": "enum EventType"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 29368,
                                          "name": "encodeEvent",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 24702,
                                          "src": "6122:11:93",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_enum$_EventType_$22610_$_t_uint256_$returns$_t_bytes32_$",
                                            "typeString": "function (enum EventType,uint256) pure returns (bytes32)"
                                          }
                                        },
                                        "id": 29374,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6122:41:93",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "6106:57:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "id": 29376,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6106:57:93"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29378,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "++",
                                      "prefix": false,
                                      "src": "6185:7:93",
                                      "subExpression": {
                                        "argumentTypes": null,
                                        "id": 29377,
                                        "name": "index",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 29306,
                                        "src": "6185:5:93",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 29379,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6185:7:93"
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 29343,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 29341,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29338,
                                  "src": "5909:1:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 29342,
                                  "name": "MAX_CYCLE_SIZE",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22461,
                                  "src": "5913:14:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5909:18:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 29381,
                              "initializationExpression": {
                                "assignments": [
                                  29338
                                ],
                                "declarations": [
                                  {
                                    "constant": false,
                                    "id": 29338,
                                    "mutability": "mutable",
                                    "name": "i",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 29381,
                                    "src": "5896:7:93",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    "typeName": {
                                      "id": 29337,
                                      "name": "uint8",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5896:5:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                  }
                                ],
                                "id": 29340,
                                "initialValue": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 29339,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5906:1:93",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "nodeType": "VariableDeclarationStatement",
                                "src": "5896:11:93"
                              },
                              "loopExpression": {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 29345,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "++",
                                  "prefix": false,
                                  "src": "5929:3:93",
                                  "subExpression": {
                                    "argumentTypes": null,
                                    "id": 29344,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 29338,
                                    "src": "5929:1:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "id": 29346,
                                "nodeType": "ExpressionStatement",
                                "src": "5929:3:93"
                              },
                              "nodeType": "ForStatement",
                              "src": "5891:320:93"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    29390
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29390,
                      "mutability": "mutable",
                      "name": "schedule",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29419,
                      "src": "6296:25:93",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 29388,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "6296:7:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 29389,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "6296:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 29396,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 29394,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29306,
                        "src": "6338:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 29393,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "6324:13:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 29391,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "6328:7:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 29392,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "6328:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 29395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6324:20:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6296:48:93"
                },
                {
                  "body": {
                    "id": 29415,
                    "nodeType": "Block",
                    "src": "6390:48:93",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 29413,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 29407,
                              "name": "schedule",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29390,
                              "src": "6404:8:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            "id": 29409,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 29408,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29398,
                              "src": "6413:1:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6404:11:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 29410,
                              "name": "events",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29303,
                              "src": "6418:6:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                                "typeString": "bytes32[120] memory"
                              }
                            },
                            "id": 29412,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 29411,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29398,
                              "src": "6425:1:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6418:9:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "6404:23:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 29414,
                        "nodeType": "ExpressionStatement",
                        "src": "6404:23:93"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 29403,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29401,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29398,
                      "src": "6374:1:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 29402,
                      "name": "index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29306,
                      "src": "6378:5:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6374:9:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 29416,
                  "initializationExpression": {
                    "assignments": [
                      29398
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 29398,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 29416,
                        "src": "6359:9:93",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 29397,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6359:7:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 29400,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 29399,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6371:1:93",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6359:13:93"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 29405,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6385:3:93",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 29404,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29398,
                        "src": "6385:1:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 29406,
                    "nodeType": "ExpressionStatement",
                    "src": "6385:3:93"
                  },
                  "nodeType": "ForStatement",
                  "src": "6354:84:93"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 29417,
                    "name": "schedule",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 29390,
                    "src": "6455:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 29297,
                  "id": 29418,
                  "nodeType": "Return",
                  "src": "6448:15:93"
                }
              ]
            },
            "documentation": {
              "id": 29283,
              "nodeType": "StructuredDocumentation",
              "src": "4652:395:93",
              "text": " @notice Computes a schedule segment of cyclic contract events based on the contract terms\n and the specified timestamps.\n @param terms terms of the contract\n @param segmentStart start timestamp of the segment\n @param segmentEnd end timestamp of the segement\n @param eventType eventType of the cyclic schedule\n @return event schedule segment"
            },
            "functionSelector": "0ba295ba",
            "id": 29420,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeCyclicScheduleSegment",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 29293,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5254:8:93"
            },
            "parameters": {
              "id": 29292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29285,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29420,
                  "src": "5099:23:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                    "typeString": "struct CEGTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29284,
                    "name": "CEGTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22852,
                    "src": "5099:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CEGTerms_$22852_storage_ptr",
                      "typeString": "struct CEGTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29287,
                  "mutability": "mutable",
                  "name": "segmentStart",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29420,
                  "src": "5132:20:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29286,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5132:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29289,
                  "mutability": "mutable",
                  "name": "segmentEnd",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29420,
                  "src": "5162:18:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29288,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5162:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29291,
                  "mutability": "mutable",
                  "name": "eventType",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29420,
                  "src": "5190:19:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_EventType_$22610",
                    "typeString": "enum EventType"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29290,
                    "name": "EventType",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22610,
                    "src": "5190:9:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5089:126:93"
            },
            "returnParameters": {
              "id": 29297,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29296,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29420,
                  "src": "5280:16:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 29294,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "5280:7:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 29295,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "5280:9:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5279:18:93"
            },
            "scope": 29689,
            "src": "5052:1418:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              30277
            ],
            "body": {
              "id": 29477,
              "nodeType": "Block",
              "src": "7036:554:93",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29433,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29427,
                      "src": "7066:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29434,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "7079:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29435,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "FP",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "7079:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "7066:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29471,
                  "nodeType": "IfStatement",
                  "src": "7062:494:93",
                  "trueBody": {
                    "id": 29470,
                    "nodeType": "Block",
                    "src": "7093:463:93",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 29440,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 29437,
                              "name": "terms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29423,
                              "src": "7111:5:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                "typeString": "struct CEGTerms calldata"
                              }
                            },
                            "id": 29438,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "cycleAnchorDateOfFee",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22829,
                            "src": "7111:26:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 29439,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7141:1:93",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "7111:31:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 29469,
                        "nodeType": "IfStatement",
                        "src": "7107:439:93",
                        "trueBody": {
                          "id": 29468,
                          "nodeType": "Block",
                          "src": "7144:402:93",
                          "statements": [
                            {
                              "assignments": [
                                29442
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 29442,
                                  "mutability": "mutable",
                                  "name": "nextFeeDate",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 29468,
                                  "src": "7162:19:93",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 29441,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7162:7:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 29452,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29444,
                                      "name": "terms",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 29423,
                                      "src": "7243:5:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                        "typeString": "struct CEGTerms calldata"
                                      }
                                    },
                                    "id": 29445,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "cycleOfFee",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22847,
                                    "src": "7243:16:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_IPS_$22486_calldata_ptr",
                                      "typeString": "struct IPS calldata"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29446,
                                      "name": "terms",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 29423,
                                      "src": "7281:5:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                        "typeString": "struct CEGTerms calldata"
                                      }
                                    },
                                    "id": 29447,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "endOfMonthConvention",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22811,
                                    "src": "7281:26:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                      "typeString": "enum EndOfMonthConvention"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29448,
                                      "name": "terms",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 29423,
                                      "src": "7329:5:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                        "typeString": "struct CEGTerms calldata"
                                      }
                                    },
                                    "id": 29449,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "cycleAnchorDateOfFee",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22829,
                                    "src": "7329:26:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 29450,
                                    "name": "lastScheduleTime",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 29425,
                                    "src": "7377:16:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_IPS_$22486_calldata_ptr",
                                      "typeString": "struct IPS calldata"
                                    },
                                    {
                                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                      "typeString": "enum EndOfMonthConvention"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 29443,
                                  "name": "computeNextCycleDateFromPrecedingDate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24637,
                                  "src": "7184:37:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_struct$_IPS_$22486_memory_ptr_$_t_enum$_EndOfMonthConvention_$22580_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (struct IPS memory,enum EndOfMonthConvention,uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 29451,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7184:227:93",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "7162:249:93"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 29455,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 29453,
                                  "name": "nextFeeDate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29442,
                                  "src": "7433:11:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 29454,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7448:1:93",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "7433:16:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 29461,
                              "nodeType": "IfStatement",
                              "src": "7429:39:93",
                              "trueBody": {
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 29458,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7466:1:93",
                                      "subdenomination": null,
                                      "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": 29457,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "7458:7:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes32_$",
                                      "typeString": "type(bytes32)"
                                    },
                                    "typeName": {
                                      "id": 29456,
                                      "name": "bytes32",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "7458:7:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 29459,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7458:10:93",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "functionReturnParameters": 29432,
                                "id": 29460,
                                "nodeType": "Return",
                                "src": "7451:17:93"
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29463,
                                      "name": "EventType",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 22610,
                                      "src": "7505:9:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                                        "typeString": "type(enum EventType)"
                                      }
                                    },
                                    "id": 29464,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "FP",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "7505:12:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_EventType_$22610",
                                      "typeString": "enum EventType"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 29465,
                                    "name": "nextFeeDate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 29442,
                                    "src": "7519:11:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_enum$_EventType_$22610",
                                      "typeString": "enum EventType"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 29462,
                                  "name": "encodeEvent",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24702,
                                  "src": "7493:11:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_enum$_EventType_$22610_$_t_uint256_$returns$_t_bytes32_$",
                                    "typeString": "function (enum EventType,uint256) pure returns (bytes32)"
                                  }
                                },
                                "id": 29466,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7493:38:93",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "functionReturnParameters": 29432,
                              "id": 29467,
                              "nodeType": "Return",
                              "src": "7486:45:93"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 29474,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7581:1:93",
                        "subdenomination": null,
                        "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": 29473,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "7573:7:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes32_$",
                        "typeString": "type(bytes32)"
                      },
                      "typeName": {
                        "id": 29472,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7573:7:93",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 29475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7573:10:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 29432,
                  "id": 29476,
                  "nodeType": "Return",
                  "src": "7566:17:93"
                }
              ]
            },
            "documentation": {
              "id": 29421,
              "nodeType": "StructuredDocumentation",
              "src": "6476:345:93",
              "text": " @notice Computes a schedule segment of cyclic contract events based on the contract terms\n and the specified timestamps.\n @param terms terms of the contract\n @param lastScheduleTime last occurrence of cyclic event\n @param eventType eventType of the cyclic schedule\n @return event schedule segment"
            },
            "functionSelector": "b90f7368",
            "id": 29478,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeNextCyclicEvent",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 29429,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6998:8:93"
            },
            "parameters": {
              "id": 29428,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29423,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29478,
                  "src": "6867:23:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                    "typeString": "struct CEGTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29422,
                    "name": "CEGTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22852,
                    "src": "6867:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CEGTerms_$22852_storage_ptr",
                      "typeString": "struct CEGTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29425,
                  "mutability": "mutable",
                  "name": "lastScheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29478,
                  "src": "6900:24:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29424,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6900:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29427,
                  "mutability": "mutable",
                  "name": "eventType",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29478,
                  "src": "6934:19:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_EventType_$22610",
                    "typeString": "enum EventType"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29426,
                    "name": "EventType",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22610,
                    "src": "6934:9:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6857:102:93"
            },
            "returnParameters": {
              "id": 29432,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29431,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29478,
                  "src": "7023:7:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29430,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7023:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7022:9:93"
            },
            "scope": 29689,
            "src": "6826:764:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              30293
            ],
            "body": {
              "id": 29528,
              "nodeType": "Block",
              "src": "8463:412:93",
              "statements": [
                {
                  "assignments": [
                    29496,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29496,
                      "mutability": "mutable",
                      "name": "eventType",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29528,
                      "src": "8474:19:93",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 29495,
                        "name": "EventType",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22610,
                        "src": "8474:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EventType_$22610",
                          "typeString": "enum EventType"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 29500,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 29498,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29481,
                        "src": "8510:6:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 29497,
                      "name": "decodeEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24743,
                      "src": "8498:11:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_enum$_EventType_$22610_$_t_uint256_$",
                        "typeString": "function (bytes32) pure returns (enum EventType,uint256)"
                      }
                    },
                    "id": 29499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8498:19:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_EventType_$22610_$_t_uint256_$",
                      "typeString": "tuple(enum EventType,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8473:44:93"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 29501,
                    "name": "hasUnderlying",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 29487,
                    "src": "8532:13:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29525,
                  "nodeType": "IfStatement",
                  "src": "8528:319:93",
                  "trueBody": {
                    "id": 29524,
                    "nodeType": "Block",
                    "src": "8547:300:93",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 29519,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 29510,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_enum$_EventType_$22610",
                                    "typeString": "enum EventType"
                                  },
                                  "id": 29505,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 29502,
                                    "name": "eventType",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 29496,
                                    "src": "8660:9:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_EventType_$22610",
                                      "typeString": "enum EventType"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29503,
                                      "name": "EventType",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 22610,
                                      "src": "8673:9:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                                        "typeString": "type(enum EventType)"
                                      }
                                    },
                                    "id": 29504,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "FP",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "8673:12:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_EventType_$22610",
                                      "typeString": "enum EventType"
                                    }
                                  },
                                  "src": "8660:25:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "||",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_enum$_EventType_$22610",
                                    "typeString": "enum EventType"
                                  },
                                  "id": 29509,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 29506,
                                    "name": "eventType",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 29496,
                                    "src": "8689:9:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_EventType_$22610",
                                      "typeString": "enum EventType"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29507,
                                      "name": "EventType",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 22610,
                                      "src": "8702:9:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                                        "typeString": "type(enum EventType)"
                                      }
                                    },
                                    "id": 29508,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "MD",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "8702:12:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_EventType_$22610",
                                      "typeString": "enum EventType"
                                    }
                                  },
                                  "src": "8689:25:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "8660:54:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 29511,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "8659:56:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "id": 29518,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 29512,
                                "name": "underlyingState",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 29489,
                                "src": "8735:15:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                                  "typeString": "struct State calldata"
                                }
                              },
                              "id": 29513,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "exerciseAmount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22662,
                              "src": "8735:30:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 29516,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8775:1:93",
                                  "subdenomination": null,
                                  "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": 29515,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8768:6:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int256_$",
                                  "typeString": "type(int256)"
                                },
                                "typeName": {
                                  "id": 29514,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8768:6:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 29517,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8768:9:93",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "src": "8735:42:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "8659:118:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 29523,
                        "nodeType": "IfStatement",
                        "src": "8638:199:93",
                        "trueBody": {
                          "id": 29522,
                          "nodeType": "Block",
                          "src": "8792:45:93",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "66616c7365",
                                "id": 29520,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8817:5:93",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "functionReturnParameters": 29494,
                              "id": 29521,
                              "nodeType": "Return",
                              "src": "8810:12:93"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 29526,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8864:4:93",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 29494,
                  "id": 29527,
                  "nodeType": "Return",
                  "src": "8857:11:93"
                }
              ]
            },
            "documentation": {
              "id": 29479,
              "nodeType": "StructuredDocumentation",
              "src": "7596:589:93",
              "text": " @notice Verifies that the provided event is still scheduled under the terms, the current state of the\n contract and the current state of the underlying.\n @param _event event for which to check if its still scheduled\n param terms terms of the contract\n param state current state of the contract\n @param hasUnderlying boolean indicating whether the contract has an underlying contract\n @param underlyingState state of the underlying (empty state object if non-existing)\n @return boolean indicating whether event is still scheduled"
            },
            "functionSelector": "1a770911",
            "id": 29529,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isEventScheduled",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 29491,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8427:8:93"
            },
            "parameters": {
              "id": 29490,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29481,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29529,
                  "src": "8225:14:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29480,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8225:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29483,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29529,
                  "src": "8249:17:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                    "typeString": "struct CEGTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29482,
                    "name": "CEGTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22852,
                    "src": "8249:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CEGTerms_$22852_storage_ptr",
                      "typeString": "struct CEGTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29485,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29529,
                  "src": "8288:14:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29484,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "8288:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29487,
                  "mutability": "mutable",
                  "name": "hasUnderlying",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29529,
                  "src": "8324:18:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 29486,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8324:4:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29489,
                  "mutability": "mutable",
                  "name": "underlyingState",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29529,
                  "src": "8352:30:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29488,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "8352:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8215:173:93"
            },
            "returnParameters": {
              "id": 29494,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29493,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29529,
                  "src": "8453:4:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 29492,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8453:4:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8452:6:93"
            },
            "scope": 29689,
            "src": "8190:685:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 29615,
              "nodeType": "Block",
              "src": "9667:749:93",
              "statements": [
                {
                  "assignments": [
                    29544,
                    29546
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29544,
                      "mutability": "mutable",
                      "name": "eventType",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29615,
                      "src": "9678:19:93",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 29543,
                        "name": "EventType",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22610,
                        "src": "9678:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EventType_$22610",
                          "typeString": "enum EventType"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 29546,
                      "mutability": "mutable",
                      "name": "scheduleTime",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29615,
                      "src": "9699:20:93",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29545,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9699:7:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 29550,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 29548,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29536,
                        "src": "9735:6:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 29547,
                      "name": "decodeEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24743,
                      "src": "9723:11:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_enum$_EventType_$22610_$_t_uint256_$",
                        "typeString": "function (bytes32) pure returns (enum EventType,uint256)"
                      }
                    },
                    "id": 29549,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9723:19:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_EventType_$22610_$_t_uint256_$",
                      "typeString": "tuple(enum EventType,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9677:65:93"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29551,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29544,
                      "src": "9846:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29552,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "9859:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29553,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "FP",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9859:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "9846:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29562,
                  "nodeType": "IfStatement",
                  "src": "9842:90:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 29556,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29532,
                          "src": "9891:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29557,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29534,
                          "src": "9898:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29558,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29546,
                          "src": "9905:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29559,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29538,
                          "src": "9919:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 29555,
                        "name": "STF_CEG_FP",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30192,
                        "src": "9880:10:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CEGTerms memory,struct State memory,uint256,bytes32) pure returns (struct State memory)"
                        }
                      },
                      "id": 29560,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9880:52:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "functionReturnParameters": 29542,
                    "id": 29561,
                    "nodeType": "Return",
                    "src": "9873:59:93"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29563,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29544,
                      "src": "9946:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29564,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "9959:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29565,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "XD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9959:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "9946:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29574,
                  "nodeType": "IfStatement",
                  "src": "9942:90:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 29568,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29532,
                          "src": "9991:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29569,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29534,
                          "src": "9998:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29570,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29546,
                          "src": "10005:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29571,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29538,
                          "src": "10019:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 29567,
                        "name": "STF_CEG_XD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30082,
                        "src": "9980:10:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CEGTerms memory,struct State memory,uint256,bytes32) pure returns (struct State memory)"
                        }
                      },
                      "id": 29572,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9980:52:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "functionReturnParameters": 29542,
                    "id": 29573,
                    "nodeType": "Return",
                    "src": "9973:59:93"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29578,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29575,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29544,
                      "src": "10046:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29576,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "10059:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29577,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "STD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "10059:13:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "10046:26:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29586,
                  "nodeType": "IfStatement",
                  "src": "10042:92:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 29580,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29532,
                          "src": "10093:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29581,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29534,
                          "src": "10100:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29582,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29546,
                          "src": "10107:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29583,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29538,
                          "src": "10121:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 29579,
                        "name": "STF_CEG_STD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30123,
                        "src": "10081:11:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CEGTerms memory,struct State memory,uint256,bytes32) pure returns (struct State memory)"
                        }
                      },
                      "id": 29584,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10081:53:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "functionReturnParameters": 29542,
                    "id": 29585,
                    "nodeType": "Return",
                    "src": "10074:60:93"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29590,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29587,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29544,
                      "src": "10148:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29588,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "10161:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29589,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "MD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "10161:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "10148:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29598,
                  "nodeType": "IfStatement",
                  "src": "10144:90:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 29592,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29532,
                          "src": "10193:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29593,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29534,
                          "src": "10200:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29594,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29546,
                          "src": "10207:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29595,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29538,
                          "src": "10221:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 29591,
                        "name": "STF_CEG_MD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29971,
                        "src": "10182:10:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CEGTerms memory,struct State memory,uint256,bytes32) pure returns (struct State memory)"
                        }
                      },
                      "id": 29596,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10182:52:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "functionReturnParameters": 29542,
                    "id": 29597,
                    "nodeType": "Return",
                    "src": "10175:59:93"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29602,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29599,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29544,
                      "src": "10248:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29600,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "10261:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29601,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "CE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "10261:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "10248:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29610,
                  "nodeType": "IfStatement",
                  "src": "10244:90:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 29604,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29532,
                          "src": "10293:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29605,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29534,
                          "src": "10300:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29606,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29546,
                          "src": "10307:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29607,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29538,
                          "src": "10321:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 29603,
                        "name": "STF_CEG_CE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29936,
                        "src": "10282:10:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CEGTerms memory,struct State memory,uint256,bytes32) pure returns (struct State memory)"
                        }
                      },
                      "id": 29608,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10282:52:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "functionReturnParameters": 29542,
                    "id": 29609,
                    "nodeType": "Return",
                    "src": "10275:59:93"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "434547456e67696e652e73746174655472616e736974696f6e46756e6374696f6e3a204154545249425554455f4e4f545f464f554e44",
                        "id": 29612,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10352:56:93",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f791201e9e8d0f6a7bc23c19608c63c80f4b66c612988f143354be6eb4886776",
                          "typeString": "literal_string \"CEGEngine.stateTransitionFunction: ATTRIBUTE_NOT_FOUND\""
                        },
                        "value": "CEGEngine.stateTransitionFunction: ATTRIBUTE_NOT_FOUND"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_f791201e9e8d0f6a7bc23c19608c63c80f4b66c612988f143354be6eb4886776",
                          "typeString": "literal_string \"CEGEngine.stateTransitionFunction: ATTRIBUTE_NOT_FOUND\""
                        }
                      ],
                      "id": 29611,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "10345:6:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 29613,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10345:64:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29614,
                  "nodeType": "ExpressionStatement",
                  "src": "10345:64:93"
                }
              ]
            },
            "documentation": {
              "id": 29530,
              "nodeType": "StructuredDocumentation",
              "src": "8881:564:93",
              "text": " @notice Implements abstract method which is defined in BaseEngine.\n Applies an event to the current state of the contract and returns the resulting state.\n The inheriting Engine contract has to map the events type to the designated STF.\n @param terms terms of the contract\n @param state current state of the contract\n @param _event event for which to evaluate the next state for\n @param externalData external data needed for STF evaluation (e.g. rate for RR events)\n @return the resulting contract state"
            },
            "id": 29616,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stateTransitionFunction",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 29539,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29532,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29616,
                  "src": "9492:21:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                    "typeString": "struct CEGTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29531,
                    "name": "CEGTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22852,
                    "src": "9492:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CEGTerms_$22852_storage_ptr",
                      "typeString": "struct CEGTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29534,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29616,
                  "src": "9523:18:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29533,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "9523:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29536,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29616,
                  "src": "9551:14:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29535,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9551:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29538,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29616,
                  "src": "9575:20:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29537,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9575:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9482:119:93"
            },
            "returnParameters": {
              "id": 29542,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29541,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29616,
                  "src": "9649:12:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29540,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "9649:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9648:14:93"
            },
            "scope": 29689,
            "src": "9450:966:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 29687,
              "nodeType": "Block",
              "src": "11163:595:93",
              "statements": [
                {
                  "assignments": [
                    29631,
                    29633
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29631,
                      "mutability": "mutable",
                      "name": "eventType",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29687,
                      "src": "11174:19:93",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 29630,
                        "name": "EventType",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22610,
                        "src": "11174:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EventType_$22610",
                          "typeString": "enum EventType"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 29633,
                      "mutability": "mutable",
                      "name": "scheduleTime",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29687,
                      "src": "11195:20:93",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29632,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11195:7:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 29637,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 29635,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29623,
                        "src": "11231:6:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 29634,
                      "name": "decodeEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24743,
                      "src": "11219:11:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_enum$_EventType_$22610_$_t_uint256_$",
                        "typeString": "function (bytes32) pure returns (enum EventType,uint256)"
                      }
                    },
                    "id": 29636,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11219:19:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_EventType_$22610_$_t_uint256_$",
                      "typeString": "tuple(enum EventType,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11173:65:93"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29641,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29638,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29631,
                      "src": "11342:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29639,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "11355:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29640,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "CE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "11355:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "11342:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29644,
                  "nodeType": "IfStatement",
                  "src": "11338:39:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 29642,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11376:1:93",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 29629,
                    "id": 29643,
                    "nodeType": "Return",
                    "src": "11369:8:93"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29648,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29645,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29631,
                      "src": "11391:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29646,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "11404:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29647,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "FP",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "11404:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "11391:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29656,
                  "nodeType": "IfStatement",
                  "src": "11387:90:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 29650,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29619,
                          "src": "11436:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29651,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29621,
                          "src": "11443:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29652,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29633,
                          "src": "11450:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29653,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29625,
                          "src": "11464:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 29649,
                        "name": "POF_CEG_FP",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29795,
                        "src": "11425:10:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_int256_$",
                          "typeString": "function (struct CEGTerms memory,struct State memory,uint256,bytes32) pure returns (int256)"
                        }
                      },
                      "id": 29654,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11425:52:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "functionReturnParameters": 29629,
                    "id": 29655,
                    "nodeType": "Return",
                    "src": "11418:59:93"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29657,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29631,
                      "src": "11491:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29658,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "11504:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29659,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "XD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "11504:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "11491:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29663,
                  "nodeType": "IfStatement",
                  "src": "11487:39:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 29661,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11525:1:93",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 29629,
                    "id": 29662,
                    "nodeType": "Return",
                    "src": "11518:8:93"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29667,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29664,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29631,
                      "src": "11540:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29665,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "11553:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29666,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "STD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "11553:13:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "11540:26:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29675,
                  "nodeType": "IfStatement",
                  "src": "11536:92:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 29669,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29619,
                          "src": "11587:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29670,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29621,
                          "src": "11594:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29671,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29633,
                          "src": "11601:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29672,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29625,
                          "src": "11615:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 29668,
                        "name": "POF_CEG_STD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29717,
                        "src": "11575:11:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_int256_$",
                          "typeString": "function (struct CEGTerms memory,struct State memory,uint256,bytes32) pure returns (int256)"
                        }
                      },
                      "id": 29673,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11575:53:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "functionReturnParameters": 29629,
                    "id": 29674,
                    "nodeType": "Return",
                    "src": "11568:60:93"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29676,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29631,
                      "src": "11642:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29677,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "11655:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29678,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "MD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "11655:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "11642:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29682,
                  "nodeType": "IfStatement",
                  "src": "11638:39:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 29680,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11676:1:93",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 29629,
                    "id": 29681,
                    "nodeType": "Return",
                    "src": "11669:8:93"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "434547456e67696e652e7061796f666646756e6374696f6e3a204154545249425554455f4e4f545f464f554e44",
                        "id": 29684,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11703:47:93",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6fc5d5fc3d141e5f1f62298898cdbd04dba193a366ddcd03a8e0efed4535a3c3",
                          "typeString": "literal_string \"CEGEngine.payoffFunction: ATTRIBUTE_NOT_FOUND\""
                        },
                        "value": "CEGEngine.payoffFunction: ATTRIBUTE_NOT_FOUND"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_6fc5d5fc3d141e5f1f62298898cdbd04dba193a366ddcd03a8e0efed4535a3c3",
                          "typeString": "literal_string \"CEGEngine.payoffFunction: ATTRIBUTE_NOT_FOUND\""
                        }
                      ],
                      "id": 29683,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "11696:6:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 29685,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11696:55:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29686,
                  "nodeType": "ExpressionStatement",
                  "src": "11696:55:93"
                }
              ]
            },
            "documentation": {
              "id": 29617,
              "nodeType": "StructuredDocumentation",
              "src": "10422:534:93",
              "text": " @notice Implements abstract method which is defined in BaseEngine.\n Computes the payoff for an event under the current state of the contract.\n The inheriting Engine contract has to map the events type to the designated POF.\n @param terms terms of the contract\n @param state current state of the contract\n @param _event event for which the payoff should be evaluated\n @param externalData external data needed for POF evaluation (e.g. fxRate)\n @return the payoff of the event"
            },
            "id": 29688,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "payoffFunction",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 29626,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29619,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29688,
                  "src": "10994:21:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                    "typeString": "struct CEGTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29618,
                    "name": "CEGTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22852,
                    "src": "10994:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CEGTerms_$22852_storage_ptr",
                      "typeString": "struct CEGTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29621,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29688,
                  "src": "11025:18:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29620,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "11025:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29623,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29688,
                  "src": "11053:14:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29622,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11053:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29625,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29688,
                  "src": "11077:20:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29624,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11077:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10984:119:93"
            },
            "returnParameters": {
              "id": 29629,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29628,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29688,
                  "src": "11151:6:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 29627,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11151:6:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11150:8:93"
            },
            "scope": 29689,
            "src": "10961:797:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 29690,
        "src": "514:11246:93"
      }
    ],
    "src": "41:11719:93"
  },
  "legacyAST": {
    "absolutePath": "@atpar/actus-solidity/contracts/Engines/CEG/CEGEngine.sol",
    "exportedSymbols": {
      "CEGEngine": [
        29689
      ]
    },
    "id": 29690,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 29019,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:93"
      },
      {
        "id": 29020,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:93"
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Core/Core.sol",
        "file": "../../Core/Core.sol",
        "id": 29021,
        "nodeType": "ImportDirective",
        "scope": 29690,
        "sourceUnit": 24036,
        "src": "101:29:93",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Engines/CEG/ICEGEngine.sol",
        "file": "./ICEGEngine.sol",
        "id": 29022,
        "nodeType": "ImportDirective",
        "scope": 29690,
        "sourceUnit": 30295,
        "src": "131:26:93",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Engines/CEG/CEGSTF.sol",
        "file": "./CEGSTF.sol",
        "id": 29023,
        "nodeType": "ImportDirective",
        "scope": 29690,
        "sourceUnit": 30194,
        "src": "158:22:93",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Engines/CEG/CEGPOF.sol",
        "file": "./CEGPOF.sol",
        "id": 29024,
        "nodeType": "ImportDirective",
        "scope": 29690,
        "sourceUnit": 29797,
        "src": "181:22:93",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 29026,
              "name": "Core",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24035,
              "src": "536:4:93",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Core_$24035",
                "typeString": "contract Core"
              }
            },
            "id": 29027,
            "nodeType": "InheritanceSpecifier",
            "src": "536:4:93"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 29028,
              "name": "CEGSTF",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 30193,
              "src": "542:6:93",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CEGSTF_$30193",
                "typeString": "contract CEGSTF"
              }
            },
            "id": 29029,
            "nodeType": "InheritanceSpecifier",
            "src": "542:6:93"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 29030,
              "name": "CEGPOF",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 29796,
              "src": "550:6:93",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CEGPOF_$29796",
                "typeString": "contract CEGPOF"
              }
            },
            "id": 29031,
            "nodeType": "InheritanceSpecifier",
            "src": "550:6:93"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 29032,
              "name": "ICEGEngine",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 30294,
              "src": "558:10:93",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ICEGEngine_$30294",
                "typeString": "contract ICEGEngine"
              }
            },
            "id": 29033,
            "nodeType": "InheritanceSpecifier",
            "src": "558:10:93"
          }
        ],
        "contractDependencies": [
          22465,
          23277,
          23340,
          23895,
          24013,
          24035,
          24668,
          24758,
          24885,
          24931,
          29796,
          30193,
          30294,
          32432
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 29025,
          "nodeType": "StructuredDocumentation",
          "src": "206:307:93",
          "text": " @title CEGEngine\n @notice Inherits from BaseEngine by implementing STFs, POFs according to the ACTUS standard for a CEC contract\n @dev All numbers except unix timestamp are represented as multiple of 10 ** 18\n inputs have to be multiplied by 10 ** 18, outputs have to multplied by 10 ** -18"
        },
        "fullyImplemented": true,
        "id": 29689,
        "linearizedBaseContracts": [
          29689,
          30294,
          32432,
          29796,
          30193,
          24035,
          24931,
          24668,
          24885,
          24013,
          23895,
          23340,
          22465,
          24758,
          23277
        ],
        "name": "CEGEngine",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "baseFunctions": [
              32431
            ],
            "body": {
              "id": 29042,
              "nodeType": "Block",
              "src": "646:40:93",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 29039,
                      "name": "ContractType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22559,
                      "src": "663:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_ContractType_$22559_$",
                        "typeString": "type(enum ContractType)"
                      }
                    },
                    "id": 29040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "CEG",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "663:16:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ContractType_$22559",
                      "typeString": "enum ContractType"
                    }
                  },
                  "functionReturnParameters": 29038,
                  "id": 29041,
                  "nodeType": "Return",
                  "src": "656:23:93"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "cb2ef6f7",
            "id": 29043,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "contractType",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 29035,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "614:8:93"
            },
            "parameters": {
              "id": 29034,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "597:2:93"
            },
            "returnParameters": {
              "id": 29038,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29037,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29043,
                  "src": "632:12:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_ContractType_$22559",
                    "typeString": "enum ContractType"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29036,
                    "name": "ContractType",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22559,
                    "src": "632:12:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ContractType_$22559",
                      "typeString": "enum ContractType"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "631:14:93"
            },
            "scope": 29689,
            "src": "576:110:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              30223
            ],
            "body": {
              "id": 29065,
              "nodeType": "Block",
              "src": "1335:141:93",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 29059,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29046,
                        "src": "1389:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                          "typeString": "struct CEGTerms calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 29060,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29048,
                        "src": "1408:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                          "typeString": "struct State calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 29061,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29050,
                        "src": "1427:6:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 29062,
                        "name": "externalData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29052,
                        "src": "1447:12:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                          "typeString": "struct CEGTerms calldata"
                        },
                        {
                          "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                          "typeString": "struct State calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 29058,
                      "name": "stateTransitionFunction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29616,
                      "src": "1352:23:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                        "typeString": "function (struct CEGTerms memory,struct State memory,bytes32,bytes32) pure returns (struct State memory)"
                      }
                    },
                    "id": 29063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1352:117:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 29057,
                  "id": 29064,
                  "nodeType": "Return",
                  "src": "1345:124:93"
                }
              ]
            },
            "documentation": {
              "id": 29044,
              "nodeType": "StructuredDocumentation",
              "src": "692:403:93",
              "text": " Applys an event to the current state of a contract and returns the resulting contract state.\n @param terms terms of the contract\n @param state current state of the contract\n @param _event event to be applied to the contract state\n @param externalData external data needed for STF evaluation (e.g. rate for RR events)\n @return the resulting contract state"
            },
            "functionSelector": "392aef8e",
            "id": 29066,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeStateForEvent",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 29054,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1291:8:93"
            },
            "parameters": {
              "id": 29053,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29046,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29066,
                  "src": "1139:23:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                    "typeString": "struct CEGTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29045,
                    "name": "CEGTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22852,
                    "src": "1139:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CEGTerms_$22852_storage_ptr",
                      "typeString": "struct CEGTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29048,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29066,
                  "src": "1172:20:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29047,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "1172:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29050,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29066,
                  "src": "1202:14:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29049,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1202:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29052,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29066,
                  "src": "1226:20:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29051,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1226:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1129:123:93"
            },
            "returnParameters": {
              "id": 29057,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29056,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29066,
                  "src": "1317:12:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29055,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "1317:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1316:14:93"
            },
            "scope": 29689,
            "src": "1100:376:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              30237
            ],
            "body": {
              "id": 29116,
              "nodeType": "Block",
              "src": "2090:504:93",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 29093,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 29087,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 29081,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29069,
                          "src": "2184:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                            "typeString": "struct CEGTerms calldata"
                          }
                        },
                        "id": 29082,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "settlementCurrency",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22819,
                        "src": "2184:24:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 29085,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2220:1:93",
                            "subdenomination": null,
                            "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": 29084,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2212:7:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 29083,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2212:7:93",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 29086,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2212:10:93",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "2184:38:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 29092,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 29088,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29069,
                          "src": "2226:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                            "typeString": "struct CEGTerms calldata"
                          }
                        },
                        "id": 29089,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "currency",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22817,
                        "src": "2226:14:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 29090,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29069,
                          "src": "2244:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                            "typeString": "struct CEGTerms calldata"
                          }
                        },
                        "id": 29091,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "settlementCurrency",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22819,
                        "src": "2244:24:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "2226:42:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2184:84:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29108,
                  "nodeType": "IfStatement",
                  "src": "2180:282:93",
                  "trueBody": {
                    "id": 29107,
                    "nodeType": "Block",
                    "src": "2270:192:93",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 29103,
                                  "name": "externalData",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29075,
                                  "src": "2437:12:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 29102,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2430:6:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int256_$",
                                  "typeString": "type(int256)"
                                },
                                "typeName": {
                                  "id": 29101,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2430:6:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 29104,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2430:20:93",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 29095,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29069,
                                  "src": "2323:5:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                    "typeString": "struct CEGTerms calldata"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 29096,
                                  "name": "state",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29071,
                                  "src": "2346:5:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                                    "typeString": "struct State calldata"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 29097,
                                  "name": "_event",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29073,
                                  "src": "2369:6:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 29098,
                                  "name": "externalData",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29075,
                                  "src": "2393:12:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                    "typeString": "struct CEGTerms calldata"
                                  },
                                  {
                                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                                    "typeString": "struct State calldata"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 29094,
                                "name": "payoffFunction",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 29688,
                                "src": "2291:14:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_int256_$",
                                  "typeString": "function (struct CEGTerms memory,struct State memory,bytes32,bytes32) pure returns (int256)"
                                }
                              },
                              "id": 29099,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2291:128:93",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "id": 29100,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "floatMult",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24120,
                            "src": "2291:138:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$",
                              "typeString": "function (int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 29105,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2291:160:93",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 29080,
                        "id": 29106,
                        "nodeType": "Return",
                        "src": "2284:167:93"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 29110,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29069,
                        "src": "2507:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                          "typeString": "struct CEGTerms calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 29111,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29071,
                        "src": "2526:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                          "typeString": "struct State calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 29112,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29073,
                        "src": "2545:6:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 29113,
                        "name": "externalData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29075,
                        "src": "2565:12:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                          "typeString": "struct CEGTerms calldata"
                        },
                        {
                          "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                          "typeString": "struct State calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 29109,
                      "name": "payoffFunction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29688,
                      "src": "2479:14:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_int256_$",
                        "typeString": "function (struct CEGTerms memory,struct State memory,bytes32,bytes32) pure returns (int256)"
                      }
                    },
                    "id": 29114,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2479:108:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 29080,
                  "id": 29115,
                  "nodeType": "Return",
                  "src": "2472:115:93"
                }
              ]
            },
            "documentation": {
              "id": 29067,
              "nodeType": "StructuredDocumentation",
              "src": "1482:373:93",
              "text": " Evaluates the payoff for an event under the current state of the contract.\n @param terms terms of the contract\n @param state current state of the contract\n @param _event event for which the payoff should be evaluated\n @param externalData external data needed for POF evaluation (e.g. fxRate)\n @return the payoff of the event"
            },
            "functionSelector": "1f252723",
            "id": 29117,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computePayoffForEvent",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 29077,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2052:8:93"
            },
            "parameters": {
              "id": 29076,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29069,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29117,
                  "src": "1900:23:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                    "typeString": "struct CEGTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29068,
                    "name": "CEGTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22852,
                    "src": "1900:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CEGTerms_$22852_storage_ptr",
                      "typeString": "struct CEGTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29071,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29117,
                  "src": "1933:20:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29070,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "1933:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29073,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29117,
                  "src": "1963:14:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29072,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1963:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29075,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29117,
                  "src": "1987:20:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29074,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1987:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1890:123:93"
            },
            "returnParameters": {
              "id": 29080,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29079,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29117,
                  "src": "2078:6:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 29078,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2078:6:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2077:8:93"
            },
            "scope": 29689,
            "src": "1860:734:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              30209
            ],
            "body": {
              "id": 29171,
              "nodeType": "Block",
              "src": "2915:348:93",
              "statements": [
                {
                  "assignments": [
                    29127
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29127,
                      "mutability": "mutable",
                      "name": "state",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29171,
                      "src": "2925:18:93",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 29126,
                        "name": "State",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22673,
                        "src": "2925:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                          "typeString": "struct State"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 29128,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2925:18:93"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 29134,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29129,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29127,
                        "src": "2954:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 29131,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "contractPerformance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22634,
                      "src": "2954:25:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                        "typeString": "enum ContractPerformance"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29132,
                        "name": "ContractPerformance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22513,
                        "src": "2982:19:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_ContractPerformance_$22513_$",
                          "typeString": "type(enum ContractPerformance)"
                        }
                      },
                      "id": 29133,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "PF",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2982:22:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                        "typeString": "enum ContractPerformance"
                      }
                    },
                    "src": "2954:50:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                      "typeString": "enum ContractPerformance"
                    }
                  },
                  "id": 29135,
                  "nodeType": "ExpressionStatement",
                  "src": "2954:50:93"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 29141,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29136,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29127,
                        "src": "3014:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 29138,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "3014:16:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29139,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29120,
                        "src": "3033:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                          "typeString": "struct CEGTerms calldata"
                        }
                      },
                      "id": 29140,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22823,
                      "src": "3033:16:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3014:35:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 29142,
                  "nodeType": "ExpressionStatement",
                  "src": "3014:35:93"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 29148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29143,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29127,
                        "src": "3059:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 29145,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "maturityDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22640,
                      "src": "3059:18:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29146,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29120,
                        "src": "3080:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                          "typeString": "struct CEGTerms calldata"
                        }
                      },
                      "id": 29147,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "maturityDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22825,
                      "src": "3080:18:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3059:39:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 29149,
                  "nodeType": "ExpressionStatement",
                  "src": "3059:39:93"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 29160,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29150,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29127,
                        "src": "3108:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 29152,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "notionalPrincipal",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22648,
                      "src": "3108:23:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "id": 29159,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 29154,
                              "name": "terms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29120,
                              "src": "3143:5:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                "typeString": "struct CEGTerms calldata"
                              }
                            },
                            "id": 29155,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "contractRole",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22805,
                            "src": "3143:18:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          ],
                          "id": 29153,
                          "name": "roleSign",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23339,
                          "src": "3134:8:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_enum$_ContractRole_$22539_$returns$_t_int8_$",
                            "typeString": "function (enum ContractRole) pure returns (int8)"
                          }
                        },
                        "id": 29156,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3134:28:93",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_int8",
                          "typeString": "int8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 29157,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29120,
                          "src": "3165:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                            "typeString": "struct CEGTerms calldata"
                          }
                        },
                        "id": 29158,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "notionalPrincipal",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22831,
                        "src": "3165:23:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "src": "3134:54:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "3108:80:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 29161,
                  "nodeType": "ExpressionStatement",
                  "src": "3108:80:93"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 29167,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29162,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29127,
                        "src": "3198:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 29164,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "feeAccrued",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22652,
                      "src": "3198:16:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29165,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29120,
                        "src": "3217:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                          "typeString": "struct CEGTerms calldata"
                        }
                      },
                      "id": 29166,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "feeAccrued",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22835,
                      "src": "3217:16:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "3198:35:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 29168,
                  "nodeType": "ExpressionStatement",
                  "src": "3198:35:93"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 29169,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 29127,
                    "src": "3251:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 29125,
                  "id": 29170,
                  "nodeType": "Return",
                  "src": "3244:12:93"
                }
              ]
            },
            "documentation": {
              "id": 29118,
              "nodeType": "StructuredDocumentation",
              "src": "2600:174:93",
              "text": " @notice Initialize contract state space based on the contract terms.\n @param terms terms of the contract\n @return initial state of the contract"
            },
            "functionSelector": "67b58117",
            "id": 29172,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeInitialState",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 29122,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2871:8:93"
            },
            "parameters": {
              "id": 29121,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29120,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29172,
                  "src": "2808:23:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                    "typeString": "struct CEGTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29119,
                    "name": "CEGTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22852,
                    "src": "2808:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CEGTerms_$22852_storage_ptr",
                      "typeString": "struct CEGTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2807:25:93"
            },
            "returnParameters": {
              "id": 29125,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29124,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29172,
                  "src": "2897:12:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29123,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "2897:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2896:14:93"
            },
            "scope": 29689,
            "src": "2779:484:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              30250
            ],
            "body": {
              "id": 29281,
              "nodeType": "Block",
              "src": "3852:794:93",
              "statements": [
                {
                  "assignments": [
                    29191
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29191,
                      "mutability": "mutable",
                      "name": "events",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29281,
                      "src": "3862:46:93",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                        "typeString": "bytes32[120]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 29189,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3862:7:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 29190,
                        "length": {
                          "argumentTypes": null,
                          "id": 29188,
                          "name": "MAX_EVENT_SCHEDULE_SIZE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22464,
                          "src": "3870:23:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "ArrayTypeName",
                        "src": "3862:32:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$120_storage_ptr",
                          "typeString": "bytes32[120]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 29192,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3862:46:93"
                },
                {
                  "assignments": [
                    29194
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29194,
                      "mutability": "mutable",
                      "name": "index",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29281,
                      "src": "3918:12:93",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 29193,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "3918:6:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 29195,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3918:12:93"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 29199,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29196,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29175,
                        "src": "3965:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                          "typeString": "struct CEGTerms calldata"
                        }
                      },
                      "id": 29197,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "purchaseDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22827,
                      "src": "3965:18:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 29198,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3987:1:93",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3965:23:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29223,
                  "nodeType": "IfStatement",
                  "src": "3961:236:93",
                  "trueBody": {
                    "id": 29222,
                    "nodeType": "Block",
                    "src": "3990:207:93",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 29201,
                                "name": "terms",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 29175,
                                "src": "4020:5:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                  "typeString": "struct CEGTerms calldata"
                                }
                              },
                              "id": 29202,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "purchaseDate",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22827,
                              "src": "4020:18:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 29203,
                              "name": "segmentStart",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29177,
                              "src": "4040:12:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 29204,
                              "name": "segmentEnd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29179,
                              "src": "4054:10:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 29200,
                            "name": "isInSegment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24667,
                            "src": "4008:11:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                            }
                          },
                          "id": 29205,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4008:57:93",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 29221,
                        "nodeType": "IfStatement",
                        "src": "4004:183:93",
                        "trueBody": {
                          "id": 29220,
                          "nodeType": "Block",
                          "src": "4067:120:93",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 29215,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 29206,
                                    "name": "events",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 29191,
                                    "src": "4085:6:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                                      "typeString": "bytes32[120] memory"
                                    }
                                  },
                                  "id": 29208,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 29207,
                                    "name": "index",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 29194,
                                    "src": "4092:5:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint16",
                                      "typeString": "uint16"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "4085:13:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 29210,
                                        "name": "EventType",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 22610,
                                        "src": "4113:9:93",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                                          "typeString": "type(enum EventType)"
                                        }
                                      },
                                      "id": 29211,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "PRD",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "4113:13:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_EventType_$22610",
                                        "typeString": "enum EventType"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 29212,
                                        "name": "terms",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 29175,
                                        "src": "4128:5:93",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                          "typeString": "struct CEGTerms calldata"
                                        }
                                      },
                                      "id": 29213,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "purchaseDate",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 22827,
                                      "src": "4128:18:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_enum$_EventType_$22610",
                                        "typeString": "enum EventType"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 29209,
                                    "name": "encodeEvent",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24702,
                                    "src": "4101:11:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_enum$_EventType_$22610_$_t_uint256_$returns$_t_bytes32_$",
                                      "typeString": "function (enum EventType,uint256) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 29214,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4101:46:93",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "4085:62:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "id": 29216,
                              "nodeType": "ExpressionStatement",
                              "src": "4085:62:93"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 29218,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "4165:7:93",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 29217,
                                  "name": "index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29194,
                                  "src": "4165:5:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint16",
                                    "typeString": "uint16"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint16",
                                  "typeString": "uint16"
                                }
                              },
                              "id": 29219,
                              "nodeType": "ExpressionStatement",
                              "src": "4165:7:93"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 29231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 29225,
                            "name": "terms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29175,
                            "src": "4249:5:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                              "typeString": "struct CEGTerms calldata"
                            }
                          },
                          "id": 29226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "maturityDate",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22825,
                          "src": "4249:18:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29227,
                          "name": "segmentStart",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29177,
                          "src": "4269:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29228,
                          "name": "segmentEnd",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29179,
                          "src": "4283:10:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 29224,
                        "name": "isInSegment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24667,
                        "src": "4237:11:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                          "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                        }
                      },
                      "id": 29229,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4237:57:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 29230,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4298:4:93",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "4237:65:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29247,
                  "nodeType": "IfStatement",
                  "src": "4233:178:93",
                  "trueBody": {
                    "id": 29246,
                    "nodeType": "Block",
                    "src": "4304:107:93",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 29241,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 29232,
                              "name": "events",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29191,
                              "src": "4318:6:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                                "typeString": "bytes32[120] memory"
                              }
                            },
                            "id": 29234,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 29233,
                              "name": "index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29194,
                              "src": "4325:5:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "4318:13:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 29236,
                                  "name": "EventType",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22610,
                                  "src": "4346:9:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                                    "typeString": "type(enum EventType)"
                                  }
                                },
                                "id": 29237,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "MD",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4346:12:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_EventType_$22610",
                                  "typeString": "enum EventType"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 29238,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29175,
                                  "src": "4360:5:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                    "typeString": "struct CEGTerms calldata"
                                  }
                                },
                                "id": 29239,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "maturityDate",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22825,
                                "src": "4360:18:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_enum$_EventType_$22610",
                                  "typeString": "enum EventType"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 29235,
                              "name": "encodeEvent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24702,
                              "src": "4334:11:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_enum$_EventType_$22610_$_t_uint256_$returns$_t_bytes32_$",
                                "typeString": "function (enum EventType,uint256) pure returns (bytes32)"
                              }
                            },
                            "id": 29240,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4334:45:93",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "4318:61:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 29242,
                        "nodeType": "ExpressionStatement",
                        "src": "4318:61:93"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 29244,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "4393:7:93",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 29243,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 29194,
                            "src": "4393:5:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 29245,
                        "nodeType": "ExpressionStatement",
                        "src": "4393:7:93"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    29252
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29252,
                      "mutability": "mutable",
                      "name": "schedule",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29281,
                      "src": "4472:25:93",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 29250,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4472:7:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 29251,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "4472:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 29258,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 29256,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29194,
                        "src": "4514:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "id": 29255,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "4500:13:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 29253,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4504:7:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 29254,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "4504:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 29257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4500:20:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4472:48:93"
                },
                {
                  "body": {
                    "id": 29277,
                    "nodeType": "Block",
                    "src": "4566:48:93",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 29275,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 29269,
                              "name": "schedule",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29252,
                              "src": "4580:8:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            "id": 29271,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 29270,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29260,
                              "src": "4589:1:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "4580:11:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 29272,
                              "name": "events",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29191,
                              "src": "4594:6:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                                "typeString": "bytes32[120] memory"
                              }
                            },
                            "id": 29274,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 29273,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29260,
                              "src": "4601:1:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4594:9:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "4580:23:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 29276,
                        "nodeType": "ExpressionStatement",
                        "src": "4580:23:93"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 29265,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29263,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29260,
                      "src": "4550:1:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 29264,
                      "name": "index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29194,
                      "src": "4554:5:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "src": "4550:9:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 29278,
                  "initializationExpression": {
                    "assignments": [
                      29260
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 29260,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 29278,
                        "src": "4535:9:93",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 29259,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4535:7:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 29262,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 29261,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4547:1:93",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "4535:13:93"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 29267,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4561:3:93",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 29266,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29260,
                        "src": "4561:1:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 29268,
                    "nodeType": "ExpressionStatement",
                    "src": "4561:3:93"
                  },
                  "nodeType": "ForStatement",
                  "src": "4530:84:93"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 29279,
                    "name": "schedule",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 29252,
                    "src": "4631:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 29185,
                  "id": 29280,
                  "nodeType": "Return",
                  "src": "4624:15:93"
                }
              ]
            },
            "documentation": {
              "id": 29173,
              "nodeType": "StructuredDocumentation",
              "src": "3269:354:93",
              "text": " @notice Computes a schedule segment of non-cyclic contract events based on the contract terms\n and the specified timestamps.\n @param terms terms of the contract\n @param segmentStart start timestamp of the segment\n @param segmentEnd end timestamp of the segement\n @return segment of the non-cyclic schedule"
            },
            "functionSelector": "dad412b5",
            "id": 29282,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeNonCyclicScheduleSegment",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 29181,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3804:8:93"
            },
            "parameters": {
              "id": 29180,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29175,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29282,
                  "src": "3678:23:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                    "typeString": "struct CEGTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29174,
                    "name": "CEGTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22852,
                    "src": "3678:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CEGTerms_$22852_storage_ptr",
                      "typeString": "struct CEGTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29177,
                  "mutability": "mutable",
                  "name": "segmentStart",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29282,
                  "src": "3711:20:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29176,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3711:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29179,
                  "mutability": "mutable",
                  "name": "segmentEnd",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29282,
                  "src": "3741:18:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29178,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3741:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3668:97:93"
            },
            "returnParameters": {
              "id": 29185,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29184,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29282,
                  "src": "3830:16:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 29182,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "3830:7:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 29183,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3830:9:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3829:18:93"
            },
            "scope": 29689,
            "src": "3628:1018:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              30265
            ],
            "body": {
              "id": 29419,
              "nodeType": "Block",
              "src": "5302:1168:93",
              "statements": [
                {
                  "assignments": [
                    29303
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29303,
                      "mutability": "mutable",
                      "name": "events",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29419,
                      "src": "5312:46:93",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                        "typeString": "bytes32[120]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 29301,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5312:7:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 29302,
                        "length": {
                          "argumentTypes": null,
                          "id": 29300,
                          "name": "MAX_EVENT_SCHEDULE_SIZE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22464,
                          "src": "5320:23:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "ArrayTypeName",
                        "src": "5312:32:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$120_storage_ptr",
                          "typeString": "bytes32[120]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 29304,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5312:46:93"
                },
                {
                  "assignments": [
                    29306
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29306,
                      "mutability": "mutable",
                      "name": "index",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29419,
                      "src": "5368:13:93",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29305,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5368:7:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 29308,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 29307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5384:1:93",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5368:17:93"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29312,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29309,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29291,
                      "src": "5400:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29310,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "5413:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29311,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "FP",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5413:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "5400:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29385,
                  "nodeType": "IfStatement",
                  "src": "5396:839:93",
                  "trueBody": {
                    "id": 29384,
                    "nodeType": "Block",
                    "src": "5427:808:93",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 29316,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 29313,
                              "name": "terms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29285,
                              "src": "5465:5:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                "typeString": "struct CEGTerms calldata"
                              }
                            },
                            "id": 29314,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "cycleAnchorDateOfFee",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22829,
                            "src": "5465:26:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 29315,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5495:1:93",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5465:31:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 29383,
                        "nodeType": "IfStatement",
                        "src": "5461:764:93",
                        "trueBody": {
                          "id": 29382,
                          "nodeType": "Block",
                          "src": "5498:727:93",
                          "statements": [
                            {
                              "assignments": [
                                29322
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 29322,
                                  "mutability": "mutable",
                                  "name": "feeSchedule",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 29382,
                                  "src": "5516:42:93",
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                    "typeString": "uint256[120]"
                                  },
                                  "typeName": {
                                    "baseType": {
                                      "id": 29320,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5516:7:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 29321,
                                    "length": {
                                      "argumentTypes": null,
                                      "id": 29319,
                                      "name": "MAX_CYCLE_SIZE",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 22461,
                                      "src": "5524:14:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "ArrayTypeName",
                                    "src": "5516:23:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$120_storage_ptr",
                                      "typeString": "uint256[120]"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 29336,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29324,
                                      "name": "terms",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 29285,
                                      "src": "5611:5:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                        "typeString": "struct CEGTerms calldata"
                                      }
                                    },
                                    "id": 29325,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "cycleAnchorDateOfFee",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22829,
                                    "src": "5611:26:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29326,
                                      "name": "terms",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 29285,
                                      "src": "5659:5:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                        "typeString": "struct CEGTerms calldata"
                                      }
                                    },
                                    "id": 29327,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "maturityDate",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22825,
                                    "src": "5659:18:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29328,
                                      "name": "terms",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 29285,
                                      "src": "5699:5:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                        "typeString": "struct CEGTerms calldata"
                                      }
                                    },
                                    "id": 29329,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "cycleOfFee",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22847,
                                    "src": "5699:16:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_IPS_$22486_calldata_ptr",
                                      "typeString": "struct IPS calldata"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29330,
                                      "name": "terms",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 29285,
                                      "src": "5737:5:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                        "typeString": "struct CEGTerms calldata"
                                      }
                                    },
                                    "id": 29331,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "endOfMonthConvention",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22811,
                                    "src": "5737:26:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                      "typeString": "enum EndOfMonthConvention"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "74727565",
                                    "id": 29332,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5785:4:93",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "true"
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 29333,
                                    "name": "segmentStart",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 29287,
                                    "src": "5811:12:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 29334,
                                    "name": "segmentEnd",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 29289,
                                    "src": "5845:10:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_IPS_$22486_calldata_ptr",
                                      "typeString": "struct IPS calldata"
                                    },
                                    {
                                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                      "typeString": "enum EndOfMonthConvention"
                                    },
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 29323,
                                  "name": "computeDatesFromCycleSegment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24588,
                                  "src": "5561:28:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_struct$_IPS_$22486_memory_ptr_$_t_enum$_EndOfMonthConvention_$22580_$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$120_memory_ptr_$",
                                    "typeString": "function (uint256,uint256,struct IPS memory,enum EndOfMonthConvention,bool,uint256,uint256) pure returns (uint256[120] memory)"
                                  }
                                },
                                "id": 29335,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5561:312:93",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                  "typeString": "uint256[120] memory"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "5516:357:93"
                            },
                            {
                              "body": {
                                "id": 29380,
                                "nodeType": "Block",
                                "src": "5934:277:93",
                                "statements": [
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 29351,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 29347,
                                          "name": "feeSchedule",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 29322,
                                          "src": "5960:11:93",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                            "typeString": "uint256[120] memory"
                                          }
                                        },
                                        "id": 29349,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 29348,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 29338,
                                          "src": "5972:1:93",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "5960:14:93",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 29350,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "5978:1:93",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "5960:19:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 29353,
                                    "nodeType": "IfStatement",
                                    "src": "5956:30:93",
                                    "trueBody": {
                                      "id": 29352,
                                      "nodeType": "Break",
                                      "src": "5981:5:93"
                                    }
                                  },
                                  {
                                    "condition": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "id": 29362,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 29355,
                                              "name": "feeSchedule",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 29322,
                                              "src": "6024:11:93",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                                "typeString": "uint256[120] memory"
                                              }
                                            },
                                            "id": 29357,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 29356,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 29338,
                                              "src": "6036:1:93",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "6024:14:93",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 29358,
                                            "name": "segmentStart",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 29287,
                                            "src": "6040:12:93",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "id": 29359,
                                            "name": "segmentEnd",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 29289,
                                            "src": "6054:10:93",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 29354,
                                          "name": "isInSegment",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 24667,
                                          "src": "6012:11:93",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                            "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                                          }
                                        },
                                        "id": 29360,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6012:53:93",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "66616c7365",
                                        "id": 29361,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6069:5:93",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        "value": "false"
                                      },
                                      "src": "6012:62:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": null,
                                    "id": 29364,
                                    "nodeType": "IfStatement",
                                    "src": "6008:76:93",
                                    "trueBody": {
                                      "id": 29363,
                                      "nodeType": "Continue",
                                      "src": "6076:8:93"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29375,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 29365,
                                          "name": "events",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 29303,
                                          "src": "6106:6:93",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                                            "typeString": "bytes32[120] memory"
                                          }
                                        },
                                        "id": 29367,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 29366,
                                          "name": "index",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 29306,
                                          "src": "6113:5:93",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "6106:13:93",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 29369,
                                              "name": "EventType",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 22610,
                                              "src": "6134:9:93",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                                                "typeString": "type(enum EventType)"
                                              }
                                            },
                                            "id": 29370,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberName": "FP",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": null,
                                            "src": "6134:12:93",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_enum$_EventType_$22610",
                                              "typeString": "enum EventType"
                                            }
                                          },
                                          {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 29371,
                                              "name": "feeSchedule",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 29322,
                                              "src": "6148:11:93",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                                "typeString": "uint256[120] memory"
                                              }
                                            },
                                            "id": 29373,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 29372,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 29338,
                                              "src": "6160:1:93",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "6148:14:93",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_enum$_EventType_$22610",
                                              "typeString": "enum EventType"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 29368,
                                          "name": "encodeEvent",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 24702,
                                          "src": "6122:11:93",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_enum$_EventType_$22610_$_t_uint256_$returns$_t_bytes32_$",
                                            "typeString": "function (enum EventType,uint256) pure returns (bytes32)"
                                          }
                                        },
                                        "id": 29374,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6122:41:93",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "6106:57:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "id": 29376,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6106:57:93"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29378,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "++",
                                      "prefix": false,
                                      "src": "6185:7:93",
                                      "subExpression": {
                                        "argumentTypes": null,
                                        "id": 29377,
                                        "name": "index",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 29306,
                                        "src": "6185:5:93",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 29379,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6185:7:93"
                                  }
                                ]
                              },
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 29343,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 29341,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29338,
                                  "src": "5909:1:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 29342,
                                  "name": "MAX_CYCLE_SIZE",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22461,
                                  "src": "5913:14:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5909:18:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 29381,
                              "initializationExpression": {
                                "assignments": [
                                  29338
                                ],
                                "declarations": [
                                  {
                                    "constant": false,
                                    "id": 29338,
                                    "mutability": "mutable",
                                    "name": "i",
                                    "nodeType": "VariableDeclaration",
                                    "overrides": null,
                                    "scope": 29381,
                                    "src": "5896:7:93",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    "typeName": {
                                      "id": 29337,
                                      "name": "uint8",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "5896:5:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "value": null,
                                    "visibility": "internal"
                                  }
                                ],
                                "id": 29340,
                                "initialValue": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 29339,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5906:1:93",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "nodeType": "VariableDeclarationStatement",
                                "src": "5896:11:93"
                              },
                              "loopExpression": {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 29345,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "++",
                                  "prefix": false,
                                  "src": "5929:3:93",
                                  "subExpression": {
                                    "argumentTypes": null,
                                    "id": 29344,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 29338,
                                    "src": "5929:1:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "id": 29346,
                                "nodeType": "ExpressionStatement",
                                "src": "5929:3:93"
                              },
                              "nodeType": "ForStatement",
                              "src": "5891:320:93"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    29390
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29390,
                      "mutability": "mutable",
                      "name": "schedule",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29419,
                      "src": "6296:25:93",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 29388,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "6296:7:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 29389,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "6296:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 29396,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 29394,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29306,
                        "src": "6338:5:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 29393,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "6324:13:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 29391,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "6328:7:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 29392,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "6328:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 29395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6324:20:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6296:48:93"
                },
                {
                  "body": {
                    "id": 29415,
                    "nodeType": "Block",
                    "src": "6390:48:93",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 29413,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 29407,
                              "name": "schedule",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29390,
                              "src": "6404:8:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            "id": 29409,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 29408,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29398,
                              "src": "6413:1:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6404:11:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 29410,
                              "name": "events",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29303,
                              "src": "6418:6:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                                "typeString": "bytes32[120] memory"
                              }
                            },
                            "id": 29412,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 29411,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29398,
                              "src": "6425:1:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6418:9:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "6404:23:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 29414,
                        "nodeType": "ExpressionStatement",
                        "src": "6404:23:93"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 29403,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29401,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29398,
                      "src": "6374:1:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 29402,
                      "name": "index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29306,
                      "src": "6378:5:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6374:9:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 29416,
                  "initializationExpression": {
                    "assignments": [
                      29398
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 29398,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 29416,
                        "src": "6359:9:93",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 29397,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6359:7:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 29400,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 29399,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6371:1:93",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6359:13:93"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 29405,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6385:3:93",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 29404,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29398,
                        "src": "6385:1:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 29406,
                    "nodeType": "ExpressionStatement",
                    "src": "6385:3:93"
                  },
                  "nodeType": "ForStatement",
                  "src": "6354:84:93"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 29417,
                    "name": "schedule",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 29390,
                    "src": "6455:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 29297,
                  "id": 29418,
                  "nodeType": "Return",
                  "src": "6448:15:93"
                }
              ]
            },
            "documentation": {
              "id": 29283,
              "nodeType": "StructuredDocumentation",
              "src": "4652:395:93",
              "text": " @notice Computes a schedule segment of cyclic contract events based on the contract terms\n and the specified timestamps.\n @param terms terms of the contract\n @param segmentStart start timestamp of the segment\n @param segmentEnd end timestamp of the segement\n @param eventType eventType of the cyclic schedule\n @return event schedule segment"
            },
            "functionSelector": "0ba295ba",
            "id": 29420,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeCyclicScheduleSegment",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 29293,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5254:8:93"
            },
            "parameters": {
              "id": 29292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29285,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29420,
                  "src": "5099:23:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                    "typeString": "struct CEGTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29284,
                    "name": "CEGTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22852,
                    "src": "5099:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CEGTerms_$22852_storage_ptr",
                      "typeString": "struct CEGTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29287,
                  "mutability": "mutable",
                  "name": "segmentStart",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29420,
                  "src": "5132:20:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29286,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5132:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29289,
                  "mutability": "mutable",
                  "name": "segmentEnd",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29420,
                  "src": "5162:18:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29288,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5162:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29291,
                  "mutability": "mutable",
                  "name": "eventType",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29420,
                  "src": "5190:19:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_EventType_$22610",
                    "typeString": "enum EventType"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29290,
                    "name": "EventType",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22610,
                    "src": "5190:9:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5089:126:93"
            },
            "returnParameters": {
              "id": 29297,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29296,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29420,
                  "src": "5280:16:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 29294,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "5280:7:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 29295,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "5280:9:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5279:18:93"
            },
            "scope": 29689,
            "src": "5052:1418:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              30277
            ],
            "body": {
              "id": 29477,
              "nodeType": "Block",
              "src": "7036:554:93",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29433,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29427,
                      "src": "7066:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29434,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "7079:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29435,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "FP",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "7079:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "7066:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29471,
                  "nodeType": "IfStatement",
                  "src": "7062:494:93",
                  "trueBody": {
                    "id": 29470,
                    "nodeType": "Block",
                    "src": "7093:463:93",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 29440,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 29437,
                              "name": "terms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 29423,
                              "src": "7111:5:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                "typeString": "struct CEGTerms calldata"
                              }
                            },
                            "id": 29438,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "cycleAnchorDateOfFee",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22829,
                            "src": "7111:26:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 29439,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7141:1:93",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "7111:31:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 29469,
                        "nodeType": "IfStatement",
                        "src": "7107:439:93",
                        "trueBody": {
                          "id": 29468,
                          "nodeType": "Block",
                          "src": "7144:402:93",
                          "statements": [
                            {
                              "assignments": [
                                29442
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 29442,
                                  "mutability": "mutable",
                                  "name": "nextFeeDate",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 29468,
                                  "src": "7162:19:93",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 29441,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7162:7:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 29452,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29444,
                                      "name": "terms",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 29423,
                                      "src": "7243:5:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                        "typeString": "struct CEGTerms calldata"
                                      }
                                    },
                                    "id": 29445,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "cycleOfFee",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22847,
                                    "src": "7243:16:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_IPS_$22486_calldata_ptr",
                                      "typeString": "struct IPS calldata"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29446,
                                      "name": "terms",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 29423,
                                      "src": "7281:5:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                        "typeString": "struct CEGTerms calldata"
                                      }
                                    },
                                    "id": 29447,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "endOfMonthConvention",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22811,
                                    "src": "7281:26:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                      "typeString": "enum EndOfMonthConvention"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29448,
                                      "name": "terms",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 29423,
                                      "src": "7329:5:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                                        "typeString": "struct CEGTerms calldata"
                                      }
                                    },
                                    "id": 29449,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "cycleAnchorDateOfFee",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22829,
                                    "src": "7329:26:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 29450,
                                    "name": "lastScheduleTime",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 29425,
                                    "src": "7377:16:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_IPS_$22486_calldata_ptr",
                                      "typeString": "struct IPS calldata"
                                    },
                                    {
                                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                      "typeString": "enum EndOfMonthConvention"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 29443,
                                  "name": "computeNextCycleDateFromPrecedingDate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24637,
                                  "src": "7184:37:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_struct$_IPS_$22486_memory_ptr_$_t_enum$_EndOfMonthConvention_$22580_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (struct IPS memory,enum EndOfMonthConvention,uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 29451,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7184:227:93",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "7162:249:93"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 29455,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 29453,
                                  "name": "nextFeeDate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 29442,
                                  "src": "7433:11:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 29454,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7448:1:93",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "7433:16:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 29461,
                              "nodeType": "IfStatement",
                              "src": "7429:39:93",
                              "trueBody": {
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "hexValue": "30",
                                      "id": 29458,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7466:1:93",
                                      "subdenomination": null,
                                      "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": 29457,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "7458:7:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes32_$",
                                      "typeString": "type(bytes32)"
                                    },
                                    "typeName": {
                                      "id": 29456,
                                      "name": "bytes32",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "7458:7:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": null,
                                        "typeString": null
                                      }
                                    }
                                  },
                                  "id": 29459,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7458:10:93",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "functionReturnParameters": 29432,
                                "id": 29460,
                                "nodeType": "Return",
                                "src": "7451:17:93"
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29463,
                                      "name": "EventType",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 22610,
                                      "src": "7505:9:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                                        "typeString": "type(enum EventType)"
                                      }
                                    },
                                    "id": 29464,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "FP",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "7505:12:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_EventType_$22610",
                                      "typeString": "enum EventType"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 29465,
                                    "name": "nextFeeDate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 29442,
                                    "src": "7519:11:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_enum$_EventType_$22610",
                                      "typeString": "enum EventType"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 29462,
                                  "name": "encodeEvent",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24702,
                                  "src": "7493:11:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_enum$_EventType_$22610_$_t_uint256_$returns$_t_bytes32_$",
                                    "typeString": "function (enum EventType,uint256) pure returns (bytes32)"
                                  }
                                },
                                "id": 29466,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7493:38:93",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "functionReturnParameters": 29432,
                              "id": 29467,
                              "nodeType": "Return",
                              "src": "7486:45:93"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 29474,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7581:1:93",
                        "subdenomination": null,
                        "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": 29473,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "7573:7:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes32_$",
                        "typeString": "type(bytes32)"
                      },
                      "typeName": {
                        "id": 29472,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7573:7:93",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 29475,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7573:10:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 29432,
                  "id": 29476,
                  "nodeType": "Return",
                  "src": "7566:17:93"
                }
              ]
            },
            "documentation": {
              "id": 29421,
              "nodeType": "StructuredDocumentation",
              "src": "6476:345:93",
              "text": " @notice Computes a schedule segment of cyclic contract events based on the contract terms\n and the specified timestamps.\n @param terms terms of the contract\n @param lastScheduleTime last occurrence of cyclic event\n @param eventType eventType of the cyclic schedule\n @return event schedule segment"
            },
            "functionSelector": "b90f7368",
            "id": 29478,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeNextCyclicEvent",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 29429,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6998:8:93"
            },
            "parameters": {
              "id": 29428,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29423,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29478,
                  "src": "6867:23:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                    "typeString": "struct CEGTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29422,
                    "name": "CEGTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22852,
                    "src": "6867:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CEGTerms_$22852_storage_ptr",
                      "typeString": "struct CEGTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29425,
                  "mutability": "mutable",
                  "name": "lastScheduleTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29478,
                  "src": "6900:24:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 29424,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6900:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29427,
                  "mutability": "mutable",
                  "name": "eventType",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29478,
                  "src": "6934:19:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_EventType_$22610",
                    "typeString": "enum EventType"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29426,
                    "name": "EventType",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22610,
                    "src": "6934:9:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6857:102:93"
            },
            "returnParameters": {
              "id": 29432,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29431,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29478,
                  "src": "7023:7:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29430,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7023:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7022:9:93"
            },
            "scope": 29689,
            "src": "6826:764:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              30293
            ],
            "body": {
              "id": 29528,
              "nodeType": "Block",
              "src": "8463:412:93",
              "statements": [
                {
                  "assignments": [
                    29496,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29496,
                      "mutability": "mutable",
                      "name": "eventType",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29528,
                      "src": "8474:19:93",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 29495,
                        "name": "EventType",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22610,
                        "src": "8474:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EventType_$22610",
                          "typeString": "enum EventType"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 29500,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 29498,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29481,
                        "src": "8510:6:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 29497,
                      "name": "decodeEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24743,
                      "src": "8498:11:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_enum$_EventType_$22610_$_t_uint256_$",
                        "typeString": "function (bytes32) pure returns (enum EventType,uint256)"
                      }
                    },
                    "id": 29499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8498:19:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_EventType_$22610_$_t_uint256_$",
                      "typeString": "tuple(enum EventType,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8473:44:93"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 29501,
                    "name": "hasUnderlying",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 29487,
                    "src": "8532:13:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29525,
                  "nodeType": "IfStatement",
                  "src": "8528:319:93",
                  "trueBody": {
                    "id": 29524,
                    "nodeType": "Block",
                    "src": "8547:300:93",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 29519,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 29510,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_enum$_EventType_$22610",
                                    "typeString": "enum EventType"
                                  },
                                  "id": 29505,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 29502,
                                    "name": "eventType",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 29496,
                                    "src": "8660:9:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_EventType_$22610",
                                      "typeString": "enum EventType"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29503,
                                      "name": "EventType",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 22610,
                                      "src": "8673:9:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                                        "typeString": "type(enum EventType)"
                                      }
                                    },
                                    "id": 29504,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "FP",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "8673:12:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_EventType_$22610",
                                      "typeString": "enum EventType"
                                    }
                                  },
                                  "src": "8660:25:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "||",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_enum$_EventType_$22610",
                                    "typeString": "enum EventType"
                                  },
                                  "id": 29509,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 29506,
                                    "name": "eventType",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 29496,
                                    "src": "8689:9:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_EventType_$22610",
                                      "typeString": "enum EventType"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 29507,
                                      "name": "EventType",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 22610,
                                      "src": "8702:9:93",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                                        "typeString": "type(enum EventType)"
                                      }
                                    },
                                    "id": 29508,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "MD",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "8702:12:93",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_EventType_$22610",
                                      "typeString": "enum EventType"
                                    }
                                  },
                                  "src": "8689:25:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "8660:54:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 29511,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "8659:56:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "id": 29518,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 29512,
                                "name": "underlyingState",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 29489,
                                "src": "8735:15:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                                  "typeString": "struct State calldata"
                                }
                              },
                              "id": 29513,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "exerciseAmount",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22662,
                              "src": "8735:30:93",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 29516,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8775:1:93",
                                  "subdenomination": null,
                                  "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": 29515,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8768:6:93",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_int256_$",
                                  "typeString": "type(int256)"
                                },
                                "typeName": {
                                  "id": 29514,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8768:6:93",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 29517,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8768:9:93",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "src": "8735:42:93",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "8659:118:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 29523,
                        "nodeType": "IfStatement",
                        "src": "8638:199:93",
                        "trueBody": {
                          "id": 29522,
                          "nodeType": "Block",
                          "src": "8792:45:93",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "66616c7365",
                                "id": 29520,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8817:5:93",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "functionReturnParameters": 29494,
                              "id": 29521,
                              "nodeType": "Return",
                              "src": "8810:12:93"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 29526,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8864:4:93",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 29494,
                  "id": 29527,
                  "nodeType": "Return",
                  "src": "8857:11:93"
                }
              ]
            },
            "documentation": {
              "id": 29479,
              "nodeType": "StructuredDocumentation",
              "src": "7596:589:93",
              "text": " @notice Verifies that the provided event is still scheduled under the terms, the current state of the\n contract and the current state of the underlying.\n @param _event event for which to check if its still scheduled\n param terms terms of the contract\n param state current state of the contract\n @param hasUnderlying boolean indicating whether the contract has an underlying contract\n @param underlyingState state of the underlying (empty state object if non-existing)\n @return boolean indicating whether event is still scheduled"
            },
            "functionSelector": "1a770911",
            "id": 29529,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isEventScheduled",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 29491,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8427:8:93"
            },
            "parameters": {
              "id": 29490,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29481,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29529,
                  "src": "8225:14:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29480,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8225:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29483,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29529,
                  "src": "8249:17:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CEGTerms_$22852_calldata_ptr",
                    "typeString": "struct CEGTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29482,
                    "name": "CEGTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22852,
                    "src": "8249:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CEGTerms_$22852_storage_ptr",
                      "typeString": "struct CEGTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29485,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29529,
                  "src": "8288:14:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29484,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "8288:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29487,
                  "mutability": "mutable",
                  "name": "hasUnderlying",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29529,
                  "src": "8324:18:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 29486,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8324:4:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29489,
                  "mutability": "mutable",
                  "name": "underlyingState",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29529,
                  "src": "8352:30:93",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29488,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "8352:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8215:173:93"
            },
            "returnParameters": {
              "id": 29494,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29493,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29529,
                  "src": "8453:4:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 29492,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8453:4:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8452:6:93"
            },
            "scope": 29689,
            "src": "8190:685:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 29615,
              "nodeType": "Block",
              "src": "9667:749:93",
              "statements": [
                {
                  "assignments": [
                    29544,
                    29546
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29544,
                      "mutability": "mutable",
                      "name": "eventType",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29615,
                      "src": "9678:19:93",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 29543,
                        "name": "EventType",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22610,
                        "src": "9678:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EventType_$22610",
                          "typeString": "enum EventType"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 29546,
                      "mutability": "mutable",
                      "name": "scheduleTime",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29615,
                      "src": "9699:20:93",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29545,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9699:7:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 29550,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 29548,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29536,
                        "src": "9735:6:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 29547,
                      "name": "decodeEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24743,
                      "src": "9723:11:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_enum$_EventType_$22610_$_t_uint256_$",
                        "typeString": "function (bytes32) pure returns (enum EventType,uint256)"
                      }
                    },
                    "id": 29549,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9723:19:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_EventType_$22610_$_t_uint256_$",
                      "typeString": "tuple(enum EventType,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9677:65:93"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29551,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29544,
                      "src": "9846:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29552,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "9859:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29553,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "FP",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9859:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "9846:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29562,
                  "nodeType": "IfStatement",
                  "src": "9842:90:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 29556,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29532,
                          "src": "9891:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29557,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29534,
                          "src": "9898:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29558,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29546,
                          "src": "9905:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29559,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29538,
                          "src": "9919:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 29555,
                        "name": "STF_CEG_FP",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30192,
                        "src": "9880:10:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CEGTerms memory,struct State memory,uint256,bytes32) pure returns (struct State memory)"
                        }
                      },
                      "id": 29560,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9880:52:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "functionReturnParameters": 29542,
                    "id": 29561,
                    "nodeType": "Return",
                    "src": "9873:59:93"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29563,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29544,
                      "src": "9946:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29564,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "9959:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29565,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "XD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9959:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "9946:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29574,
                  "nodeType": "IfStatement",
                  "src": "9942:90:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 29568,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29532,
                          "src": "9991:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29569,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29534,
                          "src": "9998:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29570,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29546,
                          "src": "10005:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29571,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29538,
                          "src": "10019:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 29567,
                        "name": "STF_CEG_XD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30082,
                        "src": "9980:10:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CEGTerms memory,struct State memory,uint256,bytes32) pure returns (struct State memory)"
                        }
                      },
                      "id": 29572,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9980:52:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "functionReturnParameters": 29542,
                    "id": 29573,
                    "nodeType": "Return",
                    "src": "9973:59:93"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29578,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29575,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29544,
                      "src": "10046:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29576,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "10059:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29577,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "STD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "10059:13:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "10046:26:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29586,
                  "nodeType": "IfStatement",
                  "src": "10042:92:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 29580,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29532,
                          "src": "10093:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29581,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29534,
                          "src": "10100:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29582,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29546,
                          "src": "10107:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29583,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29538,
                          "src": "10121:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 29579,
                        "name": "STF_CEG_STD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 30123,
                        "src": "10081:11:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CEGTerms memory,struct State memory,uint256,bytes32) pure returns (struct State memory)"
                        }
                      },
                      "id": 29584,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10081:53:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "functionReturnParameters": 29542,
                    "id": 29585,
                    "nodeType": "Return",
                    "src": "10074:60:93"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29590,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29587,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29544,
                      "src": "10148:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29588,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "10161:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29589,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "MD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "10161:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "10148:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29598,
                  "nodeType": "IfStatement",
                  "src": "10144:90:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 29592,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29532,
                          "src": "10193:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29593,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29534,
                          "src": "10200:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29594,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29546,
                          "src": "10207:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29595,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29538,
                          "src": "10221:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 29591,
                        "name": "STF_CEG_MD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29971,
                        "src": "10182:10:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CEGTerms memory,struct State memory,uint256,bytes32) pure returns (struct State memory)"
                        }
                      },
                      "id": 29596,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10182:52:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "functionReturnParameters": 29542,
                    "id": 29597,
                    "nodeType": "Return",
                    "src": "10175:59:93"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29602,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29599,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29544,
                      "src": "10248:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29600,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "10261:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29601,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "CE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "10261:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "10248:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29610,
                  "nodeType": "IfStatement",
                  "src": "10244:90:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 29604,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29532,
                          "src": "10293:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29605,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29534,
                          "src": "10300:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29606,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29546,
                          "src": "10307:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29607,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29538,
                          "src": "10321:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 29603,
                        "name": "STF_CEG_CE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29936,
                        "src": "10282:10:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CEGTerms memory,struct State memory,uint256,bytes32) pure returns (struct State memory)"
                        }
                      },
                      "id": 29608,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10282:52:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "functionReturnParameters": 29542,
                    "id": 29609,
                    "nodeType": "Return",
                    "src": "10275:59:93"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "434547456e67696e652e73746174655472616e736974696f6e46756e6374696f6e3a204154545249425554455f4e4f545f464f554e44",
                        "id": 29612,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10352:56:93",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f791201e9e8d0f6a7bc23c19608c63c80f4b66c612988f143354be6eb4886776",
                          "typeString": "literal_string \"CEGEngine.stateTransitionFunction: ATTRIBUTE_NOT_FOUND\""
                        },
                        "value": "CEGEngine.stateTransitionFunction: ATTRIBUTE_NOT_FOUND"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_f791201e9e8d0f6a7bc23c19608c63c80f4b66c612988f143354be6eb4886776",
                          "typeString": "literal_string \"CEGEngine.stateTransitionFunction: ATTRIBUTE_NOT_FOUND\""
                        }
                      ],
                      "id": 29611,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "10345:6:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 29613,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10345:64:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29614,
                  "nodeType": "ExpressionStatement",
                  "src": "10345:64:93"
                }
              ]
            },
            "documentation": {
              "id": 29530,
              "nodeType": "StructuredDocumentation",
              "src": "8881:564:93",
              "text": " @notice Implements abstract method which is defined in BaseEngine.\n Applies an event to the current state of the contract and returns the resulting state.\n The inheriting Engine contract has to map the events type to the designated STF.\n @param terms terms of the contract\n @param state current state of the contract\n @param _event event for which to evaluate the next state for\n @param externalData external data needed for STF evaluation (e.g. rate for RR events)\n @return the resulting contract state"
            },
            "id": 29616,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stateTransitionFunction",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 29539,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29532,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29616,
                  "src": "9492:21:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                    "typeString": "struct CEGTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29531,
                    "name": "CEGTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22852,
                    "src": "9492:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CEGTerms_$22852_storage_ptr",
                      "typeString": "struct CEGTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29534,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29616,
                  "src": "9523:18:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29533,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "9523:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29536,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29616,
                  "src": "9551:14:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29535,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9551:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29538,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29616,
                  "src": "9575:20:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29537,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9575:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9482:119:93"
            },
            "returnParameters": {
              "id": 29542,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29541,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29616,
                  "src": "9649:12:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29540,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "9649:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9648:14:93"
            },
            "scope": 29689,
            "src": "9450:966:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 29687,
              "nodeType": "Block",
              "src": "11163:595:93",
              "statements": [
                {
                  "assignments": [
                    29631,
                    29633
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 29631,
                      "mutability": "mutable",
                      "name": "eventType",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29687,
                      "src": "11174:19:93",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 29630,
                        "name": "EventType",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22610,
                        "src": "11174:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EventType_$22610",
                          "typeString": "enum EventType"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 29633,
                      "mutability": "mutable",
                      "name": "scheduleTime",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 29687,
                      "src": "11195:20:93",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 29632,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11195:7:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 29637,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 29635,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29623,
                        "src": "11231:6:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 29634,
                      "name": "decodeEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24743,
                      "src": "11219:11:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_enum$_EventType_$22610_$_t_uint256_$",
                        "typeString": "function (bytes32) pure returns (enum EventType,uint256)"
                      }
                    },
                    "id": 29636,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11219:19:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_EventType_$22610_$_t_uint256_$",
                      "typeString": "tuple(enum EventType,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11173:65:93"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29641,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29638,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29631,
                      "src": "11342:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29639,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "11355:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29640,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "CE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "11355:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "11342:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29644,
                  "nodeType": "IfStatement",
                  "src": "11338:39:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 29642,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11376:1:93",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 29629,
                    "id": 29643,
                    "nodeType": "Return",
                    "src": "11369:8:93"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29648,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29645,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29631,
                      "src": "11391:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29646,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "11404:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29647,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "FP",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "11404:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "11391:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29656,
                  "nodeType": "IfStatement",
                  "src": "11387:90:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 29650,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29619,
                          "src": "11436:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29651,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29621,
                          "src": "11443:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29652,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29633,
                          "src": "11450:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29653,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29625,
                          "src": "11464:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 29649,
                        "name": "POF_CEG_FP",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29795,
                        "src": "11425:10:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_int256_$",
                          "typeString": "function (struct CEGTerms memory,struct State memory,uint256,bytes32) pure returns (int256)"
                        }
                      },
                      "id": 29654,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11425:52:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "functionReturnParameters": 29629,
                    "id": 29655,
                    "nodeType": "Return",
                    "src": "11418:59:93"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29657,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29631,
                      "src": "11491:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29658,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "11504:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29659,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "XD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "11504:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "11491:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29663,
                  "nodeType": "IfStatement",
                  "src": "11487:39:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 29661,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11525:1:93",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 29629,
                    "id": 29662,
                    "nodeType": "Return",
                    "src": "11518:8:93"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29667,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29664,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29631,
                      "src": "11540:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29665,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "11553:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29666,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "STD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "11553:13:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "11540:26:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29675,
                  "nodeType": "IfStatement",
                  "src": "11536:92:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 29669,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29619,
                          "src": "11587:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29670,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29621,
                          "src": "11594:5:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29671,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29633,
                          "src": "11601:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 29672,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 29625,
                          "src": "11615:12:93",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                            "typeString": "struct CEGTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 29668,
                        "name": "POF_CEG_STD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 29717,
                        "src": "11575:11:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CEGTerms_$22852_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_int256_$",
                          "typeString": "function (struct CEGTerms memory,struct State memory,uint256,bytes32) pure returns (int256)"
                        }
                      },
                      "id": 29673,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11575:53:93",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "functionReturnParameters": 29629,
                    "id": 29674,
                    "nodeType": "Return",
                    "src": "11568:60:93"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 29679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 29676,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29631,
                      "src": "11642:9:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 29677,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "11655:9:93",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 29678,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "MD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "11655:12:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "11642:25:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 29682,
                  "nodeType": "IfStatement",
                  "src": "11638:39:93",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 29680,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11676:1:93",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 29629,
                    "id": 29681,
                    "nodeType": "Return",
                    "src": "11669:8:93"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "434547456e67696e652e7061796f666646756e6374696f6e3a204154545249425554455f4e4f545f464f554e44",
                        "id": 29684,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11703:47:93",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6fc5d5fc3d141e5f1f62298898cdbd04dba193a366ddcd03a8e0efed4535a3c3",
                          "typeString": "literal_string \"CEGEngine.payoffFunction: ATTRIBUTE_NOT_FOUND\""
                        },
                        "value": "CEGEngine.payoffFunction: ATTRIBUTE_NOT_FOUND"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_6fc5d5fc3d141e5f1f62298898cdbd04dba193a366ddcd03a8e0efed4535a3c3",
                          "typeString": "literal_string \"CEGEngine.payoffFunction: ATTRIBUTE_NOT_FOUND\""
                        }
                      ],
                      "id": 29683,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "11696:6:93",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 29685,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11696:55:93",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 29686,
                  "nodeType": "ExpressionStatement",
                  "src": "11696:55:93"
                }
              ]
            },
            "documentation": {
              "id": 29617,
              "nodeType": "StructuredDocumentation",
              "src": "10422:534:93",
              "text": " @notice Implements abstract method which is defined in BaseEngine.\n Computes the payoff for an event under the current state of the contract.\n The inheriting Engine contract has to map the events type to the designated POF.\n @param terms terms of the contract\n @param state current state of the contract\n @param _event event for which the payoff should be evaluated\n @param externalData external data needed for POF evaluation (e.g. fxRate)\n @return the payoff of the event"
            },
            "id": 29688,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "payoffFunction",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 29626,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29619,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29688,
                  "src": "10994:21:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CEGTerms_$22852_memory_ptr",
                    "typeString": "struct CEGTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29618,
                    "name": "CEGTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22852,
                    "src": "10994:8:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CEGTerms_$22852_storage_ptr",
                      "typeString": "struct CEGTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29621,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29688,
                  "src": "11025:18:93",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 29620,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "11025:5:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29623,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29688,
                  "src": "11053:14:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29622,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11053:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 29625,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29688,
                  "src": "11077:20:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 29624,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11077:7:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10984:119:93"
            },
            "returnParameters": {
              "id": 29629,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 29628,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 29688,
                  "src": "11151:6:93",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 29627,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11151:6:93",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11150:8:93"
            },
            "scope": 29689,
            "src": "10961:797:93",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 29690,
        "src": "514:11246:93"
      }
    ],
    "src": "41:11719:93"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.11+commit.5ef660b1.Emscripten.clang"
  },
  "networks": {
    "4": {
      "events": {},
      "links": {},
      "address": "0x99953d8Ab9449e59710ed7e9B8DB9313011Cfa6D",
      "transactionHash": "0x1f88f0ccda5d212d4efc05fd98501e2173a0ae899a5ce5278a54d76377bc3e5d"
    },
    "5": {
      "events": {},
      "links": {},
      "address": "0x7C50a3961CAE5781bB7694Ec3F9Caa2f84959236",
      "transactionHash": "0x9bdcdf6a4680669f09bf52da78725c09a5e7fb2118727c4e4c2b38ffa8c490c4"
    },
    "1994": {
      "events": {},
      "links": {},
      "address": "0xAC68a00bB798C3923210909244Eb900E76D4726A",
      "transactionHash": "0xa427f37b6d637e22b499f9c0bebf07550816dbdeaf07b4c830a1fd0fa6f885b1"
    }
  },
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-08-12T09:47:18.384Z",
  "devdoc": {
    "details": "All numbers except unix timestamp are represented as multiple of 10 ** 18 inputs have to be multiplied by 10 ** 18, outputs have to multplied by 10 ** -18",
    "kind": "dev",
    "methods": {
      "adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))": {
        "details": "The following is considered to dertermine if schedule dates are shifted to the end of month: - The convention SD (same day) means not adjusting, EM (end of month) means adjusting - Dates are only shifted if the schedule start date is an end-of-month date - Dates are only shifted if the schedule cycle is based on an \"M\" period unit or multiple thereof",
        "params": {
          "cycle": "the cycle struct",
          "eomc": "the end of month convention to adjust",
          "startTime": "timestamp of the cycle start"
        },
        "returns": {
          "_0": "the adjusted end of month convention"
        }
      },
      "computeCyclicScheduleSegment((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint256,uint8)": {
        "params": {
          "eventType": "eventType of the cyclic schedule",
          "segmentEnd": "end timestamp of the segement",
          "segmentStart": "start timestamp of the segment",
          "terms": "terms of the contract"
        },
        "returns": {
          "_0": "event schedule segment"
        }
      },
      "computeEventTimeForEvent(bytes32,uint8,uint8,uint256)": {
        "details": "For optimization reasons not located in EventUtil by applying the BDC specified in the terms"
      },
      "computeInitialState((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)))": {
        "params": {
          "terms": "terms of the contract"
        },
        "returns": {
          "_0": "initial state of the contract"
        }
      },
      "computeNextCyclicEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint8)": {
        "params": {
          "eventType": "eventType of the cyclic schedule",
          "lastScheduleTime": "last occurrence of cyclic event",
          "terms": "terms of the contract"
        },
        "returns": {
          "_0": "event schedule segment"
        }
      },
      "computeNonCyclicScheduleSegment((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint256)": {
        "params": {
          "segmentEnd": "end timestamp of the segement",
          "segmentStart": "start timestamp of the segment",
          "terms": "terms of the contract"
        },
        "returns": {
          "_0": "segment of the non-cyclic schedule"
        }
      },
      "computePayoffForEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bytes32,bytes32)": {
        "params": {
          "_event": "event for which the payoff should be evaluated",
          "externalData": "external data needed for POF evaluation (e.g. fxRate)",
          "state": "current state of the contract",
          "terms": "terms of the contract"
        },
        "returns": {
          "_0": "the payoff of the event"
        }
      },
      "computeStateForEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bytes32,bytes32)": {
        "params": {
          "_event": "event to be applied to the contract state",
          "externalData": "external data needed for STF evaluation (e.g. rate for RR events)",
          "state": "current state of the contract",
          "terms": "terms of the contract"
        },
        "returns": {
          "_0": "the resulting contract state"
        }
      },
      "isEventScheduled(bytes32,(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bool,(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256))": {
        "params": {
          "_event": "event for which to check if its still scheduled param terms terms of the contract param state current state of the contract",
          "hasUnderlying": "boolean indicating whether the contract has an underlying contract",
          "underlyingState": "state of the underlying (empty state object if non-existing)"
        },
        "returns": {
          "_0": "boolean indicating whether event is still scheduled"
        }
      }
    },
    "title": "CEGEngine",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))": {
        "notice": "This function makes an adjustment on the end of month convention."
      },
      "computeCyclicScheduleSegment((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint256,uint8)": {
        "notice": "Computes a schedule segment of cyclic contract events based on the contract terms and the specified timestamps."
      },
      "computeEventTimeForEvent(bytes32,uint8,uint8,uint256)": {
        "notice": "Returns the event time for a given schedule time"
      },
      "computeInitialState((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)))": {
        "notice": "Initialize contract state space based on the contract terms."
      },
      "computeNextCyclicEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint8)": {
        "notice": "Computes a schedule segment of cyclic contract events based on the contract terms and the specified timestamps."
      },
      "computeNonCyclicScheduleSegment((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint256)": {
        "notice": "Computes a schedule segment of non-cyclic contract events based on the contract terms and the specified timestamps."
      },
      "computePayoffForEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bytes32,bytes32)": {
        "notice": "Evaluates the payoff for an event under the current state of the contract."
      },
      "computeStateForEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bytes32,bytes32)": {
        "notice": "Applys an event to the current state of a contract and returns the resulting contract state."
      },
      "getEpochOffset(uint8)": {
        "notice": "Returns the epoch offset for a given event type to determine the correct order of events if multiple events have the same timestamp"
      },
      "isEventScheduled(bytes32,(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bool,(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256))": {
        "notice": "Verifies that the provided event is still scheduled under the terms, the current state of the contract and the current state of the underlying."
      },
      "shiftCalcTime(uint256,uint8,uint8,uint256)": {
        "notice": "Used in POFs and STFs for DCFs. No shifting is applied if a Calc/Shift instead of Shift/Calc BDC is provided."
      }
    },
    "notice": "Inherits from BaseEngine by implementing STFs, POFs according to the ACTUS standard for a CEC contract",
    "version": 1
  }
}