{
  "contractName": "CERTFActor",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IAssetRegistry",
          "name": "assetRegistry",
          "type": "address"
        },
        {
          "internalType": "contract IDataRegistry",
          "name": "dataRegistry",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "enum ContractType",
          "name": "contractType",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "creator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "counterparty",
          "type": "address"
        }
      ],
      "name": "InitializedAsset",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "scheduleTime",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "payoff",
          "type": "int256"
        }
      ],
      "name": "ProgressedAsset",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "statusMessage",
          "type": "bytes32"
        }
      ],
      "name": "Status",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "assetRegistry",
      "outputs": [
        {
          "internalType": "contract IAssetRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "dataRegistry",
      "outputs": [
        {
          "internalType": "contract IDataRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "object",
          "type": "bytes32"
        }
      ],
      "name": "decodeCollateralObject",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        }
      ],
      "name": "decodeEvent",
      "outputs": [
        {
          "internalType": "enum EventType",
          "name": "",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "collateralToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "collateralAmount",
          "type": "uint256"
        }
      ],
      "name": "encodeCollateralAsObject",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "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": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "progress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        }
      ],
      "name": "progressWith",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "internalType": "enum BusinessDayConvention",
          "name": "convention",
          "type": "uint8"
        },
        {
          "internalType": "enum Calendar",
          "name": "calendar",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "maturityDate",
          "type": "uint256"
        }
      ],
      "name": "shiftCalcTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "internalType": "enum BusinessDayConvention",
          "name": "convention",
          "type": "uint8"
        },
        {
          "internalType": "enum Calendar",
          "name": "calendar",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "maturityDate",
          "type": "uint256"
        }
      ],
      "name": "shiftEventTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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 CouponType",
              "name": "couponType",
              "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": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "issueDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRedemption",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfTermination",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfCoupon",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "nominalPrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "issuePrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "denominationRatio",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponRate",
              "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": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "settlementPeriod",
              "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": "fixingPeriod",
              "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": "exercisePeriod",
              "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": "cycleOfRedemption",
              "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": "cycleOfTermination",
              "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": "cycleOfCoupon",
              "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 CERTFTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "internalType": "bytes32[]",
          "name": "schedule",
          "type": "bytes32[]"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "creatorObligor",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "creatorBeneficiary",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "counterpartyObligor",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "counterpartyBeneficiary",
              "type": "address"
            }
          ],
          "internalType": "struct AssetOwnership",
          "name": "ownership",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "admin",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.11+commit.5ef660b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IAssetRegistry\",\"name\":\"assetRegistry\",\"type\":\"address\"},{\"internalType\":\"contract IDataRegistry\",\"name\":\"dataRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assetId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"counterparty\",\"type\":\"address\"}],\"name\":\"InitializedAsset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assetId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enum EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"scheduleTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"payoff\",\"type\":\"int256\"}],\"name\":\"ProgressedAsset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"assetId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"statusMessage\",\"type\":\"bytes32\"}],\"name\":\"Status\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"assetRegistry\",\"outputs\":[{\"internalType\":\"contract IAssetRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"dataRegistry\",\"outputs\":[{\"internalType\":\"contract IDataRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"}],\"name\":\"decodeCollateralObject\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_event\",\"type\":\"bytes32\"}],\"name\":\"decodeEvent\",\"outputs\":[{\"internalType\":\"enum EventType\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collateralToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"collateralAmount\",\"type\":\"uint256\"}],\"name\":\"encodeCollateralAsObject\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":[{\"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 CouponType\",\"name\":\"couponType\",\"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\":\"initialExchangeDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"issueDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cycleAnchorDateOfRedemption\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cycleAnchorDateOfTermination\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cycleAnchorDateOfCoupon\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"nominalPrice\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"issuePrice\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"quantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"denominationRatio\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"couponRate\",\"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\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IP\",\"name\":\"settlementPeriod\",\"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\":\"fixingPeriod\",\"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\":\"exercisePeriod\",\"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\":\"cycleOfRedemption\",\"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\":\"cycleOfTermination\",\"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\":\"cycleOfCoupon\",\"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 CERTFTerms\",\"name\":\"terms\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"schedule\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"creatorObligor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"creatorBeneficiary\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"counterpartyObligor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"counterpartyBeneficiary\",\"type\":\"address\"}],\"internalType\":\"struct AssetOwnership\",\"name\":\"ownership\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"engine\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assetId\",\"type\":\"bytes32\"}],\"name\":\"progress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"assetId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_event\",\"type\":\"bytes32\"}],\"name\":\"progressWith\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"convention\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"}],\"name\":\"shiftCalcTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"convention\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"}],\"name\":\"shiftEventTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"initialize((uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(uint256,uint8,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),bytes32[],(address,address,address,address),address,address)\":{\"params\":{\"admin\":\"address of the admin of the asset (optional)\",\"engine\":\"address of the ACTUS engine used for the spec. ContractType\",\"ownership\":\"ownership of the asset\",\"schedule\":\"schedule of the asset\",\"terms\":\"asset specific terms\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"progress(bytes32)\":{\"details\":\"Emits ProgressedAsset if the state of the asset was updated.\",\"params\":{\"assetId\":\"id of the asset\"}},\"progressWith(bytes32,bytes32)\":{\"details\":\"Emits ProgressedAsset if the state of the asset was updated.\",\"params\":{\"_event\":\"the unscheduled event\",\"assetId\":\"id of the asset\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"CERTFActor\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getEpochOffset(uint8)\":{\"notice\":\"Returns the epoch offset for a given event type to determine the correct order of events if multiple events have the same timestamp\"},\"initialize((uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(uint256,uint8,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),bytes32[],(address,address,address,address),address,address)\":{\"notice\":\"Derives initial state of the asset terms and stores together with terms, schedule, ownership, engine, admin of the asset in the contract types specific AssetRegistry.\"},\"progress(bytes32)\":{\"notice\":\"Proceeds with the next state of the asset based on the terms, the last state, market object data and the settlement status of current obligation, derived from either a prev. pending event, an event generated based on the current state of an underlying asset or the assets schedule.\"},\"progressWith(bytes32,bytes32)\":{\"notice\":\"Proceeds with the next state of the asset based on the terms, the last state, market object data and the settlement status of current obligation, derived from a provided (unscheduled) event Reverts if the provided event violates the order of events.\"},\"shiftCalcTime(uint256,uint8,uint8,uint256)\":{\"notice\":\"Used in POFs and STFs for DCFs. No shifting is applied if a Calc/Shift instead of Shift/Calc BDC is provided.\"}},\"notice\":\"TODO\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/CERTF/CERTFActor.sol\":\"CERTFActor\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/AssetActor/BaseActor.sol\":{\"keccak256\":\"0x92a8ff9c2c11b86fec0bc0ca7969bdf7860bbc5c4724522f9c55f06dc82d1c56\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://636bf06c13797d2217fa00ac597d8f22772645300e62b88cbefa341055bc33a0\",\"dweb:/ipfs/QmfNTGqmdXWQb1uZBggzURfDR5fzMSGGJqEk8PEq5JCSQ7\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/AssetActor/IAssetActor.sol\":{\"keccak256\":\"0xe7607bac7335711a3aec25570695955cec318f24285291e1fda899389680ff92\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b26cc5b3081d8187958b3fc9b06aa6dfa46b5bea39f2c74f918a1e80263e4fc1\",\"dweb:/ipfs/QmSVLpWnLAjCMoThwi88ACGC8FnUMhiaw1zmnuDBGycTJH\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/AssetRegistry/AccessControl/IAccessControl.sol\":{\"keccak256\":\"0xbbe1aada0583637e5ae8b0a09ae59d629c1da70bde5a3f291f5f0ed42440d091\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36ab01d00a9ebd59822247cdc7bee3c70af062e2c9408e8f80e1656fc9d2761c\",\"dweb:/ipfs/QmSQzma4M2TDZup2dERJi368F8z9UQQ1zyUsq8e41hgg2F\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/AssetRegistry/IAssetRegistry.sol\":{\"keccak256\":\"0xe5b75a0d1ff75775c43bdd46fb55d0f28800b311a48f7064acda7d35036bf738\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://652d2218a7190f85e00372a5ade97895fc303b909f3b63398dbcfabf634adda9\",\"dweb:/ipfs/QmVV4Su9V2K4mYbquft5rqv7SSyR95RcHgU4E2iAceKW1j\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/AssetRegistry/IBaseRegistry.sol\":{\"keccak256\":\"0x62682585e8feaa25478d9aebe2f43861e36d67604adfd2dc23da8260a2f5728f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2ecdf3ac27c4425fee720cb2a744304678cac563d89cb21e43f8302a4864f013\",\"dweb:/ipfs/QmSL8qM6bytA7eN1cuBbBy3B5rNvmyALGExeGXUApTeA5N\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/AssetRegistry/Ownership/IOwnershipRegistry.sol\":{\"keccak256\":\"0x6e7d79031d9ab6d8366e767e96bbef6282cd9727956b0f6a70b70ba57799afc7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2d2e1e72ffc43ce52bb06eb5c5fa61d9dc14d40c33ac3035e5d881e0365aa722\",\"dweb:/ipfs/QmaQ1SqtsZtPHjtdSbGTwSJvRPu36d7S4ijyfUMYcto5uJ\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/AssetRegistry/Schedule/IScheduleRegistry.sol\":{\"keccak256\":\"0xe7e24ae32f711c7b4b60d1160cb085b4ba047ff07ccea2df3b4bf120c2385ed6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ea4f8bbb0a60f0b9484307c3ce880005e1d4e39c42fd07ca16dc263001584cdb\",\"dweb:/ipfs/Qmdo1tuJ93asEMGq74g38vxfRMmoxXogZZczHjuef2Mx8R\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/AssetRegistry/State/IStateRegistry.sol\":{\"keccak256\":\"0x1008f735ba366f9a638199d8ec4fa31b192c8745491527278d97717426d6d609\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://decc19c372fbefee7c369678114861def1c748748154966e2ee5e11e690b9039\",\"dweb:/ipfs/QmXjZhoNak7uUmYZMj7sAdijzsqLpDoh6T2bYcRDVgX6z6\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/AssetRegistry/Terms/ITermsRegistry.sol\":{\"keccak256\":\"0x62947ddd2743f2852e53dc10c9ce4a326e764e0bbffd92df216fcb32a0b0e3cd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0b90268d7fb6e7d133b5e9d008be62fe55d19930088ac547b15d31dcb8ab9ecd\",\"dweb:/ipfs/QmZGE66r4ML3msBMCtDbhsdVN3RxmDvnCMDkTn9mMfouqN\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/Conversions.sol\":{\"keccak256\":\"0x4482adab804008a2774b11036cc9ff6f42aa7f248d6b8ca922082bf090a736e5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e774c979286649c16d92eb4672c30c06fcbe7ddc053eee70088c4b28fc27e48c\",\"dweb:/ipfs/QmXqfezUnKVaKzA7Qs9BFC9yRKFTMwwxa778ofikE2hC1H\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/DataRegistry/DataRegistryStorage.sol\":{\"keccak256\":\"0xb33c89925a9e7c267d96d1461fce5839c6cef7f0365bf62a507a839b9cd925e7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://7ea1957775722da928f53d4263162ebb94ffb5148d6e75dd815a2906a62e1e46\",\"dweb:/ipfs/QmXTRFKAC24PR9pqfHW2W73jsHaFqXdjjahqPJjKpZSLRk\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/DataRegistry/IDataRegistry.sol\":{\"keccak256\":\"0x303e7925666252d8394929acfd8d32013b2225b202bb2fb873a4b9a257d324db\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://982d93073ffd66715b02953f989744ac3acc9556c9b41cf522914ec0e552b7b0\",\"dweb:/ipfs/QmdNoYVj3yQfkWGXNcueKmQgDs6kVyPvNzGduJvQscxAoR\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/SharedTypes.sol\":{\"keccak256\":\"0x5a918fdefe9bd357255bffcf75d325f0d23ccf7074533f8d6a80a62bfd60893e\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://5c5fc68f47deab5b0cc572a8a1f7dba997e5a8bb13292ce3e4ee29540a3b1fd7\",\"dweb:/ipfs/QmeqcqcDYsgvbBH8XrHzURMuz9jQLEf4F2i5M59wYMCxgt\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/CERTF/CERTFActor.sol\":{\"keccak256\":\"0x7da211e45bc6bd1c27606db6d5c37c8f7404f95ebfbfd9f9ab0de00c254754c0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://31aefa4374b204a8eb2b5f0e04233f45f0197cf99d0f48382dc33cab2377e886\",\"dweb:/ipfs/QmS1RFWhYdq6sfEtKShByQZ87pzn8WYLjdF5YbQZiFxva3\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/CERTF/ICERTFRegistry.sol\":{\"keccak256\":\"0xa2a41ce8910361eb88630549204d7ab8b910ddcb753967278b20214f45ba14ce\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4aa3d3a64d2824d651ea304abc179f943aababef4fa6ee7e9c305091a0a78e25\",\"dweb:/ipfs/QmVpgLVzbtbUifdFUmSutjXaP1cv9jYRuMDmvxfxEzkquR\"]},\"@atpar/actus-solidity/contracts/Core/ACTUSConstants.sol\":{\"keccak256\":\"0xd7588866afdab6298dd5b64c5fe0ca63230236538d711932e7a5a17928d1226b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2a0678d5f895239119f463a3ae8a58c5c27b872c91db1cd4253ce5866481c6cd\",\"dweb:/ipfs/QmPXsMXFf1Qar8JCnKTL6Nizf63sZEQQt7XosrdeEnG2CE\"]},\"@atpar/actus-solidity/contracts/Core/ACTUSTypes.sol\":{\"keccak256\":\"0x4374a4c79ef02bb008994431870badedd532d09639fef8d7378039faee88d4dd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c0d32929c237f8d04ff4117611292f874bb1dd785b8ec94c04389d608c11481c\",\"dweb:/ipfs/QmVu3awVGWDvqMCjPhmzcCQCRg4VNr5XxcDRWDECTr17TV\"]},\"@atpar/actus-solidity/contracts/Core/Conventions/BusinessDayConventions.sol\":{\"keccak256\":\"0xb67309595d06a957324467896ed9ece5db6c064a40733528d2405593d083f358\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a77e96b548901c4ee87943de5a7093d178bffe1daa72b6e303ddc1fac93f5173\",\"dweb:/ipfs/QmctKP5Hp7B4YtzzC5q3cRJJiiPS4a5US6vpHDb94paaFT\"]},\"@atpar/actus-solidity/contracts/Core/SignedMath.sol\":{\"keccak256\":\"0x179745be164f4540d848a50eeb8aea4ec3a0ddabc50f4c122c41ec0463e849c7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e1088b178902de60c611c2dffd2c8943cc7b68988c9083936b760864775db7da\",\"dweb:/ipfs/QmV9XYTU6a8nPzoJv9FjRV4Z2rfbymGGARmzka57ydD1FG\"]},\"@atpar/actus-solidity/contracts/Core/Utils/EventUtils.sol\":{\"keccak256\":\"0x9995f89d4c5981ed389e941f578414eb901a4fde0b2eb5d815a43d86a9f53d98\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bc3b3a4f33554f80e19328158ff913d700ff8133d08f434b33a846852cb927dd\",\"dweb:/ipfs/QmawYPv9PguBqrFN5YquvUvbYC2MdtTC4Zkyj3uGxiieHW\"]},\"@atpar/actus-solidity/contracts/Engines/CERTF/ICERTFEngine.sol\":{\"keccak256\":\"0xcfa69bbf1c8ebbef45acfd677b6fdc66260fb53655d4dd4bea42715cc1311e38\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://404149e103a2a872f174802bf3d54beaf29b17a2728edf5d03484bf9ad9f8060\",\"dweb:/ipfs/QmTCa6rDNhkZwvMXp6TdRJJbNrWcVrDPoXvJ6dnXEAoTUB\"]},\"@atpar/actus-solidity/contracts/Engines/IEngine.sol\":{\"keccak256\":\"0xdee7e7d2f233c108231be14130dc2dbcf8eb0374636034f75c330a4cd3e1c7cc\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0fe8e1c0c4d447b4b180f53574016ff852af90faa1230be5b4c81464b9b5ffc8\",\"dweb:/ipfs/QmctLgYPvacjTzNS7iJBDkXjEzdbD4GDkVnZE9FJa26oX4\"]},\"@atpar/actus-solidity/contracts/external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol\":{\"keccak256\":\"0x679533db9ba3257086015c0435c7d0de7a0a2f352a9de725db294e3f42c17391\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c586a5d8d9a654840c3655ccd4e47458d1e781c7542ec6fd2c29638b0dee57d\",\"dweb:/ipfs/QmeoQpnTMU4pa4iwKJcKmbNm7P54UCxux2G9rJyTCyq8GZ\"]},\"openzeppelin-solidity/contracts/GSN/Context.sol\":{\"keccak256\":\"0xc6fb4c940628ca2cde81ed6d20fc9ff456b60f55aafef555f43a86a2dda7ad9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f17dda58954a84ffca3d53c0b6435bad7f5c42ab3a9c4603db2f1aef00edae4e\",\"dweb:/ipfs/QmehW99QmmzKvnqTsprsApDF7mK2JVo6nnrZ47znhLTFjh\"]},\"openzeppelin-solidity/contracts/access/Ownable.sol\":{\"keccak256\":\"0x4bd6402ca6b3419008c2b482aff54e66836e8cb4eba2680e42ac5884ae6424fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8f9f711fb8d0d92aeea1c327e3845d13ca1fa8f142e47f8723cd5b3106fb29a3\",\"dweb:/ipfs/QmVQUReDW9f4zGqhizwHnyU8EntMs95tbASdqkGncnikba\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x5c26b39d26f7ed489e555d955dcd3e01872972e71fdd1528e93ec164e4f23385\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://efdc632af6960cf865dbc113665ea1f5b90eab75cc40ec062b2f6ae6da582017\",\"dweb:/ipfs/QmfAZFDuG62vxmAN9DnXApv7e7PMzPqi4RkqqZHLMSQiY5\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620040f0380380620040f08339810160408190526200003491620000ce565b818160006200004b6001600160e01b03620000ca16565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039384166001600160a01b0319918216179091556002805492909316911617905550620001259050565b3390565b60008060408385031215620000e1578182fd5b8251620000ee816200010c565b602084015190925062000101816200010c565b809150509250929050565b6001600160a01b03811681146200012257600080fd5b50565b613fbb80620001356000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063e05a66e011610066578063e05a66e0146101e0578063e726d680146101f3578063f2fde38b14610206578063f5586e0514610219576100f5565b80638da5cb5b146101a8578063979d7e86146101bd578063a39c1d6b146101c5578063c7405c8d146101cd576100f5565b8063715018a6116100d3578063715018a61461015957806372540003146101615780637aebd2a814610182578063811322fb14610195576100f5565b8063645a26bd146100fa5780636778e0e9146101245780636b6ba66414610144575b600080fd5b61010d610108366004612963565b61022c565b60405161011b929190613406565b60405180910390f35b61013761013236600461291c565b610245565b60405161011b919061341f565b610157610152366004612993565b610270565b005b610157610525565b61017461016f366004612963565b6105a4565b60405161011b9291906136ea565b610157610190366004612963565b6105cd565b6101376101a33660046129d0565b61082b565b6101b0610839565b60405161011b91906133b4565b6101b0610848565b6101b0610857565b6101576101db366004612aa0565b610866565b6101376101ee3660046129ec565b610a9f565b610137610201366004612e8d565b610abd565b6101576102143660046128e4565b610c12565b610137610227366004612e8d565b610cc8565b606081901c6bffffffffffffffffffffffff8216915091565b6bffffffffffffffffffffffff19606083901b166bffffffffffffffffffffffff8216175b92915050565b60015460405163747be51f60e11b81526001600160a01b039091169063e8f7ca3e906102a29085903390600401613428565b602060405180830381600087803b1580156102bc57600080fd5b505af11580156102d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f49190612947565b6103195760405162461bcd60e51b8152600401610310906138b7565b60405180910390fd5b60015460405163f52f84e160e01b81526000916001600160a01b03169063f52f84e19061034a90869060040161341f565b60206040518083038186803b15801561036257600080fd5b505afa158015610376573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039a919061297b565b146103b75760405162461bcd60e51b815260040161031090613ac6565b600154604051631d7a1ab960e21b81526000916001600160a01b0316906375e86ae4906103e890869060040161341f565b60206040518083038186803b15801561040057600080fd5b505afa158015610414573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610438919061297b565b146104555760405162461bcd60e51b815260040161031090613869565b60015460405163b828204160e01b81526000916104dc916001600160a01b039091169063b82820419061048c90879060040161341f565b60206040518083038186803b1580156104a457600080fd5b505afa1580156104b8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061016f919061297b565b91505060006104ea836105a4565b9150508115806104f957508181105b6105155760405162461bcd60e51b815260040161031090613724565b61051f8484610d3c565b50505050565b61052d6112d3565b6000546001600160a01b0390811691161461055a5760405162461bcd60e51b8152600401610310906139f8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000808060f884901c601c8111156105b857fe5b92505067ffffffffffffffff83169050915091565b600154604051631392c59160e11b81526001600160a01b03909116906327258b22906105fd90849060040161341f565b60206040518083038186803b15801561061557600080fd5b505afa158015610629573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064d9190612947565b6106695760405162461bcd60e51b815260040161031090613902565b600154604051630316dd6960e21b81526000916001600160a01b031690630c5b75a49061069a90859060040161341f565b602060405180830381600087803b1580156106b457600080fd5b505af11580156106c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ec919061297b565b90508061077657600154604051631d7a1ab960e21b81526001600160a01b03909116906375e86ae49061072390859060040161341f565b60206040518083038186803b15801561073b57600080fd5b505afa15801561074f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610773919061297b565b90505b80610800576001546040516361db73e160e11b81526001600160a01b039091169063c3b6e7c2906107ab90859060040161341f565b602060405180830381600087803b1580156107c557600080fd5b505af11580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd919061297b565b90505b8061081d5760405162461bcd60e51b8152600401610310906137d3565b6108278282610d3c565b5050565b600081601c81111561026a57fe5b6000546001600160a01b031690565b6001546001600160a01b031681565b6002546001600160a01b031681565b6001600160a01b038216158015906108f957506012826001600160a01b031663cb2ef6f76040518163ffffffff1660e01b815260040160206040518083038186803b1580156108b457600080fd5b505afa1580156108c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ec91906129b4565b60128111156108f757fe5b145b6109155760405162461bcd60e51b815260040161031090613b11565b6000864260405160200161092a929190613c12565b60405160208183030381529060405280519060200120905061094a61250a565b60405163bccf8f3160e01b81526001600160a01b0385169063bccf8f3190610976908b90600401613c03565b6102806040518083038186803b15801561098f57600080fd5b505afa1580156109a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c79190612d90565b600154604051634640f6c960e11b81529192506001600160a01b031690638c81ed9290610a089085908c9086908d908d908d908d9030908e906004016135b7565b600060405180830381600087803b158015610a2257600080fd5b505af1158015610a36573d6000803e3d6000fd5b508492507fc5df678b84aa92f5f59981df8c9997b366d886de25771c5f753015c2e14e907a915060109050610a6e60208901896128e4565b610a7e60608a0160408b016128e4565b604051610a8d939291906136be565b60405180910390a25050505050505050565b60008160f884601c811115610ab057fe5b60ff16901b179392505050565b600081851415610ace575083610c0a565b6001846008811115610adc57fe5b1480610af357506003846008811115610af157fe5b145b15610b0957610b0285846112d7565b9050610c0a565b6002846008811115610b1757fe5b1480610b2e57506004846008811115610b2c57fe5b145b15610b72576000610b3f86856112d7565b9050610b4a86611333565b610b5382611333565b1415610b60579050610c0a565b610b6a868561134b565b915050610c0a565b6005846008811115610b8057fe5b1480610b9757506007846008811115610b9557fe5b145b15610ba657610b02858461134b565b6006846008811115610bb457fe5b1480610bcb57506008846008811115610bc957fe5b145b15610c07576000610bdc868561134b565b9050610be786611333565b610bf082611333565b1415610bfd579050610c0a565b610b6a86856112d7565b50835b949350505050565b610c1a6112d3565b6000546001600160a01b03908116911614610c475760405162461bcd60e51b8152600401610310906139f8565b6001600160a01b038116610c6d5760405162461bcd60e51b81526004016103109061376f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006003846008811115610cd857fe5b1480610cef57506004846008811115610ced57fe5b145b80610d0557506007846008811115610d0357fe5b145b80610d1b57506008846008811115610d1957fe5b145b15610d27575083610c0a565b610d3385858585610abd565b95945050505050565b610d4461250a565b6001546040516309648a9d60e01b81526001600160a01b03909116906309648a9d90610d7490869060040161341f565b6102806040518083038186803b158015610d8d57600080fd5b505afa158015610da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc59190612d90565b9050600081516005811115610dd657fe5b1480610dee5750600181516005811115610dec57fe5b145b80610e055750600281516005811115610e0357fe5b145b610e215760405162461bcd60e51b815260040161031090613b6e565b600081516005811115610e3057fe5b14610eb957600154604051631ba316dd60e11b81526001600160a01b03909116906337462dba90610e6590869060040161341f565b6102806040518083038186803b158015610e7e57600080fd5b505afa158015610e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb69190612d90565b90505b600080610ec5846105a4565b60015460405163ecef557760e01b8152929450909250429161106f9184916001600160a01b039091169063ecef557790610f03908b90600401613510565b60206040518083038186803b158015610f1b57600080fd5b505afa158015610f2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f539190612ed4565b60ff166008811115610f6157fe5b60015460405163ecef557760e01b81526001600160a01b039091169063ecef557790610f91908c90600401613578565b60206040518083038186803b158015610fa957600080fd5b505afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190612ed4565b60ff166001811115610fef57fe5b60015460405163135b9f4d60e01b81526001600160a01b039091169063135b9f4d9061101f908d90600401613537565b60206040518083038186803b15801561103757600080fd5b505afa15801561104b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610201919061297b565b111561108d5760405162461bcd60e51b815260040161031090613a73565b61109561250a565b60006110a2878688611399565b9150915060006110b388888461161f565b9050806111b7576000865160058111156110c957fe5b14156111345760015460405163067fe5d760e41b81526001600160a01b03909116906367fe5d7090611101908b908a906004016136a9565b600060405180830381600087803b15801561111b57600080fd5b505af115801561112f573d6000803e3d6000fd5b505050505b60015460405163d981e77360e01b81526001600160a01b039091169063d981e77390611166908b908b9060040161343f565b600060405180830381600087803b15801561118057600080fd5b505af1158015611194573d6000803e3d6000fd5b5050505060006111a5600b86610a9f565b90506111b2898583611399565b509350505b600154604051631f61c37560e21b81526001600160a01b0390911690637d870dd4906111e9908b9087906004016136a9565b600060405180830381600087803b15801561120357600080fd5b505af1158015611217573d6000803e3d6000fd5b505050508015156001141561128d5760015460405163de07a17360e01b81526001600160a01b039091169063de07a1739061125a908b908b90879060040161344d565b600060405180830381600087803b15801561127457600080fd5b505af1158015611288573d6000803e3d6000fd5b505050505b877fd255be8589971f117e0e4377177282fb7cce66e378bfb1b7eafddd05e4f181e96001831515146112c057600b6112c2565b865b8685604051610a8d93929190613702565b3390565b600060018260018111156112e757fe5b141561132c576112f683611a55565b6006141561131057611309836002611a68565b905061026a565b61131983611a55565b6007141561132c57611309836001611a68565b5090919050565b6000611343620151808304611a7d565b509392505050565b6000600182600181111561135b57fe5b141561132c5761136a83611a55565b6006141561137d57611309836001611b13565b61138683611a55565b6007141561132c57611309836002611b13565b6113a161250a565b60015460405163ee43eda160e01b815260009182916001600160a01b039091169063ee43eda1906113d690899060040161341f565b60206040518083038186803b1580156113ee57600080fd5b505afa158015611402573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114269190612900565b90506114306125a4565b6001546040516335f1cded60e11b81526001600160a01b0390911690636be39bda90611460908a9060040161341f565b6107206040518083038186803b15801561147957600080fd5b505afa15801561148d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b19190612b5e565b90506000806114bf876105a4565b915091506000846001600160a01b031663ffcbfc65858b8b6114fa8f896114f58a8d608001518e602001518f6101800151610cc8565b611b28565b6040518563ffffffff1660e01b81526004016115199493929190613c2f565b60206040518083038186803b15801561153157600080fd5b505afa158015611545573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611569919061297b565b9050846001600160a01b031663f5235586858b8b6115a08f8961159b8a8d608001518e602001518f6101800151610cc8565b611d1f565b6040518563ffffffff1660e01b81526004016115bf9493929190613c2f565b6102806040518083038186803b1580156115d857600080fd5b505afa1580156115ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116109190612d90565b9a909950975050505050505050565b6000831580159061162f57508215155b61164b5760405162461bcd60e51b81526004016103109061399b565b8161165857506001611a4e565b60015460405163eb01255960e01b81526000916001600160a01b03169063eb01255990611689908890600401613488565b60206040518083038186803b1580156116a157600080fd5b505afa1580156116b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d99190612900565b90506116e36126df565b600154604051635e353ebb60e11b81526001600160a01b039091169063bc6a7d7690611713908990600401613463565b60806040518083038186803b15801561172b57600080fd5b505afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117639190612d75565b905060048160600151600481111561177757fe5b141561178c5780516117889061022c565b5091505b611794612706565b60015460405163e50e0ef760e01b81526001600160a01b039091169063e50e0ef7906117c4908a9060040161341f565b60806040518083038186803b1580156117dc57600080fd5b505afa1580156117f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118149190612a38565b90506000806000871315611843575060408201516001600160a01b03821661183e57826020015191505b61185c565b5081516001600160a01b03821661185c57826060015191505b600080881361186f578760001902611871565b875b905080866001600160a01b031663dd62ed3e84306040518363ffffffff1660e01b81526004016118a29291906133c8565b60206040518083038186803b1580156118ba57600080fd5b505afa1580156118ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f2919061297b565b108061197957506040516370a0823160e01b815281906001600160a01b038816906370a08231906119279086906004016133b4565b60206040518083038186803b15801561193f57600080fd5b505afa158015611953573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611977919061297b565b105b156119c357897f4f269a19b64cfff0bdee7fd3cdaec44e1fe38ce2ff55d3009a89fac6ecbe9f2c6040516119ac906137b5565b60405180910390a260009650505050505050611a4e565b6040516323b872dd60e01b81526001600160a01b038716906323b872dd906119f3908590879086906004016133e2565b602060405180830381600087803b158015611a0d57600080fd5b505af1158015611a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a459190612947565b96505050505050505b9392505050565b6007620151809091046003010660010190565b62015180810282018281101561026a57600080fd5b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f8460500281611ad457fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b62015180810282038281111561026a57600080fd5b60015460405163eb01255960e01b815260009182916001600160a01b039091169063eb01255990611b5d908890600401613488565b60206040518083038186803b158015611b7557600080fd5b505afa158015611b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bad9190612900565b60015460405163eb01255960e01b81529192506000916001600160a01b039091169063eb01255990611be39089906004016134ec565b60206040518083038186803b158015611bfb57600080fd5b505afa158015611c0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c339190612900565b9050806001600160a01b0316826001600160a01b031614611d165760025460405160009182916001600160a01b03909116906308a4ec1090611c7b90879087906020016133c8565b60405160208183030381529060405280519060200120886040518363ffffffff1660e01b8152600401611caf92919061343f565b604080518083038186803b158015611cc657600080fd5b505afa158015611cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfe9190612a09565b915091508015611d1357509250611a4e915050565b50505b50509392505050565b6000600d83601c811115611d2f57fe5b1415611e4d5760025460015460405163354770f760e21b815260009283926001600160a01b03918216926308a4ec10929091169063d51dc3dc90611d77908b906004016134bd565b60206040518083038186803b158015611d8f57600080fd5b505afa158015611da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc7919061297b565b866040518363ffffffff1660e01b8152600401611de592919061343f565b604080518083038186803b158015611dfc57600080fd5b505afa158015611e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e349190612a09565b915091508015611e4657509050611a4e565b5050612444565b600b83601c811115611e5b57fe5b1415611e68575042611a4e565b601a83601c811115611e7657fe5b14156121a957611e846126df565b600154604051635e353ebb60e11b81526001600160a01b039091169063bc6a7d7690611eb4908890600401613592565b60806040518083038186803b158015611ecc57600080fd5b505afa158015611ee0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f049190612d75565b9050600381606001516004811115611f1857fe5b14156120495780516020820151604051631392c59160e11b81526001600160a01b038216906327258b2290611f5190859060040161341f565b60206040518083038186803b158015611f6957600080fd5b505afa158015611f7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa19190612947565b1515600114611fc25760405162461bcd60e51b815260040161031090613814565b604051636a899b9b60e01b81526001600160a01b03821690636a899b9b90611fee908590600401613555565b60206040518083038186803b15801561200657600080fd5b505afa15801561201a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203e919061297b565b9350611a4e92505050565b6120516126df565b600154604051635e353ebb60e11b81526001600160a01b039091169063bc6a7d7690612081908990600401613463565b60806040518083038186803b15801561209957600080fd5b505afa1580156120ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d19190612d75565b90506002816040015160048111156120e557fe5b14801561210157506000816060015160048111156120ff57fe5b145b15611e46576002548151604051628a4ec160e41b815260009283926001600160a01b03909116916308a4ec109161213c918a9060040161343f565b604080518083038186803b15801561215357600080fd5b505afa158015612167573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218b9190612a09565b9150915080156121a057509250611a4e915050565b50505050612444565b601783601c8111156121b757fe5b1415612444576121c56126df565b600154604051635e353ebb60e11b81526001600160a01b039091169063bc6a7d76906121f5908890600401613592565b60806040518083038186803b15801561220d57600080fd5b505afa158015612221573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122459190612d75565b905060028160400151600481111561225957fe5b148015612275575060008160600151600481111561227357fe5b145b1561243a576002548151604051628a4ec160e41b815260009283926001600160a01b03909116916308a4ec10916122b091899060040161343f565b604080518083038186803b1580156122c757600080fd5b505afa1580156122db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ff9190612a09565b600254855160015460405163135b9f4d60e01b815294965092945060009384936001600160a01b03938416936308a4ec10939291169063135b9f4d90612349908f906004016134a2565b60206040518083038186803b15801561236157600080fd5b505afa158015612375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612399919061297b565b6040518363ffffffff1660e01b81526004016123b692919061343f565b604080518083038186803b1580156123cd57600080fd5b505afa1580156123e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124059190612a09565b915091508280156124135750805b1561243557612428848363ffffffff61244e16565b9550611a4e945050505050565b505050505b5060009050611a4e565b5060009392505050565b60008161246d5760405162461bcd60e51b815260040161031090613bbf565b8261247a5750600061026a565b670de0b6b3a76400008381029084828161249057fe5b05146124ae5760405162461bcd60e51b815260040161031090613a2d565b826000191480156124c25750600160ff1b84145b156124df5760405162461bcd60e51b815260040161031090613a2d565b60008382816124ea57fe5b05905080610c0a5760405162461bcd60e51b81526004016103109061394a565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080516104008101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200161266561272d565b815260200161267261272d565b815260200161267f61272d565b815260200161268c61272d565b815260200161269961272d565b81526020016126a6612750565b81526020016126b3612750565b81526020016126c0612750565b81526020016126cd6126df565b81526020016126da6126df565b905290565b604080516080810182526000808252602082018190529091820190815260200160006126da565b60408051608081018252600080825260208201819052918101829052606081019190915290565b6040805160608101909152600080825260208201905b8152600060209091015290565b60408051608081019091526000808252602082019081526020016000612743565b803561026a81613efa565b805161026a81613efa565b805161026a81613f1d565b805161026a81613f2a565b805161026a81613f37565b805161026a81613f51565b803561026a81613f5e565b805161026a81613f5e565b805161026a81613f6b565b6000608082840312156127e5578081fd5b50919050565b6000608082840312156127fc578081fd5b6128066080613e64565b90508151815260208201516020820152604082015161282481613f44565b6040820152606082015161283781613f44565b606082015292915050565b600060808284031215612853578081fd5b61285d6080613e64565b905081518152602082015161287181613f37565b6020820152604082015161288481613f2a565b6040820152606082015161283781613f0f565b6000606082840312156128a8578081fd5b6128b26060613e64565b90508151815260208201516128c681613f37565b602082015260408201516128d981613f0f565b604082015292915050565b6000602082840312156128f5578081fd5b8135611a4e81613efa565b600060208284031215612911578081fd5b8151611a4e81613efa565b6000806040838503121561292e578081fd5b823561293981613efa565b946020939093013593505050565b600060208284031215612958578081fd5b8151611a4e81613f0f565b600060208284031215612974578081fd5b5035919050565b60006020828403121561298c578081fd5b5051919050565b600080604083850312156129a5578182fd5b50508035926020909101359150565b6000602082840312156129c5578081fd5b8151611a4e81613f5e565b6000602082840312156129e1578081fd5b8135611a4e81613f78565b600080604083850312156129fe578182fd5b823561293981613f78565b60008060408385031215612a1b578182fd5b825191506020830151612a2d81613f0f565b809150509250929050565b600060808284031215612a49578081fd5b612a536080613e64565b8251612a5e81613efa565b81526020830151612a6e81613efa565b60208201526040830151612a8181613efa565b60408201526060830151612a9481613efa565b60608201529392505050565b600080600080600080868803610800811215612aba578283fd5b61072080821215612ac9578384fd5b889750870135905067ffffffffffffffff80821115612ae6578384fd5b8189018a601f820112612af7578485fd5b8035925081831115612b07578485fd5b8a60208085028301011115612b1a578485fd5b6020019650909450612b3290508861074089016127d4565b9250612b42886107c08901612771565b9150612b52886107e08901612771565b90509295509295509295565b60006107208284031215612b70578081fd5b612b7b610400613e64565b612b8584846127be565b8152612b948460208501612792565b6020820152612ba684604085016127a8565b6040820152612bb8846060850161279d565b6060820152612bca8460808501612787565b6080820152612bdc8460a08501612792565b60a0820152612bee8460c085016127c9565b60c0820152612c008460e0850161277c565b60e0820152610100612c148582860161277c565b9082015261012083810151908201526101408084015190820152610160808401519082015261018080840151908201526101a080840151908201526101c080840151908201526101e08084015190820152610200808401519082015261022080840151908201526102408084015190820152610260808401519082015261028080840151908201526102a080840151908201526102c0612cb685828601612897565b90820152610320612cc985858301612897565b6102e0830152610380612cde86828701612897565b6103008401526103e0612cf387828801612897565b83850152612d05876104408801612897565b610340850152612d19876104a08801612842565b610360850152612d2d876105208801612842565b82850152612d3f876105a08801612842565b6103a0850152612d538761062088016127eb565b6103c0850152612d67876106a088016127eb565b908401525090949350505050565b600060808284031215612d86578081fd5b611a4e83836127eb565b6000610280808385031215612da3578182fd5b612dac81613e64565b612db6858561279d565b81526020848101519082015260408085015190820152606080850151908201526080808501519082015260a0808501519082015260c0808501519082015260e08085015190820152610100808501519082015261012080850151908201526101408085015190820152610160808501519082015261018080850151908201526101a080850151908201526101c080850151908201526101e080850151908201526102008085015190820152610220808501519082015261024080850151908201526102609384015193810193909352509092915050565b60008060008060808587031215612ea2578182fd5b843593506020850135612eb481613f1d565b92506040850135612ec481613f2a565b9396929550929360600135925050565b600060208284031215612ee5578081fd5b815160ff81168114611a4e578182fd5b6001600160a01b03169052565b60098110612f0c57fe5b9052565b612f0c81613ed9565b612f0c81613ee6565b600d8110612f0c57fe5b60138110612f0c57fe5b60048110612f0c57fe5b60208101612f5783612f5283856127b3565b612f2c565b612f618183613ea5565b612f6e6020850182612f10565b5050612f7d6040820182613eb2565b612f8a6040840182612f22565b50612f986060820182613ecc565b612fa56060840182612f19565b50612fb36080820182613e98565b612fc06080840182612f02565b50612fce60a0820182613ea5565b612fdb60a0840182612f10565b50612fe960c0820182613ebf565b612ff660c0840182612f36565b5061300460e0820182613e8b565b61301160e0840182612ef5565b5061010061302181830183613e8b565b61302d82850182612ef5565b505061012081810135908301526101408082013590830152610160808201359083015261018080820135908301526101a080820135908301526101c080820135908301526101e08082013590830152610200808201359083015261022080820135908301526102408082013590830152610260808201359083015261028080820135908301526102a080820135908301526102c06130cf81840182840161327f565b506103206130e181840182840161327f565b506103806130f381840182840161327f565b506103e061310581840182840161327f565b5061044061311781840182840161327f565b506104a06131298184018284016131f1565b5061052061313b8184018284016131f1565b506105a061314d8184018284016131f1565b5061062061315f818401828401613176565b506106a0613171818401828401613176565b505050565b8035825260208101356020830152604081013561319281613f44565b61319b81613ef0565b604083015260608101356131ae81613f44565b6131b781613ef0565b806060840152505050565b805182526020810151602083015260408101516131de81613ef0565b604083015260608101516131b781613ef0565b80358252602081013561320381613f37565b61320c81613ee6565b6020830152604081013561321f81613f2a565b61322881613ed9565b6040830152606081013561323b81613f0f565b8015156060840152505050565b80518252602081015161325a81613ee6565b6020830152604081015161326d81613ed9565b60408301526060908101511515910152565b80358252602081013561329181613f37565b61329a81613ee6565b602083015260408101356132ad81613f0f565b8015156040840152505050565b8051825260208101516132cc81613ee6565b60208301526040908101511515910152565b6132e9828251612f19565b6020818101519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e0808201519083015261020080820151908301526102208082015190830152610240808201519083015261026090810151910152565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b90815260200190565b9182526001600160a01b0316602082015260400190565b918252602082015260400190565b9283526020830191909152604082015260600190565b9081527231b7b73a3930b1ba2932b332b932b731b2af9960691b602082015260400190565b9081526763757272656e637960c01b602082015260400190565b9081526869737375654461746560b81b602082015260400190565b9081527f6d61726b65744f626a656374436f646552617465526573657400000000000000602082015260400190565b90815271736574746c656d656e7443757272656e637960701b602082015260400190565b90815274313ab9b4b732b9b9a230bca1b7b73b32b73a34b7b760591b602082015260400190565b9081526b6d617475726974794461746560a01b602082015260400190565b908152701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b602082015260400190565b9081526731b0b632b73230b960c11b602082015260400190565b90815272636f6e74726163745265666572656e63655f3160681b602082015260400190565b6000610ac08b83526135cc602084018c612f40565b6135da61074084018b6132de565b6109c083018190528201879052610ae06001600160fb1b038811156135fd578182fd5b60208802808a83860137830101908152853561361881613efa565b6001600160a01b039081166109e084015260408701908061363c8360208b01612771565b16610a0085015260608801816136528285612771565b16610a208601528161366760808b0183612771565b16610a4086015250505061367f610a60830186612ef5565b61368d610a80830185612ef5565b61369b610aa0830184612ef5565b9a9950505050505050505050565b8281526102a08101611a4e60208301846132de565b60608101601385106136cc57fe5b9381526001600160a01b039283166020820152911660409091015290565b60408101601d84106136f857fe5b9281526020015290565b60608101601d851061371057fe5b938152602081019290925260409091015290565b6020808252602b908201527f426173654163746f722e70726f6772657373576974683a20464f554e445f454160408201526a149312515497d15591539560aa1b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b71494e53554646494349454e545f46554e445360701b815260200190565b60208082526021908201527f426173654163746f722e70726f67726573733a204e4f5f4e4558545f4556454e6040820152601560fa1b606082015260800190565b60208082526035908201527f426173654163746f722e67657445787465726e616c44617461466f725354463a604082015274081054d4d15517d113d154d7d393d517d1561254d5605a1b606082015260800190565b6020808252602e908201527f426173654163746f722e70726f6772657373576974683a20464f554e445f554e60408201526d1111549316525391d7d15591539560921b606082015260800190565b6020808252602b908201527f426173654163746f722e70726f6772657373576974683a20554e415554484f5260408201526a24ad22a22fa9a2a72222a960a91b606082015260800190565b60208082526028908201527f426173654163746f722e70726f67726573733a2041535345545f444f45535f4e60408201526713d517d1561254d560c21b606082015260800190565b60208082526031908201527f5369676e65644d6174682e666c6f61744469763a2043414e4e4f545f524550526040820152704553454e545f4752414e554c415249545960781b606082015260800190565b6020808252603b908201527f426173654163746f722e736574746c655061796f6666466f724576656e743a2060408201527f494e56414c49445f46554e4354494f4e5f504152414d45544552530000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526026908201527f5369676e65644d6174682e666c6f61744469763a204f564552464c4f575f4445604082015265151150d5115160d21b606082015260800190565b60208082526033908201527f414e4e4163746f722e70726f636573734576656e743a204e4558545f4556454e6040820152721517d393d517d6515517d4d0d2115115531151606a1b606082015260800190565b6020808252602b908201527f426173654163746f722e70726f6772657373576974683a20464f554e445f504560408201526a1391125391d7d15591539560aa1b606082015260800190565b6020808252603a908201527f43455254464163746f722e696e697469616c697a653a20434f4e54524143545f60408201527f545950455f4f465f454e47494e455f554e535550504f52544544000000000000606082015260800190565b60208082526031908201527f426173654163746f722e70726f636573734576656e743a2041535345545f524560408201527041434845445f46494e414c5f535441544560781b606082015260800190565b60208082526024908201527f5369676e65644d6174682e666c6f61744469763a20444956494445445f42595f6040820152635a45524f60e01b606082015260800190565b610720810161026a8284612f40565b6107408101613c218285612f40565b826107208301529392505050565b60006109e082019050613c43828751612f2c565b6020860151613c556020840182612f10565b506040860151613c686040840182612f22565b506060860151613c7b6060840182612f19565b506080860151613c8e6080840182612f02565b5060a0860151613ca160a0840182612f10565b5060c0860151613cb460c0840182612f36565b5060e0860151613cc760e0840182612ef5565b5061010080870151613cdb82850182612ef5565b505061012086810151908301526101408087015190830152610160808701519083015261018080870151908301526101a080870151908301526101c080870151908301526101e08087015190830152610200808701519083015261022080870151908301526102408087015190830152610260808701519083015261028080870151908301526102a080870151908301526102c080870151613d7f828501826132ba565b50506102e0860151610320613d96818501836132ba565b6103008801519150610380613dad818601846132ba565b9088015191506103e090613dc3858301846132ba565b6103408901519250613dd96104408601846132ba565b6103608901519250613def6104a0860184613248565b8801519150613e02610520850183613248565b6103a08801519150613e186105a0850183613248565b6103c08801519150613e2e6106208501836131c2565b8701519050613e416106a08401826131c2565b50613e506107208301866132de565b6109a08201939093526109c0015292915050565b60405181810167ffffffffffffffff81118282101715613e8357600080fd5b604052919050565b60008235611a4e81613efa565b60008235611a4e81613f1d565b60008235611a4e81613f2a565b60008235611a4e81613f51565b60008235611a4e81613f6b565b60008235611a4e81613f37565b60028110613ee357fe5b50565b60068110613ee357fe5b60058110613ee357fe5b6001600160a01b0381168114613ee357600080fd5b8015158114613ee357600080fd5b60098110613ee357600080fd5b60028110613ee357600080fd5b60068110613ee357600080fd5b60058110613ee357600080fd5b600d8110613ee357600080fd5b60138110613ee357600080fd5b60048110613ee357600080fd5b601d8110613ee357600080fdfea2646970667358221220b0fbaf26bb06ef78032cb28793edc365d7260500275838252363a80f87411e4c64736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063e05a66e011610066578063e05a66e0146101e0578063e726d680146101f3578063f2fde38b14610206578063f5586e0514610219576100f5565b80638da5cb5b146101a8578063979d7e86146101bd578063a39c1d6b146101c5578063c7405c8d146101cd576100f5565b8063715018a6116100d3578063715018a61461015957806372540003146101615780637aebd2a814610182578063811322fb14610195576100f5565b8063645a26bd146100fa5780636778e0e9146101245780636b6ba66414610144575b600080fd5b61010d610108366004612963565b61022c565b60405161011b929190613406565b60405180910390f35b61013761013236600461291c565b610245565b60405161011b919061341f565b610157610152366004612993565b610270565b005b610157610525565b61017461016f366004612963565b6105a4565b60405161011b9291906136ea565b610157610190366004612963565b6105cd565b6101376101a33660046129d0565b61082b565b6101b0610839565b60405161011b91906133b4565b6101b0610848565b6101b0610857565b6101576101db366004612aa0565b610866565b6101376101ee3660046129ec565b610a9f565b610137610201366004612e8d565b610abd565b6101576102143660046128e4565b610c12565b610137610227366004612e8d565b610cc8565b606081901c6bffffffffffffffffffffffff8216915091565b6bffffffffffffffffffffffff19606083901b166bffffffffffffffffffffffff8216175b92915050565b60015460405163747be51f60e11b81526001600160a01b039091169063e8f7ca3e906102a29085903390600401613428565b602060405180830381600087803b1580156102bc57600080fd5b505af11580156102d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f49190612947565b6103195760405162461bcd60e51b8152600401610310906138b7565b60405180910390fd5b60015460405163f52f84e160e01b81526000916001600160a01b03169063f52f84e19061034a90869060040161341f565b60206040518083038186803b15801561036257600080fd5b505afa158015610376573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039a919061297b565b146103b75760405162461bcd60e51b815260040161031090613ac6565b600154604051631d7a1ab960e21b81526000916001600160a01b0316906375e86ae4906103e890869060040161341f565b60206040518083038186803b15801561040057600080fd5b505afa158015610414573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610438919061297b565b146104555760405162461bcd60e51b815260040161031090613869565b60015460405163b828204160e01b81526000916104dc916001600160a01b039091169063b82820419061048c90879060040161341f565b60206040518083038186803b1580156104a457600080fd5b505afa1580156104b8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061016f919061297b565b91505060006104ea836105a4565b9150508115806104f957508181105b6105155760405162461bcd60e51b815260040161031090613724565b61051f8484610d3c565b50505050565b61052d6112d3565b6000546001600160a01b0390811691161461055a5760405162461bcd60e51b8152600401610310906139f8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000808060f884901c601c8111156105b857fe5b92505067ffffffffffffffff83169050915091565b600154604051631392c59160e11b81526001600160a01b03909116906327258b22906105fd90849060040161341f565b60206040518083038186803b15801561061557600080fd5b505afa158015610629573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064d9190612947565b6106695760405162461bcd60e51b815260040161031090613902565b600154604051630316dd6960e21b81526000916001600160a01b031690630c5b75a49061069a90859060040161341f565b602060405180830381600087803b1580156106b457600080fd5b505af11580156106c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ec919061297b565b90508061077657600154604051631d7a1ab960e21b81526001600160a01b03909116906375e86ae49061072390859060040161341f565b60206040518083038186803b15801561073b57600080fd5b505afa15801561074f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610773919061297b565b90505b80610800576001546040516361db73e160e11b81526001600160a01b039091169063c3b6e7c2906107ab90859060040161341f565b602060405180830381600087803b1580156107c557600080fd5b505af11580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd919061297b565b90505b8061081d5760405162461bcd60e51b8152600401610310906137d3565b6108278282610d3c565b5050565b600081601c81111561026a57fe5b6000546001600160a01b031690565b6001546001600160a01b031681565b6002546001600160a01b031681565b6001600160a01b038216158015906108f957506012826001600160a01b031663cb2ef6f76040518163ffffffff1660e01b815260040160206040518083038186803b1580156108b457600080fd5b505afa1580156108c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ec91906129b4565b60128111156108f757fe5b145b6109155760405162461bcd60e51b815260040161031090613b11565b6000864260405160200161092a929190613c12565b60405160208183030381529060405280519060200120905061094a61250a565b60405163bccf8f3160e01b81526001600160a01b0385169063bccf8f3190610976908b90600401613c03565b6102806040518083038186803b15801561098f57600080fd5b505afa1580156109a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c79190612d90565b600154604051634640f6c960e11b81529192506001600160a01b031690638c81ed9290610a089085908c9086908d908d908d908d9030908e906004016135b7565b600060405180830381600087803b158015610a2257600080fd5b505af1158015610a36573d6000803e3d6000fd5b508492507fc5df678b84aa92f5f59981df8c9997b366d886de25771c5f753015c2e14e907a915060109050610a6e60208901896128e4565b610a7e60608a0160408b016128e4565b604051610a8d939291906136be565b60405180910390a25050505050505050565b60008160f884601c811115610ab057fe5b60ff16901b179392505050565b600081851415610ace575083610c0a565b6001846008811115610adc57fe5b1480610af357506003846008811115610af157fe5b145b15610b0957610b0285846112d7565b9050610c0a565b6002846008811115610b1757fe5b1480610b2e57506004846008811115610b2c57fe5b145b15610b72576000610b3f86856112d7565b9050610b4a86611333565b610b5382611333565b1415610b60579050610c0a565b610b6a868561134b565b915050610c0a565b6005846008811115610b8057fe5b1480610b9757506007846008811115610b9557fe5b145b15610ba657610b02858461134b565b6006846008811115610bb457fe5b1480610bcb57506008846008811115610bc957fe5b145b15610c07576000610bdc868561134b565b9050610be786611333565b610bf082611333565b1415610bfd579050610c0a565b610b6a86856112d7565b50835b949350505050565b610c1a6112d3565b6000546001600160a01b03908116911614610c475760405162461bcd60e51b8152600401610310906139f8565b6001600160a01b038116610c6d5760405162461bcd60e51b81526004016103109061376f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006003846008811115610cd857fe5b1480610cef57506004846008811115610ced57fe5b145b80610d0557506007846008811115610d0357fe5b145b80610d1b57506008846008811115610d1957fe5b145b15610d27575083610c0a565b610d3385858585610abd565b95945050505050565b610d4461250a565b6001546040516309648a9d60e01b81526001600160a01b03909116906309648a9d90610d7490869060040161341f565b6102806040518083038186803b158015610d8d57600080fd5b505afa158015610da1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc59190612d90565b9050600081516005811115610dd657fe5b1480610dee5750600181516005811115610dec57fe5b145b80610e055750600281516005811115610e0357fe5b145b610e215760405162461bcd60e51b815260040161031090613b6e565b600081516005811115610e3057fe5b14610eb957600154604051631ba316dd60e11b81526001600160a01b03909116906337462dba90610e6590869060040161341f565b6102806040518083038186803b158015610e7e57600080fd5b505afa158015610e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb69190612d90565b90505b600080610ec5846105a4565b60015460405163ecef557760e01b8152929450909250429161106f9184916001600160a01b039091169063ecef557790610f03908b90600401613510565b60206040518083038186803b158015610f1b57600080fd5b505afa158015610f2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f539190612ed4565b60ff166008811115610f6157fe5b60015460405163ecef557760e01b81526001600160a01b039091169063ecef557790610f91908c90600401613578565b60206040518083038186803b158015610fa957600080fd5b505afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190612ed4565b60ff166001811115610fef57fe5b60015460405163135b9f4d60e01b81526001600160a01b039091169063135b9f4d9061101f908d90600401613537565b60206040518083038186803b15801561103757600080fd5b505afa15801561104b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610201919061297b565b111561108d5760405162461bcd60e51b815260040161031090613a73565b61109561250a565b60006110a2878688611399565b9150915060006110b388888461161f565b9050806111b7576000865160058111156110c957fe5b14156111345760015460405163067fe5d760e41b81526001600160a01b03909116906367fe5d7090611101908b908a906004016136a9565b600060405180830381600087803b15801561111b57600080fd5b505af115801561112f573d6000803e3d6000fd5b505050505b60015460405163d981e77360e01b81526001600160a01b039091169063d981e77390611166908b908b9060040161343f565b600060405180830381600087803b15801561118057600080fd5b505af1158015611194573d6000803e3d6000fd5b5050505060006111a5600b86610a9f565b90506111b2898583611399565b509350505b600154604051631f61c37560e21b81526001600160a01b0390911690637d870dd4906111e9908b9087906004016136a9565b600060405180830381600087803b15801561120357600080fd5b505af1158015611217573d6000803e3d6000fd5b505050508015156001141561128d5760015460405163de07a17360e01b81526001600160a01b039091169063de07a1739061125a908b908b90879060040161344d565b600060405180830381600087803b15801561127457600080fd5b505af1158015611288573d6000803e3d6000fd5b505050505b877fd255be8589971f117e0e4377177282fb7cce66e378bfb1b7eafddd05e4f181e96001831515146112c057600b6112c2565b865b8685604051610a8d93929190613702565b3390565b600060018260018111156112e757fe5b141561132c576112f683611a55565b6006141561131057611309836002611a68565b905061026a565b61131983611a55565b6007141561132c57611309836001611a68565b5090919050565b6000611343620151808304611a7d565b509392505050565b6000600182600181111561135b57fe5b141561132c5761136a83611a55565b6006141561137d57611309836001611b13565b61138683611a55565b6007141561132c57611309836002611b13565b6113a161250a565b60015460405163ee43eda160e01b815260009182916001600160a01b039091169063ee43eda1906113d690899060040161341f565b60206040518083038186803b1580156113ee57600080fd5b505afa158015611402573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114269190612900565b90506114306125a4565b6001546040516335f1cded60e11b81526001600160a01b0390911690636be39bda90611460908a9060040161341f565b6107206040518083038186803b15801561147957600080fd5b505afa15801561148d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b19190612b5e565b90506000806114bf876105a4565b915091506000846001600160a01b031663ffcbfc65858b8b6114fa8f896114f58a8d608001518e602001518f6101800151610cc8565b611b28565b6040518563ffffffff1660e01b81526004016115199493929190613c2f565b60206040518083038186803b15801561153157600080fd5b505afa158015611545573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611569919061297b565b9050846001600160a01b031663f5235586858b8b6115a08f8961159b8a8d608001518e602001518f6101800151610cc8565b611d1f565b6040518563ffffffff1660e01b81526004016115bf9493929190613c2f565b6102806040518083038186803b1580156115d857600080fd5b505afa1580156115ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116109190612d90565b9a909950975050505050505050565b6000831580159061162f57508215155b61164b5760405162461bcd60e51b81526004016103109061399b565b8161165857506001611a4e565b60015460405163eb01255960e01b81526000916001600160a01b03169063eb01255990611689908890600401613488565b60206040518083038186803b1580156116a157600080fd5b505afa1580156116b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d99190612900565b90506116e36126df565b600154604051635e353ebb60e11b81526001600160a01b039091169063bc6a7d7690611713908990600401613463565b60806040518083038186803b15801561172b57600080fd5b505afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117639190612d75565b905060048160600151600481111561177757fe5b141561178c5780516117889061022c565b5091505b611794612706565b60015460405163e50e0ef760e01b81526001600160a01b039091169063e50e0ef7906117c4908a9060040161341f565b60806040518083038186803b1580156117dc57600080fd5b505afa1580156117f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118149190612a38565b90506000806000871315611843575060408201516001600160a01b03821661183e57826020015191505b61185c565b5081516001600160a01b03821661185c57826060015191505b600080881361186f578760001902611871565b875b905080866001600160a01b031663dd62ed3e84306040518363ffffffff1660e01b81526004016118a29291906133c8565b60206040518083038186803b1580156118ba57600080fd5b505afa1580156118ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f2919061297b565b108061197957506040516370a0823160e01b815281906001600160a01b038816906370a08231906119279086906004016133b4565b60206040518083038186803b15801561193f57600080fd5b505afa158015611953573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611977919061297b565b105b156119c357897f4f269a19b64cfff0bdee7fd3cdaec44e1fe38ce2ff55d3009a89fac6ecbe9f2c6040516119ac906137b5565b60405180910390a260009650505050505050611a4e565b6040516323b872dd60e01b81526001600160a01b038716906323b872dd906119f3908590879086906004016133e2565b602060405180830381600087803b158015611a0d57600080fd5b505af1158015611a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a459190612947565b96505050505050505b9392505050565b6007620151809091046003010660010190565b62015180810282018281101561026a57600080fd5b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f8460500281611ad457fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b62015180810282038281111561026a57600080fd5b60015460405163eb01255960e01b815260009182916001600160a01b039091169063eb01255990611b5d908890600401613488565b60206040518083038186803b158015611b7557600080fd5b505afa158015611b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bad9190612900565b60015460405163eb01255960e01b81529192506000916001600160a01b039091169063eb01255990611be39089906004016134ec565b60206040518083038186803b158015611bfb57600080fd5b505afa158015611c0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c339190612900565b9050806001600160a01b0316826001600160a01b031614611d165760025460405160009182916001600160a01b03909116906308a4ec1090611c7b90879087906020016133c8565b60405160208183030381529060405280519060200120886040518363ffffffff1660e01b8152600401611caf92919061343f565b604080518083038186803b158015611cc657600080fd5b505afa158015611cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfe9190612a09565b915091508015611d1357509250611a4e915050565b50505b50509392505050565b6000600d83601c811115611d2f57fe5b1415611e4d5760025460015460405163354770f760e21b815260009283926001600160a01b03918216926308a4ec10929091169063d51dc3dc90611d77908b906004016134bd565b60206040518083038186803b158015611d8f57600080fd5b505afa158015611da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc7919061297b565b866040518363ffffffff1660e01b8152600401611de592919061343f565b604080518083038186803b158015611dfc57600080fd5b505afa158015611e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e349190612a09565b915091508015611e4657509050611a4e565b5050612444565b600b83601c811115611e5b57fe5b1415611e68575042611a4e565b601a83601c811115611e7657fe5b14156121a957611e846126df565b600154604051635e353ebb60e11b81526001600160a01b039091169063bc6a7d7690611eb4908890600401613592565b60806040518083038186803b158015611ecc57600080fd5b505afa158015611ee0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f049190612d75565b9050600381606001516004811115611f1857fe5b14156120495780516020820151604051631392c59160e11b81526001600160a01b038216906327258b2290611f5190859060040161341f565b60206040518083038186803b158015611f6957600080fd5b505afa158015611f7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa19190612947565b1515600114611fc25760405162461bcd60e51b815260040161031090613814565b604051636a899b9b60e01b81526001600160a01b03821690636a899b9b90611fee908590600401613555565b60206040518083038186803b15801561200657600080fd5b505afa15801561201a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203e919061297b565b9350611a4e92505050565b6120516126df565b600154604051635e353ebb60e11b81526001600160a01b039091169063bc6a7d7690612081908990600401613463565b60806040518083038186803b15801561209957600080fd5b505afa1580156120ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d19190612d75565b90506002816040015160048111156120e557fe5b14801561210157506000816060015160048111156120ff57fe5b145b15611e46576002548151604051628a4ec160e41b815260009283926001600160a01b03909116916308a4ec109161213c918a9060040161343f565b604080518083038186803b15801561215357600080fd5b505afa158015612167573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218b9190612a09565b9150915080156121a057509250611a4e915050565b50505050612444565b601783601c8111156121b757fe5b1415612444576121c56126df565b600154604051635e353ebb60e11b81526001600160a01b039091169063bc6a7d76906121f5908890600401613592565b60806040518083038186803b15801561220d57600080fd5b505afa158015612221573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122459190612d75565b905060028160400151600481111561225957fe5b148015612275575060008160600151600481111561227357fe5b145b1561243a576002548151604051628a4ec160e41b815260009283926001600160a01b03909116916308a4ec10916122b091899060040161343f565b604080518083038186803b1580156122c757600080fd5b505afa1580156122db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ff9190612a09565b600254855160015460405163135b9f4d60e01b815294965092945060009384936001600160a01b03938416936308a4ec10939291169063135b9f4d90612349908f906004016134a2565b60206040518083038186803b15801561236157600080fd5b505afa158015612375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612399919061297b565b6040518363ffffffff1660e01b81526004016123b692919061343f565b604080518083038186803b1580156123cd57600080fd5b505afa1580156123e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124059190612a09565b915091508280156124135750805b1561243557612428848363ffffffff61244e16565b9550611a4e945050505050565b505050505b5060009050611a4e565b5060009392505050565b60008161246d5760405162461bcd60e51b815260040161031090613bbf565b8261247a5750600061026a565b670de0b6b3a76400008381029084828161249057fe5b05146124ae5760405162461bcd60e51b815260040161031090613a2d565b826000191480156124c25750600160ff1b84145b156124df5760405162461bcd60e51b815260040161031090613a2d565b60008382816124ea57fe5b05905080610c0a5760405162461bcd60e51b81526004016103109061394a565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080516104008101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200161266561272d565b815260200161267261272d565b815260200161267f61272d565b815260200161268c61272d565b815260200161269961272d565b81526020016126a6612750565b81526020016126b3612750565b81526020016126c0612750565b81526020016126cd6126df565b81526020016126da6126df565b905290565b604080516080810182526000808252602082018190529091820190815260200160006126da565b60408051608081018252600080825260208201819052918101829052606081019190915290565b6040805160608101909152600080825260208201905b8152600060209091015290565b60408051608081019091526000808252602082019081526020016000612743565b803561026a81613efa565b805161026a81613efa565b805161026a81613f1d565b805161026a81613f2a565b805161026a81613f37565b805161026a81613f51565b803561026a81613f5e565b805161026a81613f5e565b805161026a81613f6b565b6000608082840312156127e5578081fd5b50919050565b6000608082840312156127fc578081fd5b6128066080613e64565b90508151815260208201516020820152604082015161282481613f44565b6040820152606082015161283781613f44565b606082015292915050565b600060808284031215612853578081fd5b61285d6080613e64565b905081518152602082015161287181613f37565b6020820152604082015161288481613f2a565b6040820152606082015161283781613f0f565b6000606082840312156128a8578081fd5b6128b26060613e64565b90508151815260208201516128c681613f37565b602082015260408201516128d981613f0f565b604082015292915050565b6000602082840312156128f5578081fd5b8135611a4e81613efa565b600060208284031215612911578081fd5b8151611a4e81613efa565b6000806040838503121561292e578081fd5b823561293981613efa565b946020939093013593505050565b600060208284031215612958578081fd5b8151611a4e81613f0f565b600060208284031215612974578081fd5b5035919050565b60006020828403121561298c578081fd5b5051919050565b600080604083850312156129a5578182fd5b50508035926020909101359150565b6000602082840312156129c5578081fd5b8151611a4e81613f5e565b6000602082840312156129e1578081fd5b8135611a4e81613f78565b600080604083850312156129fe578182fd5b823561293981613f78565b60008060408385031215612a1b578182fd5b825191506020830151612a2d81613f0f565b809150509250929050565b600060808284031215612a49578081fd5b612a536080613e64565b8251612a5e81613efa565b81526020830151612a6e81613efa565b60208201526040830151612a8181613efa565b60408201526060830151612a9481613efa565b60608201529392505050565b600080600080600080868803610800811215612aba578283fd5b61072080821215612ac9578384fd5b889750870135905067ffffffffffffffff80821115612ae6578384fd5b8189018a601f820112612af7578485fd5b8035925081831115612b07578485fd5b8a60208085028301011115612b1a578485fd5b6020019650909450612b3290508861074089016127d4565b9250612b42886107c08901612771565b9150612b52886107e08901612771565b90509295509295509295565b60006107208284031215612b70578081fd5b612b7b610400613e64565b612b8584846127be565b8152612b948460208501612792565b6020820152612ba684604085016127a8565b6040820152612bb8846060850161279d565b6060820152612bca8460808501612787565b6080820152612bdc8460a08501612792565b60a0820152612bee8460c085016127c9565b60c0820152612c008460e0850161277c565b60e0820152610100612c148582860161277c565b9082015261012083810151908201526101408084015190820152610160808401519082015261018080840151908201526101a080840151908201526101c080840151908201526101e08084015190820152610200808401519082015261022080840151908201526102408084015190820152610260808401519082015261028080840151908201526102a080840151908201526102c0612cb685828601612897565b90820152610320612cc985858301612897565b6102e0830152610380612cde86828701612897565b6103008401526103e0612cf387828801612897565b83850152612d05876104408801612897565b610340850152612d19876104a08801612842565b610360850152612d2d876105208801612842565b82850152612d3f876105a08801612842565b6103a0850152612d538761062088016127eb565b6103c0850152612d67876106a088016127eb565b908401525090949350505050565b600060808284031215612d86578081fd5b611a4e83836127eb565b6000610280808385031215612da3578182fd5b612dac81613e64565b612db6858561279d565b81526020848101519082015260408085015190820152606080850151908201526080808501519082015260a0808501519082015260c0808501519082015260e08085015190820152610100808501519082015261012080850151908201526101408085015190820152610160808501519082015261018080850151908201526101a080850151908201526101c080850151908201526101e080850151908201526102008085015190820152610220808501519082015261024080850151908201526102609384015193810193909352509092915050565b60008060008060808587031215612ea2578182fd5b843593506020850135612eb481613f1d565b92506040850135612ec481613f2a565b9396929550929360600135925050565b600060208284031215612ee5578081fd5b815160ff81168114611a4e578182fd5b6001600160a01b03169052565b60098110612f0c57fe5b9052565b612f0c81613ed9565b612f0c81613ee6565b600d8110612f0c57fe5b60138110612f0c57fe5b60048110612f0c57fe5b60208101612f5783612f5283856127b3565b612f2c565b612f618183613ea5565b612f6e6020850182612f10565b5050612f7d6040820182613eb2565b612f8a6040840182612f22565b50612f986060820182613ecc565b612fa56060840182612f19565b50612fb36080820182613e98565b612fc06080840182612f02565b50612fce60a0820182613ea5565b612fdb60a0840182612f10565b50612fe960c0820182613ebf565b612ff660c0840182612f36565b5061300460e0820182613e8b565b61301160e0840182612ef5565b5061010061302181830183613e8b565b61302d82850182612ef5565b505061012081810135908301526101408082013590830152610160808201359083015261018080820135908301526101a080820135908301526101c080820135908301526101e08082013590830152610200808201359083015261022080820135908301526102408082013590830152610260808201359083015261028080820135908301526102a080820135908301526102c06130cf81840182840161327f565b506103206130e181840182840161327f565b506103806130f381840182840161327f565b506103e061310581840182840161327f565b5061044061311781840182840161327f565b506104a06131298184018284016131f1565b5061052061313b8184018284016131f1565b506105a061314d8184018284016131f1565b5061062061315f818401828401613176565b506106a0613171818401828401613176565b505050565b8035825260208101356020830152604081013561319281613f44565b61319b81613ef0565b604083015260608101356131ae81613f44565b6131b781613ef0565b806060840152505050565b805182526020810151602083015260408101516131de81613ef0565b604083015260608101516131b781613ef0565b80358252602081013561320381613f37565b61320c81613ee6565b6020830152604081013561321f81613f2a565b61322881613ed9565b6040830152606081013561323b81613f0f565b8015156060840152505050565b80518252602081015161325a81613ee6565b6020830152604081015161326d81613ed9565b60408301526060908101511515910152565b80358252602081013561329181613f37565b61329a81613ee6565b602083015260408101356132ad81613f0f565b8015156040840152505050565b8051825260208101516132cc81613ee6565b60208301526040908101511515910152565b6132e9828251612f19565b6020818101519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e0808201519083015261020080820151908301526102208082015190830152610240808201519083015261026090810151910152565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b90815260200190565b9182526001600160a01b0316602082015260400190565b918252602082015260400190565b9283526020830191909152604082015260600190565b9081527231b7b73a3930b1ba2932b332b932b731b2af9960691b602082015260400190565b9081526763757272656e637960c01b602082015260400190565b9081526869737375654461746560b81b602082015260400190565b9081527f6d61726b65744f626a656374436f646552617465526573657400000000000000602082015260400190565b90815271736574746c656d656e7443757272656e637960701b602082015260400190565b90815274313ab9b4b732b9b9a230bca1b7b73b32b73a34b7b760591b602082015260400190565b9081526b6d617475726974794461746560a01b602082015260400190565b908152701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b602082015260400190565b9081526731b0b632b73230b960c11b602082015260400190565b90815272636f6e74726163745265666572656e63655f3160681b602082015260400190565b6000610ac08b83526135cc602084018c612f40565b6135da61074084018b6132de565b6109c083018190528201879052610ae06001600160fb1b038811156135fd578182fd5b60208802808a83860137830101908152853561361881613efa565b6001600160a01b039081166109e084015260408701908061363c8360208b01612771565b16610a0085015260608801816136528285612771565b16610a208601528161366760808b0183612771565b16610a4086015250505061367f610a60830186612ef5565b61368d610a80830185612ef5565b61369b610aa0830184612ef5565b9a9950505050505050505050565b8281526102a08101611a4e60208301846132de565b60608101601385106136cc57fe5b9381526001600160a01b039283166020820152911660409091015290565b60408101601d84106136f857fe5b9281526020015290565b60608101601d851061371057fe5b938152602081019290925260409091015290565b6020808252602b908201527f426173654163746f722e70726f6772657373576974683a20464f554e445f454160408201526a149312515497d15591539560aa1b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b71494e53554646494349454e545f46554e445360701b815260200190565b60208082526021908201527f426173654163746f722e70726f67726573733a204e4f5f4e4558545f4556454e6040820152601560fa1b606082015260800190565b60208082526035908201527f426173654163746f722e67657445787465726e616c44617461466f725354463a604082015274081054d4d15517d113d154d7d393d517d1561254d5605a1b606082015260800190565b6020808252602e908201527f426173654163746f722e70726f6772657373576974683a20464f554e445f554e60408201526d1111549316525391d7d15591539560921b606082015260800190565b6020808252602b908201527f426173654163746f722e70726f6772657373576974683a20554e415554484f5260408201526a24ad22a22fa9a2a72222a960a91b606082015260800190565b60208082526028908201527f426173654163746f722e70726f67726573733a2041535345545f444f45535f4e60408201526713d517d1561254d560c21b606082015260800190565b60208082526031908201527f5369676e65644d6174682e666c6f61744469763a2043414e4e4f545f524550526040820152704553454e545f4752414e554c415249545960781b606082015260800190565b6020808252603b908201527f426173654163746f722e736574746c655061796f6666466f724576656e743a2060408201527f494e56414c49445f46554e4354494f4e5f504152414d45544552530000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526026908201527f5369676e65644d6174682e666c6f61744469763a204f564552464c4f575f4445604082015265151150d5115160d21b606082015260800190565b60208082526033908201527f414e4e4163746f722e70726f636573734576656e743a204e4558545f4556454e6040820152721517d393d517d6515517d4d0d2115115531151606a1b606082015260800190565b6020808252602b908201527f426173654163746f722e70726f6772657373576974683a20464f554e445f504560408201526a1391125391d7d15591539560aa1b606082015260800190565b6020808252603a908201527f43455254464163746f722e696e697469616c697a653a20434f4e54524143545f60408201527f545950455f4f465f454e47494e455f554e535550504f52544544000000000000606082015260800190565b60208082526031908201527f426173654163746f722e70726f636573734576656e743a2041535345545f524560408201527041434845445f46494e414c5f535441544560781b606082015260800190565b60208082526024908201527f5369676e65644d6174682e666c6f61744469763a20444956494445445f42595f6040820152635a45524f60e01b606082015260800190565b610720810161026a8284612f40565b6107408101613c218285612f40565b826107208301529392505050565b60006109e082019050613c43828751612f2c565b6020860151613c556020840182612f10565b506040860151613c686040840182612f22565b506060860151613c7b6060840182612f19565b506080860151613c8e6080840182612f02565b5060a0860151613ca160a0840182612f10565b5060c0860151613cb460c0840182612f36565b5060e0860151613cc760e0840182612ef5565b5061010080870151613cdb82850182612ef5565b505061012086810151908301526101408087015190830152610160808701519083015261018080870151908301526101a080870151908301526101c080870151908301526101e08087015190830152610200808701519083015261022080870151908301526102408087015190830152610260808701519083015261028080870151908301526102a080870151908301526102c080870151613d7f828501826132ba565b50506102e0860151610320613d96818501836132ba565b6103008801519150610380613dad818601846132ba565b9088015191506103e090613dc3858301846132ba565b6103408901519250613dd96104408601846132ba565b6103608901519250613def6104a0860184613248565b8801519150613e02610520850183613248565b6103a08801519150613e186105a0850183613248565b6103c08801519150613e2e6106208501836131c2565b8701519050613e416106a08401826131c2565b50613e506107208301866132de565b6109a08201939093526109c0015292915050565b60405181810167ffffffffffffffff81118282101715613e8357600080fd5b604052919050565b60008235611a4e81613efa565b60008235611a4e81613f1d565b60008235611a4e81613f2a565b60008235611a4e81613f51565b60008235611a4e81613f6b565b60008235611a4e81613f37565b60028110613ee357fe5b50565b60068110613ee357fe5b60058110613ee357fe5b6001600160a01b0381168114613ee357600080fd5b8015158114613ee357600080fd5b60098110613ee357600080fd5b60028110613ee357600080fd5b60068110613ee357600080fd5b60058110613ee357600080fd5b600d8110613ee357600080fd5b60138110613ee357600080fd5b60048110613ee357600080fd5b601d8110613ee357600080fdfea2646970667358221220b0fbaf26bb06ef78032cb28793edc365d7260500275838252363a80f87411e4c64736f6c634300060b0033",
  "immutableReferences": {},
  "sourceMap": "296:2880:38:-:0;;;336:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;439:13;454:12;865:17:116;885:12;-1:-1:-1;;;;;885:10:116;:12;:::i;:::-;907:6;:18;;-1:-1:-1;;;;;;907:18:116;-1:-1:-1;;;;;907:18:116;;;;;;;940:43;;907:18;;-1:-1:-1;907:18:116;940:43;;907:6;;940:43;-1:-1:-1;1902:13:4;:30;;-1:-1:-1;;;;;1902:30:4;;;-1:-1:-1;;;;;;1902:30:4;;;;;;;1942:12;:28;;;;;;;;;;;-1:-1:-1;296:2880:38;;-1:-1:-1;296:2880:38;768:104:115;855:10;768:104;:::o;377:489:-1:-;;;554:2;542:9;533:7;529:23;525:32;522:2;;;-1:-1;;560:12;522:2;112:6;106:13;124:56;174:5;124:56;:::i;:::-;746:2;818:22;;292:13;612:97;;-1:-1;310:55;292:13;310:55;:::i;:::-;754:96;;;;516:350;;;;;:::o;1340:163::-;-1:-1;;;;;1274:54;;1422:58;;1412:2;;1494:1;;1484:12;1412:2;1406:97;:::o;:::-;296:2880:38;;;;;;",
  "deployedSourceMap": "296:2880:38:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;425:248:22;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;159:260;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3805:1298:4:-;;;;;;:::i;:::-;;:::i;:::-;;1689:145:116;;;:::i;487:293:82:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;2421:929:4:-;;;;;;:::i;:::-;;:::i;956:145:82:-;;;;;;:::i;:::-;;:::i;1066:77:116:-;;;:::i;:::-;;;;;;;:::i;1696:35:4:-;;;:::i;1737:33::-;;;:::i;964:1070:38:-;;;;;;:::i;:::-;;:::i;234:247:82:-;;;;;;:::i;:::-;;:::i;1599:2214:75:-;;;;;;:::i;:::-;;:::i;1983:240:116:-;;;;;;:::i;:::-;;:::i;648:583:75:-;;;;;;:::i;:::-;;:::i;425:248:22:-;605:2;595:12;;;624:32;;;425:248;;;:::o;159:260::-;-1:-1:-1;;365:2:22;319:48;;;;378:33;;;319:93;159:260;;;;;:::o;3805:1298:4:-;3979:13;;:48;;-1:-1:-1;;;3979:48:4;;-1:-1:-1;;;;;3979:13:4;;;;:27;;:48;;4007:7;;4016:10;;3979:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3958:138;;;;-1:-1:-1;;;3958:138:4;;;;;;;:::i;:::-;;;;;;;;;4292:13;;:38;;-1:-1:-1;;;4292:38:4;;4342:1;;-1:-1:-1;;;;;4292:13:4;;:29;;:38;;4322:7;;4292:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;4271:142;;;;-1:-1:-1;;;4271:142:4;;;;;;;:::i;:::-;4444:13;;:45;;-1:-1:-1;;;4444:45:4;;4501:1;;-1:-1:-1;;;;;4444:13:4;;:36;;:45;;4481:7;;4444:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;4423:152;;;;-1:-1:-1;;;4423:152:4;;;;;;;:::i;:::-;4751:13;;:44;;-1:-1:-1;;;4751:44:4;;4701:34;;4739:57;;-1:-1:-1;;;;;4751:13:4;;;;:35;;:44;;4787:7;;4751:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4739:57::-;4698:98;;;4809:33;4846:19;4858:6;4846:11;:19::i;:::-;4806:59;-1:-1:-1;;4896:31:4;;;:91;;;4960:26;4932:25;:54;4896:91;4875:181;;;;-1:-1:-1;;;4875:181:4;;;;;;;:::i;:::-;5067:29;5080:7;5089:6;5067:12;:29::i;:::-;3805:1298;;;;:::o;1689:145:116:-;1280:12;:10;:12::i;:::-;1270:6;;-1:-1:-1;;;;;1270:6:116;;;:22;;;1262:67;;;;-1:-1:-1;;;1262:67:116;;;;;;;:::i;:::-;1795:1:::1;1779:6:::0;;1758:40:::1;::::0;-1:-1:-1;;;;;1779:6:116;;::::1;::::0;1758:40:::1;::::0;1795:1;;1758:40:::1;1825:1;1808:19:::0;;-1:-1:-1;;;;;;1808:19:116::1;::::0;;1689:145::o;487:293:82:-;569:9;;;659:3;649:13;;;625:40;;;;;;;;603:62;-1:-1:-1;;698:32:82;;;;-1:-1:-1;487:293:82;;;:::o;2421:929:4:-;2575:13;;:35;;-1:-1:-1;;;2575:35:4;;-1:-1:-1;;;;;2575:13:4;;;;:26;;:35;;2602:7;;2575:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2554:122;;;;-1:-1:-1;;;2554:122:4;;;;;;;:::i;:::-;2915:13;;:38;;-1:-1:-1;;;2915:38:4;;2898:14;;-1:-1:-1;;;;;2915:13:4;;:29;;:38;;2945:7;;2915:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2898:55;-1:-1:-1;2967:20:4;2963:80;;2998:13;;:45;;-1:-1:-1;;;2998:45:4;;-1:-1:-1;;;;;2998:13:4;;;;:36;;:45;;3035:7;;2998:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2989:54;;2963:80;3057:20;3053:79;;3088:13;;:44;;-1:-1:-1;;;3088:44:4;;-1:-1:-1;;;;;3088:13:4;;;;:35;;:44;;3124:7;;3088:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3079:53;;3053:79;3224:20;3203:100;;;;-1:-1:-1;;;3203:100:4;;;;;;;:::i;:::-;3314:29;3327:7;3336:6;3314:12;:29::i;:::-;2421:929;;:::o;956:145:82:-;1046:7;1084:9;1076:18;;;;;;;1066:77:116;1104:7;1130:6;-1:-1:-1;;;;;1130:6:116;1066:77;:::o;1696:35:4:-;;;-1:-1:-1;;;;;1696:35:4;;:::o;1737:33::-;;;-1:-1:-1;;;;;1737:33:4;;:::o;964:1070:38:-;-1:-1:-1;;;;;1204:20:38;;;;;;:76;;-1:-1:-1;1262:18:38;1236:6;-1:-1:-1;;;;;1228:28:38;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;;;;;;;;1204:76;1183:181;;;;-1:-1:-1;;;1183:181:38;;;;;;;:::i;:::-;1411:15;1450:5;1457:15;1439:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1429:45;;;;;;1411:63;;1535:25;;:::i;:::-;1563:47;;-1:-1:-1;;;1563:47:38;;-1:-1:-1;;;;;1563:40:38;;;;;:47;;1604:5;;1563:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1695:13;;1672:239;;-1:-1:-1;;;1672:239:38;;1535:75;;-1:-1:-1;;;;;;1695:13:38;;1672:52;;:239;;1738:7;;1759:5;;1535:75;;1804:8;;;;1826:9;;1849:6;;1877:4;;1896:5;;1672:239;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1944:7:38;;-1:-1:-1;1927:100:38;;-1:-1:-1;1953:16:38;;-1:-1:-1;1971:24:38;;;;:9;:24;:::i;:::-;1997:29;;;;;;;;:::i;:::-;1927:100;;;;;;;;:::i;:::-;;;;;;;;964:1070;;;;;;;;:::o;234:247:82:-;343:7;451:12;425:3;409:9;403:16;;;;;;;;395:25;;387:41;;:77;;234:247;-1:-1:-1;;;234:247:82:o;1599:2214:75:-;1800:7;1890:12;1877:9;:25;1873:47;;;-1:-1:-1;1911:9:75;1904:16;;1873:47;2003:25;1989:10;:39;;;;;;;;;:82;;;-1:-1:-1;2046:25:75;2032:10;:39;;;;;;;;;1989:82;1985:1795;;;2094:60;2134:9;2145:8;2094:39;:60::i;:::-;2087:67;;;;1985:1795;2372:26;2358:10;:40;;;;;;;;;:84;;;-1:-1:-1;2416:26:75;2402:10;:40;;;;;;;;;2358:84;2354:1426;;;2458:34;2495:60;2535:9;2546:8;2495:39;:60::i;:::-;2458:97;;2641:47;2678:9;2641:36;:47::i;:::-;2573:64;2610:26;2573:36;:64::i;:::-;:115;2569:187;;;2715:26;-1:-1:-1;2708:33:75;;2569:187;2776:61;2817:9;2828:8;2776:40;:61::i;:::-;2769:68;;;;;2354:1426;2928:25;2914:10;:39;;;;;;;;;:82;;;-1:-1:-1;2971:25:75;2957:10;:39;;;;;;;;;2914:82;2910:870;;;3019:61;3060:9;3071:8;3019:40;:61::i;2910:870::-;3301:26;3287:10;:40;;;;;;;;;:84;;;-1:-1:-1;3345:26:75;3331:10;:40;;;;;;;;;3287:84;3283:497;;;3387:35;3425:61;3466:9;3477:8;3425:40;:61::i;:::-;3387:99;;3573:47;3610:9;3573:36;:47::i;:::-;3504:65;3541:27;3504:36;:65::i;:::-;:116;3500:189;;;3647:27;-1:-1:-1;3640:34:75;;3500:189;3709:60;3749:9;3760:8;3709:39;:60::i;3283:497::-;-1:-1:-1;3797:9:75;1599:2214;;;;;;;:::o;1983:240:116:-;1280:12;:10;:12::i;:::-;1270:6;;-1:-1:-1;;;;;1270:6:116;;;:22;;;1262:67;;;;-1:-1:-1;;;1262:67:116;;;;;;;:::i;:::-;-1:-1:-1;;;;;2071:22:116;::::1;2063:73;;;;-1:-1:-1::0;;;2063:73:116::1;;;;;;;:::i;:::-;2172:6;::::0;;2151:38:::1;::::0;-1:-1:-1;;;;;2151:38:116;;::::1;::::0;2172:6;::::1;::::0;2151:38:::1;::::0;::::1;2199:6;:17:::0;;-1:-1:-1;;;;;;2199:17:116::1;-1:-1:-1::0;;;;;2199:17:116;;;::::1;::::0;;;::::1;::::0;;1983:240::o;648:583:75:-;848:7;902:25;888:10;:39;;;;;;;;;:95;;;-1:-1:-1;957:26:75;943:10;:40;;;;;;;;;888:95;:150;;;-1:-1:-1;1013:25:75;999:10;:39;;;;;;;;;888:150;:206;;;-1:-1:-1;1068:26:75;1054:10;:40;;;;;;;;;888:206;871:275;;;-1:-1:-1;1126:9:75;1119:16;;871:275;1163:61;1178:9;1189:10;1201:8;1211:12;1163:14;:61::i;:::-;1156:68;648:583;-1:-1:-1;;;;;648:583:75:o;5173:3272:4:-;5247:18;;:::i;:::-;5268:13;;:31;;-1:-1:-1;;;5268:31:4;;-1:-1:-1;;;;;5268:13:4;;;;:22;;:31;;5291:7;;5268:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5247:52;-1:-1:-1;5447:22:4;5418:25;;:51;;;;;;;;;:118;;;-1:-1:-1;5514:22:4;5485:25;;:51;;;;;;;;;5418:118;:185;;;-1:-1:-1;5581:22:4;5552:25;;:51;;;;;;;;;5418:185;5397:281;;;;-1:-1:-1;;;5397:281:4;;;;;;;:::i;:::-;5780:22;5751:25;;:51;;;;;;;;;5747:130;;5826:13;;:40;;-1:-1:-1;;;5826:40:4;;-1:-1:-1;;;;;5826:13:4;;;;:31;;:40;;5858:7;;5826:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5818:48;;5747:130;5888:19;5909:20;5933:19;5945:6;5933:11;:19::i;:::-;6242:13;;:77;;-1:-1:-1;;;6242:77:4;;5887:65;;-1:-1:-1;5887:65:4;;-1:-1:-1;6516:15:4;;6158:354;;5887:65;;-1:-1:-1;;;;;6242:13:4;;;;:43;;:77;;6286:7;;6242:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6220:100;;;;;;;;;;6347:13;;:64;;-1:-1:-1;;;6347:64:4;;-1:-1:-1;;;;;6347:13:4;;;;:43;;:64;;6391:7;;6347:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6338:74;;;;;;;;;;6430:13;;:68;;-1:-1:-1;;;6430:68:4;;-1:-1:-1;;;;;6430:13:4;;;;:43;;:68;;6474:7;;6430:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6158:354::-;:373;;6097:511;;;;-1:-1:-1;;;6097:511:4;;;;;;;:::i;:::-;6756:22;;:::i;:::-;6780:13;6797:53;6827:7;6836:5;6843:6;6797:29;:53::i;:::-;6755:95;;;;6902:18;6923:45;6944:7;6953:6;6961;6923:20;:45::i;:::-;6902:66;-1:-1:-1;6983:22:4;6979:974;;7405:22;7376:25;;:51;;;;;;;;;7372:137;;;7447:13;;:47;;-1:-1:-1;;;7447:47:4;;-1:-1:-1;;;;;7447:13:4;;;;:31;;:47;;7479:7;;7488:5;;7447:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7372:137;7589:13;;:47;;-1:-1:-1;;;7589:47:4;;-1:-1:-1;;;;;7589:13:4;;;;:30;;:47;;7620:7;;7629:6;;7589:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7685:15;7703:39;7715:12;7729;7703:11;:39::i;:::-;7685:57;;7884:58;7914:7;7923:9;7934:7;7884:29;:58::i;:::-;-1:-1:-1;7868:74:4;-1:-1:-1;;6979:974:4;8000:13;;:42;;-1:-1:-1;;;8000:42:4;;-1:-1:-1;;;;;8000:13:4;;;;:22;;:42;;8023:7;;8032:9;;8000:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;8090:21:4;;;8107:4;8090:21;8086:109;;;8127:13;;:57;;-1:-1:-1;;;8127:57:4;;-1:-1:-1;;;;;8127:13:4;;;;:32;;:57;;8160:7;;8169:6;;8177;;8127:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8086:109;8239:7;8210:228;8350:4;8333:21;;;;8332:50;;8370:12;8332:50;;;8358:9;8332:50;8396:12;8422:6;8210:228;;;;;;;;:::i;768:104:115:-;855:10;768:104;:::o;3980:550:75:-;4114:7;4153:11;4141:8;:23;;;;;;;;;4137:361;;;4184:51;4225:9;4184:40;:51::i;:::-;4239:1;4184:56;4180:308;;;4267:49;4303:9;4314:1;4267:35;:49::i;:::-;4260:56;;;;4180:308;4341:51;4382:9;4341:40;:51::i;:::-;4396:1;4341:56;4337:151;;;4424:49;4460:9;4471:1;4424:35;:49::i;4337:151::-;-1:-1:-1;4514:9:75;;3980:550;-1:-1:-1;3980:550:75:o;7219:138:106:-;7276:10;7310:40;1020:12;7322:9;:27;7310:11;:40::i;:::-;-1:-1:-1;7298:52:106;7219:138;-1:-1:-1;;;7219:138:106:o;4694:551:75:-;4829:7;4868:11;4856:8;:23;;;;;;;;;4852:361;;;4899:51;4940:9;4899:40;:51::i;:::-;4954:1;4899:56;4895:308;;;4982:49;5018:9;5029:1;4982:35;:49::i;4895:308::-;5056:51;5097:9;5056:40;:51::i;:::-;5111:1;5056:56;5052:151;;;5139:49;5175:9;5186:1;5139:35;:49::i;2040:1134:38:-;2196:12;;:::i;:::-;2249:13;;:32;;-1:-1:-1;;;2249:32:38;;2210:6;;;;-1:-1:-1;;;;;2249:13:38;;;;:23;;:32;;2273:7;;2249:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2232:49;;2291:23;;:::i;:::-;2340:13;;2317:56;;-1:-1:-1;;;2317:56:38;;-1:-1:-1;;;;;2340:13:38;;;;2317:47;;:56;;2365:7;;2317:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2291:82;;2384:19;2405:20;2429:19;2441:6;2429:11;:19::i;:::-;2383:65;;;;2459:13;2488:6;-1:-1:-1;;;;;2475:42:38;;2531:5;2550;2569:6;2589:197;2628:7;2653:9;2680:92;2694:12;2708:5;:27;;;2737:5;:14;;;2753:5;:18;;;2680:13;:92::i;:::-;2589:21;:197::i;:::-;2475:321;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2459:337;;2827:6;-1:-1:-1;;;;;2814:41:38;;2869:5;2888;2907:6;2927:197;2966:7;2991:9;3018:92;3032:12;3046:5;:27;;;3075:5;:14;;;3091:5;:18;;;3018:13;:92::i;:::-;2927:21;:197::i;:::-;2814:320;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2806:328;3160:6;;-1:-1:-1;2040:1134:38;-1:-1:-1;;;;;;;;2040:1134:38:o;8839:2407:4:-;8981:4;9022:21;;;;;:45;;-1:-1:-1;9047:20:4;;;9022:45;9001:151;;;;-1:-1:-1;;;9001:151:4;;;;;;;:::i;:::-;9211:11;9207:28;;-1:-1:-1;9231:4:4;9224:11;;9207:28;9364:13;;:67;;-1:-1:-1;;;9364:67:4;;9348:13;;-1:-1:-1;;;;;9364:13:4;;:46;;:67;;9411:7;;9364:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9348:83;;9441:44;;:::i;:::-;9488:13;;:122;;-1:-1:-1;;;9488:122:4;;-1:-1:-1;;;;;9488:13:4;;;;:56;;:122;;9558:7;;9488:122;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9441:169;-1:-1:-1;9652:26:4;9624:19;:24;;;:54;;;;;;;;;9620:147;;;9729:26;;9706:50;;:22;:50::i;:::-;-1:-1:-1;9694:62:4;-1:-1:-1;9620:147:4;9777:31;;:::i;:::-;9811:13;;:35;;-1:-1:-1;;;9811:35:4;;-1:-1:-1;;;;;9811:13:4;;;;:26;;:35;;9838:7;;9811:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9777:69;;9948:13;9971;10007:1;9998:6;:10;9994:674;;;-1:-1:-1;10096:29:4;;;;-1:-1:-1;;;;;10236:19:4;;10232:94;;10283:9;:28;;;10275:36;;10232:94;9994:674;;;-1:-1:-1;10428:24:4;;-1:-1:-1;;;;;10563:19:4;;10559:99;;10610:9;:33;;;10602:41;;10559:99;10727:14;10754:1;10745:6;:10;10744:53;;10785:6;-1:-1:-1;;10785:11:4;10744:53;;;10767:6;10744:53;10727:70;;10970:6;10929:5;-1:-1:-1;;;;;10922:23:4;;10946:5;10961:4;10922:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;:97;;;-1:-1:-1;10980:30:4;;-1:-1:-1;;;10980:30:4;;11013:6;;-1:-1:-1;;;;;10980:23:4;;;;;:30;;11004:5;;10980:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;10922:97;10918:196;;;11047:7;11040:37;;;;;;:::i;:::-;;;;;;;;11098:5;11091:12;;;;;;;;;;10918:196;11191:48;;-1:-1:-1;;;11191:48:4;;-1:-1:-1;;;;;11191:26:4;;;;;:48;;11218:5;;11225;;11232:6;;11191:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11184:55;;;;;;;;8839:2407;;;;;;:::o;6898:175:106:-;7061:1;1020:12;6998:27;;;7056:1;7048:9;7047:15;7065:1;7047:19;;6898:175::o;9033:198::-;1020:12;9157:23;;9145:35;;9198:25;;;;9190:34;;;;;3309:605;3365:9;;;3425:5;3450:31;;;3365:9;3507:6;3499:1;:5;;:14;;-1:-1:-1;3550:1:106;3545;3532:6;:10;;:14;3531:20;3527:24;;;;3561:9;3590:7;3573:4;3585:1;3581:5;;3573:14;:24;;-1:-1:-1;3630:1:106;3615:4;:12;;:16;3611:1;:20;3634:2;3611:25;3607:29;;3646:10;3668:4;3664:1;3659:2;:6;:13;;;;;;;-1:-1:-1;3682:8:106;3713:2;3697:4;:13;;:18;3693:22;;;-1:-1:-1;3738:2:106;3729:6;:11;-1:-1:-1;;3803:6:106;;;;3796:3;:14;:22;;;;:26;;;3768:1;3772:2;:6;;;3759:19;;;;;;;;-1:-1:-1;3729:11:106;-1:-1:-1;3796:26:106;-1:-1:-1;;;;3309:605:106:o;10938:198::-;1020:12;11062:23;;11050:35;;11103:25;;;;11095:34;;;;;15178:713:4;15391:13;;:67;;-1:-1:-1;;;15391:67:4;;15349:7;;;;-1:-1:-1;;;;;15391:13:4;;;;:46;;:67;;15438:7;;15391:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15497:13;;:77;;-1:-1:-1;;;15497:77:4;;15372:86;;-1:-1:-1;15468:26:4;;-1:-1:-1;;;;;15497:13:4;;;;:46;;:77;;15544:7;;15497:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15468:106;;15601:18;-1:-1:-1;;;;;15589:30:4;:8;-1:-1:-1;;;;;15589:30:4;;15585:300;;15692:12;;15745:40;;15663:13;;;;-1:-1:-1;;;;;15692:12:4;;;;:25;;15745:40;;15756:8;;15766:18;;15745:40;;;:::i;:::-;;;;;;;;;;;;;15735:51;;;;;;15804:9;15692:135;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15662:165;;;;15845:5;15841:33;;;-1:-1:-1;15867:6:4;-1:-1:-1;15852:22:4;;-1:-1:-1;;15852:22:4;15841:33;15585:300;;;15178:713;;;;;;;:::o;11609:3425::-;11774:7;11814:12;11801:9;:25;;;;;;;;;11797:3203;;;11917:12;;;11960:13;:84;;-1:-1:-1;;;11960:84:4;;11885:16;;;;-1:-1:-1;;;;;11917:12:4;;;;:25;;11960:13;;;;:46;;:84;;12007:7;;11960:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12062:9;11917:168;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11884:201;;;;12103:5;12099:36;;;-1:-1:-1;12125:9:4;-1:-1:-1;12110:25:4;;12099:36;11797:3203;;;;;12169:12;12156:9;:25;;;;;;;;;12152:2848;;;-1:-1:-1;12289:15:4;12274:31;;12152:2848;12339:12;12326:9;:25;;;;;;;;;12322:2678;;;12438:44;;:::i;:::-;12485:13;;:134;;-1:-1:-1;;;12485:134:4;;-1:-1:-1;;;;;12485:13:4;;;;:56;;:134;;12559:7;;12485:134;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12438:181;-1:-1:-1;12665:26:4;12637:19;:24;;;:54;;;;;;;;;12633:639;;;12739:26;;12836:27;;;;12913:66;;-1:-1:-1;;;12913:66:4;;-1:-1:-1;;;;;12913:47:4;;;;;:66;;12739:26;;12913:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:74;;12983:4;12913:74;12884:198;;;;-1:-1:-1;;;12884:198:4;;;;;;;:::i;:::-;13136:103;;-1:-1:-1;;;13136:103:4;;-1:-1:-1;;;;;13136:63:4;;;;;:103;;13200:17;;13136:103;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13107:150;-1:-1:-1;13100:157:4;;-1:-1:-1;;;13100:157:4;12633:639;13285:44;;:::i;:::-;13332:13;;:134;;-1:-1:-1;;;13332:134:4;;-1:-1:-1;;;;;13332:13:4;;;;:56;;:134;;13406:7;;13332:134;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13285:181;-1:-1:-1;13530:25:4;13501:19;:25;;;:54;;;;;;;;;:127;;;;-1:-1:-1;13603:25:4;13575:19;:24;;;:53;;;;;;;;;13501:127;13480:403;;;13693:12;;13740:26;;13693:122;;-1:-1:-1;;;13693:122:4;;13662:15;;;;-1:-1:-1;;;;;13693:12:4;;;;:25;;:122;;13788:9;;13693:122;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13661:154;;;;13837:5;13833:35;;;-1:-1:-1;13859:8:4;-1:-1:-1;13844:24:4;;-1:-1:-1;;13844:24:4;13833:35;13480:403;;12322:2678;;;;;13916:13;13903:9;:26;;;;;;;;;13899:1101;;;13945:44;;:::i;:::-;13992:13;;:134;;-1:-1:-1;;;13992:134:4;;-1:-1:-1;;;;;13992:13:4;;;;:56;;:134;;14066:7;;13992:134;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13945:181;-1:-1:-1;14190:25:4;14161:19;:25;;;:54;;;;;;;;;:127;;;;-1:-1:-1;14263:25:4;14235:19;:24;;;:53;;;;;;;;;14161:127;14140:819;;;14385:12;;14432:26;;14385:122;;-1:-1:-1;;;14385:122:4;;14322:35;;;;-1:-1:-1;;;;;14385:12:4;;;;:25;;:122;;14480:9;;14385:122;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14585:12;;14632:26;;14585:12;14680:13;:65;;-1:-1:-1;;;14680:65:4;;14321:186;;-1:-1:-1;14321:186:4;;-1:-1:-1;14526:33:4;;;;-1:-1:-1;;;;;14585:12:4;;;;:25;;14632:26;14680:13;;;:43;;:65;;14724:7;;14680:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14585:178;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14525:238;;;;14785:17;:36;;;;;14806:15;14785:36;14781:164;;;14860:65;:28;14898:26;14860:65;:37;:65;:::i;:::-;14852:74;-1:-1:-1;14845:81:4;;-1:-1:-1;;;;;14845:81:4;14781:164;14140:819;;;;;-1:-1:-1;14987:1:4;;-1:-1:-1;14972:17:4;;13899:1101;-1:-1:-1;15025:1:4;11609:3425;;;;;:::o;1146:600:80:-;1231:6;1261;1253:55;;;;-1:-1:-1;;;1253:55:80;;;;;;;:::i;:::-;1372:6;1368:20;;-1:-1:-1;1387:1:80;1380:8;;1368:20;353:15;1409:25;;;;:1;:25;:1;1452:5;;;;;:30;1444:81;;;;-1:-1:-1;;;1444:81:80;;;;;;;:::i;:::-;1546:1;-1:-1:-1;;1546:7:80;:26;;;;;-1:-1:-1;;;1557:1:80;:15;1546:26;1544:29;1536:80;;;;-1:-1:-1;;;1536:80:80;;;;;;;:::i;:::-;1626:8;1641:1;1637;:5;;;;;;;-1:-1:-1;1660:6:80;1652:68;;;;-1:-1:-1;;;1652:68:80;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;5:130;72:20;;97:33;72:20;97:33;:::i;142:134::-;220:13;;238:33;220:13;238:33;:::i;1396:188::-;1501:13;;1519:60;1501:13;1519:60;:::i;1756:162::-;1848:13;;1866:47;1848:13;1866:47;:::i;1925:184::-;2028:13;;2046:58;2028:13;2046:58;:::i;3061:170::-;3157:13;;3175:51;3157:13;3175:51;:::i;3238:166::-;3323:20;;3348:51;3323:20;3348:51;:::i;3411:170::-;3507:13;;3525:51;3507:13;3525:51;:::i;3757:166::-;3851:13;;3869:49;3851:13;3869:49;:::i;5769:166::-;;5887:3;5878:6;5873:3;5869:16;5865:26;5862:2;;;-1:-1;;5894:12;5862:2;-1:-1;5914:15;5855:80;-1:-1;5855:80::o;13088:881::-;;13224:4;13212:9;13207:3;13203:19;13199:30;13196:2;;;-1:-1;;13232:12;13196:2;13260:20;13224:4;13260:20;:::i;:::-;13251:29;;1148:6;1142:13;13346:16;13339:86;13489:2;13558:9;13554:22;1142:13;13489:2;13508:5;13504:16;13497:86;13645:2;13741:9;13737:22;2412:13;2430:60;2484:5;2430:60;:::i;:::-;13645:2;13660:16;;13653:113;13827:2;13919:22;;2412:13;2430:60;2412:13;2430:60;:::i;:::-;13827:2;13842:16;;13835:113;13846:5;13190:779;-1:-1;;13190:779::o;13993:810::-;;14115:4;14103:9;14098:3;14094:19;14090:30;14087:2;;;-1:-1;;14123:12;14087:2;14151:20;14115:4;14151:20;:::i;:::-;14142:29;;19317:6;19311:13;14232:16;14225:86;14369:2;14445:9;14441:22;2028:13;2046:58;2098:5;2046:58;:::i;:::-;14369:2;14384:16;;14377:93;14528:2;14600:22;;1848:13;1866:47;1848:13;1866:47;:::i;:::-;14528:2;14543:16;;14536:93;14691:2;14753:22;;867:13;885:30;867:13;885:30;:::i;14826:650::-;;14947:4;14935:9;14930:3;14926:19;14922:30;14919:2;;;-1:-1;;14955:12;14919:2;14983:20;14947:4;14983:20;:::i;:::-;14974:29;;19317:6;19311:13;15064:16;15057:86;15201:2;15277:9;15273:22;2028:13;2046:58;2098:5;2046:58;:::i;:::-;15201:2;15216:16;;15209:93;15364:2;15426:22;;867:13;885:30;867:13;885:30;:::i;:::-;15364:2;15379:16;;15372:83;15383:5;14913:563;-1:-1;;14913:563::o;19511:241::-;;19615:2;19603:9;19594:7;19590:23;19586:32;19583:2;;;-1:-1;;19621:12;19583:2;85:6;72:20;97:33;124:5;97:33;:::i;19759:263::-;;19874:2;19862:9;19853:7;19849:23;19845:32;19842:2;;;-1:-1;;19880:12;19842:2;226:6;220:13;238:33;265:5;238:33;:::i;20029:366::-;;;20150:2;20138:9;20129:7;20125:23;20121:32;20118:2;;;-1:-1;;20156:12;20118:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;20208:63;20308:2;20347:22;;;;19163:20;;-1:-1;;;20112:283::o;20402:257::-;;20514:2;20502:9;20493:7;20489:23;20485:32;20482:2;;;-1:-1;;20520:12;20482:2;873:6;867:13;885:30;909:5;885:30;:::i;20666:241::-;;20770:2;20758:9;20749:7;20745:23;20741:32;20738:2;;;-1:-1;;20776:12;20738:2;-1:-1;994:20;;20732:175;-1:-1;20732:175::o;20914:263::-;;21029:2;21017:9;21008:7;21004:23;21000:32;20997:2;;;-1:-1;;21035:12;20997:2;-1:-1;1142:13;;20991:186;-1:-1;20991:186::o;21184:366::-;;;21305:2;21293:9;21284:7;21280:23;21276:32;21273:2;;;-1:-1;;21311:12;21273:2;-1:-1;;994:20;;;21463:2;21502:22;;;994:20;;-1:-1;21267:283::o;21557:299::-;;21690:2;21678:9;21669:7;21665:23;21661:32;21658:2;;;-1:-1;;21696:12;21658:2;3513:6;3507:13;3525:51;3570:5;3525:51;:::i;21863:271::-;;21982:2;21970:9;21961:7;21957:23;21953:32;21950:2;;;-1:-1;;21988:12;21950:2;4781:6;4768:20;4793:48;4835:5;4793:48;:::i;22141:396::-;;;22277:2;22265:9;22256:7;22252:23;22248:32;22245:2;;;-1:-1;;22283:12;22245:2;4781:6;4768:20;4793:48;4835:5;4793:48;:::i;22812:391::-;;;22940:2;22928:9;22919:7;22915:23;22911:32;22908:2;;;-1:-1;;22946:12;22908:2;5683:6;5677:13;22998:73;;23108:2;23159:9;23155:22;867:13;885:30;909:5;885:30;:::i;:::-;23116:71;;;;22902:301;;;;;:::o;23210:328::-;;23357:3;23345:9;23336:7;23332:23;23328:33;23325:2;;;-1:-1;;23364:12;23325:2;6138:20;23357:3;6138:20;:::i;:::-;226:6;220:13;238:33;265:5;238:33;:::i;:::-;6225:86;;6386:2;6451:22;;220:13;238:33;220:13;238:33;:::i;:::-;6386:2;6401:16;;6394:86;6556:2;6621:22;;220:13;238:33;220:13;238:33;:::i;:::-;6556:2;6571:16;;6564:86;6730:2;6795:22;;220:13;238:33;220:13;238:33;:::i;:::-;6730:2;6745:16;;6738:86;6749:5;23319:219;-1:-1;;;23319:219::o;23545:1037::-;;;;;;;23805:9;23796:7;23792:23;23817:4;23792:23;23788:34;23785:2;;;-1:-1;;23825:12;23785:2;6993:4;;6975:16;6971:27;6968:2;;;-1:-1;;7001:12;6968:2;23877:94;;-1:-1;24021:20;;24008:34;;-1:-1;24062:18;24051:30;;;24048:2;;;-1:-1;;24084:12;24048:2;24185:6;24174:9;24170:22;431:3;424:4;416:6;412:17;408:27;398:2;;-1:-1;;439:12;398:2;482:6;469:20;459:30;;24062:18;501:6;498:30;495:2;;;-1:-1;;531:12;495:2;626:3;575:4;;610:6;606:17;567:6;592:32;;589:41;586:2;;;-1:-1;;633:12;586:2;575:4;563:17;;-1:-1;24104:98;;-1:-1;24259:87;;-1:-1;24338:7;24239:4;24314:22;;24259:87;:::i;:::-;24249:97;;24403:53;24448:7;24383:4;24428:9;24424:22;24403:53;:::i;:::-;24393:63;;24513:53;24558:7;24493:4;24538:9;24534:22;24513:53;:::i;:::-;24503:63;;23779:803;;;;;;;;:::o;24589:323::-;;24733:4;24721:9;24712:7;24708:23;24704:34;24701:2;;;-1:-1;;24741:12;24701:2;7240:22;7255:6;7240:22;:::i;:::-;7352:78;7426:3;7402:22;7352:78;:::i;:::-;7334:16;7327:104;7529:74;7599:3;7496:2;7579:9;7575:22;7529:74;:::i;:::-;7496:2;7515:5;7511:16;7504:100;7706:78;7780:3;7673:2;7760:9;7756:22;7706:78;:::i;:::-;7673:2;7692:5;7688:16;7681:104;7893:84;7973:3;7860:2;7953:9;7949:22;7893:84;:::i;:::-;7860:2;7879:5;7875:16;7868:110;8090:87;8173:3;8056;8153:9;8149:22;8090:87;:::i;:::-;8056:3;8076:5;8072:16;8065:113;8289:86;8371:3;8255;8351:9;8347:22;8289:86;:::i;:::-;8255:3;8275:5;8271:16;8264:112;8477:76;8549:3;8443;8529:9;8525:22;8477:76;:::i;:::-;8443:3;8463:5;8459:16;8452:102;8653:60;8709:3;8619;8689:9;8685:22;8653:60;:::i;:::-;8619:3;8639:5;8635:16;8628:86;8789:3;8825:60;8881:3;8789;8861:9;8857:22;8825:60;:::i;:::-;8805:18;;;8798:88;8959:3;9027:22;;;19311:13;8975:18;;;8968:88;9123:3;9191:22;;;19311:13;9139:18;;;9132:88;9296:3;9364:22;;;19311:13;9312:18;;;9305:88;9462:3;9530:22;;;19311:13;9478:18;;;9471:88;9625:3;9693:22;;;19311:13;9641:18;;;9634:88;9806:3;9874:22;;;19311:13;9822:18;;;9815:88;9988:3;10056:22;;;19311:13;10004:18;;;9997:88;10165:3;10233:22;;;19311:13;10181:18;;;10174:88;10331:3;10398:22;;;5677:13;10347:18;;;10340:87;10494:3;10561:22;;;5677:13;10510:18;;;10503:87;10655:3;10722:22;;;5677:13;10671:18;;;10664:87;10825:3;10892:22;;;5677:13;10841:18;;;10834:87;10988:3;11055:22;;;5677:13;11004:18;;;10997:87;11152:3;11188:81;11265:3;11241:22;;;11188:81;:::i;:::-;11168:18;;;11161:109;11344:3;11380:81;11457:3;11433:22;;;11380:81;:::i;:::-;11371:6;11364:5;11360:18;11353:109;11535:3;11571:81;11648:3;11535;11628:9;11624:22;11571:81;:::i;:::-;11562:6;11555:5;11551:18;11544:109;11722:3;11758:81;11835:3;11722;11815:9;11811:22;11758:81;:::i;:::-;11344:3;11742:5;11738:18;11731:109;11948:81;12025:3;11911:4;12005:9;12001:22;11948:81;:::i;:::-;11939:6;11932:5;11928:18;11921:109;12141:82;12219:3;12104:4;12199:9;12195:22;12141:82;:::i;:::-;12132:6;12125:5;12121:18;12114:110;12336:82;12414:3;12299:4;12394:9;12390:22;12336:82;:::i;:::-;11535:3;12320:5;12316:18;12309:110;12526:82;12604:3;12489:4;12584:9;12580:22;12526:82;:::i;:::-;12517:6;12510:5;12506:18;12499:110;12722:96;12814:3;12685:4;12794:9;12790:22;12722:96;:::i;:::-;12713:6;12706:5;12702:18;12695:124;12932:96;13024:3;12895:4;13004:9;13000:22;12932:96;:::i;:::-;12912:18;;;12905:124;-1:-1;12916:5;;24695:217;-1:-1;;;;24695:217::o;24919:336::-;;25070:3;25058:9;25049:7;25045:23;25041:33;25038:2;;;-1:-1;;25077:12;25038:2;25139:100;25231:7;25207:22;25139:100;:::i;25262:312::-;;25401:3;;25389:9;25380:7;25376:23;25372:33;25369:2;;;-1:-1;;25408:12;25369:2;15664:22;25401:3;15664:22;:::i;:::-;15783:85;15864:3;15840:22;15783:85;:::i;:::-;15758:111;;15936:2;16001:22;;;19311:13;15951:16;;;15944:86;16104:2;16169:22;;;19311:13;16119:16;;;16112:86;16267:2;16332:22;;;19311:13;16282:16;;;16275:86;16430:3;16496:22;;;19311:13;16446:16;;;16439:86;16597:3;16663:22;;;19311:13;16613:16;;;16606:86;16762:3;16828:22;;;19311:13;16778:16;;;16771:86;16931:3;16996:22;;;5677:13;16947:16;;;16940:85;17097:3;17164:22;;;5677:13;17113:18;;;17106:87;17260:3;17327:22;;;5677:13;17276:18;;;17269:87;17432:3;17499:22;;;5677:13;17448:18;;;17441:87;17610:3;17677:22;;;5677:13;17626:18;;;17619:87;17788:3;17855:22;;;5677:13;17804:18;;;17797:87;17971:3;18038:22;;;5677:13;17987:18;;;17980:87;18138:3;18205:22;;;5677:13;18154:18;;;18147:87;18307:3;18374:22;;;5677:13;18323:18;;;18316:87;18468:3;18535:22;;;5677:13;18484:18;;;18477:87;18638:3;18705:22;;;5677:13;18654:18;;;18647:87;18803:3;18870:22;;;5677:13;18819:18;;;18812:87;18972:3;19039:22;;;5677:13;18988:18;;;18981:87;;;;-1:-1;15765:16;;25363:211;-1:-1;;25363:211::o;25851:699::-;;;;;26047:3;26035:9;26026:7;26022:23;26018:33;26015:2;;;-1:-1;;26054:12;26015:2;19176:6;19163:20;26106:63;;26206:2;26276:9;26272:22;1299:20;1324:60;1378:5;1324:60;:::i;:::-;26214:90;-1:-1;26341:2;26394:22;;1672:20;1697:47;1672:20;1697:47;:::i;:::-;26009:541;;;;-1:-1;26349:77;;26463:2;26502:22;19163:20;;-1:-1;;26009:541::o;26557:259::-;;26670:2;26658:9;26649:7;26645:23;26641:32;26638:2;;;-1:-1;;26676:12;26638:2;19456:6;19450:13;89264:4;96196:5;89253:16;96173:5;96170:33;96160:2;;-1:-1;;96207:12;26972:103;-1:-1;;;;;89048:54;27033:37;;27027:48::o;28395:166::-;92502:1;92495:5;92492:12;92482:2;;92508:9;92482:2;28481:75;;28475:86::o;28568:140::-;87186:47;87227:5;87186:47;:::i;28715:162::-;87338:58;87390:5;87338:58;:::i;29230:148::-;93103:2;93096:5;93093:13;93083:2;;93110:9;29385:148;93220:2;93213:5;93210:13;93200:2;;93227:9;29705:144;93335:1;93328:5;93325:12;93315:2;;93341:9;40124:7450;85235:2;40404:16;85226:12;40427:79;40491:14;85182:57;85226:12;40404:16;85182:57;:::i;:::-;40427:79;:::i;:::-;40572:64;40619:16;40612:5;40572:64;:::i;:::-;40642:75;85235:2;40706:3;40702:14;40688:12;40642:75;:::i;:::-;;;40787:68;40849:4;40842:5;40838:16;40831:5;40787:68;:::i;:::-;40861:79;40849:4;40929:3;40925:14;40911:12;40861:79;:::i;:::-;;41016:74;41084:4;41077:5;41073:16;41066:5;41016:74;:::i;:::-;41096:85;41084:4;41170:3;41166:14;41152:12;41096:85;:::i;:::-;;41260:77;41331:4;41324:5;41320:16;41313:5;41260:77;:::i;:::-;41343:88;41331:4;41420:3;41416:14;41402:12;41343:88;:::i;:::-;;41509:76;41579:4;41572:5;41568:16;41561:5;41509:76;:::i;:::-;41591:87;41579:4;41667:3;41663:14;41649:12;41591:87;:::i;:::-;;41746:66;41806:4;41799:5;41795:16;41788:5;41746:66;:::i;:::-;41818:77;41806:4;41884:3;41880:14;41866:12;41818:77;:::i;:::-;;41961:50;42005:4;41998:5;41994:16;41987:5;41961:50;:::i;:::-;42017:63;42005:4;42069:3;42065:14;42051:12;42017:63;:::i;:::-;;42200:6;42156:52;42200:6;42193:5;42189:18;42182:5;42156:52;:::i;:::-;42214:65;42200:6;42266:3;42262:16;42248:12;42214:65;:::i;:::-;-1:-1;;42397:6;42386:18;;;19163:20;42459:16;;;27870:37;42588:6;42577:18;;;19163:20;42650:16;;;27870:37;42788:6;42777:18;;;19163:20;42850:16;;;27870:37;42981:6;42970:18;;;19163:20;43043:16;;;27870:37;43171:6;43160:18;;;19163:20;43233:16;;;27870:37;43379:6;43368:18;;;19163:20;43441:16;;;27870:37;43588:6;43577:18;;;19163:20;43650:16;;;27870:37;43792:6;43781:18;;;19163:20;43854:16;;;27870:37;43984:6;43973:18;;;5531:20;44044:16;;;27870:37;44172:6;44161:18;;;5531:20;44232:16;;;27870:37;44358:6;44347:18;;;5531:20;44418:16;;;27870:37;44553:6;44542:18;;;5531:20;44613:16;;;27870:37;44741:6;44730:18;;;5531:20;44801:16;;;27870:37;44954:6;44968:109;45060:16;;;44943:18;;;44968:109;:::i;:::-;;45219:6;45233:109;45219:6;45329:3;45325:16;45219:6;45212:5;45208:18;45233:109;:::i;:::-;;45483:6;45497:109;45483:6;45593:3;45589:16;45483:6;45476:5;45472:18;45497:109;:::i;:::-;;45743:6;45757:109;45743:6;45853:3;45849:16;45743:6;45736:5;45732:18;45757:109;:::i;:::-;;46005:6;46019:109;46005:6;46115:3;46111:16;46005:6;45998:5;45994:18;46019:109;:::i;:::-;;46271:6;46285:111;46271:6;46383:3;46379:16;46271:6;46264:5;46260:18;46285:111;:::i;:::-;;46540:6;46554:111;46540:6;46652:3;46648:16;46540:6;46533:5;46529:18;46554:111;:::i;:::-;;46804:6;46818:111;46804:6;46916:3;46912:16;46804:6;46797:5;46793:18;46818:111;:::i;:::-;;47088:6;47102:139;47088:6;47228:3;47224:16;47088:6;47081:5;47077:18;47102:139;:::i;:::-;;47400:6;47414:139;47400:6;47540:3;47536:16;47400:6;47393:5;47389:18;47414:139;:::i;:::-;;40250:7324;;:::o;53855:1016::-;1007:6;994:20;27877:3;27870:37;84205:2;54113:16;84196:12;994:20;84205:2;54372:3;54368:14;27870:37;84196:12;54113:16;84196:12;2210:20;2235:60;2289:5;2235:60;:::i;:::-;87503;87557:5;87503:60;:::i;:::-;84196:12;54602:14;;29143:75;84898:12;;;2210:20;2235:60;2210:20;2235:60;:::i;:::-;87503;87557:5;87503:60;:::i;:::-;90613:51;84898:12;54839:3;54835:14;28970:75;;53985:886;;:::o;54937:852::-;55166:16;55160:23;27877:3;27870:37;55334:4;55327:5;55323:16;55317:23;55334:4;55398:3;55394:14;27870:37;55489:4;55482:5;55478:16;55472:23;87503:60;87557:5;87503:60;:::i;:::-;55489:4;55574:14;;29143:75;55668:4;55657:16;;55651:23;87503:60;55651:23;87503:60;:::i;55827:885::-;19176:6;19163:20;27877:3;27870:37;86650:2;56052:16;86641:12;4021:20;4046:57;4097:5;4046:57;:::i;:::-;87338:58;87390:5;87338:58;:::i;:::-;86650:2;56313:14;;30419:55;56438:4;56427:16;;1672:20;1697:47;1672:20;1697:47;:::i;:::-;87186;87227:5;87186:47;:::i;:::-;56438:4;56503:14;;30552:55;56622:4;56611:16;;725:20;750:30;725:20;750:30;:::i;:::-;27790:5;86832:13;86825:21;56622:4;56680:3;56676:14;27763:34;;55929:783;;:::o;56750:764::-;56946:16;56940:23;27877:3;27870:37;57108:4;57101:5;57097:16;57091:23;87338:58;87390:5;87338:58;:::i;:::-;57108:4;57173:14;;30419:55;57264:4;57253:16;;57247:23;87186:47;57247:23;87186:47;:::i;:::-;57264:4;57329:14;;30552:55;57424:4;57413:16;;;57407:23;86832:13;86825:21;57478:14;;27763:34;56850:664::o;57550:693::-;19176:6;19163:20;27877:3;27870:37;86650:2;57773:16;86641:12;4021:20;4046:57;4097:5;4046:57;:::i;:::-;87338:58;87390:5;87338:58;:::i;:::-;86650:2;58034:14;;30419:55;85884:12;;;725:20;750:30;725:20;750:30;:::i;:::-;27790:5;86832:13;86825:21;85884:12;58211:3;58207:14;27763:34;;57650:593;;:::o;58279:606::-;58473:16;58467:23;27877:3;27870:37;58635:4;58628:5;58624:16;58618:23;87338:58;87390:5;87338:58;:::i;:::-;58635:4;58700:14;;30419:55;58795:4;58784:16;;;58778:23;86832:13;86825:21;58849:14;;27763:34;58377:508::o;58927:3535::-;59180:86;59251:14;59157:16;59151:23;59180:86;:::i;:::-;59351:4;59340:16;;;59334:23;59411:14;;;27870:37;59518:4;59507:16;;;59501:23;59578:14;;;27870:37;59680:4;59669:16;;;59663:23;59740:14;;;27870:37;59842:4;59831:16;;;59825:23;59902:14;;;27870:37;60007:4;59996:16;;;59990:23;60067:14;;;27870:37;60170:4;60159:16;;;60153:23;60230:14;;;27870:37;60337:4;60326:16;;;60320:23;60395:14;;;27870:37;60500:6;60489:18;;;60483:25;60560:16;;;27870:37;60662:6;60651:18;;;60645:25;60722:16;;;27870:37;60833:6;60822:18;;;60816:25;60893:16;;;27870:37;61010:6;60999:18;;;60993:25;61070:16;;;27870:37;61187:6;61176:18;;;61170:25;61247:16;;;27870:37;61369:6;61358:18;;;61352:25;61429:16;;;27870:37;61535:6;61524:18;;;61518:25;61595:16;;;27870:37;61703:6;61692:18;;;61686:25;61763:16;;;27870:37;61863:6;61852:18;;;61846:25;61923:16;;;27870:37;62032:6;62021:18;;;62015:25;62092:16;;;27870:37;62196:6;62185:18;;;62179:25;62256:16;;;27870:37;62364:6;62353:18;;;62347:25;62424:16;;27870:37;59041:3421::o;62699:222::-;-1:-1;;;;;89048:54;;;;27033:37;;62826:2;62811:18;;62797:124::o;62928:333::-;-1:-1;;;;;89048:54;;;27033:37;;89048:54;;63247:2;63232:18;;27033:37;63083:2;63068:18;;63054:207::o;63268:444::-;-1:-1;;;;;89048:54;;;27033:37;;89048:54;;;;63615:2;63600:18;;27033:37;63698:2;63683:18;;27870:37;;;;63451:2;63436:18;;63422:290::o;63719:333::-;-1:-1;;;;;89048:54;;;;27033:37;;64038:2;64023:18;;27870:37;63874:2;63859:18;;63845:207::o;64059:222::-;27870:37;;;64186:2;64171:18;;64157:124::o;64288:349::-;27870:37;;;-1:-1;;;;;89048:54;64623:2;64608:18;;26902:58;64451:2;64436:18;;64422:215::o;64644:333::-;27870:37;;;64963:2;64948:18;;27870:37;64799:2;64784:18;;64770:207::o;64984:440::-;27870:37;;;65329:2;65314:18;;27870:37;;;;65410:2;65395:18;;27870:37;65165:2;65150:18;;65136:288::o;65431:459::-;27870:37;;;-1:-1;;;65876:2;65861:18;;30980:34;65649:2;65634:18;;65620:270::o;65897:459::-;27870:37;;;-1:-1;;;66342:2;66327:18;;32501:23;66115:2;66100:18;;66086:270::o;66363:459::-;27870:37;;;-1:-1;;;66808:2;66793:18;;33074:24;66581:2;66566:18;;66552:270::o;66829:459::-;27870:37;;;33261:27;67274:2;67259:18;;33249:40;67047:2;67032:18;;67018:270::o;67295:459::-;27870:37;;;-1:-1;;;67740:2;67725:18;;33440:33;67513:2;67498:18;;67484:270::o;67761:459::-;27870:37;;;-1:-1;;;68206:2;68191:18;;35186:36;67979:2;67964:18;;67950:270::o;68227:459::-;27870:37;;;-1:-1;;;68672:2;68657:18;;36119:27;68445:2;68430:18;;68416:270::o;68693:459::-;27870:37;;;-1:-1;;;69138:2;69123:18;;37467:32;68911:2;68896:18;;68882:270::o;69159:459::-;27870:37;;;-1:-1;;;69604:2;69589:18;;38054:23;69377:2;69362:18;;69348:270::o;69625:459::-;27870:37;;;-1:-1;;;70070:2;70055:18;;39005:34;69843:2;69828:18;;69814:270::o;70091:1529::-;;70648:4;27900:5;27877:3;27870:37;70746:132;70874:2;70863:9;70859:18;70850:6;70746:132;:::i;:::-;70889:122;71005:4;70994:9;70990:20;70981:6;70889:122;:::i;:::-;71044:4;71029:20;;71022:50;;;70633:20;;83605:19;;;83645:14;-1:-1;;;;;27481:78;;27478:2;;;-1:-1;;27562:12;27478:2;70874;27597:6;27593:17;92334:6;92329:3;83645:14;70637:9;83645:14;92311:30;92372:16;;;92365:27;;;72:20;;97:33;72:20;97:33;:::i;:::-;-1:-1;;;;;89048:54;;;71349:4;71334:20;;27033:37;83946:12;;;;89059:42;83920:39;83946:12;70874:2;83946:12;;83920:39;:::i;:::-;89048:54;39640:14;71338:9;39640:14;27033:37;83946:12;39769:5;83946:12;89059:42;83920:39;83946:12;83941:3;83920:39;:::i;:::-;89048:54;39836:14;71338:9;39836:14;27033:37;89059:42;83920:39;83946:12;39969:5;83946:12;83941:3;83920:39;:::i;:::-;89048:54;40036:14;71338:9;40036:14;27033:37;;;;71366:74;71434:4;71423:9;71419:20;71410:6;71366:74;:::i;:::-;71451;71519:4;71508:9;71504:20;71495:6;71451:74;:::i;:::-;71536;71604:4;71593:9;71589:20;71580:6;71536:74;:::i;:::-;70619:1001;;;;;;;;;;;;:::o;71627:430::-;27870:37;;;71830:3;71815:19;;71927:120;72043:2;72028:18;;72019:6;71927:120;:::i;72952:476::-;73151:2;73136:18;;93220:2;93210:13;;93200:2;;93227:9;93200:2;29462:66;;;-1:-1;;;;;89048:54;;;73331:2;73316:18;;27033:37;89048:54;;73414:2;73399:18;;;27033:37;73122:306;:::o;73435:359::-;73603:2;73588:18;;93694:2;93684:13;;93674:2;;93701:9;93674:2;30278:63;;;73780:2;73765:18;27870:37;73574:220;:::o;73801:466::-;73995:2;73980:18;;93694:2;93684:13;;93674:2;;93701:9;93674:2;30278:63;;;74172:2;74157:18;;27870:37;;;;74253:2;74238:18;;;27870:37;73966:301;:::o;74274:416::-;74474:2;74488:47;;;31253:2;74459:18;;;83605:19;31289:34;83645:14;;;31269:55;-1:-1;;;31344:12;;;31337:35;31391:12;;;74445:245::o;74697:416::-;74897:2;74911:47;;;31642:2;74882:18;;;83605:19;31678:34;83645:14;;;31658:55;-1:-1;;;31733:12;;;31726:30;31775:12;;;74868:245::o;75120:348::-;-1:-1;;;31938:33;;75310:2;75295:18;;75281:187::o;75475:416::-;75675:2;75689:47;;;32210:2;75660:18;;;83605:19;32246:34;83645:14;;;32226:55;-1:-1;;;32301:12;;;32294:25;32338:12;;;75646:245::o;75898:416::-;76098:2;76112:47;;;32763:2;76083:18;;;83605:19;32799:34;83645:14;;;32779:55;-1:-1;;;32854:12;;;32847:45;32911:12;;;76069:245::o;76321:416::-;76521:2;76535:47;;;33712:2;76506:18;;;83605:19;33748:34;83645:14;;;33728:55;-1:-1;;;33803:12;;;33796:38;33853:12;;;76492:245::o;76744:416::-;76944:2;76958:47;;;34104:2;76929:18;;;83605:19;34140:34;83645:14;;;34120:55;-1:-1;;;34195:12;;;34188:35;34242:12;;;76915:245::o;77167:416::-;77367:2;77381:47;;;34493:2;77352:18;;;83605:19;34529:34;83645:14;;;34509:55;-1:-1;;;34584:12;;;34577:32;34628:12;;;77338:245::o;77590:416::-;77790:2;77804:47;;;34879:2;77775:18;;;83605:19;34915:34;83645:14;;;34895:55;-1:-1;;;34970:12;;;34963:41;35023:12;;;77761:245::o;78013:416::-;78213:2;78227:47;;;35461:2;78198:18;;;83605:19;35497:34;83645:14;;;35477:55;35566:29;35552:12;;;35545:51;35615:12;;;78184:245::o;78436:416::-;78636:2;78650:47;;;78621:18;;;83605:19;35902:34;83645:14;;;35882:55;35956:12;;;78607:245::o;78859:416::-;79059:2;79073:47;;;36385:2;79044:18;;;83605:19;36421:34;83645:14;;;36401:55;-1:-1;;;36476:12;;;36469:30;36518:12;;;79030:245::o;79282:416::-;79482:2;79496:47;;;36769:2;79467:18;;;83605:19;36805:34;83645:14;;;36785:55;-1:-1;;;36860:12;;;36853:43;36915:12;;;79453:245::o;79705:416::-;79905:2;79919:47;;;37166:2;79890:18;;;83605:19;37202:34;83645:14;;;37182:55;-1:-1;;;37257:12;;;37250:35;37304:12;;;79876:245::o;80128:416::-;80328:2;80342:47;;;37738:2;80313:18;;;83605:19;37774:34;83645:14;;;37754:55;37843:28;37829:12;;;37822:50;37891:12;;;80299:245::o;80551:416::-;80751:2;80765:47;;;38316:2;80736:18;;;83605:19;38352:34;83645:14;;;38332:55;-1:-1;;;38407:12;;;38400:41;38460:12;;;80722:245::o;80974:416::-;81174:2;81188:47;;;38711:2;81159:18;;;83605:19;38747:34;83645:14;;;38727:55;-1:-1;;;38802:12;;;38795:28;38842:12;;;81145:245::o;81397:344::-;81584:4;81569:20;;81600:131;81573:9;81704:6;81600:131;:::i;81748:457::-;81963:4;81948:20;;81979:131;81952:9;82083:6;81979:131;:::i;:::-;27900:5;82189:4;82178:9;82174:20;27870:37;81934:271;;;;;:::o;82212:775::-;;82529:4;82518:9;82514:20;82506:28;;47882:79;47946:14;47859:16;47853:23;47882:79;:::i;:::-;48044:4;48037:5;48033:16;48027:23;48056:75;48044:4;48120:3;48116:14;48102:12;48056:75;:::i;:::-;;48218:4;48211:5;48207:16;48201:23;48230:79;48218:4;48298:3;48294:14;48280:12;48230:79;:::i;:::-;;48402:4;48395:5;48391:16;48385:23;48414:85;48402:4;48488:3;48484:14;48470:12;48414:85;:::i;:::-;;48595:4;48588:5;48584:16;48578:23;48607:88;48595:4;48684:3;48680:14;48666:12;48607:88;:::i;:::-;;48790:4;48783:5;48779:16;48773:23;48802:87;48790:4;48878:3;48874:14;48860:12;48802:87;:::i;:::-;;48974:4;48967:5;48963:16;48957:23;48986:77;48974:4;49052:3;49048:14;49034:12;48986:77;:::i;:::-;;49146:4;49139:5;49135:16;49129:23;49158:63;49146:4;49210:3;49206:14;49192:12;49158:63;:::i;:::-;;49314:6;;49307:5;49303:18;49297:25;49328:65;49314:6;49380:3;49376:16;49362:12;49328:65;:::i;:::-;-1:-1;;49484:6;49473:18;;;49467:25;49546:16;;;27870:37;49648:6;49637:18;;;49631:25;49710:16;;;27870:37;49821:6;49810:18;;;49804:25;49883:16;;;27870:37;49987:6;49976:18;;;49970:25;50049:16;;;27870:37;50150:6;50139:18;;;50133:25;50212:16;;;27870:37;50331:6;50320:18;;;50314:25;50393:16;;;27870:37;50513:6;50502:18;;;50496:25;50575:16;;;27870:37;50690:6;50679:18;;;50673:25;50752:16;;;27870:37;50856:6;50845:18;;;50839:25;50916:16;;;27870:37;51018:6;51007:18;;;51001:25;51078:16;;;27870:37;51178:6;51167:18;;;51161:25;51238:16;;;27870:37;51347:6;51336:18;;;51330:25;51407:16;;;27870:37;51509:6;51498:18;;;51492:25;51569:16;;;27870:37;51672:6;51661:18;;;51655:25;51686:107;51776:16;;;51655:25;51686:107;:::i;:::-;;;51885:6;51878:5;51874:18;51868:25;51998:6;51899:107;51998:6;51993:3;51989:16;51975:12;51899:107;:::i;:::-;52097:6;52090:5;52086:18;52080:25;52060:45;;52210:6;52111:107;52210:6;52205:3;52201:16;52187:12;52111:107;:::i;:::-;52294:18;;;52288:25;;-1:-1;52418:6;;52319:107;52409:16;;;52288:25;52319:107;:::i;:::-;52515:6;52508:5;52504:18;52498:25;52478:45;;52529:107;52628:6;52623:3;52619:16;52605:12;52529:107;:::i;:::-;52728:6;52721:5;52717:18;52711:25;52691:45;;52742:109;52843:6;52838:3;52834:16;52820:12;52742:109;:::i;:::-;52933:18;;52927:25;;-1:-1;52958:109;53059:6;53050:16;;52927:25;52958:109;:::i;:::-;53155:6;53148:5;53144:18;53138:25;53118:45;;53169:109;53270:6;53265:3;53261:16;53247:12;53169:109;:::i;:::-;53372:6;53365:5;53361:18;53355:25;53335:45;;53386:137;53515:6;53510:3;53506:16;53492:12;53386:137;:::i;:::-;53606:18;;53600:25;;-1:-1;53631:137;53760:6;53751:16;;53600:25;53631:137;:::i;:::-;;82685:122;82801:4;82790:9;82786:20;82777:6;82685:122;:::i;:::-;82886:4;82871:20;;27870:37;;;;82971:4;82956:20;27870:37;82500:487;;-1:-1;;82500:487::o;83223:256::-;83285:2;83279:9;83311:17;;;83386:18;83371:34;;83407:22;;;83368:62;83365:2;;;83443:1;;83433:12;83365:2;83285;83452:22;83263:216;;-1:-1;83263:216::o;83846:119::-;;85:6;72:20;97:33;124:5;97:33;:::i;84224:173::-;;1312:6;1299:20;1324:60;1378:5;1324:60;:::i;84406:147::-;;1685:6;1672:20;1697:47;1738:5;1697:47;:::i;84926:155::-;;2986:6;2973:20;2998:51;3043:5;2998:51;:::i;85254:151::-;;3684:6;3671:20;3696:49;3739:5;3696:49;:::i;85414:167::-;;4034:6;4021:20;4046:57;4097:5;4046:57;:::i;92531:105::-;92614:1;92607:5;92604:12;92594:2;;92620:9;92594:2;92588:48;:::o;92643:116::-;92737:1;92730:5;92727:12;92717:2;;92743:9;92766:118;92862:1;92855:5;92852:12;92842:2;;92868:9;93934:117;-1:-1;;;;;89048:54;;93993:35;;93983:2;;94042:1;;94032:12;94058:111;94139:5;86832:13;86825:21;94117:5;94114:32;94104:2;;94160:1;;94150:12;94300:121;94396:1;94389:5;94386:12;94376:2;;94412:1;;94402:12;94428:108;94511:1;94504:5;94501:12;94491:2;;94527:1;;94517:12;94543:119;94637:1;94630:5;94627:12;94617:2;;94653:1;;94643:12;94669:121;94765:1;94758:5;94755:12;94745:2;;94781:1;;94771:12;94925:113;95012:2;95005:5;95002:13;94992:2;;95029:1;;95019:12;95045:113;95132:2;95125:5;95122:13;95112:2;;95149:1;;95139:12;95165:110;95250:1;95243:5;95240:12;95230:2;;95266:1;;95256:12;95534:110;95618:2;95611:5;95608:13;95598:2;;95635:1;;95625:12",
  "source": "// \"SPDX-License-Identifier: Apache-2.0\"\npragma solidity ^0.6.11;\npragma experimental ABIEncoderV2;\n\nimport \"@atpar/actus-solidity/contracts/Engines/CERTF/ICERTFEngine.sol\";\n\nimport \"../Base/AssetActor/BaseActor.sol\";\nimport \"./ICERTFRegistry.sol\";\n\n\n/**\n * @title CERTFActor\n * @notice TODO\n */\ncontract CERTFActor is BaseActor {\n\n    constructor(IAssetRegistry assetRegistry, IDataRegistry dataRegistry)\n        public\n        BaseActor(assetRegistry, dataRegistry)\n    {}\n\n    /**\n     * @notice Derives initial state of the asset terms and stores together with\n     * terms, schedule, ownership, engine, admin of the asset in the contract types specific AssetRegistry.\n     * @param terms asset specific terms\n     * @param schedule schedule of the asset\n     * @param ownership ownership of the asset\n     * @param engine address of the ACTUS engine used for the spec. ContractType\n     * @param admin address of the admin of the asset (optional)\n     */\n    function initialize(\n        CERTFTerms calldata terms,\n        bytes32[] calldata schedule,\n        AssetOwnership calldata ownership,\n        address engine,\n        address admin\n    )\n        external\n    {\n        require(\n            engine != address(0) && IEngine(engine).contractType() == ContractType.CERTF,\n            \"CERTFActor.initialize: CONTRACT_TYPE_OF_ENGINE_UNSUPPORTED\"\n        );\n\n        // solium-disable-next-line\n        bytes32 assetId = keccak256(abi.encode(terms, block.timestamp));\n\n        // compute the initial state of the asset\n        State memory initialState = ICERTFEngine(engine).computeInitialState(terms);\n\n        // register the asset in the AssetRegistry\n        ICERTFRegistry(address(assetRegistry)).registerAsset(\n            assetId,\n            terms,\n            initialState,\n            schedule,\n            ownership,\n            engine,\n            address(this),\n            admin\n        );\n\n        emit InitializedAsset(assetId, ContractType.CEG, ownership.creatorObligor, ownership.counterpartyObligor);\n    }\n\n    function computeStateAndPayoffForEvent(bytes32 assetId, State memory state, bytes32 _event)\n        internal\n        view\n        override\n        returns (State memory, int256)\n    {\n        address engine = assetRegistry.getEngine(assetId);\n        CERTFTerms memory terms = ICERTFRegistry(address(assetRegistry)).getTerms(assetId);\n        (EventType eventType, uint256 scheduleTime) = decodeEvent(_event);\n\n        int256 payoff = ICERTFEngine(engine).computePayoffForEvent(\n            terms,\n            state,\n            _event,\n            getExternalDataForPOF(\n                assetId,\n                eventType,\n                shiftCalcTime(scheduleTime, terms.businessDayConvention, terms.calendar, terms.maturityDate)\n            )\n        );\n        state = ICERTFEngine(engine).computeStateForEvent(\n            terms,\n            state,\n            _event,\n            getExternalDataForSTF(\n                assetId,\n                eventType,\n                shiftCalcTime(scheduleTime, terms.businessDayConvention, terms.calendar, terms.maturityDate)\n            )\n        );\n\n        return (state, payoff);\n    }\n}",
  "sourcePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/CERTF/CERTFActor.sol",
  "ast": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/CERTF/CERTFActor.sol",
    "exportedSymbols": {
      "CERTFActor": [
        11892
      ]
    },
    "id": 11893,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 11693,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:38"
      },
      {
        "id": 11694,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:38"
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Engines/CERTF/ICERTFEngine.sol",
        "file": "@atpar/actus-solidity/contracts/Engines/CERTF/ICERTFEngine.sol",
        "id": 11695,
        "nodeType": "ImportDirective",
        "scope": 11893,
        "sourceUnit": 32424,
        "src": "101:72:38",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/AssetActor/BaseActor.sol",
        "file": "../Base/AssetActor/BaseActor.sol",
        "id": 11696,
        "nodeType": "ImportDirective",
        "scope": 11893,
        "sourceUnit": 3852,
        "src": "175:42:38",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/CERTF/ICERTFRegistry.sol",
        "file": "./ICERTFRegistry.sol",
        "id": 11697,
        "nodeType": "ImportDirective",
        "scope": 11893,
        "sourceUnit": 14679,
        "src": "218:30:38",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 11699,
              "name": "BaseActor",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3851,
              "src": "319:9:38",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BaseActor_$3851",
                "typeString": "contract BaseActor"
              }
            },
            "id": 11700,
            "nodeType": "InheritanceSpecifier",
            "src": "319:9:38"
          }
        ],
        "contractDependencies": [
          3851,
          3868,
          7055,
          23277,
          24758,
          38376,
          38485
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 11698,
          "nodeType": "StructuredDocumentation",
          "src": "251:44:38",
          "text": " @title CERTFActor\n @notice TODO"
        },
        "fullyImplemented": true,
        "id": 11892,
        "linearizedBaseContracts": [
          11892,
          3851,
          38485,
          38376,
          3868,
          23277,
          24758,
          7055
        ],
        "name": "CERTFActor",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 11711,
              "nodeType": "Block",
              "src": "472:2:38",
              "statements": []
            },
            "documentation": null,
            "id": 11712,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11707,
                    "name": "assetRegistry",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11702,
                    "src": "439:13:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAssetRegistry_$4500",
                      "typeString": "contract IAssetRegistry"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 11708,
                    "name": "dataRegistry",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11704,
                    "src": "454:12:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IDataRegistry_$7766",
                      "typeString": "contract IDataRegistry"
                    }
                  }
                ],
                "id": 11709,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11706,
                  "name": "BaseActor",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3851,
                  "src": "429:9:38",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_BaseActor_$3851_$",
                    "typeString": "type(contract BaseActor)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "429:38:38"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 11705,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11702,
                  "mutability": "mutable",
                  "name": "assetRegistry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11712,
                  "src": "348:28:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAssetRegistry_$4500",
                    "typeString": "contract IAssetRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11701,
                    "name": "IAssetRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4500,
                    "src": "348:14:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAssetRegistry_$4500",
                      "typeString": "contract IAssetRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11704,
                  "mutability": "mutable",
                  "name": "dataRegistry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11712,
                  "src": "378:26:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IDataRegistry_$7766",
                    "typeString": "contract IDataRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11703,
                    "name": "IDataRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7766,
                    "src": "378:13:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IDataRegistry_$7766",
                      "typeString": "contract IDataRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "347:58:38"
            },
            "returnParameters": {
              "id": 11710,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "472:0:38"
            },
            "scope": 11892,
            "src": "336:138:38",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11796,
              "nodeType": "Block",
              "src": "1173:861:38",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 11742,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 11733,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 11728,
                            "name": "engine",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11722,
                            "src": "1204:6:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 11731,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1222:1:38",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 11730,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1214:7:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 11729,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1214:7:38",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 11732,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1214:10:38",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "1204:20:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_ContractType_$22559",
                            "typeString": "enum ContractType"
                          },
                          "id": 11741,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 11735,
                                    "name": "engine",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11722,
                                    "src": "1236:6:38",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 11734,
                                  "name": "IEngine",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 32432,
                                  "src": "1228:7:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IEngine_$32432_$",
                                    "typeString": "type(contract IEngine)"
                                  }
                                },
                                "id": 11736,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1228:15:38",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IEngine_$32432",
                                  "typeString": "contract IEngine"
                                }
                              },
                              "id": 11737,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "contractType",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 32431,
                              "src": "1228:28:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_pure$__$returns$_t_enum$_ContractType_$22559_$",
                                "typeString": "function () pure external returns (enum ContractType)"
                              }
                            },
                            "id": 11738,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1228:30:38",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractType_$22559",
                              "typeString": "enum ContractType"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 11739,
                              "name": "ContractType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22559,
                              "src": "1262:12:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_ContractType_$22559_$",
                                "typeString": "type(enum ContractType)"
                              }
                            },
                            "id": 11740,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "CERTF",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1262:18:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractType_$22559",
                              "typeString": "enum ContractType"
                            }
                          },
                          "src": "1228:52:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1204:76:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "43455254464163746f722e696e697469616c697a653a20434f4e54524143545f545950455f4f465f454e47494e455f554e535550504f52544544",
                        "id": 11743,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1294:60:38",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e96a3d6572a5822c1ba73d64dade7580220b8d317551edcadc684c3059118d20",
                          "typeString": "literal_string \"CERTFActor.initialize: CONTRACT_TYPE_OF_ENGINE_UNSUPPORTED\""
                        },
                        "value": "CERTFActor.initialize: CONTRACT_TYPE_OF_ENGINE_UNSUPPORTED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e96a3d6572a5822c1ba73d64dade7580220b8d317551edcadc684c3059118d20",
                          "typeString": "literal_string \"CERTFActor.initialize: CONTRACT_TYPE_OF_ENGINE_UNSUPPORTED\""
                        }
                      ],
                      "id": 11727,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1183:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1183:181:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11745,
                  "nodeType": "ExpressionStatement",
                  "src": "1183:181:38"
                },
                {
                  "assignments": [
                    11747
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11747,
                      "mutability": "mutable",
                      "name": "assetId",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 11796,
                      "src": "1411:15:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 11746,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1411:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11756,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11751,
                            "name": "terms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11715,
                            "src": "1450:5:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_CERTFTerms_$22917_calldata_ptr",
                              "typeString": "struct CERTFTerms calldata"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 11752,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "1457:5:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 11753,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1457:15:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_CERTFTerms_$22917_calldata_ptr",
                              "typeString": "struct CERTFTerms calldata"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 11749,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "1439:3:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 11750,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1439:10:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 11754,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1439:34:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 11748,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "1429:9:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 11755,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1429:45:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1411:63:38"
                },
                {
                  "assignments": [
                    11758
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11758,
                      "mutability": "mutable",
                      "name": "initialState",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 11796,
                      "src": "1535:25:38",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 11757,
                        "name": "State",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22673,
                        "src": "1535:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                          "typeString": "struct State"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11765,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11763,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11715,
                        "src": "1604:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_calldata_ptr",
                          "typeString": "struct CERTFTerms calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_calldata_ptr",
                          "typeString": "struct CERTFTerms calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11760,
                            "name": "engine",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11722,
                            "src": "1576:6:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11759,
                          "name": "ICERTFEngine",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32423,
                          "src": "1563:12:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ICERTFEngine_$32423_$",
                            "typeString": "type(contract ICERTFEngine)"
                          }
                        },
                        "id": 11761,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1563:20:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ICERTFEngine_$32423",
                          "typeString": "contract ICERTFEngine"
                        }
                      },
                      "id": 11762,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "computeInitialState",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32338,
                      "src": "1563:40:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_pure$_t_struct$_CERTFTerms_$22917_memory_ptr_$returns$_t_struct$_State_$22673_memory_ptr_$",
                        "typeString": "function (struct CERTFTerms memory) pure external returns (struct State memory)"
                      }
                    },
                    "id": 11764,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1563:47:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1535:75:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11773,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11747,
                        "src": "1738:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11774,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11715,
                        "src": "1759:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_calldata_ptr",
                          "typeString": "struct CERTFTerms calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11775,
                        "name": "initialState",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11758,
                        "src": "1778:12:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11776,
                        "name": "schedule",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11718,
                        "src": "1804:8:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11777,
                        "name": "ownership",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11720,
                        "src": "1826:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                          "typeString": "struct AssetOwnership calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11778,
                        "name": "engine",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11722,
                        "src": "1849:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11781,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "1877:4:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CERTFActor_$11892",
                              "typeString": "contract CERTFActor"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CERTFActor_$11892",
                              "typeString": "contract CERTFActor"
                            }
                          ],
                          "id": 11780,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1869:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 11779,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1869:7:38",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 11782,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1869:13:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11783,
                        "name": "admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11724,
                        "src": "1896:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_calldata_ptr",
                          "typeString": "struct CERTFTerms calldata"
                        },
                        {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        },
                        {
                          "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                          "typeString": "struct AssetOwnership calldata"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 11769,
                                "name": "assetRegistry",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3025,
                                "src": "1695:13:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAssetRegistry_$4500",
                                  "typeString": "contract IAssetRegistry"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IAssetRegistry_$4500",
                                  "typeString": "contract IAssetRegistry"
                                }
                              ],
                              "id": 11768,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1687:7:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 11767,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1687:7:38",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 11770,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1687:22:38",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11766,
                          "name": "ICERTFRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14678,
                          "src": "1672:14:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ICERTFRegistry_$14678_$",
                            "typeString": "type(contract ICERTFRegistry)"
                          }
                        },
                        "id": 11771,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1672:38:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ICERTFRegistry_$14678",
                          "typeString": "contract ICERTFRegistry"
                        }
                      },
                      "id": 11772,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "registerAsset",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14663,
                      "src": "1672:52:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_struct$_CERTFTerms_$22917_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_struct$_AssetOwnership_$7849_memory_ptr_$_t_address_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,struct CERTFTerms memory,struct State memory,bytes32[] memory,struct AssetOwnership memory,address,address,address) external"
                      }
                    },
                    "id": 11784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1672:239:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11785,
                  "nodeType": "ExpressionStatement",
                  "src": "1672:239:38"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11787,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11747,
                        "src": "1944:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11788,
                          "name": "ContractType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22559,
                          "src": "1953:12:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_ContractType_$22559_$",
                            "typeString": "type(enum ContractType)"
                          }
                        },
                        "id": 11789,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "CEG",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1953:16:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_ContractType_$22559",
                          "typeString": "enum ContractType"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11790,
                          "name": "ownership",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11720,
                          "src": "1971:9:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                            "typeString": "struct AssetOwnership calldata"
                          }
                        },
                        "id": 11791,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "creatorObligor",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7842,
                        "src": "1971:24:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11792,
                          "name": "ownership",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11720,
                          "src": "1997:9:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                            "typeString": "struct AssetOwnership calldata"
                          }
                        },
                        "id": 11793,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "counterpartyObligor",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7846,
                        "src": "1997:29:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_enum$_ContractType_$22559",
                          "typeString": "enum ContractType"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 11786,
                      "name": "InitializedAsset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3007,
                      "src": "1927:16:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_enum$_ContractType_$22559_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,enum ContractType,address,address)"
                      }
                    },
                    "id": 11794,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1927:100:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11795,
                  "nodeType": "EmitStatement",
                  "src": "1922:105:38"
                }
              ]
            },
            "documentation": {
              "id": 11713,
              "nodeType": "StructuredDocumentation",
              "src": "480:479:38",
              "text": " @notice Derives initial state of the asset terms and stores together with\n terms, schedule, ownership, engine, admin of the asset in the contract types specific AssetRegistry.\n @param terms asset specific terms\n @param schedule schedule of the asset\n @param ownership ownership of the asset\n @param engine address of the ACTUS engine used for the spec. ContractType\n @param admin address of the admin of the asset (optional)"
            },
            "functionSelector": "c7405c8d",
            "id": 11797,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 11725,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11715,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11797,
                  "src": "993:25:38",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_calldata_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11714,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "993:10:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11718,
                  "mutability": "mutable",
                  "name": "schedule",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11797,
                  "src": "1028:27:38",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 11716,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1028:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 11717,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1028:9:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11720,
                  "mutability": "mutable",
                  "name": "ownership",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11797,
                  "src": "1065:33:38",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                    "typeString": "struct AssetOwnership"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11719,
                    "name": "AssetOwnership",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7849,
                    "src": "1065:14:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AssetOwnership_$7849_storage_ptr",
                      "typeString": "struct AssetOwnership"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11722,
                  "mutability": "mutable",
                  "name": "engine",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11797,
                  "src": "1108:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11721,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1108:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11724,
                  "mutability": "mutable",
                  "name": "admin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11797,
                  "src": "1132:13:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11723,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1132:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "983:168:38"
            },
            "returnParameters": {
              "id": 11726,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1173:0:38"
            },
            "scope": 11892,
            "src": "964:1070:38",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              3563
            ],
            "body": {
              "id": 11890,
              "nodeType": "Block",
              "src": "2222:952:38",
              "statements": [
                {
                  "assignments": [
                    11812
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11812,
                      "mutability": "mutable",
                      "name": "engine",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 11890,
                      "src": "2232:14:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 11811,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2232:7:38",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11817,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11815,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11799,
                        "src": "2273:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 11813,
                        "name": "assetRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3025,
                        "src": "2249:13:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAssetRegistry_$4500",
                          "typeString": "contract IAssetRegistry"
                        }
                      },
                      "id": 11814,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getEngine",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4517,
                      "src": "2249:23:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 11816,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2249:32:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2232:49:38"
                },
                {
                  "assignments": [
                    11819
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11819,
                      "mutability": "mutable",
                      "name": "terms",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 11890,
                      "src": "2291:23:38",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                        "typeString": "struct CERTFTerms"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 11818,
                        "name": "CERTFTerms",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22917,
                        "src": "2291:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                          "typeString": "struct CERTFTerms"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11829,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11827,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11799,
                        "src": "2365:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 11823,
                                "name": "assetRegistry",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3025,
                                "src": "2340:13:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAssetRegistry_$4500",
                                  "typeString": "contract IAssetRegistry"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IAssetRegistry_$4500",
                                  "typeString": "contract IAssetRegistry"
                                }
                              ],
                              "id": 11822,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2332:7:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 11821,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2332:7:38",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 11824,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2332:22:38",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11820,
                          "name": "ICERTFRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14678,
                          "src": "2317:14:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ICERTFRegistry_$14678_$",
                            "typeString": "type(contract ICERTFRegistry)"
                          }
                        },
                        "id": 11825,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2317:38:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ICERTFRegistry_$14678",
                          "typeString": "contract ICERTFRegistry"
                        }
                      },
                      "id": 11826,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getTerms",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14670,
                      "src": "2317:47:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_struct$_CERTFTerms_$22917_memory_ptr_$",
                        "typeString": "function (bytes32) view external returns (struct CERTFTerms memory)"
                      }
                    },
                    "id": 11828,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2317:56:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                      "typeString": "struct CERTFTerms memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2291:82:38"
                },
                {
                  "assignments": [
                    11831,
                    11833
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11831,
                      "mutability": "mutable",
                      "name": "eventType",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 11890,
                      "src": "2384:19:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 11830,
                        "name": "EventType",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22610,
                        "src": "2384:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EventType_$22610",
                          "typeString": "enum EventType"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 11833,
                      "mutability": "mutable",
                      "name": "scheduleTime",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 11890,
                      "src": "2405:20:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11832,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2405:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11837,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11835,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11803,
                        "src": "2441:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 11834,
                      "name": "decodeEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24743,
                      "src": "2429:11:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_enum$_EventType_$22610_$_t_uint256_$",
                        "typeString": "function (bytes32) pure returns (enum EventType,uint256)"
                      }
                    },
                    "id": 11836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2429:19:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_EventType_$22610_$_t_uint256_$",
                      "typeString": "tuple(enum EventType,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2383:65:38"
                },
                {
                  "assignments": [
                    11839
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11839,
                      "mutability": "mutable",
                      "name": "payoff",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 11890,
                      "src": "2459:13:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "typeName": {
                        "id": 11838,
                        "name": "int256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2459:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11861,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11844,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11819,
                        "src": "2531:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                          "typeString": "struct CERTFTerms memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11845,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11801,
                        "src": "2550:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11846,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11803,
                        "src": "2569:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11848,
                            "name": "assetId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11799,
                            "src": "2628:7:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11849,
                            "name": "eventType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11831,
                            "src": "2653:9:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_EventType_$22610",
                              "typeString": "enum EventType"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 11851,
                                "name": "scheduleTime",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11833,
                                "src": "2694:12:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 11852,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11819,
                                  "src": "2708:5:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                    "typeString": "struct CERTFTerms memory"
                                  }
                                },
                                "id": 11853,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "businessDayConvention",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22862,
                                "src": "2708:27:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                  "typeString": "enum BusinessDayConvention"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 11854,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11819,
                                  "src": "2737:5:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                    "typeString": "struct CERTFTerms memory"
                                  }
                                },
                                "id": 11855,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "calendar",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22856,
                                "src": "2737:14:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_Calendar_$22506",
                                  "typeString": "enum Calendar"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 11856,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11819,
                                  "src": "2753:5:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                    "typeString": "struct CERTFTerms memory"
                                  }
                                },
                                "id": 11857,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "maturityDate",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22878,
                                "src": "2753:18:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                  "typeString": "enum BusinessDayConvention"
                                },
                                {
                                  "typeIdentifier": "t_enum$_Calendar_$22506",
                                  "typeString": "enum Calendar"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 11850,
                              "name": "shiftCalcTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23056,
                              "src": "2680:13:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_enum$_BusinessDayConvention_$22503_$_t_enum$_Calendar_$22506_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,enum BusinessDayConvention,enum Calendar,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 11858,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2680:92:38",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_enum$_EventType_$22610",
                              "typeString": "enum EventType"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 11847,
                          "name": "getExternalDataForPOF",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3850,
                          "src": "2589:21:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_enum$_EventType_$22610_$_t_uint256_$returns$_t_bytes32_$",
                            "typeString": "function (bytes32,enum EventType,uint256) view returns (bytes32)"
                          }
                        },
                        "id": 11859,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2589:197:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                          "typeString": "struct CERTFTerms memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11841,
                            "name": "engine",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11812,
                            "src": "2488:6:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11840,
                          "name": "ICERTFEngine",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32423,
                          "src": "2475:12:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ICERTFEngine_$32423_$",
                            "typeString": "type(contract ICERTFEngine)"
                          }
                        },
                        "id": 11842,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2475:20:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ICERTFEngine_$32423",
                          "typeString": "contract ICERTFEngine"
                        }
                      },
                      "id": 11843,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "computePayoffForEvent",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32366,
                      "src": "2475:42:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_pure$_t_struct$_CERTFTerms_$22917_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_int256_$",
                        "typeString": "function (struct CERTFTerms memory,struct State memory,bytes32,bytes32) pure external returns (int256)"
                      }
                    },
                    "id": 11860,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2475:321:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2459:337:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11884,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 11862,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11801,
                      "src": "2806:5:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 11867,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11819,
                          "src": "2869:5:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                            "typeString": "struct CERTFTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 11868,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11801,
                          "src": "2888:5:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 11869,
                          "name": "_event",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11803,
                          "src": "2907:6:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 11871,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11799,
                              "src": "2966:7:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 11872,
                              "name": "eventType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11831,
                              "src": "2991:9:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_EventType_$22610",
                                "typeString": "enum EventType"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 11874,
                                  "name": "scheduleTime",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11833,
                                  "src": "3032:12:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 11875,
                                    "name": "terms",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11819,
                                    "src": "3046:5:38",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                      "typeString": "struct CERTFTerms memory"
                                    }
                                  },
                                  "id": 11876,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "businessDayConvention",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22862,
                                  "src": "3046:27:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                    "typeString": "enum BusinessDayConvention"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 11877,
                                    "name": "terms",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11819,
                                    "src": "3075:5:38",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                      "typeString": "struct CERTFTerms memory"
                                    }
                                  },
                                  "id": 11878,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "calendar",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22856,
                                  "src": "3075:14:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Calendar_$22506",
                                    "typeString": "enum Calendar"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 11879,
                                    "name": "terms",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11819,
                                    "src": "3091:5:38",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                      "typeString": "struct CERTFTerms memory"
                                    }
                                  },
                                  "id": 11880,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "maturityDate",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22878,
                                  "src": "3091:18:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                    "typeString": "enum BusinessDayConvention"
                                  },
                                  {
                                    "typeIdentifier": "t_enum$_Calendar_$22506",
                                    "typeString": "enum Calendar"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 11873,
                                "name": "shiftCalcTime",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23056,
                                "src": "3018:13:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_enum$_BusinessDayConvention_$22503_$_t_enum$_Calendar_$22506_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,enum BusinessDayConvention,enum Calendar,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 11881,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3018:92:38",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_enum$_EventType_$22610",
                                "typeString": "enum EventType"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 11870,
                            "name": "getExternalDataForSTF",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3793,
                            "src": "2927:21:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_enum$_EventType_$22610_$_t_uint256_$returns$_t_bytes32_$",
                              "typeString": "function (bytes32,enum EventType,uint256) view returns (bytes32)"
                            }
                          },
                          "id": 11882,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2927:197:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                            "typeString": "struct CERTFTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 11864,
                              "name": "engine",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11812,
                              "src": "2827:6:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 11863,
                            "name": "ICERTFEngine",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32423,
                            "src": "2814:12:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_ICERTFEngine_$32423_$",
                              "typeString": "type(contract ICERTFEngine)"
                            }
                          },
                          "id": 11865,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2814:20:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ICERTFEngine_$32423",
                            "typeString": "contract ICERTFEngine"
                          }
                        },
                        "id": 11866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "computeStateForEvent",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 32352,
                        "src": "2814:41:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_pure$_t_struct$_CERTFTerms_$22917_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CERTFTerms memory,struct State memory,bytes32,bytes32) pure external returns (struct State memory)"
                        }
                      },
                      "id": 11883,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2814:320:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "src": "2806:328:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "id": 11885,
                  "nodeType": "ExpressionStatement",
                  "src": "2806:328:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 11886,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11801,
                        "src": "3153:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11887,
                        "name": "payoff",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11839,
                        "src": "3160:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      }
                    ],
                    "id": 11888,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3152:15:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_struct$_State_$22673_memory_ptr_$_t_int256_$",
                      "typeString": "tuple(struct State memory,int256)"
                    }
                  },
                  "functionReturnParameters": 11810,
                  "id": 11889,
                  "nodeType": "Return",
                  "src": "3145:22:38"
                }
              ]
            },
            "documentation": null,
            "id": 11891,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeStateAndPayoffForEvent",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 11805,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2170:8:38"
            },
            "parameters": {
              "id": 11804,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11799,
                  "mutability": "mutable",
                  "name": "assetId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11891,
                  "src": "2079:15:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11798,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2079:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11801,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11891,
                  "src": "2096:18:38",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11800,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "2096:5:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11803,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11891,
                  "src": "2116:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11802,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2116:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2078:53:38"
            },
            "returnParameters": {
              "id": 11810,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11807,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11891,
                  "src": "2196:12:38",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11806,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "2196:5:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11809,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11891,
                  "src": "2210:6:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 11808,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2210:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2195:22:38"
            },
            "scope": 11892,
            "src": "2040:1134:38",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 11893,
        "src": "296:2880:38"
      }
    ],
    "src": "41:3135:38"
  },
  "legacyAST": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/CERTF/CERTFActor.sol",
    "exportedSymbols": {
      "CERTFActor": [
        11892
      ]
    },
    "id": 11893,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 11693,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:38"
      },
      {
        "id": 11694,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:38"
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Engines/CERTF/ICERTFEngine.sol",
        "file": "@atpar/actus-solidity/contracts/Engines/CERTF/ICERTFEngine.sol",
        "id": 11695,
        "nodeType": "ImportDirective",
        "scope": 11893,
        "sourceUnit": 32424,
        "src": "101:72:38",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/Base/AssetActor/BaseActor.sol",
        "file": "../Base/AssetActor/BaseActor.sol",
        "id": 11696,
        "nodeType": "ImportDirective",
        "scope": 11893,
        "sourceUnit": 3852,
        "src": "175:42:38",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/Core/CERTF/ICERTFRegistry.sol",
        "file": "./ICERTFRegistry.sol",
        "id": 11697,
        "nodeType": "ImportDirective",
        "scope": 11893,
        "sourceUnit": 14679,
        "src": "218:30:38",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 11699,
              "name": "BaseActor",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3851,
              "src": "319:9:38",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BaseActor_$3851",
                "typeString": "contract BaseActor"
              }
            },
            "id": 11700,
            "nodeType": "InheritanceSpecifier",
            "src": "319:9:38"
          }
        ],
        "contractDependencies": [
          3851,
          3868,
          7055,
          23277,
          24758,
          38376,
          38485
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 11698,
          "nodeType": "StructuredDocumentation",
          "src": "251:44:38",
          "text": " @title CERTFActor\n @notice TODO"
        },
        "fullyImplemented": true,
        "id": 11892,
        "linearizedBaseContracts": [
          11892,
          3851,
          38485,
          38376,
          3868,
          23277,
          24758,
          7055
        ],
        "name": "CERTFActor",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 11711,
              "nodeType": "Block",
              "src": "472:2:38",
              "statements": []
            },
            "documentation": null,
            "id": 11712,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11707,
                    "name": "assetRegistry",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11702,
                    "src": "439:13:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAssetRegistry_$4500",
                      "typeString": "contract IAssetRegistry"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 11708,
                    "name": "dataRegistry",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11704,
                    "src": "454:12:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IDataRegistry_$7766",
                      "typeString": "contract IDataRegistry"
                    }
                  }
                ],
                "id": 11709,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11706,
                  "name": "BaseActor",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3851,
                  "src": "429:9:38",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_BaseActor_$3851_$",
                    "typeString": "type(contract BaseActor)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "429:38:38"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 11705,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11702,
                  "mutability": "mutable",
                  "name": "assetRegistry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11712,
                  "src": "348:28:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAssetRegistry_$4500",
                    "typeString": "contract IAssetRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11701,
                    "name": "IAssetRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4500,
                    "src": "348:14:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAssetRegistry_$4500",
                      "typeString": "contract IAssetRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11704,
                  "mutability": "mutable",
                  "name": "dataRegistry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11712,
                  "src": "378:26:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IDataRegistry_$7766",
                    "typeString": "contract IDataRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11703,
                    "name": "IDataRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7766,
                    "src": "378:13:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IDataRegistry_$7766",
                      "typeString": "contract IDataRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "347:58:38"
            },
            "returnParameters": {
              "id": 11710,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "472:0:38"
            },
            "scope": 11892,
            "src": "336:138:38",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11796,
              "nodeType": "Block",
              "src": "1173:861:38",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 11742,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 11733,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 11728,
                            "name": "engine",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11722,
                            "src": "1204:6:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 11731,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1222:1:38",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 11730,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1214:7:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 11729,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1214:7:38",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 11732,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1214:10:38",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "1204:20:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_ContractType_$22559",
                            "typeString": "enum ContractType"
                          },
                          "id": 11741,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 11735,
                                    "name": "engine",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11722,
                                    "src": "1236:6:38",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 11734,
                                  "name": "IEngine",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 32432,
                                  "src": "1228:7:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IEngine_$32432_$",
                                    "typeString": "type(contract IEngine)"
                                  }
                                },
                                "id": 11736,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1228:15:38",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IEngine_$32432",
                                  "typeString": "contract IEngine"
                                }
                              },
                              "id": 11737,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "contractType",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 32431,
                              "src": "1228:28:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_pure$__$returns$_t_enum$_ContractType_$22559_$",
                                "typeString": "function () pure external returns (enum ContractType)"
                              }
                            },
                            "id": 11738,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1228:30:38",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractType_$22559",
                              "typeString": "enum ContractType"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 11739,
                              "name": "ContractType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22559,
                              "src": "1262:12:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_ContractType_$22559_$",
                                "typeString": "type(enum ContractType)"
                              }
                            },
                            "id": 11740,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "CERTF",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1262:18:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractType_$22559",
                              "typeString": "enum ContractType"
                            }
                          },
                          "src": "1228:52:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1204:76:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "43455254464163746f722e696e697469616c697a653a20434f4e54524143545f545950455f4f465f454e47494e455f554e535550504f52544544",
                        "id": 11743,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1294:60:38",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e96a3d6572a5822c1ba73d64dade7580220b8d317551edcadc684c3059118d20",
                          "typeString": "literal_string \"CERTFActor.initialize: CONTRACT_TYPE_OF_ENGINE_UNSUPPORTED\""
                        },
                        "value": "CERTFActor.initialize: CONTRACT_TYPE_OF_ENGINE_UNSUPPORTED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e96a3d6572a5822c1ba73d64dade7580220b8d317551edcadc684c3059118d20",
                          "typeString": "literal_string \"CERTFActor.initialize: CONTRACT_TYPE_OF_ENGINE_UNSUPPORTED\""
                        }
                      ],
                      "id": 11727,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1183:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1183:181:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11745,
                  "nodeType": "ExpressionStatement",
                  "src": "1183:181:38"
                },
                {
                  "assignments": [
                    11747
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11747,
                      "mutability": "mutable",
                      "name": "assetId",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 11796,
                      "src": "1411:15:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 11746,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1411:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11756,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11751,
                            "name": "terms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11715,
                            "src": "1450:5:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_CERTFTerms_$22917_calldata_ptr",
                              "typeString": "struct CERTFTerms calldata"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 11752,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "1457:5:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 11753,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1457:15:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_struct$_CERTFTerms_$22917_calldata_ptr",
                              "typeString": "struct CERTFTerms calldata"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 11749,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "1439:3:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 11750,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1439:10:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 11754,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1439:34:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 11748,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "1429:9:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 11755,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1429:45:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1411:63:38"
                },
                {
                  "assignments": [
                    11758
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11758,
                      "mutability": "mutable",
                      "name": "initialState",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 11796,
                      "src": "1535:25:38",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 11757,
                        "name": "State",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22673,
                        "src": "1535:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                          "typeString": "struct State"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11765,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11763,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11715,
                        "src": "1604:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_calldata_ptr",
                          "typeString": "struct CERTFTerms calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_calldata_ptr",
                          "typeString": "struct CERTFTerms calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11760,
                            "name": "engine",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11722,
                            "src": "1576:6:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11759,
                          "name": "ICERTFEngine",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32423,
                          "src": "1563:12:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ICERTFEngine_$32423_$",
                            "typeString": "type(contract ICERTFEngine)"
                          }
                        },
                        "id": 11761,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1563:20:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ICERTFEngine_$32423",
                          "typeString": "contract ICERTFEngine"
                        }
                      },
                      "id": 11762,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "computeInitialState",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32338,
                      "src": "1563:40:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_pure$_t_struct$_CERTFTerms_$22917_memory_ptr_$returns$_t_struct$_State_$22673_memory_ptr_$",
                        "typeString": "function (struct CERTFTerms memory) pure external returns (struct State memory)"
                      }
                    },
                    "id": 11764,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1563:47:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1535:75:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11773,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11747,
                        "src": "1738:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11774,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11715,
                        "src": "1759:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_calldata_ptr",
                          "typeString": "struct CERTFTerms calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11775,
                        "name": "initialState",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11758,
                        "src": "1778:12:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11776,
                        "name": "schedule",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11718,
                        "src": "1804:8:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11777,
                        "name": "ownership",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11720,
                        "src": "1826:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                          "typeString": "struct AssetOwnership calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11778,
                        "name": "engine",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11722,
                        "src": "1849:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11781,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "1877:4:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CERTFActor_$11892",
                              "typeString": "contract CERTFActor"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CERTFActor_$11892",
                              "typeString": "contract CERTFActor"
                            }
                          ],
                          "id": 11780,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1869:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 11779,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1869:7:38",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 11782,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1869:13:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11783,
                        "name": "admin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11724,
                        "src": "1896:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_calldata_ptr",
                          "typeString": "struct CERTFTerms calldata"
                        },
                        {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                          "typeString": "bytes32[] calldata"
                        },
                        {
                          "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                          "typeString": "struct AssetOwnership calldata"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 11769,
                                "name": "assetRegistry",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3025,
                                "src": "1695:13:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAssetRegistry_$4500",
                                  "typeString": "contract IAssetRegistry"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IAssetRegistry_$4500",
                                  "typeString": "contract IAssetRegistry"
                                }
                              ],
                              "id": 11768,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1687:7:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 11767,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1687:7:38",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 11770,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1687:22:38",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11766,
                          "name": "ICERTFRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14678,
                          "src": "1672:14:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ICERTFRegistry_$14678_$",
                            "typeString": "type(contract ICERTFRegistry)"
                          }
                        },
                        "id": 11771,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1672:38:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ICERTFRegistry_$14678",
                          "typeString": "contract ICERTFRegistry"
                        }
                      },
                      "id": 11772,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "registerAsset",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14663,
                      "src": "1672:52:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_struct$_CERTFTerms_$22917_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_struct$_AssetOwnership_$7849_memory_ptr_$_t_address_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,struct CERTFTerms memory,struct State memory,bytes32[] memory,struct AssetOwnership memory,address,address,address) external"
                      }
                    },
                    "id": 11784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1672:239:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11785,
                  "nodeType": "ExpressionStatement",
                  "src": "1672:239:38"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11787,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11747,
                        "src": "1944:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11788,
                          "name": "ContractType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22559,
                          "src": "1953:12:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_ContractType_$22559_$",
                            "typeString": "type(enum ContractType)"
                          }
                        },
                        "id": 11789,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "CEG",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1953:16:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_ContractType_$22559",
                          "typeString": "enum ContractType"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11790,
                          "name": "ownership",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11720,
                          "src": "1971:9:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                            "typeString": "struct AssetOwnership calldata"
                          }
                        },
                        "id": 11791,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "creatorObligor",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7842,
                        "src": "1971:24:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11792,
                          "name": "ownership",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11720,
                          "src": "1997:9:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                            "typeString": "struct AssetOwnership calldata"
                          }
                        },
                        "id": 11793,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "counterpartyObligor",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 7846,
                        "src": "1997:29:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_enum$_ContractType_$22559",
                          "typeString": "enum ContractType"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 11786,
                      "name": "InitializedAsset",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3007,
                      "src": "1927:16:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_enum$_ContractType_$22559_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,enum ContractType,address,address)"
                      }
                    },
                    "id": 11794,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1927:100:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11795,
                  "nodeType": "EmitStatement",
                  "src": "1922:105:38"
                }
              ]
            },
            "documentation": {
              "id": 11713,
              "nodeType": "StructuredDocumentation",
              "src": "480:479:38",
              "text": " @notice Derives initial state of the asset terms and stores together with\n terms, schedule, ownership, engine, admin of the asset in the contract types specific AssetRegistry.\n @param terms asset specific terms\n @param schedule schedule of the asset\n @param ownership ownership of the asset\n @param engine address of the ACTUS engine used for the spec. ContractType\n @param admin address of the admin of the asset (optional)"
            },
            "functionSelector": "c7405c8d",
            "id": 11797,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 11725,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11715,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11797,
                  "src": "993:25:38",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_calldata_ptr",
                    "typeString": "struct CERTFTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11714,
                    "name": "CERTFTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "993:10:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                      "typeString": "struct CERTFTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11718,
                  "mutability": "mutable",
                  "name": "schedule",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11797,
                  "src": "1028:27:38",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 11716,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "1028:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 11717,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1028:9:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11720,
                  "mutability": "mutable",
                  "name": "ownership",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11797,
                  "src": "1065:33:38",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_AssetOwnership_$7849_calldata_ptr",
                    "typeString": "struct AssetOwnership"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11719,
                    "name": "AssetOwnership",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7849,
                    "src": "1065:14:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AssetOwnership_$7849_storage_ptr",
                      "typeString": "struct AssetOwnership"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11722,
                  "mutability": "mutable",
                  "name": "engine",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11797,
                  "src": "1108:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11721,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1108:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11724,
                  "mutability": "mutable",
                  "name": "admin",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11797,
                  "src": "1132:13:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11723,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1132:7:38",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "983:168:38"
            },
            "returnParameters": {
              "id": 11726,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1173:0:38"
            },
            "scope": 11892,
            "src": "964:1070:38",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              3563
            ],
            "body": {
              "id": 11890,
              "nodeType": "Block",
              "src": "2222:952:38",
              "statements": [
                {
                  "assignments": [
                    11812
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11812,
                      "mutability": "mutable",
                      "name": "engine",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 11890,
                      "src": "2232:14:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 11811,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2232:7:38",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11817,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11815,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11799,
                        "src": "2273:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 11813,
                        "name": "assetRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3025,
                        "src": "2249:13:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IAssetRegistry_$4500",
                          "typeString": "contract IAssetRegistry"
                        }
                      },
                      "id": 11814,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getEngine",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4517,
                      "src": "2249:23:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 11816,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2249:32:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2232:49:38"
                },
                {
                  "assignments": [
                    11819
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11819,
                      "mutability": "mutable",
                      "name": "terms",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 11890,
                      "src": "2291:23:38",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                        "typeString": "struct CERTFTerms"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 11818,
                        "name": "CERTFTerms",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22917,
                        "src": "2291:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_storage_ptr",
                          "typeString": "struct CERTFTerms"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11829,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11827,
                        "name": "assetId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11799,
                        "src": "2365:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 11823,
                                "name": "assetRegistry",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3025,
                                "src": "2340:13:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IAssetRegistry_$4500",
                                  "typeString": "contract IAssetRegistry"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IAssetRegistry_$4500",
                                  "typeString": "contract IAssetRegistry"
                                }
                              ],
                              "id": 11822,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2332:7:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 11821,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2332:7:38",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 11824,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2332:22:38",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11820,
                          "name": "ICERTFRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14678,
                          "src": "2317:14:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ICERTFRegistry_$14678_$",
                            "typeString": "type(contract ICERTFRegistry)"
                          }
                        },
                        "id": 11825,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2317:38:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ICERTFRegistry_$14678",
                          "typeString": "contract ICERTFRegistry"
                        }
                      },
                      "id": 11826,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getTerms",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14670,
                      "src": "2317:47:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_struct$_CERTFTerms_$22917_memory_ptr_$",
                        "typeString": "function (bytes32) view external returns (struct CERTFTerms memory)"
                      }
                    },
                    "id": 11828,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2317:56:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                      "typeString": "struct CERTFTerms memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2291:82:38"
                },
                {
                  "assignments": [
                    11831,
                    11833
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11831,
                      "mutability": "mutable",
                      "name": "eventType",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 11890,
                      "src": "2384:19:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 11830,
                        "name": "EventType",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22610,
                        "src": "2384:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EventType_$22610",
                          "typeString": "enum EventType"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 11833,
                      "mutability": "mutable",
                      "name": "scheduleTime",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 11890,
                      "src": "2405:20:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11832,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2405:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11837,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11835,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11803,
                        "src": "2441:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 11834,
                      "name": "decodeEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24743,
                      "src": "2429:11:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_enum$_EventType_$22610_$_t_uint256_$",
                        "typeString": "function (bytes32) pure returns (enum EventType,uint256)"
                      }
                    },
                    "id": 11836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2429:19:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_EventType_$22610_$_t_uint256_$",
                      "typeString": "tuple(enum EventType,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2383:65:38"
                },
                {
                  "assignments": [
                    11839
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11839,
                      "mutability": "mutable",
                      "name": "payoff",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 11890,
                      "src": "2459:13:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "typeName": {
                        "id": 11838,
                        "name": "int256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2459:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11861,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11844,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11819,
                        "src": "2531:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                          "typeString": "struct CERTFTerms memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11845,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11801,
                        "src": "2550:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11846,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11803,
                        "src": "2569:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11848,
                            "name": "assetId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11799,
                            "src": "2628:7:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11849,
                            "name": "eventType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11831,
                            "src": "2653:9:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_EventType_$22610",
                              "typeString": "enum EventType"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 11851,
                                "name": "scheduleTime",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11833,
                                "src": "2694:12:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 11852,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11819,
                                  "src": "2708:5:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                    "typeString": "struct CERTFTerms memory"
                                  }
                                },
                                "id": 11853,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "businessDayConvention",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22862,
                                "src": "2708:27:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                  "typeString": "enum BusinessDayConvention"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 11854,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11819,
                                  "src": "2737:5:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                    "typeString": "struct CERTFTerms memory"
                                  }
                                },
                                "id": 11855,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "calendar",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22856,
                                "src": "2737:14:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_Calendar_$22506",
                                  "typeString": "enum Calendar"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 11856,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11819,
                                  "src": "2753:5:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                    "typeString": "struct CERTFTerms memory"
                                  }
                                },
                                "id": 11857,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "maturityDate",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22878,
                                "src": "2753:18:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                  "typeString": "enum BusinessDayConvention"
                                },
                                {
                                  "typeIdentifier": "t_enum$_Calendar_$22506",
                                  "typeString": "enum Calendar"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 11850,
                              "name": "shiftCalcTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23056,
                              "src": "2680:13:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_enum$_BusinessDayConvention_$22503_$_t_enum$_Calendar_$22506_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,enum BusinessDayConvention,enum Calendar,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 11858,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2680:92:38",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_enum$_EventType_$22610",
                              "typeString": "enum EventType"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 11847,
                          "name": "getExternalDataForPOF",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3850,
                          "src": "2589:21:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_enum$_EventType_$22610_$_t_uint256_$returns$_t_bytes32_$",
                            "typeString": "function (bytes32,enum EventType,uint256) view returns (bytes32)"
                          }
                        },
                        "id": 11859,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2589:197:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                          "typeString": "struct CERTFTerms memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11841,
                            "name": "engine",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11812,
                            "src": "2488:6:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11840,
                          "name": "ICERTFEngine",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32423,
                          "src": "2475:12:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ICERTFEngine_$32423_$",
                            "typeString": "type(contract ICERTFEngine)"
                          }
                        },
                        "id": 11842,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2475:20:38",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ICERTFEngine_$32423",
                          "typeString": "contract ICERTFEngine"
                        }
                      },
                      "id": 11843,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "computePayoffForEvent",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32366,
                      "src": "2475:42:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_pure$_t_struct$_CERTFTerms_$22917_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_int256_$",
                        "typeString": "function (struct CERTFTerms memory,struct State memory,bytes32,bytes32) pure external returns (int256)"
                      }
                    },
                    "id": 11860,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2475:321:38",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2459:337:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11884,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 11862,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11801,
                      "src": "2806:5:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 11867,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11819,
                          "src": "2869:5:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                            "typeString": "struct CERTFTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 11868,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11801,
                          "src": "2888:5:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 11869,
                          "name": "_event",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11803,
                          "src": "2907:6:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 11871,
                              "name": "assetId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11799,
                              "src": "2966:7:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 11872,
                              "name": "eventType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11831,
                              "src": "2991:9:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_EventType_$22610",
                                "typeString": "enum EventType"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 11874,
                                  "name": "scheduleTime",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11833,
                                  "src": "3032:12:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 11875,
                                    "name": "terms",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11819,
                                    "src": "3046:5:38",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                      "typeString": "struct CERTFTerms memory"
                                    }
                                  },
                                  "id": 11876,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "businessDayConvention",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22862,
                                  "src": "3046:27:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                    "typeString": "enum BusinessDayConvention"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 11877,
                                    "name": "terms",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11819,
                                    "src": "3075:5:38",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                      "typeString": "struct CERTFTerms memory"
                                    }
                                  },
                                  "id": 11878,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "calendar",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22856,
                                  "src": "3075:14:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Calendar_$22506",
                                    "typeString": "enum Calendar"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 11879,
                                    "name": "terms",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11819,
                                    "src": "3091:5:38",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                                      "typeString": "struct CERTFTerms memory"
                                    }
                                  },
                                  "id": 11880,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "maturityDate",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22878,
                                  "src": "3091:18:38",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_enum$_BusinessDayConvention_$22503",
                                    "typeString": "enum BusinessDayConvention"
                                  },
                                  {
                                    "typeIdentifier": "t_enum$_Calendar_$22506",
                                    "typeString": "enum Calendar"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 11873,
                                "name": "shiftCalcTime",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23056,
                                "src": "3018:13:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_enum$_BusinessDayConvention_$22503_$_t_enum$_Calendar_$22506_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,enum BusinessDayConvention,enum Calendar,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 11881,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3018:92:38",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_enum$_EventType_$22610",
                                "typeString": "enum EventType"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 11870,
                            "name": "getExternalDataForSTF",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3793,
                            "src": "2927:21:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_enum$_EventType_$22610_$_t_uint256_$returns$_t_bytes32_$",
                              "typeString": "function (bytes32,enum EventType,uint256) view returns (bytes32)"
                            }
                          },
                          "id": 11882,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2927:197:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CERTFTerms_$22917_memory_ptr",
                            "typeString": "struct CERTFTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 11864,
                              "name": "engine",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11812,
                              "src": "2827:6:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 11863,
                            "name": "ICERTFEngine",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32423,
                            "src": "2814:12:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_ICERTFEngine_$32423_$",
                              "typeString": "type(contract ICERTFEngine)"
                            }
                          },
                          "id": 11865,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2814:20:38",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ICERTFEngine_$32423",
                            "typeString": "contract ICERTFEngine"
                          }
                        },
                        "id": 11866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "computeStateForEvent",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 32352,
                        "src": "2814:41:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_pure$_t_struct$_CERTFTerms_$22917_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CERTFTerms memory,struct State memory,bytes32,bytes32) pure external returns (struct State memory)"
                        }
                      },
                      "id": 11883,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2814:320:38",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "src": "2806:328:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "id": 11885,
                  "nodeType": "ExpressionStatement",
                  "src": "2806:328:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 11886,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11801,
                        "src": "3153:5:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11887,
                        "name": "payoff",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11839,
                        "src": "3160:6:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      }
                    ],
                    "id": 11888,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3152:15:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_struct$_State_$22673_memory_ptr_$_t_int256_$",
                      "typeString": "tuple(struct State memory,int256)"
                    }
                  },
                  "functionReturnParameters": 11810,
                  "id": 11889,
                  "nodeType": "Return",
                  "src": "3145:22:38"
                }
              ]
            },
            "documentation": null,
            "id": 11891,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeStateAndPayoffForEvent",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 11805,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2170:8:38"
            },
            "parameters": {
              "id": 11804,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11799,
                  "mutability": "mutable",
                  "name": "assetId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11891,
                  "src": "2079:15:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11798,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2079:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11801,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11891,
                  "src": "2096:18:38",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11800,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "2096:5:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11803,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11891,
                  "src": "2116:14:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 11802,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2116:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2078:53:38"
            },
            "returnParameters": {
              "id": 11810,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11807,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11891,
                  "src": "2196:12:38",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11806,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "2196:5:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11809,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11891,
                  "src": "2210:6:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 11808,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2210:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2195:22:38"
            },
            "scope": 11892,
            "src": "2040:1134:38",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 11893,
        "src": "296:2880:38"
      }
    ],
    "src": "41:3135:38"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.11+commit.5ef660b1.Emscripten.clang"
  },
  "networks": {
    "4": {
      "events": {
        "0xc5df678b84aa92f5f59981df8c9997b366d886de25771c5f753015c2e14e907a": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "assetId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "creator",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "counterparty",
              "type": "address"
            }
          ],
          "name": "InitializedAsset",
          "type": "event"
        },
        "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "previousOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "name": "OwnershipTransferred",
          "type": "event"
        },
        "0xd255be8589971f117e0e4377177282fb7cce66e378bfb1b7eafddd05e4f181e9": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "assetId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "enum EventType",
              "name": "eventType",
              "type": "uint8"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "scheduleTime",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "int256",
              "name": "payoff",
              "type": "int256"
            }
          ],
          "name": "ProgressedAsset",
          "type": "event"
        },
        "0x4f269a19b64cfff0bdee7fd3cdaec44e1fe38ce2ff55d3009a89fac6ecbe9f2c": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "assetId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "bytes32",
              "name": "statusMessage",
              "type": "bytes32"
            }
          ],
          "name": "Status",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x444CDE85fda13fEE741A2152e303B43d5dE1aea1",
      "transactionHash": "0x1d7727657a81e42d0e783a2fa968b962174c8d0793cb57c5028ab450db1218d8"
    },
    "5": {
      "events": {
        "0xc5df678b84aa92f5f59981df8c9997b366d886de25771c5f753015c2e14e907a": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "assetId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "creator",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "counterparty",
              "type": "address"
            }
          ],
          "name": "InitializedAsset",
          "type": "event"
        },
        "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "previousOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "name": "OwnershipTransferred",
          "type": "event"
        },
        "0xd255be8589971f117e0e4377177282fb7cce66e378bfb1b7eafddd05e4f181e9": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "assetId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "enum EventType",
              "name": "eventType",
              "type": "uint8"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "scheduleTime",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "int256",
              "name": "payoff",
              "type": "int256"
            }
          ],
          "name": "ProgressedAsset",
          "type": "event"
        },
        "0x4f269a19b64cfff0bdee7fd3cdaec44e1fe38ce2ff55d3009a89fac6ecbe9f2c": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "assetId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "bytes32",
              "name": "statusMessage",
              "type": "bytes32"
            }
          ],
          "name": "Status",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x928f13b1A03B84F3CD6b35a215da233592e7C6cb",
      "transactionHash": "0xffc0801e12a890f02088b65539e9c00de524b5d7c517ad21702b7739c2db1225"
    },
    "1994": {
      "events": {
        "0xc5df678b84aa92f5f59981df8c9997b366d886de25771c5f753015c2e14e907a": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "assetId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "creator",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "counterparty",
              "type": "address"
            }
          ],
          "name": "InitializedAsset",
          "type": "event"
        },
        "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "address",
              "name": "previousOwner",
              "type": "address"
            },
            {
              "indexed": true,
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "name": "OwnershipTransferred",
          "type": "event"
        },
        "0xd255be8589971f117e0e4377177282fb7cce66e378bfb1b7eafddd05e4f181e9": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "assetId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "enum EventType",
              "name": "eventType",
              "type": "uint8"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "scheduleTime",
              "type": "uint256"
            },
            {
              "indexed": false,
              "internalType": "int256",
              "name": "payoff",
              "type": "int256"
            }
          ],
          "name": "ProgressedAsset",
          "type": "event"
        },
        "0x4f269a19b64cfff0bdee7fd3cdaec44e1fe38ce2ff55d3009a89fac6ecbe9f2c": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": true,
              "internalType": "bytes32",
              "name": "assetId",
              "type": "bytes32"
            },
            {
              "indexed": false,
              "internalType": "bytes32",
              "name": "statusMessage",
              "type": "bytes32"
            }
          ],
          "name": "Status",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x5DB04e348C343027993618A15Ae7Ba285dda1708",
      "transactionHash": "0x3dada8064acbf72056a794d7a97031775c10aaa9fc9fe3dc01e046afbed17e77"
    }
  },
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-08-12T09:47:17.918Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "initialize((uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(uint256,uint8,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),bytes32[],(address,address,address,address),address,address)": {
        "params": {
          "admin": "address of the admin of the asset (optional)",
          "engine": "address of the ACTUS engine used for the spec. ContractType",
          "ownership": "ownership of the asset",
          "schedule": "schedule of the asset",
          "terms": "asset specific terms"
        }
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "progress(bytes32)": {
        "details": "Emits ProgressedAsset if the state of the asset was updated.",
        "params": {
          "assetId": "id of the asset"
        }
      },
      "progressWith(bytes32,bytes32)": {
        "details": "Emits ProgressedAsset if the state of the asset was updated.",
        "params": {
          "_event": "the unscheduled event",
          "assetId": "id of the asset"
        }
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    },
    "title": "CERTFActor",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "getEpochOffset(uint8)": {
        "notice": "Returns the epoch offset for a given event type to determine the correct order of events if multiple events have the same timestamp"
      },
      "initialize((uint8,uint8,uint8,uint8,uint8,uint8,uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,bool),(uint256,uint8,uint8,bool),(uint256,uint8,uint8,bool),(uint256,uint8,uint8,bool),(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),bytes32[],(address,address,address,address),address,address)": {
        "notice": "Derives initial state of the asset terms and stores together with terms, schedule, ownership, engine, admin of the asset in the contract types specific AssetRegistry."
      },
      "progress(bytes32)": {
        "notice": "Proceeds with the next state of the asset based on the terms, the last state, market object data and the settlement status of current obligation, derived from either a prev. pending event, an event generated based on the current state of an underlying asset or the assets schedule."
      },
      "progressWith(bytes32,bytes32)": {
        "notice": "Proceeds with the next state of the asset based on the terms, the last state, market object data and the settlement status of current obligation, derived from a provided (unscheduled) event Reverts if the provided event violates the order of events."
      },
      "shiftCalcTime(uint256,uint8,uint8,uint256)": {
        "notice": "Used in POFs and STFs for DCFs. No shifting is applied if a Calc/Shift instead of Shift/Calc BDC is provided."
      }
    },
    "notice": "TODO",
    "version": 1
  }
}