{
  "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": [
        {
          "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"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506130cd806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063811322fb116100ad578063dad412b511610071578063dad412b514610269578063e05a66e01461027c578063e726d6801461028f578063edc0465f1461024c578063f5586e05146102a257610121565b8063811322fb1461021e578063aaf5eb6814610231578063b90f736814610239578063c40c5a981461024c578063cb2ef6f71461025457610121565b80631f252723116100f45780631f252723146101af578063392aef8e146101c257806367b58117146101e25780636f37e55b146101f557806372540003146101fd57610121565b80630ba295ba14610126578063179331f31461014f5780631a2e165d1461016f5780631a7709111461018f575b600080fd5b610139610134366004612561565b6102b5565b6040516101469190612896565b60405180910390f35b61016261015d366004612401565b610448565b6040516101469190612902565b61018261017d36600461231e565b610518565b60405161014691906128e5565b6101a261019d366004612364565b61053d565b60405161014691906128da565b6101826101bd3660046124a1565b6105a6565b6101d56101d03660046124a1565b610672565b6040516101469190612f46565b6101d56101f0366004612485565b6106a2565b61018261070c565b61021061020b366004612306565b610718565b604051610146929190612910565b61018261022c36600461243f565b610741565b610182610755565b6101826102473660046124e8565b61075a565b6101826107dd565b61025c6107e2565b60405161014691906128ee565b61013961027736600461252b565b6107e7565b61018261028a36600461245a565b610913565b61018261029d366004612873565b610931565b6101826102b0366004612873565b610a7d565b60606102bf6120a6565b6000600384601c8111156102cf57fe5b14156103b9576101c0870135156103b9576102e86120a6565b6103236101c08901356101808a013561030a368c90038c016103608d0161275b565b61031a60c08d0160a08e016123e5565b60018c8c610ae8565b905060005b60788160ff1610156103b657818160ff166078811061034357fe5b6020020151610351576103b6565b61036f828260ff166078811061036357fe5b60200201518989610cd2565b610378576103ae565b6103966003838360ff166078811061038c57fe5b6020020151610913565b8484607881106103a257fe5b60200201526001909201915b600101610328565b50505b60608167ffffffffffffffff811180156103d257600080fd5b506040519080825280602002602001820160405280156103fc578160200160208202803683370190505b50905060005b8281101561043a5783816078811061041657fe5b602002015182828151811061042757fe5b6020908102919091010152600101610402565b50925050505b949350505050565b6000600184600181111561045857fe5b14156104d45761046783610d01565b61047084610d23565b1480156104bf575060028260200151600581111561048a57fe5b14806104a557506003826020015160058111156104a357fe5b145b806104bf57506004826020015160058111156104bd57fe5b145b156104cc57506001610511565b506000610511565b60008460018111156104e257fe5b14156104f057506000610511565b60405162461bcd60e51b815260040161050890612dfd565b60405180910390fd5b9392505050565b60008061052486610718565b91505061053381868686610931565b9695505050505050565b60008061054987610718565b509050831561059757600381601c81111561056057fe5b14806105775750601481601c81111561057557fe5b145b801561058857506000836101c00135135b1561059757600091505061059d565b60019150505b95945050505050565b6000806105bb610140870161012088016122eb565b6001600160a01b03161415801561060657506105df610140860161012087016122eb565b6001600160a01b03166105fa610120870161010088016122eb565b6001600160a01b031614155b1561064a5761064382610637610621368990038901896125ac565b61063036899003890189612776565b8787610d32565b9063ffffffff610e0316565b9050610440565b61059d61065c368790038701876125ac565b61066b36879003870187612776565b8585610d32565b61067a6120c5565b61059d61068c368790038701876125ac565b61069b36879003870187612776565b8585610ea1565b6106aa6120c5565b6106b26120c5565b6000815261016083013560208201526101808301356060808301919091526101e0840135906106ef906106ea908601604087016123ca565b610f72565b60000b0260e082015261022083013561012082015290505b919050565b670de0b6b3a764000081565b6000808060f884901c601c81111561072c57fe5b92505067ffffffffffffffff83169050915091565b600081601c81111561074f57fe5b92915050565b601281565b6000600382601c81111561076a57fe5b14156107d3576101c0840135156107d35760006107af610793368790038701610360880161275b565b6107a360c0880160a089016123e5565b876101c0013587611036565b9050806107c0575060009050610511565b6107cb600382610913565b915050610511565b5060009392505050565b607881565b601090565b60606107f16120a6565b60006101a08601351561083c5761080e866101a001358686610cd2565b1561083c57610823600f876101a00135610913565b828261ffff166078811061083357fe5b60200201526001015b61084c8661018001358686610cd2565b15156001141561087f576108666014876101800135610913565b828261ffff166078811061087657fe5b60200201526001015b60608161ffff1667ffffffffffffffff8111801561089c57600080fd5b506040519080825280602002602001820160405280156108c6578160200160208202803683370190505b50905060005b8261ffff16811015610908578381607881106108e457fe5b60200201518282815181106108f557fe5b60209081029190910101526001016108cc565b509695505050505050565b60008160f884601c81111561092457fe5b60ff16901b179392505050565b600081851415610942575083610440565b600184600881111561095057fe5b14806109675750600384600881111561096557fe5b145b15610976576106438584611091565b600284600881111561098457fe5b148061099b5750600484600881111561099957fe5b145b156109df5760006109ac8685611091565b90506109b7866110ed565b6109c0826110ed565b14156109cd579050610440565b6109d78685611104565b915050610440565b60058460088111156109ed57fe5b1480610a0457506007846008811115610a0257fe5b145b15610a13576106438584611104565b6006846008811115610a2157fe5b1480610a3857506008846008811115610a3657fe5b145b15610a74576000610a498685611104565b9050610a54866110ed565b610a5d826110ed565b1415610a6a579050610440565b6109d78685611091565b50929392505050565b60006003846008811115610a8d57fe5b1480610aa457506004846008811115610aa257fe5b145b80610aba57506007846008811115610ab857fe5b145b80610ad057506008846008811115610ace57fe5b145b15610adc575083610440565b61059d85858585610931565b610af06120a6565b610af86120a6565b6060870151600090610b6057610b0f8a8686610cd2565b15610b2a5789828260788110610b2157fe5b60200201526001015b610b35898686610cd2565b15610b585760018615151415610b585788828260788110610b5257fe5b60200201525b509050610cc7565b89600080610b6f8a848d610448565b90505b8b831015610c0457610b85838989610cd2565b15610bc35760768410610baa5760405162461bcd60e51b81526004016105089061297b565b82858560788110610bb757fe5b60200201526001909301925b600191820191816001811115610bd557fe5b14610bea57610be58b8e84611152565b610bfd565b610bfd610bf88c8f85611152565b611283565b9250610b72565b60018915151415610c3257610c1a8c8989610cd2565b15610c32578b858560788110610c2c57fe5b60200201525b600084118015610c4f5750610c4f85600186036078811061036357fe5b15610cbf5760008b604001516001811115610c6657fe5b148015610c735750600184115b8015610c7f5750828c14155b15610cbf57848460788110610c9057fe5b6020020151856001860360788110610ca457fe5b6020020152848460788110610cb557fe5b6020020160008152505b509293505050505b979650505050505050565b600081831115610ce457506000610511565b838311158015610cf45750818411155b156107d357506001610511565b60008080610d1462015180855b046112b2565b50915091506104408282611348565b60006104406201518083610d0e565b6000806000610d4085610718565b9092509050600b82601c811115610d5357fe5b1415610d6457600092505050610440565b600382601c811115610d7257fe5b1415610d8d57610d84878783876113ce565b92505050610440565b601a82601c811115610d9b57fe5b1415610dac57600092505050610440565b601b82601c811115610dba57fe5b1415610dcc57610d8487878387611487565b601482601c811115610dda57fe5b1415610deb57600092505050610440565b60405162461bcd60e51b815260040161050890612bd1565b6000821580610e10575081155b15610e1d5750600061074f565b82600019148015610e315750600160ff1b82145b15610e4e5760405162461bcd60e51b815260040161050890612b8a565b82820282848281610e5b57fe5b0514610e795760405162461bcd60e51b815260040161050890612b8a565b670de0b6b3a76400008105806104405760405162461bcd60e51b815260040161050890612aa3565b610ea96120c5565b600080610eb585610718565b9092509050600382601c811115610ec857fe5b1415610eda57610d848787838761149c565b601a82601c811115610ee857fe5b1415610efa57610d84878783876114b8565b601b82601c811115610f0857fe5b1415610f1a57610d848787838761157d565b601482601c811115610f2857fe5b1415610f3a57610d84878783876115b4565b600b82601c811115610f4857fe5b1415610f5a57610d84878783876115cb565b60405162461bcd60e51b815260040161050890612ef0565b60008082600c811115610f8157fe5b1415610f8f57506001610707565b600182600c811115610f9d57fe5b1415610fac5750600019610707565b600682600c811115610fba57fe5b1415610fc857506001610707565b600782600c811115610fd657fe5b1415610fe55750600019610707565b600282600c811115610ff357fe5b141561100157506001610707565b600382600c81111561100f57fe5b141561101e5750600019610707565b60405162461bcd60e51b815260040161050890612b36565b60608401516000901580611048575081155b15611054575081610440565b6001611061858588610448565b600181111561106c57fe5b146110825761107d85836001611152565b61059d565b61059d610bf886846001611152565b600060018260018111156110a157fe5b14156110e6576110b0836116b6565b600614156110ca576110c38360026116c9565b905061074f565b6110d3836116b6565b600714156110e6576110c38360016116c9565b5090919050565b60006110fc6201518083610d0e565b509392505050565b6000600182600181111561111457fe5b14156110e657611123836116b6565b60061415611136576110c38360016116de565b61113f836116b6565b600714156110e6576110c38360026116de565b600080808560200151600581111561116657fe5b1415611181578451610643908590850263ffffffff6116c916565b60018560200151600581111561119357fe5b14156111b1578451610643908590850260070263ffffffff6116c916565b6002856020015160058111156111c357fe5b14156111de578451610643908590850263ffffffff6116f316565b6003856020015160058111156111f057fe5b141561120e578451610643908590850260030263ffffffff6116f316565b60048560200151600581111561122057fe5b141561123e578451610643908590850260060263ffffffff6116f316565b60058560200151600581111561125057fe5b141561126b578451610643908590850263ffffffff61176d16565b60405162461bcd60e51b8152600401610508906129c9565b60008060008061129285611794565b9194509250905060006112a58484611348565b90506105338484836117b2565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161130957fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806113595750816003145b806113645750816005145b8061136f5750816007145b8061137a5750816008145b80611385575081600a145b80611390575081600c145b1561139d5750601f61074f565b816002146113ad5750601e61074f565b6113b6836117cc565b6113c157601c6113c4565b601d5b60ff169392505050565b6000808560c0015160018111156113e157fe5b1415611405578461024001516113fa8660400151610f72565b60000b029050610440565b60006114506114278660200151886080015189602001518a6101800151610a7d565b6114408689608001518a602001518b6101800151610a7d565b88606001518961018001516117f1565b90506105336114758660e0015161063789610240015185610e0390919063ffffffff16565b6101208701519063ffffffff6118ee16565b6101208301516101c084015101949350505050565b6114a46120c5565b505060006101208301526020820152919050565b6114c06120c5565b60006114e26114278660200151886080015189602001518a6101800151610a7d565b60208601859052610280870151909150611502908463ffffffff610e0316565b6101c08601526080850184905260008660c00151600181111561152157fe5b14156115495785610240015161153a8760400151610f72565b60000b02610120860152611573565b61156c6114758660e0015161063789610240015185610e0390919063ffffffff16565b6101208601525b5092949350505050565b6115856120c5565b600060e085018190526101208501528360045b908160058111156115a557fe5b90525050506020820152919050565b6115bc6120c5565b600060e0850152836004611598565b6115d36120c5565b600084604001516000146115eb578460400151611604565b6116048487608001518860200151896101800151610931565b6102a08701516040015190915083906000901561163f57600061162c896102a0015185611934565b905080831161163d57600180895291505b505b876102c00151604001518015611653575080155b15611682576000611669896102c0015185611934565b905080831161167b5760028852611680565b600388525b505b60408701516116aa576116a48689608001518a602001518b6101800151610931565b60408801525b50949695505050505050565b6007620151809091046003010660010190565b62015180810282018281101561074f57600080fd5b62015180810282038281111561074f57600080fd5b60008080806117056201518087610d0e565b600c91880160001981018381049490940196509450925090066001019150600061172f8484611348565b90508082111561173d578091505b62015180870662015180611752868686611a60565b020194508685101561176357600080fd5b5050505092915050565b600080808061177f6201518087610d0e565b918701945092509050600061172f8484611348565b600080806117a56201518085610d0e565b9196909550909350915050565b6000620151806117c3858585611a60565b02949350505050565b6000600482061580156117e157506064820615155b8061074f57505061019090061590565b6000848410156118135760405162461bcd60e51b815260040161050890612ccc565b600083600581111561182157fe5b1415611831576106438585611adc565b600183600581111561183f57fe5b141561184f576106438585611bfc565b600283600581111561185d57fe5b141561186d576106438585611c27565b600483600581111561187b57fe5b141561188b576106438585611c46565b600383600581111561189957fe5b14156118aa57610643858584611d07565b60058360058111156118b857fe5b14156118d65760405162461bcd60e51b815260040161050890612c1e565b60405162461bcd60e51b815260040161050890612a17565b60008282018183128015906119035750838112155b80611918575060008312801561191857508381125b6105115760405162461bcd60e51b815260040161050890612af5565b600080808460200151600581111561194857fe5b141561196857835161196190849063ffffffff6116c916565b9050610511565b60018460200151600581111561197a57fe5b141561199657835161196190849060070263ffffffff6116c916565b6002846020015160058111156119a857fe5b14156119c157835161196190849063ffffffff6116f316565b6003846020015160058111156119d357fe5b14156119ef57835161196190849060030263ffffffff6116f316565b600484602001516005811115611a0157fe5b1415611a1d57835161196190849060060263ffffffff6116f316565b600584602001516005811115611a2f57fe5b1415611a4857835161196190849063ffffffff61176d16565b60405162461bcd60e51b815260040161050890612da0565b60006107b2841015611a7157600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f0281611aad57fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b600080611ae884611ddd565b90506000611af584611ddd565b90506000611b0286611df5565b611b0e5761016d611b12565b61016e5b61ffff16905081831415611b4457611b3a81611b2e8888611e12565b9063ffffffff611e2d16565b935050505061074f565b6000611b4f86611df5565b611b5b5761016d611b5f565b61016e5b61ffff1690506000611b9083611b2e8a611b8b611b838a600163ffffffff611ee916565b6001806117b2565b611e12565b90506000611bad83611b2e611ba7886001806117b2565b8b611e12565b9050611bef611bd36001611bc7888a63ffffffff611f0e16565b9063ffffffff611f0e16565b611be3848463ffffffff6118ee16565b9063ffffffff6118ee16565b9998505050505050505050565b6000610511610168611b2e62015180611c1b868863ffffffff611f0e16565b9063ffffffff611f5016565b600061051161016d611b2e62015180611c1b868863ffffffff611f0e16565b6000806000806000806000611c5a89611794565b975095509350611c6988611794565b945092509050601f861415611c7d57601e95505b82601f1415611c8b57601e92505b6000611c9d848863ffffffff611f9216565b90506000611cb1848863ffffffff611f9216565b90506000611cc5848863ffffffff611f9216565b9050611cf7610168611b2e85611be3611ce587601e63ffffffff611fd816565b611be38761016863ffffffff611fd816565b9c9b505050505050505050505050565b6000806000806000806000611d1b8a611794565b975095509350611d2a89611794565b945092509050611d398a610d01565b861415611d4557601e95505b8789148015611d545750816002145b158015611d685750611d6589610d01565b83145b15611d7257601e92505b6000611d84848863ffffffff611f9216565b90506000611d98848863ffffffff611f9216565b90506000611dac848863ffffffff611f9216565b9050611dcc610168611b2e85611be3611ce587601e63ffffffff611fd816565b9d9c50505050505050505050505050565b6000611dec6201518083610d0e565b50909392505050565b600080611e056201518084610d0e565b50509050610511816117cc565b600081831115611e2157600080fd5b50620151809190030490565b600081611e4c5760405162461bcd60e51b815260040161050890612eac565b82611e595750600061074f565b670de0b6b3a764000083810290848281611e6f57fe5b0514611e8d5760405162461bcd60e51b815260040161050890612d5a565b82600019148015611ea15750600160ff1b84145b15611ebe5760405162461bcd60e51b815260040161050890612d5a565b6000838281611ec957fe5b059050806104405760405162461bcd60e51b815260040161050890612c7b565b6000828201838110156105115760405162461bcd60e51b815260040161050890612a6c565b600061051183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612043565b600061051183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061206f565b6000818303818312801590611fa75750838113155b80611fbc5750600083128015611fbc57508381135b6105115760405162461bcd60e51b815260040161050890612e68565b600082611fe75750600061074f565b82600019148015611ffb5750600160ff1b82145b156120185760405162461bcd60e51b815260040161050890612d13565b8282028284828161202557fe5b05146105115760405162461bcd60e51b815260040161050890612d13565b600081848411156120675760405162461bcd60e51b81526004016105089190612928565b505050900390565b600081836120905760405162461bcd60e51b81526004016105089190612928565b50600083858161209c57fe5b0495945050505050565b60405180610f0001604052806078906020820280368337509192915050565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356001600160a01b038116811461074f57600080fd5b80356009811061074f57600080fd5b803561074f81613063565b803561074f81613070565b8035600d811061074f57600080fd5b80356013811061074f57600080fd5b8035601d811061074f57600080fd5b60006104e082840312156121da578081fd5b50919050565b6000608082840312156121f1578081fd5b6121fb608061302b565b9050813581526020820135602082015260408201356122198161307d565b6040820152606082013561222c8161307d565b606082015292915050565b600060808284031215612248578081fd5b612252608061302b565b905081358152602082013561226681613070565b6020820152604082013561227981613063565b6040820152606082013561222c81613052565b60006060828403121561229d578081fd5b6122a7606061302b565b90508135815260208201356122bb81613070565b602082015260408201356122ce81613052565b604082015292915050565b600061028082840312156121da578081fd5b6000602082840312156122fc578081fd5b610511838361215f565b600060208284031215612317578081fd5b5035919050565b60008060008060808587031215612333578283fd5b843593506123448660208701612176565b9250604085013561235481613063565b9396929550929360600135925050565b6000806000806000610a20868803121561237c578283fd5b8535945061238d87602088016121c8565b935061239d8761050088016122d9565b92506107808601356123ae81613052565b91506123be876107a088016122d9565b90509295509295909350565b6000602082840312156123db578081fd5b610511838361219b565b6000602082840312156123f6578081fd5b813561051181613063565b600080600060c08486031215612415578081fd5b833561242081613063565b9250602084013591506124368560408601612237565b90509250925092565b600060208284031215612450578081fd5b61051183836121b9565b6000806040838503121561246c578182fd5b82356124778161308a565b946020939093013593505050565b60006104e08284031215612497578081fd5b61051183836121c8565b6000806000806107a085870312156124b7578182fd5b6124c186866121c8565b93506124d1866104e087016122d9565b939693955050505061076082013591610780013590565b600080600061052084860312156124fd578081fd5b61250785856121c8565b92506104e084013591506105008401356125208161308a565b809150509250925092565b60008060006105208486031215612540578081fd5b61254a85856121c8565b956104e08501359550610500909401359392505050565b6000806000806105408587031215612577578182fd5b61258186866121c8565b93506104e0850135925061050085013591506125a18661052087016121b9565b905092959194509250565b60006104e082840312156125be578081fd5b6125c961034061302b565b6125d384846121aa565b81526125e28460208501612185565b60208201526125f4846040850161219b565b60408201526126068460608501612190565b60608201526126188460808501612176565b608082015261262a8460a08501612185565b60a082015261263c8460c08501612185565b60c082015261264e8460e08501612190565b60e08201526101006126628582860161215f565b908201526101206126758585830161215f565b908201526101408381013590820152610160808401359082015261018080840135908201526101a080840135908201526101c080840135908201526101e08084013590820152610200808401359082015261022080840135908201526102408084013590820152610260808401359082015261028080840135908201526102a06127018582860161228c565b908201526103006127148585830161228c565b6102c0830152612728856103608601612237565b6102e083015261273c856103e086016121e0565b9082015261274e8461046085016121e0565b6103208201529392505050565b60006080828403121561276c578081fd5b6105118383612237565b6000610280808385031215612789578182fd5b6127928161302b565b61279c8585612190565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b60008060008060808587031215612333578182fd5b6006811061289257fe5b9052565b6020808252825182820181905260009190848201906040850190845b818110156128ce578351835292840192918401916001016128b2565b50909695505050505050565b901515815260200190565b90815260200190565b60208101601383106128fc57fe5b91905290565b60208101600283106128fc57fe5b60408101601d841061291e57fe5b9281526020015290565b6000602080835283518082850152825b8181101561295457858101830151858201604001528201612938565b818111156129655783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602e908201527f5363686564756c652e636f6d70757465446174657346726f6d4379636c653a2060408201526d4d41585f4359434c455f53495a4560901b606082015260800190565b6020808252602e908201527f5363686564756c652e6765744e6578744379636c65446174653a20415454524960408201526d1095551157d393d517d193d5539160921b606082015260800190565b60208082526035908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a6040820152741020aa2a2924a12aaa22afa727aa2fa327aaa7221760591b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526032908201527f5369676e65644d6174682e666c6f61744d756c743a2043414e4e4f545f524550604082015271524553454e545f4752414e554c415249545960701b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526034908201527f436f6e7472616374526f6c65436f6e76656e74696f6e2e726f6c655369676e3a6040820152730810551514925095551157d393d517d193d5539160621b606082015260800190565b60208082526027908201527f5369676e65644d6174682e666c6f61744d756c743a204f564552464c4f575f4460408201526611551150d5115160ca1b606082015260800190565b6020808252602d908201527f434547456e67696e652e7061796f666646756e6374696f6e3a2041545452494260408201526c15551157d393d517d193d55391609a1b606082015260800190565b60208082526039908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a60408201527f204154545249425554455f4e4f545f535550504f525445442e00000000000000606082015260800190565b60208082526031908201527f5369676e65644d6174682e666c6f61744469763a2043414e4e4f545f524550526040820152704553454e545f4752414e554c415249545960781b606082015260800190565b60208082526027908201527f436f72652e796561724672616374696f6e3a2053544152545f4e4f545f42454660408201526613d49157d1539160ca1b606082015260800190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526026908201527f5369676e65644d6174682e666c6f61744469763a204f564552464c4f575f4445604082015265151150d5115160d21b606082015260800190565b60208082526037908201527f506572696f645574696c732e67657454696d657374616d70506c75735065726960408201527f6f643a204154545249425554455f4e4f545f464f554e44000000000000000000606082015260800190565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b60208082526024908201527f5369676e65644d6174682e666c6f61744469763a20444956494445445f42595f6040820152635a45524f60e01b606082015260800190565b60208082526036908201527f434547456e67696e652e73746174655472616e736974696f6e46756e6374696f6040820152751b8e8810551514925095551157d393d517d193d5539160521b606082015260800190565b600061028082019050612f5a828451612888565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60405181810167ffffffffffffffff8111828210171561304a57600080fd5b604052919050565b801515811461306057600080fd5b50565b6002811061306057600080fd5b6006811061306057600080fd5b6005811061306057600080fd5b601d811061306057600080fdfea2646970667358221220d6fe6225c0c30e3717b01dc938633b912190cca5f3b871a6b3ac04cb1ec8a44364736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101215760003560e01c8063811322fb116100ad578063dad412b511610071578063dad412b514610269578063e05a66e01461027c578063e726d6801461028f578063edc0465f1461024c578063f5586e05146102a257610121565b8063811322fb1461021e578063aaf5eb6814610231578063b90f736814610239578063c40c5a981461024c578063cb2ef6f71461025457610121565b80631f252723116100f45780631f252723146101af578063392aef8e146101c257806367b58117146101e25780636f37e55b146101f557806372540003146101fd57610121565b80630ba295ba14610126578063179331f31461014f5780631a2e165d1461016f5780631a7709111461018f575b600080fd5b610139610134366004612561565b6102b5565b6040516101469190612896565b60405180910390f35b61016261015d366004612401565b610448565b6040516101469190612902565b61018261017d36600461231e565b610518565b60405161014691906128e5565b6101a261019d366004612364565b61053d565b60405161014691906128da565b6101826101bd3660046124a1565b6105a6565b6101d56101d03660046124a1565b610672565b6040516101469190612f46565b6101d56101f0366004612485565b6106a2565b61018261070c565b61021061020b366004612306565b610718565b604051610146929190612910565b61018261022c36600461243f565b610741565b610182610755565b6101826102473660046124e8565b61075a565b6101826107dd565b61025c6107e2565b60405161014691906128ee565b61013961027736600461252b565b6107e7565b61018261028a36600461245a565b610913565b61018261029d366004612873565b610931565b6101826102b0366004612873565b610a7d565b60606102bf6120a6565b6000600384601c8111156102cf57fe5b14156103b9576101c0870135156103b9576102e86120a6565b6103236101c08901356101808a013561030a368c90038c016103608d0161275b565b61031a60c08d0160a08e016123e5565b60018c8c610ae8565b905060005b60788160ff1610156103b657818160ff166078811061034357fe5b6020020151610351576103b6565b61036f828260ff166078811061036357fe5b60200201518989610cd2565b610378576103ae565b6103966003838360ff166078811061038c57fe5b6020020151610913565b8484607881106103a257fe5b60200201526001909201915b600101610328565b50505b60608167ffffffffffffffff811180156103d257600080fd5b506040519080825280602002602001820160405280156103fc578160200160208202803683370190505b50905060005b8281101561043a5783816078811061041657fe5b602002015182828151811061042757fe5b6020908102919091010152600101610402565b50925050505b949350505050565b6000600184600181111561045857fe5b14156104d45761046783610d01565b61047084610d23565b1480156104bf575060028260200151600581111561048a57fe5b14806104a557506003826020015160058111156104a357fe5b145b806104bf57506004826020015160058111156104bd57fe5b145b156104cc57506001610511565b506000610511565b60008460018111156104e257fe5b14156104f057506000610511565b60405162461bcd60e51b815260040161050890612dfd565b60405180910390fd5b9392505050565b60008061052486610718565b91505061053381868686610931565b9695505050505050565b60008061054987610718565b509050831561059757600381601c81111561056057fe5b14806105775750601481601c81111561057557fe5b145b801561058857506000836101c00135135b1561059757600091505061059d565b60019150505b95945050505050565b6000806105bb610140870161012088016122eb565b6001600160a01b03161415801561060657506105df610140860161012087016122eb565b6001600160a01b03166105fa610120870161010088016122eb565b6001600160a01b031614155b1561064a5761064382610637610621368990038901896125ac565b61063036899003890189612776565b8787610d32565b9063ffffffff610e0316565b9050610440565b61059d61065c368790038701876125ac565b61066b36879003870187612776565b8585610d32565b61067a6120c5565b61059d61068c368790038701876125ac565b61069b36879003870187612776565b8585610ea1565b6106aa6120c5565b6106b26120c5565b6000815261016083013560208201526101808301356060808301919091526101e0840135906106ef906106ea908601604087016123ca565b610f72565b60000b0260e082015261022083013561012082015290505b919050565b670de0b6b3a764000081565b6000808060f884901c601c81111561072c57fe5b92505067ffffffffffffffff83169050915091565b600081601c81111561074f57fe5b92915050565b601281565b6000600382601c81111561076a57fe5b14156107d3576101c0840135156107d35760006107af610793368790038701610360880161275b565b6107a360c0880160a089016123e5565b876101c0013587611036565b9050806107c0575060009050610511565b6107cb600382610913565b915050610511565b5060009392505050565b607881565b601090565b60606107f16120a6565b60006101a08601351561083c5761080e866101a001358686610cd2565b1561083c57610823600f876101a00135610913565b828261ffff166078811061083357fe5b60200201526001015b61084c8661018001358686610cd2565b15156001141561087f576108666014876101800135610913565b828261ffff166078811061087657fe5b60200201526001015b60608161ffff1667ffffffffffffffff8111801561089c57600080fd5b506040519080825280602002602001820160405280156108c6578160200160208202803683370190505b50905060005b8261ffff16811015610908578381607881106108e457fe5b60200201518282815181106108f557fe5b60209081029190910101526001016108cc565b509695505050505050565b60008160f884601c81111561092457fe5b60ff16901b179392505050565b600081851415610942575083610440565b600184600881111561095057fe5b14806109675750600384600881111561096557fe5b145b15610976576106438584611091565b600284600881111561098457fe5b148061099b5750600484600881111561099957fe5b145b156109df5760006109ac8685611091565b90506109b7866110ed565b6109c0826110ed565b14156109cd579050610440565b6109d78685611104565b915050610440565b60058460088111156109ed57fe5b1480610a0457506007846008811115610a0257fe5b145b15610a13576106438584611104565b6006846008811115610a2157fe5b1480610a3857506008846008811115610a3657fe5b145b15610a74576000610a498685611104565b9050610a54866110ed565b610a5d826110ed565b1415610a6a579050610440565b6109d78685611091565b50929392505050565b60006003846008811115610a8d57fe5b1480610aa457506004846008811115610aa257fe5b145b80610aba57506007846008811115610ab857fe5b145b80610ad057506008846008811115610ace57fe5b145b15610adc575083610440565b61059d85858585610931565b610af06120a6565b610af86120a6565b6060870151600090610b6057610b0f8a8686610cd2565b15610b2a5789828260788110610b2157fe5b60200201526001015b610b35898686610cd2565b15610b585760018615151415610b585788828260788110610b5257fe5b60200201525b509050610cc7565b89600080610b6f8a848d610448565b90505b8b831015610c0457610b85838989610cd2565b15610bc35760768410610baa5760405162461bcd60e51b81526004016105089061297b565b82858560788110610bb757fe5b60200201526001909301925b600191820191816001811115610bd557fe5b14610bea57610be58b8e84611152565b610bfd565b610bfd610bf88c8f85611152565b611283565b9250610b72565b60018915151415610c3257610c1a8c8989610cd2565b15610c32578b858560788110610c2c57fe5b60200201525b600084118015610c4f5750610c4f85600186036078811061036357fe5b15610cbf5760008b604001516001811115610c6657fe5b148015610c735750600184115b8015610c7f5750828c14155b15610cbf57848460788110610c9057fe5b6020020151856001860360788110610ca457fe5b6020020152848460788110610cb557fe5b6020020160008152505b509293505050505b979650505050505050565b600081831115610ce457506000610511565b838311158015610cf45750818411155b156107d357506001610511565b60008080610d1462015180855b046112b2565b50915091506104408282611348565b60006104406201518083610d0e565b6000806000610d4085610718565b9092509050600b82601c811115610d5357fe5b1415610d6457600092505050610440565b600382601c811115610d7257fe5b1415610d8d57610d84878783876113ce565b92505050610440565b601a82601c811115610d9b57fe5b1415610dac57600092505050610440565b601b82601c811115610dba57fe5b1415610dcc57610d8487878387611487565b601482601c811115610dda57fe5b1415610deb57600092505050610440565b60405162461bcd60e51b815260040161050890612bd1565b6000821580610e10575081155b15610e1d5750600061074f565b82600019148015610e315750600160ff1b82145b15610e4e5760405162461bcd60e51b815260040161050890612b8a565b82820282848281610e5b57fe5b0514610e795760405162461bcd60e51b815260040161050890612b8a565b670de0b6b3a76400008105806104405760405162461bcd60e51b815260040161050890612aa3565b610ea96120c5565b600080610eb585610718565b9092509050600382601c811115610ec857fe5b1415610eda57610d848787838761149c565b601a82601c811115610ee857fe5b1415610efa57610d84878783876114b8565b601b82601c811115610f0857fe5b1415610f1a57610d848787838761157d565b601482601c811115610f2857fe5b1415610f3a57610d84878783876115b4565b600b82601c811115610f4857fe5b1415610f5a57610d84878783876115cb565b60405162461bcd60e51b815260040161050890612ef0565b60008082600c811115610f8157fe5b1415610f8f57506001610707565b600182600c811115610f9d57fe5b1415610fac5750600019610707565b600682600c811115610fba57fe5b1415610fc857506001610707565b600782600c811115610fd657fe5b1415610fe55750600019610707565b600282600c811115610ff357fe5b141561100157506001610707565b600382600c81111561100f57fe5b141561101e5750600019610707565b60405162461bcd60e51b815260040161050890612b36565b60608401516000901580611048575081155b15611054575081610440565b6001611061858588610448565b600181111561106c57fe5b146110825761107d85836001611152565b61059d565b61059d610bf886846001611152565b600060018260018111156110a157fe5b14156110e6576110b0836116b6565b600614156110ca576110c38360026116c9565b905061074f565b6110d3836116b6565b600714156110e6576110c38360016116c9565b5090919050565b60006110fc6201518083610d0e565b509392505050565b6000600182600181111561111457fe5b14156110e657611123836116b6565b60061415611136576110c38360016116de565b61113f836116b6565b600714156110e6576110c38360026116de565b600080808560200151600581111561116657fe5b1415611181578451610643908590850263ffffffff6116c916565b60018560200151600581111561119357fe5b14156111b1578451610643908590850260070263ffffffff6116c916565b6002856020015160058111156111c357fe5b14156111de578451610643908590850263ffffffff6116f316565b6003856020015160058111156111f057fe5b141561120e578451610643908590850260030263ffffffff6116f316565b60048560200151600581111561122057fe5b141561123e578451610643908590850260060263ffffffff6116f316565b60058560200151600581111561125057fe5b141561126b578451610643908590850263ffffffff61176d16565b60405162461bcd60e51b8152600401610508906129c9565b60008060008061129285611794565b9194509250905060006112a58484611348565b90506105338484836117b2565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161130957fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806113595750816003145b806113645750816005145b8061136f5750816007145b8061137a5750816008145b80611385575081600a145b80611390575081600c145b1561139d5750601f61074f565b816002146113ad5750601e61074f565b6113b6836117cc565b6113c157601c6113c4565b601d5b60ff169392505050565b6000808560c0015160018111156113e157fe5b1415611405578461024001516113fa8660400151610f72565b60000b029050610440565b60006114506114278660200151886080015189602001518a6101800151610a7d565b6114408689608001518a602001518b6101800151610a7d565b88606001518961018001516117f1565b90506105336114758660e0015161063789610240015185610e0390919063ffffffff16565b6101208701519063ffffffff6118ee16565b6101208301516101c084015101949350505050565b6114a46120c5565b505060006101208301526020820152919050565b6114c06120c5565b60006114e26114278660200151886080015189602001518a6101800151610a7d565b60208601859052610280870151909150611502908463ffffffff610e0316565b6101c08601526080850184905260008660c00151600181111561152157fe5b14156115495785610240015161153a8760400151610f72565b60000b02610120860152611573565b61156c6114758660e0015161063789610240015185610e0390919063ffffffff16565b6101208601525b5092949350505050565b6115856120c5565b600060e085018190526101208501528360045b908160058111156115a557fe5b90525050506020820152919050565b6115bc6120c5565b600060e0850152836004611598565b6115d36120c5565b600084604001516000146115eb578460400151611604565b6116048487608001518860200151896101800151610931565b6102a08701516040015190915083906000901561163f57600061162c896102a0015185611934565b905080831161163d57600180895291505b505b876102c00151604001518015611653575080155b15611682576000611669896102c0015185611934565b905080831161167b5760028852611680565b600388525b505b60408701516116aa576116a48689608001518a602001518b6101800151610931565b60408801525b50949695505050505050565b6007620151809091046003010660010190565b62015180810282018281101561074f57600080fd5b62015180810282038281111561074f57600080fd5b60008080806117056201518087610d0e565b600c91880160001981018381049490940196509450925090066001019150600061172f8484611348565b90508082111561173d578091505b62015180870662015180611752868686611a60565b020194508685101561176357600080fd5b5050505092915050565b600080808061177f6201518087610d0e565b918701945092509050600061172f8484611348565b600080806117a56201518085610d0e565b9196909550909350915050565b6000620151806117c3858585611a60565b02949350505050565b6000600482061580156117e157506064820615155b8061074f57505061019090061590565b6000848410156118135760405162461bcd60e51b815260040161050890612ccc565b600083600581111561182157fe5b1415611831576106438585611adc565b600183600581111561183f57fe5b141561184f576106438585611bfc565b600283600581111561185d57fe5b141561186d576106438585611c27565b600483600581111561187b57fe5b141561188b576106438585611c46565b600383600581111561189957fe5b14156118aa57610643858584611d07565b60058360058111156118b857fe5b14156118d65760405162461bcd60e51b815260040161050890612c1e565b60405162461bcd60e51b815260040161050890612a17565b60008282018183128015906119035750838112155b80611918575060008312801561191857508381125b6105115760405162461bcd60e51b815260040161050890612af5565b600080808460200151600581111561194857fe5b141561196857835161196190849063ffffffff6116c916565b9050610511565b60018460200151600581111561197a57fe5b141561199657835161196190849060070263ffffffff6116c916565b6002846020015160058111156119a857fe5b14156119c157835161196190849063ffffffff6116f316565b6003846020015160058111156119d357fe5b14156119ef57835161196190849060030263ffffffff6116f316565b600484602001516005811115611a0157fe5b1415611a1d57835161196190849060060263ffffffff6116f316565b600584602001516005811115611a2f57fe5b1415611a4857835161196190849063ffffffff61176d16565b60405162461bcd60e51b815260040161050890612da0565b60006107b2841015611a7157600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f0281611aad57fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b600080611ae884611ddd565b90506000611af584611ddd565b90506000611b0286611df5565b611b0e5761016d611b12565b61016e5b61ffff16905081831415611b4457611b3a81611b2e8888611e12565b9063ffffffff611e2d16565b935050505061074f565b6000611b4f86611df5565b611b5b5761016d611b5f565b61016e5b61ffff1690506000611b9083611b2e8a611b8b611b838a600163ffffffff611ee916565b6001806117b2565b611e12565b90506000611bad83611b2e611ba7886001806117b2565b8b611e12565b9050611bef611bd36001611bc7888a63ffffffff611f0e16565b9063ffffffff611f0e16565b611be3848463ffffffff6118ee16565b9063ffffffff6118ee16565b9998505050505050505050565b6000610511610168611b2e62015180611c1b868863ffffffff611f0e16565b9063ffffffff611f5016565b600061051161016d611b2e62015180611c1b868863ffffffff611f0e16565b6000806000806000806000611c5a89611794565b975095509350611c6988611794565b945092509050601f861415611c7d57601e95505b82601f1415611c8b57601e92505b6000611c9d848863ffffffff611f9216565b90506000611cb1848863ffffffff611f9216565b90506000611cc5848863ffffffff611f9216565b9050611cf7610168611b2e85611be3611ce587601e63ffffffff611fd816565b611be38761016863ffffffff611fd816565b9c9b505050505050505050505050565b6000806000806000806000611d1b8a611794565b975095509350611d2a89611794565b945092509050611d398a610d01565b861415611d4557601e95505b8789148015611d545750816002145b158015611d685750611d6589610d01565b83145b15611d7257601e92505b6000611d84848863ffffffff611f9216565b90506000611d98848863ffffffff611f9216565b90506000611dac848863ffffffff611f9216565b9050611dcc610168611b2e85611be3611ce587601e63ffffffff611fd816565b9d9c50505050505050505050505050565b6000611dec6201518083610d0e565b50909392505050565b600080611e056201518084610d0e565b50509050610511816117cc565b600081831115611e2157600080fd5b50620151809190030490565b600081611e4c5760405162461bcd60e51b815260040161050890612eac565b82611e595750600061074f565b670de0b6b3a764000083810290848281611e6f57fe5b0514611e8d5760405162461bcd60e51b815260040161050890612d5a565b82600019148015611ea15750600160ff1b84145b15611ebe5760405162461bcd60e51b815260040161050890612d5a565b6000838281611ec957fe5b059050806104405760405162461bcd60e51b815260040161050890612c7b565b6000828201838110156105115760405162461bcd60e51b815260040161050890612a6c565b600061051183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612043565b600061051183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061206f565b6000818303818312801590611fa75750838113155b80611fbc5750600083128015611fbc57508381135b6105115760405162461bcd60e51b815260040161050890612e68565b600082611fe75750600061074f565b82600019148015611ffb5750600160ff1b82145b156120185760405162461bcd60e51b815260040161050890612d13565b8282028284828161202557fe5b05146105115760405162461bcd60e51b815260040161050890612d13565b600081848411156120675760405162461bcd60e51b81526004016105089190612928565b505050900390565b600081836120905760405162461bcd60e51b81526004016105089190612928565b50600083858161209c57fe5b0495945050505050565b60405180610f0001604052806078906020820280368337509192915050565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80356001600160a01b038116811461074f57600080fd5b80356009811061074f57600080fd5b803561074f81613063565b803561074f81613070565b8035600d811061074f57600080fd5b80356013811061074f57600080fd5b8035601d811061074f57600080fd5b60006104e082840312156121da578081fd5b50919050565b6000608082840312156121f1578081fd5b6121fb608061302b565b9050813581526020820135602082015260408201356122198161307d565b6040820152606082013561222c8161307d565b606082015292915050565b600060808284031215612248578081fd5b612252608061302b565b905081358152602082013561226681613070565b6020820152604082013561227981613063565b6040820152606082013561222c81613052565b60006060828403121561229d578081fd5b6122a7606061302b565b90508135815260208201356122bb81613070565b602082015260408201356122ce81613052565b604082015292915050565b600061028082840312156121da578081fd5b6000602082840312156122fc578081fd5b610511838361215f565b600060208284031215612317578081fd5b5035919050565b60008060008060808587031215612333578283fd5b843593506123448660208701612176565b9250604085013561235481613063565b9396929550929360600135925050565b6000806000806000610a20868803121561237c578283fd5b8535945061238d87602088016121c8565b935061239d8761050088016122d9565b92506107808601356123ae81613052565b91506123be876107a088016122d9565b90509295509295909350565b6000602082840312156123db578081fd5b610511838361219b565b6000602082840312156123f6578081fd5b813561051181613063565b600080600060c08486031215612415578081fd5b833561242081613063565b9250602084013591506124368560408601612237565b90509250925092565b600060208284031215612450578081fd5b61051183836121b9565b6000806040838503121561246c578182fd5b82356124778161308a565b946020939093013593505050565b60006104e08284031215612497578081fd5b61051183836121c8565b6000806000806107a085870312156124b7578182fd5b6124c186866121c8565b93506124d1866104e087016122d9565b939693955050505061076082013591610780013590565b600080600061052084860312156124fd578081fd5b61250785856121c8565b92506104e084013591506105008401356125208161308a565b809150509250925092565b60008060006105208486031215612540578081fd5b61254a85856121c8565b956104e08501359550610500909401359392505050565b6000806000806105408587031215612577578182fd5b61258186866121c8565b93506104e0850135925061050085013591506125a18661052087016121b9565b905092959194509250565b60006104e082840312156125be578081fd5b6125c961034061302b565b6125d384846121aa565b81526125e28460208501612185565b60208201526125f4846040850161219b565b60408201526126068460608501612190565b60608201526126188460808501612176565b608082015261262a8460a08501612185565b60a082015261263c8460c08501612185565b60c082015261264e8460e08501612190565b60e08201526101006126628582860161215f565b908201526101206126758585830161215f565b908201526101408381013590820152610160808401359082015261018080840135908201526101a080840135908201526101c080840135908201526101e08084013590820152610200808401359082015261022080840135908201526102408084013590820152610260808401359082015261028080840135908201526102a06127018582860161228c565b908201526103006127148585830161228c565b6102c0830152612728856103608601612237565b6102e083015261273c856103e086016121e0565b9082015261274e8461046085016121e0565b6103208201529392505050565b60006080828403121561276c578081fd5b6105118383612237565b6000610280808385031215612789578182fd5b6127928161302b565b61279c8585612190565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b60008060008060808587031215612333578182fd5b6006811061289257fe5b9052565b6020808252825182820181905260009190848201906040850190845b818110156128ce578351835292840192918401916001016128b2565b50909695505050505050565b901515815260200190565b90815260200190565b60208101601383106128fc57fe5b91905290565b60208101600283106128fc57fe5b60408101601d841061291e57fe5b9281526020015290565b6000602080835283518082850152825b8181101561295457858101830151858201604001528201612938565b818111156129655783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602e908201527f5363686564756c652e636f6d70757465446174657346726f6d4379636c653a2060408201526d4d41585f4359434c455f53495a4560901b606082015260800190565b6020808252602e908201527f5363686564756c652e6765744e6578744379636c65446174653a20415454524960408201526d1095551157d393d517d193d5539160921b606082015260800190565b60208082526035908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a6040820152741020aa2a2924a12aaa22afa727aa2fa327aaa7221760591b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526032908201527f5369676e65644d6174682e666c6f61744d756c743a2043414e4e4f545f524550604082015271524553454e545f4752414e554c415249545960701b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526034908201527f436f6e7472616374526f6c65436f6e76656e74696f6e2e726f6c655369676e3a6040820152730810551514925095551157d393d517d193d5539160621b606082015260800190565b60208082526027908201527f5369676e65644d6174682e666c6f61744d756c743a204f564552464c4f575f4460408201526611551150d5115160ca1b606082015260800190565b6020808252602d908201527f434547456e67696e652e7061796f666646756e6374696f6e3a2041545452494260408201526c15551157d393d517d193d55391609a1b606082015260800190565b60208082526039908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a60408201527f204154545249425554455f4e4f545f535550504f525445442e00000000000000606082015260800190565b60208082526031908201527f5369676e65644d6174682e666c6f61744469763a2043414e4e4f545f524550526040820152704553454e545f4752414e554c415249545960781b606082015260800190565b60208082526027908201527f436f72652e796561724672616374696f6e3a2053544152545f4e4f545f42454660408201526613d49157d1539160ca1b606082015260800190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526026908201527f5369676e65644d6174682e666c6f61744469763a204f564552464c4f575f4445604082015265151150d5115160d21b606082015260800190565b60208082526037908201527f506572696f645574696c732e67657454696d657374616d70506c75735065726960408201527f6f643a204154545249425554455f4e4f545f464f554e44000000000000000000606082015260800190565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b60208082526024908201527f5369676e65644d6174682e666c6f61744469763a20444956494445445f42595f6040820152635a45524f60e01b606082015260800190565b60208082526036908201527f434547456e67696e652e73746174655472616e736974696f6e46756e6374696f6040820152751b8e8810551514925095551157d393d517d193d5539160521b606082015260800190565b600061028082019050612f5a828451612888565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60405181810167ffffffffffffffff8111828210171561304a57600080fd5b604052919050565b801515811461306057600080fd5b50565b6002811061306057600080fd5b6006811061306057600080fd5b6005811061306057600080fd5b601d811061306057600080fdfea2646970667358221220d6fe6225c0c30e3717b01dc938633b912190cca5f3b871a6b3ac04cb1ec8a44364736f6c634300060b0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
