{
  "contractName": "EndOfMonthConventions",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "enum EndOfMonthConvention",
          "name": "eomc",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "startTime",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "i",
              "type": "uint256"
            },
            {
              "internalType": "enum P",
              "name": "p",
              "type": "uint8"
            },
            {
              "internalType": "enum S",
              "name": "s",
              "type": "uint8"
            },
            {
              "internalType": "bool",
              "name": "isSet",
              "type": "bool"
            }
          ],
          "internalType": "struct IPS",
          "name": "cycle",
          "type": "tuple"
        }
      ],
      "name": "adjustEndOfMonthConvention",
      "outputs": [
        {
          "internalType": "enum EndOfMonthConvention",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.11+commit.5ef660b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"eomc\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"enum S\",\"name\":\"s\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IPS\",\"name\":\"cycle\",\"type\":\"tuple\"}],\"name\":\"adjustEndOfMonthConvention\",\"outputs\":[{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))\":{\"details\":\"The following is considered to dertermine if schedule dates are shifted to the end of month: - The convention SD (same day) means not adjusting, EM (end of month) means adjusting - Dates are only shifted if the schedule start date is an end-of-month date - Dates are only shifted if the schedule cycle is based on an \\\"M\\\" period unit or multiple thereof\",\"params\":{\"cycle\":\"the cycle struct\",\"eomc\":\"the end of month convention to adjust\",\"startTime\":\"timestamp of the cycle start\"},\"returns\":{\"_0\":\"the adjusted end of month convention\"}}},\"title\":\"EndOfMonthConventions\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))\":{\"notice\":\"This function makes an adjustment on the end of month convention.\"}},\"notice\":\"Implements the ACTUS end of month convention.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@atpar/actus-solidity/contracts/Core/Conventions/EndOfMonthConventions.sol\":\"EndOfMonthConventions\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@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/EndOfMonthConventions.sol\":{\"keccak256\":\"0xe004912bd32ef22ac6ee91f35a3855b06492d8a89f585f1a508c1c26349fd880\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e70d558bee746b797cdcadf84d5c9cd1b77fc6e99a089524ecaeb91201c71dcd\",\"dweb:/ipfs/QmcxpSKn5ZG4DPrSkm1Pxd21So6NKcHdiX5zfpExD5eLpv\"]},\"@atpar/actus-solidity/contracts/external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol\":{\"keccak256\":\"0x679533db9ba3257086015c0435c7d0de7a0a2f352a9de725db294e3f42c17391\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c586a5d8d9a654840c3655ccd4e47458d1e781c7542ec6fd2c29638b0dee57d\",\"dweb:/ipfs/QmeoQpnTMU4pa4iwKJcKmbNm7P54UCxux2G9rJyTCyq8GZ\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5061042e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063179331f314610030575b600080fd5b61004361003e3660046102a5565b610059565b604051610050919061034e565b60405180910390f35b6000600184600181111561006957fe5b14156100e55761007883610129565b61008184610153565b1480156100d0575060028260200151600581111561009b57fe5b14806100b657506003826020015160058111156100b457fe5b145b806100d057506004826020015160058111156100ce57fe5b145b156100dd57506001610122565b506000610122565b60008460018111156100f357fe5b141561010157506000610122565b60405162461bcd60e51b815260040161011990610362565b60405180910390fd5b9392505050565b6000808061013c62015180855b04610162565b509150915061014b82826101f8565b949350505050565b600061014b6201518083610136565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816101b957fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806102095750816003145b806102145750816005145b8061021f5750816007145b8061022a5750816008145b80610235575081600a145b80610240575081600c145b1561024d5750601f61027a565b8160021461025d5750601e61027a565b61026683610280565b61027157601c610274565b601d5b60ff1690505b92915050565b60006004820615801561029557506064820615155b8061027a57505061019090061590565b600080600083850360c08112156102ba578384fd5b84356102c5816103de565b9350602085013592506080603f19820112156102df578182fd5b506040516080810181811067ffffffffffffffff821117156102ff578283fd5b604090815285013581526060850135610317816103eb565b6020820152608085013561032a816103de565b604082015260a085013561033d816103cd565b606082015292959194509192509050565b602081016002831061035c57fe5b91905290565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b80151581146103db57600080fd5b50565b600281106103db57600080fd5b600681106103db57600080fdfea264697066735822122007ca68be66a5acb7dde4c13466993afd1fb43f0fe02503f12fc1fcd4fbbafac164736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063179331f314610030575b600080fd5b61004361003e3660046102a5565b610059565b604051610050919061034e565b60405180910390f35b6000600184600181111561006957fe5b14156100e55761007883610129565b61008184610153565b1480156100d0575060028260200151600581111561009b57fe5b14806100b657506003826020015160058111156100b457fe5b145b806100d057506004826020015160058111156100ce57fe5b145b156100dd57506001610122565b506000610122565b60008460018111156100f357fe5b141561010157506000610122565b60405162461bcd60e51b815260040161011990610362565b60405180910390fd5b9392505050565b6000808061013c62015180855b04610162565b509150915061014b82826101f8565b949350505050565b600061014b6201518083610136565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816101b957fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806102095750816003145b806102145750816005145b8061021f5750816007145b8061022a5750816008145b80610235575081600a145b80610240575081600c145b1561024d5750601f61027a565b8160021461025d5750601e61027a565b61026683610280565b61027157601c610274565b601d5b60ff1690505b92915050565b60006004820615801561029557506064820615155b8061027a57505061019090061590565b600080600083850360c08112156102ba578384fd5b84356102c5816103de565b9350602085013592506080603f19820112156102df578182fd5b506040516080810181811067ffffffffffffffff821117156102ff578283fd5b604090815285013581526060850135610317816103eb565b6020820152608085013561032a816103de565b604082015260a085013561033d816103cd565b606082015292959194509192509050565b602081016002831061035c57fe5b91905290565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b80151581146103db57600080fd5b50565b600281106103db57600080fd5b600681106103db57600080fdfea264697066735822122007ca68be66a5acb7dde4c13466993afd1fb43f0fe02503f12fc1fcd4fbbafac164736f6c634300060b0033",
  "immutableReferences": {},
  "sourceMap": "298:2719:78:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "298:2719:78:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1010:924;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;1185:20;1233:24;1225:4;:32;;;;;;;;;1221:618;;;1483:53;1526:9;1483:42;:53::i;:::-;1434:45;1469:9;1434:34;:45::i;:::-;:102;:174;;;;-1:-1:-1;1568:3:78;1557:5;:7;;;:14;;;;;;;;;:32;;;-1:-1:-1;1586:3:78;1575:5;:7;;;:14;;;;;;;;;1557:32;:50;;;-1:-1:-1;1604:3:78;1593:5;:7;;;:14;;;;;;;;;1557:50;1413:274;;;-1:-1:-1;1648:24:78;1641:31;;1413:274;-1:-1:-1;1707:23:78;1700:30;;1221:618;1759:23;1751:4;:31;;;;;;;;;1747:92;;;-1:-1:-1;1805:23:78;1798:30;;1747:92;1848:79;;-1:-1:-1;;;1848:79:78;;;;;;;:::i;:::-;;;;;;;;1010:924;;;;;;:::o;6258:217:106:-;6321:16;;;6376:40;1020:12;6388:9;:27;;6376:11;:40::i;:::-;6349:67;;;;;6440:28;6456:4;6462:5;6440:15;:28::i;:::-;6426:42;6258:217;-1:-1:-1;;;;6258:217:106:o;7362:132::-;7417:8;7447:40;1020:12;7459:9;:27;;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;6480:383::-;6551:16;6583:5;6592:1;6583:10;:24;;;;6597:5;6606:1;6597:10;6583:24;:38;;;;6611:5;6620:1;6611:10;6583:38;:52;;;;6625:5;6634:1;6625:10;6583:52;:66;;;;6639:5;6648:1;6639:10;6583:66;:81;;;;6653:5;6662:2;6653:11;6583:81;:96;;;;6668:5;6677:2;6668:11;6583:96;6579:278;;;-1:-1:-1;6709:2:106;6579:278;;;6732:5;6741:1;6732:10;6728:129;;-1:-1:-1;6772:2:106;6728:129;;;6819:17;6831:4;6819:11;:17::i;:::-;:27;;6844:2;6819:27;;;6839:2;6819:27;6805:41;;;;6728:129;6480:383;;;;:::o;5820:157::-;5875:13;5920:1;5913:4;:8;:13;5912:36;;;;-1:-1:-1;5939:3:106;5932:4;:10;:15;;5912:36;5911:59;;;-1:-1:-1;;5961:3:106;5954:10;;:15;;5820:157::o;1543:588:-1:-;;;;1717:9;1708:7;1704:23;1729:3;1704:23;1700:33;1697:2;;;-1:-1;;1736:12;1697:2;242:6;229:20;254:59;307:5;254:59;:::i;:::-;1788:89;-1:-1;1914:2;1953:22;;1473:20;;-1:-1;755:4;-1:-1;;734:19;;730:30;727:2;;;-1:-1;;763:12;727:2;;2022;3527:9;755:4;3563:6;3559:17;3670:6;3658:10;3655:22;3634:18;3622:10;3619:34;3616:62;3613:2;;;-1:-1;;3681:12;3613:2;2022;3700:22;;;2083;;1473:20;865:75;;1059:22;;;399:20;424:40;399:20;424:40;:::i;:::-;1914:2;1013:16;;1006:82;755:4;1207:22;;229:20;254:59;229:20;254:59;:::i;:::-;2022:2;1161:16;;1154:82;1349:22;;;69:20;94:30;69:20;94:30;:::i;:::-;1059:22;1313:16;;1306:72;1691:440;;;;-1:-1;1317:5;;-1:-1;1691:440;-1:-1;1691:440::o;2771:270::-;2922:2;2907:18;;4502:1;4492:12;;4482:2;;4508:9;4482:2;2233:74;;;2893:148;:::o;3048:416::-;3248:2;3262:47;;;2544:2;3233:18;;;3838:19;2580:34;3878:14;;;2560:55;2649:34;2635:12;;;2628:56;-1:-1;;;2704:12;;;2697:29;2745:12;;;3219:245::o;4531:111::-;4612:5;3972:13;3965:21;4590:5;4587:32;4577:2;;4633:1;;4623:12;4577:2;4571:71;:::o;4649:120::-;4744:1;4737:5;4734:12;4724:2;;4760:1;;4750:12;4776:101;4852:1;4845:5;4842:12;4832:2;;4868:1;;4858:12",
  "source": "// \"SPDX-License-Identifier: Apache-2.0\"\npragma solidity ^0.6.11;\npragma experimental ABIEncoderV2;\n\nimport \"../../external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol\";\n\nimport \"../ACTUSTypes.sol\";\n\n\n/**\n * @title EndOfMonthConventions\n * @notice Implements the ACTUS end of month convention.\n */\ncontract EndOfMonthConventions {\n\n    /**\n     * This function makes an adjustment on the end of month convention.\n     * @dev The following is considered to dertermine if schedule dates are shifted to the end of month:\n     * - The convention SD (same day) means not adjusting, EM (end of month) means adjusting\n     * - Dates are only shifted if the schedule start date is an end-of-month date\n     * - Dates are only shifted if the schedule cycle is based on an \"M\" period unit or multiple thereof\n     * @param eomc the end of month convention to adjust\n     * @param startTime timestamp of the cycle start\n     * @param cycle the cycle struct\n     * @return the adjusted end of month convention\n     */\n    function adjustEndOfMonthConvention(\n        EndOfMonthConvention eomc,\n        uint256 startTime,\n        IPS memory cycle\n    )\n        public\n        pure\n        returns (EndOfMonthConvention)\n    {\n        if (eomc == EndOfMonthConvention.EOM) {\n            // check if startTime is last day in month and schedule has month based period\n            // otherwise switch to SD convention\n            if (\n                BokkyPooBahsDateTimeLibrary.getDay(startTime) == BokkyPooBahsDateTimeLibrary.getDaysInMonth(startTime) &&\n                (cycle.p == P.M || cycle.p == P.Q || cycle.p == P.H)\n            ) {\n                return EndOfMonthConvention.EOM;\n            }\n            return EndOfMonthConvention.SD;\n        } else if (eomc == EndOfMonthConvention.SD) {\n            return EndOfMonthConvention.SD;\n        }\n        revert(\"EndOfMonthConvention.adjustEndOfMonthConvention: ATTRIBUTE_NOT_FOUND.\");\n    }\n\n    /**\n\t * This function is for the EndOfMonthConvention.EOM convention and\n\t * shifts a timestamp to the last day of the month.\n\t * @param timestamp the timestmap to shift\n\t * @return the shifted timestamp\n\t */\n\tfunction shiftEndOfMonth(uint256 timestamp)\n\t  internal\n\t  pure\n\t  returns (uint256)\n\t{\n        // // check if startTime is last day in month and schedule has month based period\n        // // otherwise switch to SD convention\n        // if (\n        //     eomc != EndOfMonthConvention.EOM\n        //     || BokkyPooBahsDateTimeLibrary.getDay(startTime) != BokkyPooBahsDateTimeLibrary.getDaysInMonth(startTime)\n        //     || (cycle.p == P.M || cycle.p == P.Q || cycle.p == P.H)\n        // ) {\n        //     // SD\n        //     return timestamp;\n        // }\n\n\t\tuint256 year;\n\t\tuint256 month;\n\t\tuint256 day;\n\t\t(year, month, day) = BokkyPooBahsDateTimeLibrary.timestampToDate(timestamp);\n\t\tuint256 lastDayOfMonth = BokkyPooBahsDateTimeLibrary._getDaysInMonth(year, month);\n\n\t\treturn BokkyPooBahsDateTimeLibrary.timestampFromDate(year, month, lastDayOfMonth);\n\t}\n}\n",
  "sourcePath": "@atpar/actus-solidity/contracts/Core/Conventions/EndOfMonthConventions.sol",
  "ast": {
    "absolutePath": "@atpar/actus-solidity/contracts/Core/Conventions/EndOfMonthConventions.sol",
    "exportedSymbols": {
      "EndOfMonthConventions": [
        24013
      ]
    },
    "id": 24014,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 23897,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:78"
      },
      {
        "id": 23898,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:78"
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol",
        "file": "../../external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol",
        "id": 23899,
        "nodeType": "ImportDirective",
        "scope": 24014,
        "sourceUnit": 37178,
        "src": "101:68:78",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Core/ACTUSTypes.sol",
        "file": "../ACTUSTypes.sol",
        "id": 23900,
        "nodeType": "ImportDirective",
        "scope": 24014,
        "sourceUnit": 23007,
        "src": "171:27:78",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 23901,
          "nodeType": "StructuredDocumentation",
          "src": "201:96:78",
          "text": " @title EndOfMonthConventions\n @notice Implements the ACTUS end of month convention."
        },
        "fullyImplemented": true,
        "id": 24013,
        "linearizedBaseContracts": [
          24013
        ],
        "name": "EndOfMonthConventions",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 23968,
              "nodeType": "Block",
              "src": "1211:723:78",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                      "typeString": "enum EndOfMonthConvention"
                    },
                    "id": 23916,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 23913,
                      "name": "eomc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23904,
                      "src": "1225:4:78",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                        "typeString": "enum EndOfMonthConvention"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 23914,
                        "name": "EndOfMonthConvention",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22580,
                        "src": "1233:20:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EndOfMonthConvention_$22580_$",
                          "typeString": "type(enum EndOfMonthConvention)"
                        }
                      },
                      "id": 23915,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "EOM",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1233:24:78",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                        "typeString": "enum EndOfMonthConvention"
                      }
                    },
                    "src": "1225:32:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                        "typeString": "enum EndOfMonthConvention"
                      },
                      "id": 23957,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 23954,
                        "name": "eomc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23904,
                        "src": "1751:4:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                          "typeString": "enum EndOfMonthConvention"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 23955,
                          "name": "EndOfMonthConvention",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22580,
                          "src": "1759:20:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_EndOfMonthConvention_$22580_$",
                            "typeString": "type(enum EndOfMonthConvention)"
                          }
                        },
                        "id": 23956,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "SD",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1759:23:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                          "typeString": "enum EndOfMonthConvention"
                        }
                      },
                      "src": "1751:31:78",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": null,
                    "id": 23962,
                    "nodeType": "IfStatement",
                    "src": "1747:92:78",
                    "trueBody": {
                      "id": 23961,
                      "nodeType": "Block",
                      "src": "1784:55:78",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 23958,
                              "name": "EndOfMonthConvention",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22580,
                              "src": "1805:20:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_EndOfMonthConvention_$22580_$",
                                "typeString": "type(enum EndOfMonthConvention)"
                              }
                            },
                            "id": 23959,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "SD",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1805:23:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                              "typeString": "enum EndOfMonthConvention"
                            }
                          },
                          "functionReturnParameters": 23912,
                          "id": 23960,
                          "nodeType": "Return",
                          "src": "1798:30:78"
                        }
                      ]
                    }
                  },
                  "id": 23963,
                  "nodeType": "IfStatement",
                  "src": "1221:618:78",
                  "trueBody": {
                    "id": 23953,
                    "nodeType": "Block",
                    "src": "1259:482:78",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 23944,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 23925,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 23919,
                                  "name": "startTime",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 23906,
                                  "src": "1469:9:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 23917,
                                  "name": "BokkyPooBahsDateTimeLibrary",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 37177,
                                  "src": "1434:27:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_BokkyPooBahsDateTimeLibrary_$37177_$",
                                    "typeString": "type(library BokkyPooBahsDateTimeLibrary)"
                                  }
                                },
                                "id": 23918,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getDay",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 36458,
                                "src": "1434:34:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 23920,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1434:45:78",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 23923,
                                  "name": "startTime",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 23906,
                                  "src": "1526:9:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 23921,
                                  "name": "BokkyPooBahsDateTimeLibrary",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 37177,
                                  "src": "1483:27:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_BokkyPooBahsDateTimeLibrary_$37177_$",
                                    "typeString": "type(library BokkyPooBahsDateTimeLibrary)"
                                  }
                                },
                                "id": 23922,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getDaysInMonth",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 36320,
                                "src": "1483:42:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 23924,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1483:53:78",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1434:102:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 23942,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 23936,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_enum$_P_$22474",
                                      "typeString": "enum P"
                                    },
                                    "id": 23930,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 23926,
                                        "name": "cycle",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 23908,
                                        "src": "1557:5:78",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                          "typeString": "struct IPS memory"
                                        }
                                      },
                                      "id": 23927,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "p",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 22481,
                                      "src": "1557:7:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_P_$22474",
                                        "typeString": "enum P"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 23928,
                                        "name": "P",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 22474,
                                        "src": "1568:1:78",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                                          "typeString": "type(enum P)"
                                        }
                                      },
                                      "id": 23929,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "M",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "1568:3:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_P_$22474",
                                        "typeString": "enum P"
                                      }
                                    },
                                    "src": "1557:14:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "||",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_enum$_P_$22474",
                                      "typeString": "enum P"
                                    },
                                    "id": 23935,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 23931,
                                        "name": "cycle",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 23908,
                                        "src": "1575:5:78",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                          "typeString": "struct IPS memory"
                                        }
                                      },
                                      "id": 23932,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "p",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 22481,
                                      "src": "1575:7:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_P_$22474",
                                        "typeString": "enum P"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 23933,
                                        "name": "P",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 22474,
                                        "src": "1586:1:78",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                                          "typeString": "type(enum P)"
                                        }
                                      },
                                      "id": 23934,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "Q",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "1586:3:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_P_$22474",
                                        "typeString": "enum P"
                                      }
                                    },
                                    "src": "1575:14:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "1557:32:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "||",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_enum$_P_$22474",
                                    "typeString": "enum P"
                                  },
                                  "id": 23941,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 23937,
                                      "name": "cycle",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 23908,
                                      "src": "1593:5:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                        "typeString": "struct IPS memory"
                                      }
                                    },
                                    "id": 23938,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "p",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22481,
                                    "src": "1593:7:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_P_$22474",
                                      "typeString": "enum P"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 23939,
                                      "name": "P",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 22474,
                                      "src": "1604:1:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                                        "typeString": "type(enum P)"
                                      }
                                    },
                                    "id": 23940,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "H",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "1604:3:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_P_$22474",
                                      "typeString": "enum P"
                                    }
                                  },
                                  "src": "1593:14:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "1557:50:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 23943,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "1556:52:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "1434:174:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 23949,
                        "nodeType": "IfStatement",
                        "src": "1413:274:78",
                        "trueBody": {
                          "id": 23948,
                          "nodeType": "Block",
                          "src": "1623:64:78",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 23945,
                                  "name": "EndOfMonthConvention",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22580,
                                  "src": "1648:20:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_EndOfMonthConvention_$22580_$",
                                    "typeString": "type(enum EndOfMonthConvention)"
                                  }
                                },
                                "id": 23946,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "EOM",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1648:24:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                  "typeString": "enum EndOfMonthConvention"
                                }
                              },
                              "functionReturnParameters": 23912,
                              "id": 23947,
                              "nodeType": "Return",
                              "src": "1641:31:78"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 23950,
                            "name": "EndOfMonthConvention",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22580,
                            "src": "1707:20:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_EndOfMonthConvention_$22580_$",
                              "typeString": "type(enum EndOfMonthConvention)"
                            }
                          },
                          "id": 23951,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "SD",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1707:23:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                            "typeString": "enum EndOfMonthConvention"
                          }
                        },
                        "functionReturnParameters": 23912,
                        "id": 23952,
                        "nodeType": "Return",
                        "src": "1700:30:78"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f664d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f464f554e442e",
                        "id": 23965,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1855:71:78",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cd441c6aa5ce7bd091a5f67ffd9fbcbfd7211e0bd0380a70e15f03b1ab4767d8",
                          "typeString": "literal_string \"EndOfMonthConvention.adjustEndOfMonthConvention: ATTRIBUTE_NOT_FOUND.\""
                        },
                        "value": "EndOfMonthConvention.adjustEndOfMonthConvention: ATTRIBUTE_NOT_FOUND."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_cd441c6aa5ce7bd091a5f67ffd9fbcbfd7211e0bd0380a70e15f03b1ab4767d8",
                          "typeString": "literal_string \"EndOfMonthConvention.adjustEndOfMonthConvention: ATTRIBUTE_NOT_FOUND.\""
                        }
                      ],
                      "id": 23964,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "1848:6:78",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 23966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1848:79:78",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 23967,
                  "nodeType": "ExpressionStatement",
                  "src": "1848:79:78"
                }
              ]
            },
            "documentation": {
              "id": 23902,
              "nodeType": "StructuredDocumentation",
              "src": "336:669:78",
              "text": " This function makes an adjustment on the end of month convention.\n @dev The following is considered to dertermine if schedule dates are shifted to the end of month:\n - The convention SD (same day) means not adjusting, EM (end of month) means adjusting\n - Dates are only shifted if the schedule start date is an end-of-month date\n - Dates are only shifted if the schedule cycle is based on an \"M\" period unit or multiple thereof\n @param eomc the end of month convention to adjust\n @param startTime timestamp of the cycle start\n @param cycle the cycle struct\n @return the adjusted end of month convention"
            },
            "functionSelector": "179331f3",
            "id": 23969,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "adjustEndOfMonthConvention",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 23909,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23904,
                  "mutability": "mutable",
                  "name": "eomc",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 23969,
                  "src": "1055:25:78",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                    "typeString": "enum EndOfMonthConvention"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 23903,
                    "name": "EndOfMonthConvention",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22580,
                    "src": "1055:20:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                      "typeString": "enum EndOfMonthConvention"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 23906,
                  "mutability": "mutable",
                  "name": "startTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 23969,
                  "src": "1090:17:78",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 23905,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1090:7:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 23908,
                  "mutability": "mutable",
                  "name": "cycle",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 23969,
                  "src": "1117:16:78",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                    "typeString": "struct IPS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 23907,
                    "name": "IPS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22486,
                    "src": "1117:3:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_IPS_$22486_storage_ptr",
                      "typeString": "struct IPS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1045:94:78"
            },
            "returnParameters": {
              "id": 23912,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23911,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 23969,
                  "src": "1185:20:78",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                    "typeString": "enum EndOfMonthConvention"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 23910,
                    "name": "EndOfMonthConvention",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22580,
                    "src": "1185:20:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                      "typeString": "enum EndOfMonthConvention"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1184:22:78"
            },
            "scope": 24013,
            "src": "1010:924:78",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 24011,
              "nodeType": "Block",
              "src": "2236:779:78",
              "statements": [
                {
                  "assignments": [
                    23978
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 23978,
                      "mutability": "mutable",
                      "name": "year",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24011,
                      "src": "2717:12:78",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 23977,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2717:7:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 23979,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2717:12:78"
                },
                {
                  "assignments": [
                    23981
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 23981,
                      "mutability": "mutable",
                      "name": "month",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24011,
                      "src": "2733:13:78",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 23980,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2733:7:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 23982,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2733:13:78"
                },
                {
                  "assignments": [
                    23984
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 23984,
                      "mutability": "mutable",
                      "name": "day",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24011,
                      "src": "2750:11:78",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 23983,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2750:7:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 23985,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2750:11:78"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 23994,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 23986,
                          "name": "year",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23978,
                          "src": "2766:4:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 23987,
                          "name": "month",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23981,
                          "src": "2772:5:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 23988,
                          "name": "day",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23984,
                          "src": "2779:3:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 23989,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "2765:18:78",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 23992,
                          "name": "timestamp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23972,
                          "src": "2830:9:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 23990,
                          "name": "BokkyPooBahsDateTimeLibrary",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 37177,
                          "src": "2786:27:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_BokkyPooBahsDateTimeLibrary_$37177_$",
                            "typeString": "type(library BokkyPooBahsDateTimeLibrary)"
                          }
                        },
                        "id": 23991,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestampToDate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 36063,
                        "src": "2786:43:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                          "typeString": "function (uint256) pure returns (uint256,uint256,uint256)"
                        }
                      },
                      "id": 23993,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2786:54:78",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256,uint256)"
                      }
                    },
                    "src": "2765:75:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 23995,
                  "nodeType": "ExpressionStatement",
                  "src": "2765:75:78"
                },
                {
                  "assignments": [
                    23997
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 23997,
                      "mutability": "mutable",
                      "name": "lastDayOfMonth",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24011,
                      "src": "2844:22:78",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 23996,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2844:7:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 24003,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 24000,
                        "name": "year",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23978,
                        "src": "2913:4:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 24001,
                        "name": "month",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23981,
                        "src": "2919:5:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 23998,
                        "name": "BokkyPooBahsDateTimeLibrary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 37177,
                        "src": "2869:27:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_BokkyPooBahsDateTimeLibrary_$37177_$",
                          "typeString": "type(library BokkyPooBahsDateTimeLibrary)"
                        }
                      },
                      "id": 23999,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_getDaysInMonth",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 36382,
                      "src": "2869:43:78",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 24002,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2869:56:78",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2844:81:78"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 24006,
                        "name": "year",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23978,
                        "src": "2983:4:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 24007,
                        "name": "month",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23981,
                        "src": "2989:5:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 24008,
                        "name": "lastDayOfMonth",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23997,
                        "src": "2996:14:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 24004,
                        "name": "BokkyPooBahsDateTimeLibrary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 37177,
                        "src": "2937:27:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_BokkyPooBahsDateTimeLibrary_$37177_$",
                          "typeString": "type(library BokkyPooBahsDateTimeLibrary)"
                        }
                      },
                      "id": 24005,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestampFromDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 36002,
                      "src": "2937:45:78",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 24009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2937:74:78",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 23976,
                  "id": 24010,
                  "nodeType": "Return",
                  "src": "2930:81:78"
                }
              ]
            },
            "documentation": {
              "id": 23970,
              "nodeType": "StructuredDocumentation",
              "src": "1940:208:78",
              "text": " This function is for the EndOfMonthConvention.EOM convention and\n shifts a timestamp to the last day of the month.\n @param timestamp the timestmap to shift\n @return the shifted timestamp"
            },
            "id": 24012,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "shiftEndOfMonth",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 23973,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23972,
                  "mutability": "mutable",
                  "name": "timestamp",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24012,
                  "src": "2175:17:78",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 23971,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2175:7:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2174:19:78"
            },
            "returnParameters": {
              "id": 23976,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23975,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24012,
                  "src": "2226:7:78",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 23974,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2226:7:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2225:9:78"
            },
            "scope": 24013,
            "src": "2150:865:78",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 24014,
        "src": "298:2719:78"
      }
    ],
    "src": "41:2977:78"
  },
  "legacyAST": {
    "absolutePath": "@atpar/actus-solidity/contracts/Core/Conventions/EndOfMonthConventions.sol",
    "exportedSymbols": {
      "EndOfMonthConventions": [
        24013
      ]
    },
    "id": 24014,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 23897,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:78"
      },
      {
        "id": 23898,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:78"
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol",
        "file": "../../external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol",
        "id": 23899,
        "nodeType": "ImportDirective",
        "scope": 24014,
        "sourceUnit": 37178,
        "src": "101:68:78",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Core/ACTUSTypes.sol",
        "file": "../ACTUSTypes.sol",
        "id": 23900,
        "nodeType": "ImportDirective",
        "scope": 24014,
        "sourceUnit": 23007,
        "src": "171:27:78",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 23901,
          "nodeType": "StructuredDocumentation",
          "src": "201:96:78",
          "text": " @title EndOfMonthConventions\n @notice Implements the ACTUS end of month convention."
        },
        "fullyImplemented": true,
        "id": 24013,
        "linearizedBaseContracts": [
          24013
        ],
        "name": "EndOfMonthConventions",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 23968,
              "nodeType": "Block",
              "src": "1211:723:78",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                      "typeString": "enum EndOfMonthConvention"
                    },
                    "id": 23916,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 23913,
                      "name": "eomc",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23904,
                      "src": "1225:4:78",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                        "typeString": "enum EndOfMonthConvention"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 23914,
                        "name": "EndOfMonthConvention",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22580,
                        "src": "1233:20:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EndOfMonthConvention_$22580_$",
                          "typeString": "type(enum EndOfMonthConvention)"
                        }
                      },
                      "id": 23915,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "EOM",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1233:24:78",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                        "typeString": "enum EndOfMonthConvention"
                      }
                    },
                    "src": "1225:32:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                        "typeString": "enum EndOfMonthConvention"
                      },
                      "id": 23957,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 23954,
                        "name": "eomc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23904,
                        "src": "1751:4:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                          "typeString": "enum EndOfMonthConvention"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 23955,
                          "name": "EndOfMonthConvention",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22580,
                          "src": "1759:20:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_EndOfMonthConvention_$22580_$",
                            "typeString": "type(enum EndOfMonthConvention)"
                          }
                        },
                        "id": 23956,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "SD",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1759:23:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                          "typeString": "enum EndOfMonthConvention"
                        }
                      },
                      "src": "1751:31:78",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": null,
                    "id": 23962,
                    "nodeType": "IfStatement",
                    "src": "1747:92:78",
                    "trueBody": {
                      "id": 23961,
                      "nodeType": "Block",
                      "src": "1784:55:78",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 23958,
                              "name": "EndOfMonthConvention",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22580,
                              "src": "1805:20:78",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_EndOfMonthConvention_$22580_$",
                                "typeString": "type(enum EndOfMonthConvention)"
                              }
                            },
                            "id": 23959,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "SD",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1805:23:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                              "typeString": "enum EndOfMonthConvention"
                            }
                          },
                          "functionReturnParameters": 23912,
                          "id": 23960,
                          "nodeType": "Return",
                          "src": "1798:30:78"
                        }
                      ]
                    }
                  },
                  "id": 23963,
                  "nodeType": "IfStatement",
                  "src": "1221:618:78",
                  "trueBody": {
                    "id": 23953,
                    "nodeType": "Block",
                    "src": "1259:482:78",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 23944,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 23925,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 23919,
                                  "name": "startTime",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 23906,
                                  "src": "1469:9:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 23917,
                                  "name": "BokkyPooBahsDateTimeLibrary",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 37177,
                                  "src": "1434:27:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_BokkyPooBahsDateTimeLibrary_$37177_$",
                                    "typeString": "type(library BokkyPooBahsDateTimeLibrary)"
                                  }
                                },
                                "id": 23918,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getDay",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 36458,
                                "src": "1434:34:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 23920,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1434:45:78",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 23923,
                                  "name": "startTime",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 23906,
                                  "src": "1526:9:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 23921,
                                  "name": "BokkyPooBahsDateTimeLibrary",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 37177,
                                  "src": "1483:27:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_BokkyPooBahsDateTimeLibrary_$37177_$",
                                    "typeString": "type(library BokkyPooBahsDateTimeLibrary)"
                                  }
                                },
                                "id": 23922,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "getDaysInMonth",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 36320,
                                "src": "1483:42:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 23924,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1483:53:78",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1434:102:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 23942,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 23936,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_enum$_P_$22474",
                                      "typeString": "enum P"
                                    },
                                    "id": 23930,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 23926,
                                        "name": "cycle",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 23908,
                                        "src": "1557:5:78",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                          "typeString": "struct IPS memory"
                                        }
                                      },
                                      "id": 23927,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "p",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 22481,
                                      "src": "1557:7:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_P_$22474",
                                        "typeString": "enum P"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 23928,
                                        "name": "P",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 22474,
                                        "src": "1568:1:78",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                                          "typeString": "type(enum P)"
                                        }
                                      },
                                      "id": 23929,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "M",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "1568:3:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_P_$22474",
                                        "typeString": "enum P"
                                      }
                                    },
                                    "src": "1557:14:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "||",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_enum$_P_$22474",
                                      "typeString": "enum P"
                                    },
                                    "id": 23935,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 23931,
                                        "name": "cycle",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 23908,
                                        "src": "1575:5:78",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                          "typeString": "struct IPS memory"
                                        }
                                      },
                                      "id": 23932,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "p",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 22481,
                                      "src": "1575:7:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_P_$22474",
                                        "typeString": "enum P"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 23933,
                                        "name": "P",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 22474,
                                        "src": "1586:1:78",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                                          "typeString": "type(enum P)"
                                        }
                                      },
                                      "id": 23934,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberName": "Q",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "1586:3:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_P_$22474",
                                        "typeString": "enum P"
                                      }
                                    },
                                    "src": "1575:14:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "1557:32:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "||",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_enum$_P_$22474",
                                    "typeString": "enum P"
                                  },
                                  "id": 23941,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 23937,
                                      "name": "cycle",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 23908,
                                      "src": "1593:5:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                        "typeString": "struct IPS memory"
                                      }
                                    },
                                    "id": 23938,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "p",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22481,
                                    "src": "1593:7:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_P_$22474",
                                      "typeString": "enum P"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 23939,
                                      "name": "P",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 22474,
                                      "src": "1604:1:78",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                                        "typeString": "type(enum P)"
                                      }
                                    },
                                    "id": 23940,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "H",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "1604:3:78",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_P_$22474",
                                      "typeString": "enum P"
                                    }
                                  },
                                  "src": "1593:14:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "1557:50:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 23943,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "1556:52:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "1434:174:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 23949,
                        "nodeType": "IfStatement",
                        "src": "1413:274:78",
                        "trueBody": {
                          "id": 23948,
                          "nodeType": "Block",
                          "src": "1623:64:78",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 23945,
                                  "name": "EndOfMonthConvention",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22580,
                                  "src": "1648:20:78",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_EndOfMonthConvention_$22580_$",
                                    "typeString": "type(enum EndOfMonthConvention)"
                                  }
                                },
                                "id": 23946,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "EOM",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1648:24:78",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                  "typeString": "enum EndOfMonthConvention"
                                }
                              },
                              "functionReturnParameters": 23912,
                              "id": 23947,
                              "nodeType": "Return",
                              "src": "1641:31:78"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 23950,
                            "name": "EndOfMonthConvention",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22580,
                            "src": "1707:20:78",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_EndOfMonthConvention_$22580_$",
                              "typeString": "type(enum EndOfMonthConvention)"
                            }
                          },
                          "id": 23951,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "SD",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1707:23:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                            "typeString": "enum EndOfMonthConvention"
                          }
                        },
                        "functionReturnParameters": 23912,
                        "id": 23952,
                        "nodeType": "Return",
                        "src": "1700:30:78"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f664d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f464f554e442e",
                        "id": 23965,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1855:71:78",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cd441c6aa5ce7bd091a5f67ffd9fbcbfd7211e0bd0380a70e15f03b1ab4767d8",
                          "typeString": "literal_string \"EndOfMonthConvention.adjustEndOfMonthConvention: ATTRIBUTE_NOT_FOUND.\""
                        },
                        "value": "EndOfMonthConvention.adjustEndOfMonthConvention: ATTRIBUTE_NOT_FOUND."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_cd441c6aa5ce7bd091a5f67ffd9fbcbfd7211e0bd0380a70e15f03b1ab4767d8",
                          "typeString": "literal_string \"EndOfMonthConvention.adjustEndOfMonthConvention: ATTRIBUTE_NOT_FOUND.\""
                        }
                      ],
                      "id": 23964,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "1848:6:78",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 23966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1848:79:78",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 23967,
                  "nodeType": "ExpressionStatement",
                  "src": "1848:79:78"
                }
              ]
            },
            "documentation": {
              "id": 23902,
              "nodeType": "StructuredDocumentation",
              "src": "336:669:78",
              "text": " This function makes an adjustment on the end of month convention.\n @dev The following is considered to dertermine if schedule dates are shifted to the end of month:\n - The convention SD (same day) means not adjusting, EM (end of month) means adjusting\n - Dates are only shifted if the schedule start date is an end-of-month date\n - Dates are only shifted if the schedule cycle is based on an \"M\" period unit or multiple thereof\n @param eomc the end of month convention to adjust\n @param startTime timestamp of the cycle start\n @param cycle the cycle struct\n @return the adjusted end of month convention"
            },
            "functionSelector": "179331f3",
            "id": 23969,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "adjustEndOfMonthConvention",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 23909,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23904,
                  "mutability": "mutable",
                  "name": "eomc",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 23969,
                  "src": "1055:25:78",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                    "typeString": "enum EndOfMonthConvention"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 23903,
                    "name": "EndOfMonthConvention",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22580,
                    "src": "1055:20:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                      "typeString": "enum EndOfMonthConvention"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 23906,
                  "mutability": "mutable",
                  "name": "startTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 23969,
                  "src": "1090:17:78",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 23905,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1090:7:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 23908,
                  "mutability": "mutable",
                  "name": "cycle",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 23969,
                  "src": "1117:16:78",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                    "typeString": "struct IPS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 23907,
                    "name": "IPS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22486,
                    "src": "1117:3:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_IPS_$22486_storage_ptr",
                      "typeString": "struct IPS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1045:94:78"
            },
            "returnParameters": {
              "id": 23912,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23911,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 23969,
                  "src": "1185:20:78",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                    "typeString": "enum EndOfMonthConvention"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 23910,
                    "name": "EndOfMonthConvention",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22580,
                    "src": "1185:20:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                      "typeString": "enum EndOfMonthConvention"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1184:22:78"
            },
            "scope": 24013,
            "src": "1010:924:78",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 24011,
              "nodeType": "Block",
              "src": "2236:779:78",
              "statements": [
                {
                  "assignments": [
                    23978
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 23978,
                      "mutability": "mutable",
                      "name": "year",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24011,
                      "src": "2717:12:78",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 23977,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2717:7:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 23979,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2717:12:78"
                },
                {
                  "assignments": [
                    23981
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 23981,
                      "mutability": "mutable",
                      "name": "month",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24011,
                      "src": "2733:13:78",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 23980,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2733:7:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 23982,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2733:13:78"
                },
                {
                  "assignments": [
                    23984
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 23984,
                      "mutability": "mutable",
                      "name": "day",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24011,
                      "src": "2750:11:78",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 23983,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2750:7:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 23985,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2750:11:78"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 23994,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 23986,
                          "name": "year",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23978,
                          "src": "2766:4:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 23987,
                          "name": "month",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23981,
                          "src": "2772:5:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 23988,
                          "name": "day",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23984,
                          "src": "2779:3:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 23989,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "2765:18:78",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 23992,
                          "name": "timestamp",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23972,
                          "src": "2830:9:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 23990,
                          "name": "BokkyPooBahsDateTimeLibrary",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 37177,
                          "src": "2786:27:78",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_BokkyPooBahsDateTimeLibrary_$37177_$",
                            "typeString": "type(library BokkyPooBahsDateTimeLibrary)"
                          }
                        },
                        "id": 23991,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "timestampToDate",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 36063,
                        "src": "2786:43:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$",
                          "typeString": "function (uint256) pure returns (uint256,uint256,uint256)"
                        }
                      },
                      "id": 23993,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2786:54:78",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256,uint256)"
                      }
                    },
                    "src": "2765:75:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 23995,
                  "nodeType": "ExpressionStatement",
                  "src": "2765:75:78"
                },
                {
                  "assignments": [
                    23997
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 23997,
                      "mutability": "mutable",
                      "name": "lastDayOfMonth",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24011,
                      "src": "2844:22:78",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 23996,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2844:7:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 24003,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 24000,
                        "name": "year",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23978,
                        "src": "2913:4:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 24001,
                        "name": "month",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23981,
                        "src": "2919:5:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 23998,
                        "name": "BokkyPooBahsDateTimeLibrary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 37177,
                        "src": "2869:27:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_BokkyPooBahsDateTimeLibrary_$37177_$",
                          "typeString": "type(library BokkyPooBahsDateTimeLibrary)"
                        }
                      },
                      "id": 23999,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_getDaysInMonth",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 36382,
                      "src": "2869:43:78",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 24002,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2869:56:78",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2844:81:78"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 24006,
                        "name": "year",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23978,
                        "src": "2983:4:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 24007,
                        "name": "month",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23981,
                        "src": "2989:5:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 24008,
                        "name": "lastDayOfMonth",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23997,
                        "src": "2996:14:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 24004,
                        "name": "BokkyPooBahsDateTimeLibrary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 37177,
                        "src": "2937:27:78",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_BokkyPooBahsDateTimeLibrary_$37177_$",
                          "typeString": "type(library BokkyPooBahsDateTimeLibrary)"
                        }
                      },
                      "id": 24005,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestampFromDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 36002,
                      "src": "2937:45:78",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 24009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2937:74:78",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 23976,
                  "id": 24010,
                  "nodeType": "Return",
                  "src": "2930:81:78"
                }
              ]
            },
            "documentation": {
              "id": 23970,
              "nodeType": "StructuredDocumentation",
              "src": "1940:208:78",
              "text": " This function is for the EndOfMonthConvention.EOM convention and\n shifts a timestamp to the last day of the month.\n @param timestamp the timestmap to shift\n @return the shifted timestamp"
            },
            "id": 24012,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "shiftEndOfMonth",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 23973,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23972,
                  "mutability": "mutable",
                  "name": "timestamp",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24012,
                  "src": "2175:17:78",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 23971,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2175:7:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2174:19:78"
            },
            "returnParameters": {
              "id": 23976,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 23975,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24012,
                  "src": "2226:7:78",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 23974,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2226:7:78",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2225:9:78"
            },
            "scope": 24013,
            "src": "2150:865:78",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 24014,
        "src": "298:2719:78"
      }
    ],
    "src": "41:2977:78"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.11+commit.5ef660b1.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-08-12T09:47:18.277Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))": {
        "details": "The following is considered to dertermine if schedule dates are shifted to the end of month: - The convention SD (same day) means not adjusting, EM (end of month) means adjusting - Dates are only shifted if the schedule start date is an end-of-month date - Dates are only shifted if the schedule cycle is based on an \"M\" period unit or multiple thereof",
        "params": {
          "cycle": "the cycle struct",
          "eomc": "the end of month convention to adjust",
          "startTime": "timestamp of the cycle start"
        },
        "returns": {
          "_0": "the adjusted end of month convention"
        }
      }
    },
    "title": "EndOfMonthConventions",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))": {
        "notice": "This function makes an adjustment on the end of month convention."
      }
    },
    "notice": "Implements the ACTUS end of month convention.",
    "version": 1
  }
}